From f7ba58fa3675b1c94b315918feef57ae245bfcff Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 18 Mar 2008 04:01:44 +0000 Subject: [PATCH] Integrate feeds2lrf into the GUI. --- src/libprs500/gui2/main.py | 14 ++++++------ src/libprs500/gui2/news.py | 40 ++++++++++++++------------------- src/libprs500/parallel.py | 2 ++ src/libprs500/web/feeds/main.py | 6 ++--- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/libprs500/gui2/main.py b/src/libprs500/gui2/main.py index 0b4404c374..fe98a5fe9a 100644 --- a/src/libprs500/gui2/main.py +++ b/src/libprs500/gui2/main.py @@ -616,18 +616,18 @@ class Main(MainWindow, Ui_MainWindow): self.news_menu.set_custom_feeds(feeds) def fetch_news(self, data): - pt = PersistentTemporaryFile(suffix='.lrf') + pt = PersistentTemporaryFile(suffix='_feeds2lrf.lrf') pt.close() - args = ['web2lrf', '-o', pt.name] + args = ['feeds2lrf', '--output', pt.name, '--debug'] if data['username']: args.extend(['--username', data['username']]) if data['password']: args.extend(['--password', data['password']]) - args.append(data['profile']) - id = self.job_manager.run_conversion_job(self.news_fetched, 'web2lrf', args=[args], - job_description='Fetch news from '+data['title']) + args.append(data['title']) + id = self.job_manager.run_conversion_job(self.news_fetched, 'feeds2lrf', args=[args], + job_description=_('Fetch news from ')+data['title']) self.conversion_jobs[id] = (pt, 'lrf') - self.status_bar.showMessage('Fetching news from '+data['title'], 2000) + self.status_bar.showMessage(_('Fetching news from ')+data['title'], 2000) def news_fetched(self, id, description, result, exception, formatted_traceback, log): pt, fmt = self.conversion_jobs.pop(id) @@ -637,7 +637,7 @@ class Main(MainWindow, Ui_MainWindow): to_device = self.device_connected and fmt in self.device_manager.device_class.FORMATS self._add_books([pt.name], to_device) if to_device: - self.status_bar.showMessage('News fetched. Uploading to device.', 2000) + self.status_bar.showMessage(_('News fetched. Uploading to device.'), 2000) self.persistent_files.append(pt) ############################################################################ diff --git a/src/libprs500/gui2/news.py b/src/libprs500/gui2/news.py index 85273de9fd..7fa0b303da 100644 --- a/src/libprs500/gui2/news.py +++ b/src/libprs500/gui2/news.py @@ -16,26 +16,25 @@ from PyQt4.QtCore import QObject, SIGNAL, QFile from PyQt4.QtGui import QMenu, QIcon, QDialog, QAction from libprs500.gui2.dialogs.password import PasswordDialog -from libprs500.ebooks.lrf.web import builtin_profiles, available_profiles -from libprs500.ebooks.lrf.web.profiles import create_class +from libprs500.web.feeds.recipes import titles, get_builtin_recipe class NewsAction(QAction): - def __init__(self, profile, module, parent): - self.profile = profile - self.module = module - if QFile(':/images/news/'+module+'.png').exists(): - ic = QIcon(':/images/news/'+module+'.png') + def __init__(self, recipe, parent): + self.recipe = recipe + self.module = recipe.__module__.rpartition('.')[-1] + if QFile(':/images/news/'+self.module+'.png').exists(): + ic = QIcon(':/images/news/'+self.module+'.png') else: ic = QIcon(':/images/news.svg') - QAction.__init__(self, ic, profile.title, parent) + QAction.__init__(self, ic, recipe.title, parent) QObject.connect(self, SIGNAL('triggered(bool)'), self.fetch_news) QObject.connect(self, SIGNAL('start_news_fetch(PyQt_PyObject, PyQt_PyObject)'), parent.fetch_news) def fetch_news(self, checked): self.emit(SIGNAL('start_news_fetch(PyQt_PyObject, PyQt_PyObject)'), - self.profile, self.module) + self.recipe, self.module) class NewsMenu(QMenu): @@ -50,28 +49,26 @@ class NewsMenu(QMenu): self.connect(self.custom_menu, SIGNAL('start_news_fetch(PyQt_PyObject, PyQt_PyObject)'), self.fetch_news) self.addSeparator() - for profile, module in zip(builtin_profiles, available_profiles): - self.addAction(NewsAction(profile, module, self)) + + for title in titles: + recipe = get_builtin_recipe(title)[0] + self.addAction(NewsAction(recipe, self)) - def fetch_news(self, profile, module=None): - if module is None: - module = profile.title + def fetch_news(self, recipe, module): username = password = None fetch = True - if isinstance(profile, basestring): - module = profile - profile = create_class(module) - if profile.needs_subscription: + + if recipe.needs_subscription: d = PasswordDialog(self, module + ' info dialog', - '

Please enter your username and password for %s
If you do not have one, please subscribe to get access to the articles.
Click OK to proceed.'%(profile.title,)) + _('

Please enter your username and password for %s
If you do not have one, please subscribe to get access to the articles.
Click OK to proceed.')%(recipe.title,)) d.exec_() if d.result() == QDialog.Accepted: username, password = d.username(), d.password() else: fetch = False if fetch: - data = dict(profile=module, title=profile.title, username=username, password=password) + data = dict(title=recipe.title, username=username, password=password) self.emit(SIGNAL('fetch_news(PyQt_PyObject)'), data) def set_custom_feeds(self, feeds): @@ -101,6 +98,3 @@ class CustomNewsMenu(QMenu): self.clear() for title, src in feeds: self.addAction(CustomNewMenuItem(title, src, self)) - - - \ No newline at end of file diff --git a/src/libprs500/parallel.py b/src/libprs500/parallel.py index 05fcc1c8cf..81ba88155f 100644 --- a/src/libprs500/parallel.py +++ b/src/libprs500/parallel.py @@ -21,6 +21,7 @@ from functools import partial from libprs500.ebooks.lrf.any.convert_from import main as any2lrf from libprs500.ebooks.lrf.web.convert_from import main as web2lrf +from libprs500.ebooks.lrf.feeds.convert_from import main as feeds2lrf from libprs500.gui2.lrf_renderer.main import main as lrfviewer from libprs500 import iswindows, __appname__ @@ -28,6 +29,7 @@ PARALLEL_FUNCS = { 'any2lrf' : partial(any2lrf, gui_mode=True), 'web2lrf' : web2lrf, 'lrfviewer' : lrfviewer, + 'feeds2lrf' : feeds2lrf, } python = sys.executable diff --git a/src/libprs500/web/feeds/main.py b/src/libprs500/web/feeds/main.py index 8dcb0b5029..fdb01aba7a 100644 --- a/src/libprs500/web/feeds/main.py +++ b/src/libprs500/web/feeds/main.py @@ -138,12 +138,12 @@ def run_recipe(opts, recipe_arg, parser, notification=None, handler=None): def main(args=sys.argv, notification=None, handler=None): p = option_parser() - opts, args = p.parse_args(args) + opts, args = p.parse_args(args=args[1:]) - if len(args) != 2 and opts.feeds is None: + if len(args) != 1 and opts.feeds is None: p.print_help() return 1 - recipe_arg = args[1] if len(args) > 1 else None + recipe_arg = args[0] if len(args) > 0 else None run_recipe(opts, recipe_arg, p, notification=notification, handler=handler) return 0