Skip to content
module.py 2.43 KiB
Newer Older
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# -*- coding: utf-8 -*-

Nicolas Duhamel's avatar
Nicolas Duhamel committed
# Copyright(C) 2010-2011 Nicolas Duhamel
Nicolas Duhamel's avatar
Nicolas Duhamel committed
#
Roger Philibert's avatar
Roger Philibert committed
# This file is part of a woob module.
Nicolas Duhamel's avatar
Nicolas Duhamel committed
#
Roger Philibert's avatar
Roger Philibert committed
# This woob module is free software: you can redistribute it and/or modify
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
Roger Philibert's avatar
Roger Philibert committed
# This woob module is distributed in the hope that it will be useful,
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
Nicolas Duhamel's avatar
Nicolas Duhamel committed
#
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# You should have received a copy of the GNU Affero General Public License
Roger Philibert's avatar
Roger Philibert committed
# along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from woob.capabilities.video import CapVideo, BaseVideo
from woob.tools.backend import Module, BackendConfig
from woob.tools.value import Value
Nicolas Duhamel's avatar
Nicolas Duhamel committed

from .browser import CanalplusBrowser
from .video import CanalplusVideo
from woob.capabilities.collection import CapCollection
Florent's avatar
Florent committed
__all__ = ['CanalplusModule']
class CanalplusModule(Module, CapVideo, CapCollection):
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    NAME = 'canalplus'
    MAINTAINER = u'Nicolas Duhamel'
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    EMAIL = 'nicolas@jombi.fr'
Romain Bignon's avatar
Romain Bignon committed
    VERSION = '3.6'
    DESCRIPTION = 'Canal Plus French TV'
Romain Bignon's avatar
Romain Bignon committed
    LICENSE = 'AGPLv3+'
    CONFIG = BackendConfig(Value('quality', label='Quality of videos', choices=['hd', 'sd'], default='hd'))
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    BROWSER = CanalplusBrowser

    def create_default_browser(self):
        return self.create_browser(quality=self.config['quality'].get())
    def search_videos(self, pattern, sortby=CapVideo.SEARCH_RELEVANCE, nsfw=False):
        return self.browser.search_videos(pattern)
Romain Bignon's avatar
Romain Bignon committed

Nicolas Duhamel's avatar
Nicolas Duhamel committed
    def get_video(self, _id):
        m = re.match('https?://www\.canal-?plus\.fr/.*\?vid=(\d+)', _id)
        if m:
            _id = m.group(1)
        return self.browser.get_video(_id)
Romain Bignon's avatar
Romain Bignon committed

Nicolas Duhamel's avatar
Nicolas Duhamel committed
    def fill_video(self, video, fields):
Romain Bignon's avatar
Romain Bignon committed
        if fields != ['thumbnail']:
            # if we don't want only the thumbnail, we probably want also every fields
            video = self.browser.get_video(CanalplusVideo.id2url(video.id), video)
        if 'thumbnail' in fields and video.thumbnail:
            video.thumbnail.data = self.browser.open(video.thumbnail.url).content
Romain Bignon's avatar
Romain Bignon committed
        return video
Romain Bignon's avatar
Romain Bignon committed

Nicolas Duhamel's avatar
Nicolas Duhamel committed
    OBJECTS = {CanalplusVideo: fill_video}
    def iter_resources(self, objs, split_path):
        if BaseVideo in objs:
            return self.browser.iter_resources(split_path)