From f89b974b1458df7e4ef3c532f3152cf11aaf7ad2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 23 Nov 2014 11:55:09 +0530 Subject: [PATCH] Switch to using the new custom recipe dialog --- manual/images/custom_news.png | Bin 45461 -> 30983 bytes manual/news.rst | 10 +- src/calibre/gui2/dialogs/scheduler.py | 5 +- src/calibre/gui2/dialogs/user_profiles.py | 449 ------------------- src/calibre/gui2/dialogs/user_profiles.ui | 515 ---------------------- 5 files changed, 8 insertions(+), 971 deletions(-) delete mode 100644 src/calibre/gui2/dialogs/user_profiles.py delete mode 100644 src/calibre/gui2/dialogs/user_profiles.ui diff --git a/manual/images/custom_news.png b/manual/images/custom_news.png index 2f2c6e47be9d1c85768a739c4f06ef4dd69a9547..2ad8adc03267f717a60795520923922591c05764 100644 GIT binary patch literal 30983 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%0D*>U!lk-PP6 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⁡Uk$c4d@rI*ocIz=;gQR+8l%ra8{2g)isI_enxz!FO~yG#w*gWO6&X-Dr(vaTG7^_-tvA1;Z3K& zsH&=36+Pjv_7ReRbV)o@aA1^gzRPfzl<0AfY0BHqXdfm$A#AX6Lz{Wo2b)8JU?K^vMI@=?f3axV~@ZBpU2QIzxLv!S1{H?V)Pk8Z0TO+7BC? zh7s>WL)OS=`JmDgq%^cTi-s0|ssmv(vGoy~g7ZmmhxizUzIhVFfTU2jG2kV;2#6=w zJH{)n^Np)xp`P|=4KKrsLhYK=Ut1PH_nmJ3N26cgT85nLqboGZ+C>mmuwB6Yur)LD v56c3*=lcqLS+{3!{>zVY{9ALn674pDFLbjiU<2P|d`IT3qGYkSzTbZX5vG|u literal 45461 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 pd}(co*P~{7YroGHJt){{e5A?lAxW diff --git a/manual/news.rst b/manual/news.rst index 4767f89aed..f5d7e64e32 100644 --- a/manual/news.rst +++ b/manual/news.rst @@ -32,10 +32,10 @@ blog into an ebook, we rely on the :term:`RSS` feed of the blog:: http://blog.calibre-ebook.com/feeds/posts/default I got the RSS URL by looking under "Subscribe to" at the bottom of the blog -page and choosing Posts->Atom. To make calibre download the feeds and convert +page and choosing :guilabel:`Posts->Atom`. To make calibre download the feeds and convert them into an ebook, you should right click the :guilabel:`Fetch news` button -and then the :guilabel:`Add a custom news source` menu item. A dialog similar -to that shown below should open up. +and then the :guilabel:`Add a custom news source` menu item and then the +:guilabel:`New Recipe` button. A dialog similar to that shown below should open up. .. image:: images/custom_news.png :align: center @@ -44,7 +44,9 @@ First enter ``calibre Blog`` into the :guilabel:`Recipe title` field. This will The next two fields (:guilabel:`Oldest article` and :guilabel:`Max. number of articles`) allow you some control over how many articles should be downloaded from each feed, and they are pretty self explanatory. -To add the feeds to the recipe, enter the feed title and the feed URL and click the :guilabel:`Add feed` button. Once you have added the feed, simply click the :guilabel:`Add/update recipe` button and you're done! Close the dialog. +To add the feeds to the recipe, enter the feed title and the feed URL and click +the :guilabel:`Add feed` button. Once you have added the feed, simply click the +:guilabel:`Save` button and you're done! Close the dialog. To test your new :term:`recipe`, click the :guilabel:`Fetch news` button and in the :guilabel:`Custom news sources` sub-menu click :guilabel:`calibre Blog`. After a couple of minutes, the newly downloaded ebook of blog posts will appear in the main library view (if you have your reader connected, it will be put onto the reader instead of into the library). Select it and hit the :guilabel:`View` button to read! diff --git a/src/calibre/gui2/dialogs/scheduler.py b/src/calibre/gui2/dialogs/scheduler.py index d56c612ff7..65f17fc6f5 100644 --- a/src/calibre/gui2/dialogs/scheduler.py +++ b/src/calibre/gui2/dialogs/scheduler.py @@ -489,11 +489,10 @@ class Scheduler(QObject): self.lock.unlock() def customize_feeds(self, *args): - from calibre.gui2.dialogs.user_profiles import UserProfiles - d = UserProfiles(self._parent, self.recipe_model) + from calibre.gui2.dialogs.custom_recipes import CustomRecipes + d = CustomRecipes(self.recipe_model, self._parent) try: d.exec_() - d.break_cycles() finally: d.deleteLater() diff --git a/src/calibre/gui2/dialogs/user_profiles.py b/src/calibre/gui2/dialogs/user_profiles.py deleted file mode 100644 index 7d0404fc8f..0000000000 --- a/src/calibre/gui2/dialogs/user_profiles.py +++ /dev/null @@ -1,449 +0,0 @@ -__license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal ' - -import time, os - -from PyQt5.Qt import (QUrl, QAbstractListModel, Qt, QFont) - -from calibre.web.feeds.recipes import compile_recipe, custom_recipes -from calibre.web.feeds.news import AutomaticNewsRecipe -from calibre.gui2.dialogs.user_profiles_ui import Ui_Dialog -from calibre.gui2 import ( - error_dialog, question_dialog, open_url, choose_files, ResizableDialog, - open_local_file) -from calibre.gui2.widgets import PythonHighlighter -from calibre.ptempfile import PersistentTemporaryFile -from calibre.utils.icu import sort_key - -class CustomRecipeModel(QAbstractListModel): - - def __init__(self, recipe_model): - QAbstractListModel.__init__(self) - self.recipe_model = recipe_model - - def title(self, index): - row = index.row() - if row > -1 and row < self.rowCount(): - return self.recipe_model.custom_recipe_collection[row].get('title', '') - - def script(self, index): - row = index.row() - if row > -1 and row < self.rowCount(): - urn = self.recipe_model.custom_recipe_collection[row].get('id') - return self.recipe_model.get_recipe(urn) - - def has_title(self, title): - for x in self.recipe_model.custom_recipe_collection: - if x.get('title', False) == title: - return True - return False - - def rowCount(self, *args): - try: - return len(self.recipe_model.custom_recipe_collection) - except: - return 0 - - def data(self, index, role): - if role == Qt.DisplayRole: - ans = self.title(index) - if ans is not None: - return (ans) - return None - - def replace_by_title(self, title, script): - urn = None - for x in self.recipe_model.custom_recipe_collection: - if x.get('title', False) == title: - urn = x.get('id') - if urn is not None: - self.beginResetModel() - self.recipe_model.update_custom_recipe(urn, title, script) - self.endResetModel() - - def replace_many_by_title(self, scriptmap): - script_urn_map = {} - for title, script in scriptmap.iteritems(): - urn = None - for x in self.recipe_model.custom_recipe_collection: - if x.get('title', False) == title: - urn = x.get('id') - if urn is not None: - script_urn_map.update({urn: (title, script)}) - - if script_urn_map: - self.beginResetModel() - self.recipe_model.update_custom_recipes(script_urn_map) - self.endResetModel() - - def add(self, title, script): - self.beginResetModel() - self.recipe_model.add_custom_recipe(title, script) - self.endResetModel() - - def add_many(self, scriptmap): - self.beginResetModel() - self.recipe_model.add_custom_recipes(scriptmap) - self.endResetModel() - - def remove(self, rows): - urns = [] - for r in rows: - try: - urn = self.recipe_model.custom_recipe_collection[r].get('id') - urns.append(urn) - except: - pass - self.beginResetModel() - self.recipe_model.remove_custom_recipes(urns) - self.endResetModel() - -class UserProfiles(ResizableDialog, Ui_Dialog): - - def __init__(self, parent, recipe_model): - ResizableDialog.__init__(self, parent) - - self._model = self.model = CustomRecipeModel(recipe_model) - self.available_profiles.setModel(self._model) - self.available_profiles.currentChanged = self.current_changed - f = QFont() - f.setStyleHint(f.Monospace) - self.source_code.setFont(f) - - self.remove_feed_button.clicked[(bool)].connect(self.added_feeds.remove_selected_items) - self.remove_profile_button.clicked[(bool)].connect(self.remove_selected_items) - self.add_feed_button.clicked[(bool)].connect(self.add_feed) - self.load_button.clicked.connect(self.load) - self.opml_button.clicked.connect(self.opml_import) - self.builtin_recipe_button.clicked.connect(self.add_builtin_recipe) - self.share_button.clicked.connect(self.share) - self.show_recipe_files_button.clicked.connect(self.show_recipe_files) - self.down_button.clicked.connect(self.down) - self.up_button.clicked.connect(self.up) - self.add_profile_button.clicked[(bool)].connect(self.add_profile) - self.feed_url.returnPressed[()].connect(self.add_feed) - self.feed_title.returnPressed[()].connect(self.add_feed) - self.toggle_mode_button.clicked[(bool)].connect(self.toggle_mode) - self.clear() - - def show_recipe_files(self, *args): - bdir = os.path.dirname(custom_recipes.file_path) - if not os.path.exists(bdir): - return error_dialog(self, _('No recipes'), - _('No custom recipes created.'), show=True) - open_local_file(bdir) - - def break_cycles(self): - self.recipe_model = self._model.recipe_model = None - self.available_profiles = None - self.model = self._model = None - - def remove_selected_items(self): - indices = self.available_profiles.selectionModel().selectedRows() - self._model.remove([i.row() for i in indices]) - self.clear() - - def up(self): - row = self.added_feeds.currentRow() - item = self.added_feeds.takeItem(row) - if item is not None: - self.added_feeds.insertItem(max(row-1, 0), item) - self.added_feeds.setCurrentItem(item) - - def down(self): - row = self.added_feeds.currentRow() - item = self.added_feeds.takeItem(row) - if item is not None: - self.added_feeds.insertItem(row+1, item) - self.added_feeds.setCurrentItem(item) - - def share(self): - index = self.available_profiles.currentIndex() - title, src = self._model.title(index), self._model.script(index) - if not title or not src: - error_dialog(self, _('No recipe selected'), _('No recipe selected')).exec_() - return - pt = PersistentTemporaryFile(suffix='.recipe') - pt.write(src.encode('utf-8')) - pt.close() - body = _('The attached file: %(fname)s is a ' - 'recipe to download %(title)s.')%dict( - fname=os.path.basename(pt.name), title=title) - subject = _('Recipe for ')+title - url = QUrl('mailto:') - url.addQueryItem('subject', subject) - url.addQueryItem('body', body) - url.addQueryItem('attachment', pt.name) - open_url(url) - - def current_changed(self, current, previous): - if not current.isValid(): - return - src = self._model.script(current) - if src is None: - return - if 'class BasicUserRecipe' in src: - recipe = compile_recipe(src) - self.populate_options(recipe) - self.stacks.setCurrentIndex(0) - self.toggle_mode_button.setText(_('Switch to Advanced mode')) - self.source_code.setPlainText('') - else: - self.source_code.setPlainText(src) - self.highlighter = PythonHighlighter(self.source_code.document()) - self.stacks.setCurrentIndex(1) - self.toggle_mode_button.setText(_('Switch to Basic mode')) - - def toggle_mode(self, *args): - if self.stacks.currentIndex() == 1: - self.stacks.setCurrentIndex(0) - self.toggle_mode_button.setText(_('Switch to Advanced mode')) - else: - self.stacks.setCurrentIndex(1) - self.toggle_mode_button.setText(_('Switch to Basic mode')) - if not unicode(self.source_code.toPlainText()).strip(): - src = self.options_to_profile()[0].replace('AutomaticNewsRecipe', 'BasicNewsRecipe') - self.source_code.setPlainText(src.replace('BasicUserRecipe', 'AdvancedUserRecipe')) - self.highlighter = PythonHighlighter(self.source_code.document()) - - def add_feed(self, *args): - title = unicode(self.feed_title.text()).strip() - if not title: - error_dialog(self, _('Feed must have a title'), - _('The feed must have a title')).exec_() - return - url = unicode(self.feed_url.text()).strip() - if not url: - error_dialog(self, _('Feed must have a URL'), - _('The feed %s must have a URL')%title).exec_() - return - try: - self.added_feeds.add_item(title+' - '+url, (title, url)) - except ValueError: - error_dialog(self, _('Already exists'), - _('This feed has already been added to the recipe')).exec_() - return - self.feed_title.setText('') - self.feed_url.setText('') - - def options_to_profile(self, **kw): - classname = 'BasicUserRecipe'+str(int(time.time())) - title = kw.get('title', self.profile_title.text()) - title = unicode(title).strip() - if not title: - title = classname - self.profile_title.setText(title) - oldest_article = kw.get('oldest_article', self.oldest_article.value()) - max_articles = kw.get('max_articles', self.max_articles.value()) - feeds = kw.get('feeds', - [i.user_data for i in self.added_feeds.items()]) - - src = '''\ -class %(classname)s(%(base_class)s): - title = %(title)s - oldest_article = %(oldest_article)d - max_articles_per_feed = %(max_articles)d - auto_cleanup = True - - feeds = %(feeds)s -'''%dict(classname=classname, title=repr(title), - feeds=repr(feeds), oldest_article=oldest_article, - max_articles=max_articles, - base_class='AutomaticNewsRecipe') - return src, title - - def populate_source_code(self): - src = self.options_to_profile().replace('BasicUserRecipe', 'AdvancedUserRecipe') - self.source_code.setPlainText(src) - self.highlighter = PythonHighlighter(self.source_code.document()) - - def add_profile(self, clicked): - if self.stacks.currentIndex() == 0: - src, title = self.options_to_profile() - - try: - compile_recipe(src) - except Exception as err: - error_dialog(self, _('Invalid input'), - _('

Could not create recipe. Error:
%s')%str(err)).exec_() - return - profile = src - else: - src = unicode(self.source_code.toPlainText()) - try: - title = compile_recipe(src).title - except Exception as err: - error_dialog(self, _('Invalid input'), - _('

Could not create recipe. Error:
%s')%str(err)).exec_() - return - profile = src.replace('BasicUserRecipe', 'AdvancedUserRecipe') - if self._model.has_title(title): - if question_dialog(self, _('Replace recipe?'), - _('A custom recipe named %s already exists. Do you want to ' - 'replace it?')%title): - self._model.replace_by_title(title, profile) - else: - return - else: - self.model.add(title, profile) - self.clear() - - def add_builtin_recipe(self): - from calibre.web.feeds.recipes.collection import \ - get_builtin_recipe_collection, get_builtin_recipe_by_id - from PyQt5.Qt import QDialog, QVBoxLayout, QListWidgetItem, \ - QListWidget, QDialogButtonBox, QSize - - d = QDialog(self) - d.l = QVBoxLayout() - d.setLayout(d.l) - d.list = QListWidget(d) - d.list.doubleClicked.connect(lambda x: d.accept()) - d.l.addWidget(d.list) - d.bb = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel, - Qt.Horizontal, d) - d.bb.accepted.connect(d.accept) - d.bb.rejected.connect(d.reject) - d.l.addWidget(d.bb) - d.setWindowTitle(_('Choose builtin recipe')) - items = [] - for r in get_builtin_recipe_collection(): - id_ = r.get('id', '') - title = r.get('title', '') - lang = r.get('language', '') - if id_ and title: - items.append((title + ' [%s]'%lang, id_)) - - items.sort(key=lambda x:sort_key(x[0])) - for title, id_ in items: - item = QListWidgetItem(title) - item.setData(Qt.UserRole, id_) - d.list.addItem(item) - - d.resize(QSize(450, 400)) - ret = d.exec_() - d.list.doubleClicked.disconnect() - if ret != d.Accepted: - return - - items = list(d.list.selectedItems()) - if not items: - return - item = items[-1] - id_ = unicode(item.data(Qt.UserRole) or '') - title = unicode(item.data(Qt.DisplayRole) or '').rpartition(' [')[0] - profile = get_builtin_recipe_by_id(id_, download_recipe=True) - if profile is None: - raise Exception('Something weird happened') - - if self._model.has_title(title): - if question_dialog(self, _('Replace recipe?'), - _('A custom recipe named %s already exists. Do you want to ' - 'replace it?')%title): - self._model.replace_by_title(title, profile) - else: - return - else: - self.model.add(title, profile) - - self.clear() - - def load(self): - files = choose_files(self, 'recipe loader dialog', - _('Choose a recipe file'), - filters=[(_('Recipes'), ['.py', '.recipe'])], - all_files=False, select_only_single_file=True) - if files: - file = files[0] - try: - profile = open(file, 'rb').read().decode('utf-8') - title = compile_recipe(profile).title - except Exception as err: - error_dialog(self, _('Invalid input'), - _('

Could not create recipe. Error:
%s')%str(err)).exec_() - return - if self._model.has_title(title): - if question_dialog(self, _('Replace recipe?'), - _('A custom recipe named %s already exists. Do you want to ' - 'replace it?')%title): - self._model.replace_by_title(title, profile) - else: - return - else: - self.model.add(title, profile) - self.clear() - - def opml_import(self): - from calibre.gui2.dialogs.opml import ImportOPML - d = ImportOPML(parent=self) - if d.exec_() != d.Accepted: - return - oldest_article, max_articles_per_feed, replace_existing = d.oldest_article, d.articles_per_feed, d.replace_existing - failed_recipes, replace_recipes, add_recipes = {}, {}, {} - - for group in d.recipes: - title = base_title = group.title or _('Unknown') - if not replace_existing: - c = 0 - while self._model.has_title(title): - c += 1 - title = u'%s %d' % (base_title, c) - src, title = self.options_to_profile(**{ - 'title':title, - 'feeds':group.feeds, - 'oldest_article':oldest_article, - 'max_articles':max_articles_per_feed, - }) - try: - compile_recipe(src) - except Exception: - import traceback - failed_recipes[title] = traceback.format_exc() - continue - - if replace_existing and self._model.has_title(title): - replace_recipes[title] = src - else: - add_recipes[title] = src - - if add_recipes: - self.model.add_many(add_recipes) - if replace_recipes: - self.model.replace_many_by_title(replace_recipes) - if failed_recipes: - det_msg = '\n'.join('%s\n%s\n' % (title, tb) for title, tb in failed_recipes.iteritems()) - error_dialog(self, _('Failed to create recipes'), _( - 'Failed to create some recipes, click "Show details" for details'), show=True, - det_msg=det_msg) - self.clear() - - def populate_options(self, profile): - self.oldest_article.setValue(profile.oldest_article) - self.max_articles.setValue(profile.max_articles_per_feed) - self.profile_title.setText(profile.title) - self.added_feeds.clear() - feeds = [] if profile.feeds is None else profile.feeds - for title, url in feeds: - self.added_feeds.add_item(title+' - '+url, (title, url)) - self.feed_title.setText('') - self.feed_url.setText('') - - def clear(self): - self.populate_options(AutomaticNewsRecipe) - self.source_code.setText('') - - def reject(self): - if question_dialog(self, _('Are you sure?'), - _('You will lose any unsaved changes. To save your' - ' changes, click the Add/Update recipe button.' - ' Continue?'), show_copy_button=False): - ResizableDialog.reject(self) - -if __name__ == '__main__': - from PyQt5.Qt import QApplication - app = QApplication([]) - from calibre.web.feeds.recipes.model import RecipeModel - d=UserProfiles(None, RecipeModel()) - d.exec_() - del app - diff --git a/src/calibre/gui2/dialogs/user_profiles.ui b/src/calibre/gui2/dialogs/user_profiles.ui deleted file mode 100644 index a84fb83c75..0000000000 --- a/src/calibre/gui2/dialogs/user_profiles.ui +++ /dev/null @@ -1,515 +0,0 @@ - - - Dialog - - - - 0 - 0 - 738 - 640 - - - - Add custom news source - - - - :/images/user_profile.png:/images/user_profile.png - - - - - - QFrame::NoFrame - - - 0 - - - true - - - - - 0 - 0 - 726 - 595 - - - - - 0 - - - - - - 580 - 550 - - - - - 0 - - - - - - 1 - 0 - - - - Available user recipes - - - - - - - - - Add/Update &recipe - - - - :/images/plus.png:/images/plus.png - - - - - - - &Remove recipe - - - - :/images/list_remove.png:/images/list_remove.png - - - - - - - &Share recipe - - - - :/images/forward.png:/images/forward.png - - - - - - - S&how recipe files - - - - :/images/document_open.png:/images/document_open.png - - - - - - - Customize &builtin recipe - - - - :/images/news.png:/images/news.png - - - - - - - &Load recipe from file - - - - :/images/chapters.png:/images/chapters.png - - - - - - - Import a collection of RSS feeds in OPML format -Many RSS readers can export their subscribed RSS feeds -in OPML format - - - Import &OPML - - - - :/images/mimetypes/opml.png:/images/mimetypes/opml.png - - - - - - - - - - - 10 - 0 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - Switch to Advanced mode - - - - - - - 0 - - - - - - - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Create a basic news recipe, by adding RSS feeds to it. <br />For most feeds, you will have to use the "Advanced mode" to further customize the fetch process.</p></body></html> - - - Qt::RichText - - - true - - - - - - - - - Recipe &title: - - - profile_title - - - - - - - - 75 - true - - - - - - - - &Oldest article: - - - oldest_article - - - - - - - The oldest article to download - - - days - - - 1 - - - 36500 - - - 7 - - - - - - - &Max. number of articles per feed: - - - max_articles - - - - - - - Maximum number of articles to download per feed. - - - 5 - - - 100 - - - 10 - - - - - - - - - - 100 - 0 - - - - Feeds in recipe - - - - - - - 100 - 0 - - - - QAbstractItemView::MultiSelection - - - - - - - - - ... - - - - :/images/arrow-up.png:/images/arrow-up.png - - - - - - - Remove feed from recipe - - - ... - - - - :/images/list_remove.png:/images/list_remove.png - - - - - - - ... - - - - :/images/arrow-down.png:/images/arrow-down.png - - - - - - - - - - - - Add feed to recipe - - - - - - &Feed title: - - - feed_title - - - - - - - - - - Feed &URL: - - - feed_url - - - - - - - - - - Add feed to recipe - - - &Add feed - - - - :/images/plus.png:/images/plus.png - - - - - - - - - - - - - - For help with writing advanced news recipes, please visit <a href="http://manual.calibre-ebook.com/news.html">User Recipes</a> - - - true - - - true - - - - - - - Recipe source code (python) - - - - - - - 100 - 0 - - - - QTextEdit::NoWrap - - - false - - - - - - - - - - - - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - - - BasicList - QListWidget -

calibre/gui2/widgets.h
- - - EnLineEdit - QLineEdit -
calibre/gui2/widgets.h
-
- - - - - - - buttonBox - accepted() - Dialog - accept() - - - 446 - 649 - - - 0 - 632 - - - - - buttonBox - rejected() - Dialog - reject() - - - 175 - 643 - - - 176 - 636 - - - - -