Skip to content
backend.py 2.47 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/>.
Nicolas Duhamel's avatar
Nicolas Duhamel committed


from __future__ import with_statement

from weboob.capabilities.video import ICapVideo
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 .pages import CanalplusVideo

from weboob.capabilities.collection import ICapCollection

Nicolas Duhamel's avatar
Nicolas Duhamel committed
__all__ = ['CanalplusBackend']


class CanalplusBackend(BaseBackend, ICapVideo, ICapCollection):
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    NAME = 'canalplus'
    MAINTAINER = 'Nicolas Duhamel'
    EMAIL = 'nicolas@jombi.fr'
Romain Bignon's avatar
Romain Bignon committed
    VERSION = '0.9'
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    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())
Nicolas Duhamel's avatar
Nicolas Duhamel committed

    def iter_search_results(self, pattern=None, sortby=ICapVideo.SEARCH_RELEVANCE, nsfw=False, max_results=None):
        with self.browser:
            return self.browser.iter_search_results(pattern)
Romain Bignon's avatar
Romain Bignon committed

Nicolas Duhamel's avatar
Nicolas Duhamel committed
    def get_video(self, _id):
        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}
Nicolas Duhamel's avatar
Nicolas Duhamel committed
    def iter_resources(self, splited_path):
        with self.browser:
            return self.browser.iter_resources(splited_path)