diff --git a/weboob/applications/videoob/__init__.py b/weboob/applications/videoob/__init__.py index a3c3498d..6bbe3eef 100644 --- a/weboob/applications/videoob/__init__.py +++ b/weboob/applications/videoob/__init__.py @@ -1,21 +1,19 @@ # -*- coding: utf-8 -*- -# Copyright(C) 2010-2011 Christophe Benz +# Copyright(C) 2010 Christophe Benz # -# This file is part of weboob. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. # -# 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, +# This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU Affero General Public License -# along with weboob. If not, see . +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from .videoob import Videoob diff --git a/weboob/applications/videoob/videoob.py b/weboob/applications/videoob/videoob.py index 2ca94da9..cb16a14f 100644 --- a/weboob/applications/videoob/videoob.py +++ b/weboob/applications/videoob/videoob.py @@ -2,20 +2,18 @@ # Copyright(C) 2010-2011 Christophe Benz, Romain Bignon, John Obbele # -# This file is part of weboob. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. # -# 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, +# This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU Affero General Public License -# along with weboob. If not, see . +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from __future__ import with_statement @@ -23,12 +21,14 @@ import subprocess import sys import os -from weboob.capabilities.video import ICapVideo +from weboob.capabilities.video import ICapVideo, BaseVideo from weboob.capabilities.base import NotLoaded from weboob.tools.application.repl import ReplApplication from weboob.tools.application.media_player import InvalidMediaPlayer, MediaPlayer, MediaPlayerNotFound from weboob.tools.application.formatters.iformatter import IFormatter +from weboob.capabilities.collection import Collection, ICapCollection + __all__ = ['Videoob'] @@ -65,10 +65,12 @@ class Videoob(ReplApplication): 'play and download them and get information.' CAPS = ICapVideo EXTRA_FORMATTERS = {'video_list': VideoListFormatter} - COMMANDS_FORMATTERS = {'search': 'video_list'} + COMMANDS_FORMATTERS = {'search': 'video_list', 'ls': 'video_list'} nsfw = True videos = [] + + working_dir = [] def __init__(self, *args, **kwargs): ReplApplication.__init__(self, *args, **kwargs) @@ -238,3 +240,75 @@ class Videoob(ReplApplication): self.videos.append(video) self.format(video) self.flush() + + def do_ls(self, line): + self.videos = [] + if len(self.working_dir) == 0: + for name in [b.NAME for b in self.weboob. iter_backends(caps=ICapCollection)]: + print name + return 0 + for backend, rep in self.do('iter_resources', backends=self.working_dir[0]): + if isinstance(rep, BaseVideo): + self.videos.append(rep) + self.format(rep) + else: + print rep + + self.flush() + + def do_cd(self, line): + line = line.encode('utf-8') + + import urllib + line = urllib.quote_plus(line) + import posixpath + path = posixpath.normpath(line) + abspath = posixpath.normpath(posixpath.join('/' + '/'.join(self.working_dir), path)) + final_parse = abspath.split('/')[1:] + while len(final_parse) > 0 and final_parse[0] == u'': del final_parse[0] + if len(final_parse) == 0: + self.working_dir = [] + self.prompt = '%s> ' % self.APPNAME + return 0 + + final_parse = map(urllib.unquote_plus, final_parse) + working_backend = final_parse[0] + path = final_parse [1:] + + if working_backend in [b.NAME for b in self.enabled_backends]: + if working_backend in [b.NAME for b in self.weboob. iter_backends(caps=ICapCollection)]: + backend = [b for b in self.enabled_backends if b.NAME == working_backend][0] + else: + print >>sys.stderr, "Error backend %s not implement Collection" % working_backend + return 1 + else: + print >>sys.stderr, "Error backend %s unknow" % working_backend + return 1 + + + if not path: + self.working_dir = [working_backend,] + backend.working_coll = [] + self.prompt = '%s:%s> ' % (self.APPNAME, '/' + '/'.join(self.working_dir)) + return 0 + try: + path = backend.change_working_collection(path) + except NotImplementedError: + print >>sys.stderr, "Error backend %s not implement collection" % working_backend + return 1 + + escape = lambda s: s.replace('/', '%2F') + path = map(escape, path) + self.working_dir = [working_backend,]+path + self.prompt = '%s:%s> ' % (self.APPNAME, '/' + '/'.join(self.working_dir)) + + def complete_cd(self, text, line, begidx, endidx): + mline = line.partition(' ')[2] + offs = len(mline) - len(text) + + if len(self.working_dir) == 0: + tmp = [b.NAME for b in self.weboob. iter_backends(caps=ICapCollection)] + else: + tmp = [rep for backend, rep in self.do('iter_resources', backends=self.working_dir[0])] + + return [s[offs:] for s in tmp if s.startswith(mline)]