Source code for pyams_content.component.video.provider.zmi

#
# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#

__docformat__ = 'restructuredtext'

from pyramid.encode import urlencode

from pyams_content.component.video.interfaces import IExternalVideoRenderer
from pyams_content.component.video.provider import CustomVideoSettings
from pyams_content.component.video.provider.dailymotion import DailymotionVideoSettings
from pyams_content.component.video.provider.vimeo import VimeoVideoSettings
from pyams_content.component.video.provider.youtube import YoutubeVideoSettings
from pyams_skin.layer import IPyAMSLayer
from pyams_template.template import template_config
from pyams_utils.adapter import adapter_config
from pyams_viewlet.viewlet import BaseContentProvider


[docs]def time_to_seconds(value): """Convert min:sec value to seconds""" if value and (':' in value): min, sec = value.split(':', 1) return str(int(min)*60 + int(sec)) else: return value or ''
[docs]def get_playlist_id(settings): """Include playlist ID if loop is required""" if settings.loop: return settings.video_id else: return None
YOUTUBE_PARAMS = ( ('start_at', 'start', time_to_seconds), ('stop_at', 'end', time_to_seconds), ('autoplay', 'autoplay', int), ('loop', 'loop', int), (None, 'playlist', get_playlist_id), ('show_commands', 'controls', int), ('hide_branding', 'modestbranding', int), ('show_related', 'rel', int), ('allow_fullscreen', 'fs', int), ('disable_keyboard', 'disablekb', int) ) DAILYMOTION_PARAMS = ( ('start_at', 'start', time_to_seconds), ('autoplay', 'autoplay', int), ('show_info', 'ui-start-screen-info', int), ('show_commands', 'controls', int), ('ui_theme', 'ui-theme', str), ('show_branding', 'ui-logo', int), ('show_endscreen', 'endscreen-enable', int), ('allow_sharing', 'sharing-enable', int) ) VIMEO_PARAMS = ( ('show_title', 'title', int), ('show_signature', 'byline', int), ('color', 'color', str), ('autoplay', 'autoplay', int), ('loop', 'loop', int) )
[docs]class BaseExternalVideoRenderer(BaseContentProvider): """Base external video renderer""" params = ()
[docs] def get_url_params(self): settings = self.context params = {} for attr, param, handler in self.params: if attr is None: result = handler(settings) else: result = handler(getattr(settings, attr)) if result is not None: params[param] = result return urlencode(params)
[docs]@adapter_config(context=(CustomVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer) @template_config(template='templates/custom-render.pt', layer=IPyAMSLayer) class CustomVideoRenderer(BaseExternalVideoRenderer): """Custom video renderer"""
[docs]@adapter_config(context=(YoutubeVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer) @template_config(template='templates/youtube-render.pt', layer=IPyAMSLayer) class YoutubeVideoRenderer(BaseExternalVideoRenderer): """Youtube video renderer""" params = YOUTUBE_PARAMS
[docs]@adapter_config(context=(DailymotionVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer) @template_config(template='templates/dailymotion-render.pt', layer=IPyAMSLayer) class DailymotionVideoRenderer(BaseExternalVideoRenderer): """Dailymotion video renderer""" params = DAILYMOTION_PARAMS
[docs]@adapter_config(context=(VimeoVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer) @template_config(template='templates/vimeo-render.pt', layer=IPyAMSLayer) class VimeoVideoRenderer(BaseExternalVideoRenderer): """Vimeo video renderer""" params = VIMEO_PARAMS