Skip to content
backend.py 2.57 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
#
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# This file is part of weboob.
Nicolas Duhamel's avatar
Nicolas Duhamel committed
#
Nicolas Duhamel's avatar
Nicolas Duhamel committed
# weboob is free software: you can redistribute it and/or modify
# 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.
#
# weboob 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
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.capabilities.video import CapVideo, BaseVideo
from weboob.tools.backend import BaseBackend, BackendConfig
from weboob.tools.value import Value
Nicolas Duhamel's avatar
Nicolas Duhamel committed

from .browser import CanalplusBrowser
from .video import CanalplusVideo
from weboob.capabilities.collection import CapCollection
Nicolas Duhamel's avatar
Nicolas Duhamel committed
__all__ = ['CanalplusBackend']


class CanalplusBackend(BaseBackend, 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'
Florent's avatar
Florent committed
    VERSION = '1.0'
    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):
Nicolas Duhamel's avatar
Nicolas Duhamel committed
        with self.browser:
            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)
Nicolas Duhamel's avatar
Nicolas Duhamel committed
        with self.browser:
            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
            with self.browser:
                video = self.browser.get_video(CanalplusVideo.id2url(video.id), video)
        if 'thumbnail' in fields and video.thumbnail:
Romain Bignon's avatar
Romain Bignon committed
            with self.browser:
                video.thumbnail.data = self.browser.readurl(video.thumbnail.url)
        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:
            with self.browser:
                return self.browser.iter_resources(split_path)