diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py index 9f91df4..521b422 100644 --- a/calibre-plugin/config.py +++ b/calibre-plugin/config.py @@ -332,6 +332,7 @@ class ConfigWidget(QWidget): # Custom Columns tab # error column prefs['errorcol'] = unicode(convert_qvariant(self.cust_columns_tab.errorcol.itemData(self.cust_columns_tab.errorcol.currentIndex()))) + prefs['save_all_errors'] = self.cust_columns_tab.save_all_errors.isChecked() # metadata column prefs['savemetacol'] = unicode(convert_qvariant(self.cust_columns_tab.savemetacol.itemData(self.cust_columns_tab.savemetacol.currentIndex()))) @@ -1340,6 +1341,7 @@ class CustomColumnsTab(QWidget): tooltip=_("When an update or overwrite of an existing story fails, record the reason in this column.\n(Text and Long Text columns only.)") label.setToolTip(tooltip) horz.addWidget(label) + self.errorcol = QComboBox(self) self.errorcol.setToolTip(tooltip) self.errorcol.addItem('','none') @@ -1348,6 +1350,15 @@ class CustomColumnsTab(QWidget): self.errorcol.addItem(column['name'],key) self.errorcol.setCurrentIndex(self.errorcol.findData(prefs['errorcol'])) horz.addWidget(self.errorcol) + + self.save_all_errors = QCheckBox(_('Save All Errors'),self) + self.save_all_errors.setToolTip(_('If unchecked, these errors will not be saved:%s')%( + '\n'+ + '\n'.join((_("Not Overwriting, web site is not newer."), + _("Already contains %d chapters.").replace('%d','X'))))) + self.save_all_errors.setChecked(prefs['save_all_errors']) + horz.addWidget(self.save_all_errors) + self.l.addLayout(horz) horz = QHBoxLayout() @@ -1363,6 +1374,10 @@ class CustomColumnsTab(QWidget): self.savemetacol.addItem(column['name'],key) self.savemetacol.setCurrentIndex(self.savemetacol.findData(prefs['savemetacol'])) horz.addWidget(self.savemetacol) + + label = QLabel('') + horz.addWidget(label) # empty spacer for alignment with error column line. + self.l.addLayout(horz) #print("prefs['custom_cols'] %s"%prefs['custom_cols']) diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py index 1ec2121..28c2c16 100644 --- a/calibre-plugin/dialogs.py +++ b/calibre-plugin/dialogs.py @@ -158,9 +158,10 @@ class RejectUrlEntry: return retval class NotGoingToDownload(Exception): - def __init__(self,error,icon='dialog_error.png'): + def __init__(self,error,icon='dialog_error.png',showerror=True): self.error=error self.icon=icon + self.showerror=showerror def __str__(self): return self.error @@ -639,6 +640,7 @@ class LoopProgressDialog(QProgressDialog): except NotGoingToDownload as d: book['good']=False + book['showerror']=d.showerror book['comment']=unicode(d) book['icon'] = d.icon diff --git a/calibre-plugin/fff_plugin.py b/calibre-plugin/fff_plugin.py index c8112d6..7514f97 100644 --- a/calibre-plugin/fff_plugin.py +++ b/calibre-plugin/fff_plugin.py @@ -1318,7 +1318,7 @@ class FanFicFarePlugin(InterfaceAction): urlchaptercount = int(story.getMetadata('numChapters').replace(',','')) if chaptercount == urlchaptercount: if collision == UPDATE: - raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png') + raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png',showerror=False) elif chaptercount > urlchaptercount: raise NotGoingToDownload(_("Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update.") % (chaptercount,urlchaptercount),'dialog_error.png') elif chaptercount == 0: @@ -1339,7 +1339,7 @@ class FanFicFarePlugin(InterfaceAction): # updated does have time, use full timestamps. if (lastupdated.time() == time.min and fileupdated.date() > lastupdated.date()) or \ (lastupdated.time() != time.min and fileupdated > lastupdated): - raise NotGoingToDownload(_("Not Overwriting, web site is not newer."),'edit-undo.png') + raise NotGoingToDownload(_("Not Overwriting, web site is not newer."),'edit-undo.png',showerror=False) # For update, provide a tmp file copy of the existing epub so # it can't change underneath us. Now also overwrite for logpage preserve. @@ -1512,7 +1512,7 @@ class FanFicFarePlugin(InterfaceAction): custom_columns = self.gui.library_view.model().custom_columns if book['calibre_id'] and prefs['errorcol'] != '' and prefs['errorcol'] in custom_columns: label = custom_columns[prefs['errorcol']]['label'] - if not book['good']: + if not book['good'] and (book['showerror'] or prefs['save_all_errors']): logger.debug("record/update error message column %s %s"%(book['title'],book['url'])) self.set_custom(db, book['calibre_id'], 'comment', book['comment'], label=label, commit=True) # book['comment'] else: @@ -1795,7 +1795,7 @@ class FanFicFarePlugin(InterfaceAction): status_prefix=_("Updated")) def update_error_column_loop(self,book,db=None,label=None): - if book['calibre_id'] and label: + if book['calibre_id'] and label and (book['showerror'] or prefs['save_all_errors']): logger.debug("add/update bad %s %s %s"%(book['title'],book['url'],book['comment'])) self.set_custom(db, book['calibre_id'], 'comment', book['comment'], label=label, commit=True) @@ -2212,6 +2212,10 @@ class FanFicFarePlugin(InterfaceAction): book['comments'] = '' # note this is the book comments. book['good'] = True + book['showerror'] = True # False when NotGoingToDownload is + # not-overwrite / not-update / skip + # -- what some would consider 'not an + # error' book['calibre_id'] = None book['begin'] = None book['end'] = None diff --git a/calibre-plugin/jobs.py b/calibre-plugin/jobs.py index 5caf008..b1c17e0 100644 --- a/calibre-plugin/jobs.py +++ b/calibre-plugin/jobs.py @@ -220,7 +220,7 @@ def do_download_for_worker(book,options,merge,notification=lambda x,y:x): # updated does have time, use full timestamps. if (lastupdated.time() == time.min and fileupdated.date() > lastupdated.date()) or \ (lastupdated.time() != time.min and fileupdated > lastupdated): - raise NotGoingToDownload(_("Not Overwriting, web site is not newer."),'edit-undo.png') + raise NotGoingToDownload(_("Not Overwriting, web site is not newer."),'edit-undo.png',showerror=False) logger.info("write to %s"%outfile) @@ -259,7 +259,7 @@ def do_download_for_worker(book,options,merge,notification=lambda x,y:x): book['outfile'] = book['epub_for_update'] # for anthology merge ops. return book else: # not merge, - raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png') + raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png',showerror=False) elif chaptercount > urlchaptercount: raise NotGoingToDownload(_("Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update.") % (chaptercount,urlchaptercount),'dialog_error.png') elif chaptercount == 0: @@ -310,6 +310,7 @@ def do_download_for_worker(book,options,merge,notification=lambda x,y:x): except NotGoingToDownload as d: book['good']=False + book['showerror']=d.showerror book['comment']=unicode(d) book['icon'] = d.icon diff --git a/calibre-plugin/prefs.py b/calibre-plugin/prefs.py index e71be68..9b504c6 100644 --- a/calibre-plugin/prefs.py +++ b/calibre-plugin/prefs.py @@ -158,6 +158,7 @@ default_prefs['countpagesstats'] = [] default_prefs['wordcountmissing'] = False default_prefs['errorcol'] = '' +default_prefs['save_all_errors'] = True default_prefs['savemetacol'] = '' default_prefs['custom_cols'] = {} default_prefs['custom_cols_newonly'] = {} diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot index 321c8fd..69008f9 100644 --- a/calibre-plugin/translations/messages.pot +++ b/calibre-plugin/translations/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2016-03-21 20:15+Central Daylight Time\n" +"POT-Creation-Date: 2016-03-22 21:58+Central Daylight Time\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -103,73 +103,73 @@ msgstr "" msgid "Other" msgstr "" -#: config.py:384 +#: config.py:385 msgid "These settings control the basic features of the plugin--downloading FanFiction." msgstr "" -#: config.py:388 +#: config.py:389 msgid "Defaults Options on Download" msgstr "" -#: config.py:392 +#: config.py:393 msgid "On each download, FanFicFare offers an option to select the output format.
This sets what that option will default to." msgstr "" -#: config.py:394 +#: config.py:395 msgid "Default Output &Format:" msgstr "" -#: config.py:409 +#: config.py:410 msgid "On each download, FanFicFare offers an option of what happens if that story already exists.
This sets what that option will default to." msgstr "" -#: config.py:411 +#: config.py:412 msgid "Default If Story Already Exists?" msgstr "" -#: config.py:426 +#: config.py:427 msgid "Default Update Calibre &Metadata?" msgstr "" -#: config.py:427 +#: config.py:428 msgid "On each download, FanFicFare offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site.
This sets whether that will default to on or off.
Columns set to 'New Only' in the column tabs will only be set for new books." msgstr "" -#: config.py:431 +#: config.py:432 msgid "Default Update EPUB Cover when Updating EPUB?" msgstr "" -#: config.py:432 +#: config.py:433 msgid "On each download, FanFicFare offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated.
This sets whether that will default to on or off." msgstr "" -#: config.py:436 +#: config.py:437 msgid "Default Background Metadata?" msgstr "" -#: config.py:437 +#: config.py:438 msgid "On each download, FanFicFare offers an option to Collect Metadata from sites in a Background process.
This returns control to you quicker while updating, but you won't be asked for username/passwords or if you are an adult--stories that need those will just fail.
Only available for Update/Overwrite of existing books in case URL given isn't canonical or matches to existing book by Title/Author." msgstr "" -#: config.py:443 +#: config.py:444 msgid "Updating Calibre Options" msgstr "" -#: config.py:447 +#: config.py:448 msgid "Delete other existing formats?" msgstr "" -#: config.py:448 +#: config.py:449 msgid "" "Check this to automatically delete all other ebook formats when updating an existing book.\n" "Handy if you have both a Nook(epub) and Kindle(mobi), for example." msgstr "" -#: config.py:452 +#: config.py:453 msgid "Keep Existing Tags when Updating Metadata?" msgstr "" -#: config.py:453 +#: config.py:454 msgid "" "Existing tags will be kept and any new tags added.\n" "%(cmplt)s and %(inprog)s tags will be still be updated, if known.\n" @@ -177,384 +177,384 @@ msgid "" "(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)" msgstr "" -#: config.py:457 +#: config.py:458 msgid "Force Author into Author Sort?" msgstr "" -#: config.py:458 +#: config.py:459 msgid "" "If checked, the author(s) as given will be used for the Author Sort, too.\n" "If not checked, calibre will apply it's built in algorithm which makes 'Bob Smith' sort as 'Smith, Bob', etc." msgstr "" -#: config.py:462 +#: config.py:463 msgid "Force Title into Title Sort?" msgstr "" -#: config.py:463 +#: config.py:464 msgid "" "If checked, the title as given will be used for the Title Sort, too.\n" "If not checked, calibre will apply it's built in algorithm which makes 'The Title' sort as 'Title, The', etc." msgstr "" -#: config.py:467 +#: config.py:468 msgid "Check for existing Series Anthology books?" msgstr "" -#: config.py:468 +#: config.py:469 msgid "" "Check for existings Series Anthology books using each new story's series URL before downloading.\n" "Offer to skip downloading if a Series Anthology is found.\n" "Doesn't work when Collect Metadata in Background is selected." msgstr "" -#: config.py:472 +#: config.py:473 msgid "Check for changed Story URL?" msgstr "" -#: config.py:473 +#: config.py:474 msgid "" "Warn you if an update will change the URL of an existing book.\n" "fanfiction.net URLs will change from http to https silently." msgstr "" -#: config.py:477 +#: config.py:478 msgid "Search EPUB text for Story URL?" msgstr "" -#: config.py:478 +#: config.py:479 msgid "" "Look for first valid story URL inside EPUB text if not found in metadata.\n" "Somewhat risky, could find wrong URL depending on EPUB content.\n" "Also finds and corrects bad ffnet URLs from ficsaver.com files." msgstr "" -#: config.py:482 +#: config.py:483 msgid "Post Processing Options" msgstr "" -#: config.py:486 +#: config.py:487 msgid "Mark added/updated books when finished?" msgstr "" -#: config.py:487 +#: config.py:488 msgid "" "Mark added/updated books when finished. Use with option below.\n" "You can also manually search for 'marked:fff_success'.\n" "'marked:fff_failed' is also available, or search 'marked:fff' for both." msgstr "" -#: config.py:491 +#: config.py:492 msgid "Show Marked books when finished?" msgstr "" -#: config.py:492 +#: config.py:493 msgid "" "Show Marked added/updated books only when finished.\n" "You can also manually search for 'marked:fff_success'.\n" "'marked:fff_failed' is also available, or search 'marked:fff' for both." msgstr "" -#: config.py:496 +#: config.py:497 msgid "Smarten Punctuation (EPUB only)" msgstr "" -#: config.py:497 +#: config.py:498 msgid "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB download and update." msgstr "" -#: config.py:502 +#: config.py:503 msgid "" "Calculate Word Counts using Calibre internal methods.\n" "Many sites include Word Count, but many do not.\n" "This will count the words in each book and include it as if it came from the site." msgstr "" -#: config.py:506 +#: config.py:507 msgid "Calculate Word Count:" msgstr "" -#: config.py:519 +#: config.py:520 msgid "Automatically Convert new/update books?" msgstr "" -#: config.py:520 +#: config.py:521 msgid "" "Automatically call calibre's Convert for new/update books.\n" "Converts to the current output format as chosen in calibre's\n" "Preferences->Behavior settings." msgstr "" -#: config.py:524 +#: config.py:525 msgid "GUI Options" msgstr "" -#: config.py:528 +#: config.py:529 msgid "Take URLs from Clipboard?" msgstr "" -#: config.py:529 +#: config.py:530 msgid "Prefill URLs from valid URLs in Clipboard when Adding New." msgstr "" -#: config.py:533 +#: config.py:534 msgid "Default to Update when books selected?" msgstr "" -#: config.py:534 +#: config.py:535 msgid "" "The top FanFicFare plugin button will start Update if\n" "books are selected. If unchecked, it will always bring up 'Add New'." msgstr "" -#: config.py:538 +#: config.py:539 msgid "Keep 'Add New from URL(s)' dialog on top?" msgstr "" -#: config.py:539 +#: config.py:540 msgid "" "Instructs the OS and Window Manager to keep the 'Add New from URL(s)'\n" "dialog on top of all other windows. Useful for dragging URLs onto it." msgstr "" -#: config.py:543 +#: config.py:544 msgid "Show estimated time left?" msgstr "" -#: config.py:544 +#: config.py:545 msgid "When a Progress Bar is shown, show a rough estimate of the time left." msgstr "" -#: config.py:548 +#: config.py:549 msgid "Misc Options" msgstr "" -#: config.py:552 +#: config.py:553 msgid "Inject calibre Series when none found?" msgstr "" -#: config.py:553 +#: config.py:554 msgid "" "If no series is found, inject the calibre series (if there is one) so \n" "it appears on the FanFicFare title page(not cover)." msgstr "" -#: config.py:557 +#: config.py:558 msgid "Search by Title/Author(s) for If Story Already Exists?" msgstr "" -#: config.py:558 +#: config.py:559 msgid "When checking If Story Already Exists FanFicFare will first match by URL Identifier. But if not found, it can also search existing books by Title and Author(s)." msgstr "" -#: config.py:562 +#: config.py:563 msgid "Reject List" msgstr "" -#: config.py:566 +#: config.py:567 msgid "Edit Reject URL List" msgstr "" -#: config.py:567 +#: config.py:568 msgid "Edit list of URLs FanFicFare will automatically Reject." msgstr "" -#: config.py:571 config.py:645 +#: config.py:572 config.py:646 msgid "Add Reject URLs" msgstr "" -#: config.py:572 +#: config.py:573 msgid "Add additional URLs to Reject as text." msgstr "" -#: config.py:576 +#: config.py:577 msgid "Edit Reject Reasons List" msgstr "" -#: config.py:577 config.py:635 +#: config.py:578 config.py:636 msgid "Customize the Reasons presented when Rejecting URLs" msgstr "" -#: config.py:581 +#: config.py:582 msgid "Reject Without Confirmation?" msgstr "" -#: config.py:582 +#: config.py:583 msgid "Always reject URLs on the Reject List without stopping and asking." msgstr "" -#: config.py:619 +#: config.py:620 msgid "Edit Reject URLs List" msgstr "" -#: config.py:633 +#: config.py:634 msgid "Reject Reasons" msgstr "" -#: config.py:634 +#: config.py:635 msgid "Customize Reject List Reasons" msgstr "" -#: config.py:643 +#: config.py:644 msgid "Reason why I rejected it" msgstr "" -#: config.py:643 +#: config.py:644 msgid "Title by Author" msgstr "" -#: config.py:646 +#: config.py:647 msgid "Add Reject URLs. Use: http://...,note or http://...,title by author - note
Invalid story URLs will be ignored." msgstr "" -#: config.py:647 +#: config.py:648 msgid "" "One URL per line:\n" "http://...,note\n" "http://...,title by author - note" msgstr "" -#: config.py:649 dialogs.py:1100 +#: config.py:650 dialogs.py:1102 msgid "Add this reason to all URLs added:" msgstr "" -#: config.py:665 +#: config.py:666 msgid "These settings provide more detailed control over what metadata will be displayed inside the ebook as well as let you set %(isa)s and %(u)s/%(p)s for different sites." msgstr "" -#: config.py:672 +#: config.py:673 msgid "personal.ini" msgstr "" -#: config.py:679 config.py:783 config.py:784 +#: config.py:680 config.py:784 config.py:785 msgid "Edit personal.ini" msgstr "" -#: config.py:684 +#: config.py:685 msgid "FanFicFare now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors." msgstr "" -#: config.py:692 +#: config.py:693 msgid "View \"Safe\" personal.ini" msgstr "" -#: config.py:697 config.py:774 +#: config.py:698 config.py:775 msgid "View your personal.ini with usernames and passwords removed. For safely sharing your personal.ini settings with others." msgstr "" -#: config.py:703 +#: config.py:704 msgid "defaults.ini" msgstr "" -#: config.py:708 +#: config.py:709 msgid "" "View all of the plugin's configurable settings\n" "and their default settings." msgstr "" -#: config.py:709 +#: config.py:710 msgid "View Defaults" msgstr "" -#: config.py:720 +#: config.py:721 msgid "Calibre Columns" msgstr "" -#: config.py:727 +#: config.py:728 msgid "If checked, when updating/overwriting an existing book, FanFicFare will have the Calibre Columns available to use in replace_metadata, title_page, etc.
Click the button below to see the Calibre Column namess." msgstr "" -#: config.py:728 +#: config.py:729 msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite" msgstr "" -#: config.py:741 +#: config.py:742 msgid "FanFicFare can pass the Calibre Columns into the download/update process.
This will show you the columns available by name." msgstr "" -#: config.py:742 +#: config.py:743 msgid "Show Calibre Column Names" msgstr "" -#: config.py:751 +#: config.py:752 msgid "Changes will only be saved if you click 'OK' to leave Customize FanFicFare." msgstr "" -#: config.py:761 +#: config.py:762 msgid "Plugin Defaults" msgstr "" -#: config.py:762 +#: config.py:763 msgid "Plugin Defaults (%s) (Read-Only)" msgstr "" -#: config.py:773 +#: config.py:774 msgid "View 'Safe' personal.ini" msgstr "" -#: config.py:807 +#: config.py:808 msgid "Calibre Column Entry Names" msgstr "" -#: config.py:808 +#: config.py:809 msgid "Label (entry_name)" msgstr "" -#: config.py:828 +#: config.py:829 msgid "These settings provide integration with the %(rl)s Plugin. %(rl)s can automatically send to devices and change custom columns. You have to create and configure the lists in %(rl)s to be useful." msgstr "" -#: config.py:833 +#: config.py:834 msgid "Add new/updated stories to \"Send to Device\" Reading List(s)." msgstr "" -#: config.py:834 +#: config.py:835 msgid "Automatically add new/updated stories to these lists in the %(rl)s plugin." msgstr "" -#: config.py:839 +#: config.py:840 msgid "\"Send to Device\" Reading Lists" msgstr "" -#: config.py:840 config.py:843 config.py:857 config.py:860 +#: config.py:841 config.py:844 config.py:858 config.py:861 msgid "When enabled, new/updated stories will be automatically added to these lists." msgstr "" -#: config.py:850 +#: config.py:851 msgid "Add new/updated stories to \"To Read\" Reading List(s)." msgstr "" -#: config.py:851 +#: config.py:852 msgid "" "Automatically add new/updated stories to these lists in the %(rl)s plugin.\n" "Also offers menu option to remove stories from the \"To Read\" lists." msgstr "" -#: config.py:856 +#: config.py:857 msgid "\"To Read\" Reading Lists" msgstr "" -#: config.py:867 +#: config.py:868 msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"." msgstr "" -#: config.py:868 +#: config.py:869 msgid "Menu option to remove from \"To Read\" lists will also add stories back to \"Send to Device\" Reading List(s)" msgstr "" -#: config.py:872 +#: config.py:873 msgid "Automatically run Remove \"New\" Chapter Marks when marking books \"Read\"." msgstr "" -#: config.py:873 +#: config.py:874 msgid "Menu option to remove from \"To Read\" lists will also remove \"(new)\" chapter marks created by personal.ini mark_new_chapters setting." msgstr "" -#: config.py:901 +#: config.py:902 msgid "The Calibre cover image for a downloaded book can come from the story site(if EPUB and images are enabled), or from either Calibre's built-in random cover generator or the %(gc)s plugin." msgstr "" -#: config.py:909 +#: config.py:910 msgid "" "Update Calibre book cover image from EPUB when Calibre metadata is updated.\n" "Doesn't go looking for new images on 'Update Calibre Metadata Only'.\n" @@ -562,722 +562,738 @@ msgid "" "This comes before Generate Cover so %(gc)s(Plugin) use the image if configured to." msgstr "" -#: config.py:914 +#: config.py:915 msgid "Update Calibre Cover (from EPUB):" msgstr "" -#: config.py:932 +#: config.py:933 msgid "Generate a Calibre book cover image when Calibre metadata is updated.
Defaults to 'Yes, Always' for backward compatibility and because %(gc)s(Plugin) will only run if configured for Default or site." msgstr "" -#: config.py:936 +#: config.py:937 msgid "Generate Calibre Cover:" msgstr "" -#: config.py:963 +#: config.py:964 msgid "Plugin %(gc)s" msgstr "" -#: config.py:964 +#: config.py:965 msgid "Use plugin to create covers. Additional settings are below." msgstr "" -#: config.py:971 +#: config.py:972 msgid "Calibre Generate Cover" msgstr "" -#: config.py:972 +#: config.py:973 msgid "Call Calibre's Edit Metadata Generate cover feature to create a random cover each time a story is downloaded or updated.
Right click or long click the 'Generate cover' button in Calibre's Edit Metadata to customize." msgstr "" -#: config.py:986 +#: config.py:987 msgid "Generate Covers Only for New Books" msgstr "" -#: config.py:987 +#: config.py:988 msgid "Default is to generate a cover any time the calibre metadata is updated.
Used for both Calibre and Plugin generated covers." msgstr "" -#: config.py:993 +#: config.py:994 msgid "Inject/update the cover inside EPUB" msgstr "" -#: config.py:994 +#: config.py:995 msgid "Calibre's Polish feature will be used to inject or update the generated cover into the EPUB ebook file.
Used for both Calibre and Plugin generated covers." msgstr "" -#: config.py:1000 +#: config.py:1001 msgid "%(gc)s(Plugin) Settings" msgstr "" -#: config.py:1008 +#: config.py:1009 msgid "The %(gc)s plugin can create cover images for books using various metadata (including existing cover image). If you have %(gc)s installed, FanFicFare can run %(gc)s on new downloads and metadata updates. Pick a %(gc)s setting by site and/or one to use by Default." msgstr "" -#: config.py:1026 config.py:1030 config.py:1043 +#: config.py:1027 config.py:1031 config.py:1044 msgid "Default" msgstr "" -#: config.py:1031 +#: config.py:1032 msgid "On Metadata update, run %(gc)s with this setting, if there isn't a more specific setting below." msgstr "" -#: config.py:1034 +#: config.py:1035 msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories." msgstr "" -#: config.py:1057 +#: config.py:1058 msgid "Allow %(gcset)s from %(pini)s to override" msgstr "" -#: config.py:1058 +#: config.py:1059 msgid "The %(pini)s parameter %(gcset)s allows you to choose a %(gc)s setting based on metadata rather than site, but it's much more complex.
%(gcset)s is ignored when this is off." msgstr "" -#: config.py:1096 +#: config.py:1097 msgid "These settings provide integration with the %(cp)s Plugin. %(cp)s can automatically update custom columns with page, word and reading level statistics. You have to create and configure the columns in %(cp)s first." msgstr "" -#: config.py:1101 +#: config.py:1102 msgid "If any of the settings below are checked, when stories are added or updated, the %(cp)s Plugin will be called to update the checked statistics." msgstr "" -#: config.py:1107 +#: config.py:1108 msgid "Which column and algorithm to use are configured in %(cp)s." msgstr "" -#: config.py:1117 +#: config.py:1118 msgid "Will overwrite word count from FanFicFare metadata if set to update the same custom column." msgstr "" -#: config.py:1122 +#: config.py:1123 msgid "Only run Count Page's Word Count if checked and FanFicFare metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice." msgstr "" -#: config.py:1158 +#: config.py:1159 msgid "These controls aren't plugin settings as such, but convenience buttons for setting Keyboard shortcuts and getting all the FanFicFare confirmation dialogs back again." msgstr "" -#: config.py:1163 +#: config.py:1164 msgid "Keyboard shortcuts..." msgstr "" -#: config.py:1164 +#: config.py:1165 msgid "Edit the keyboard shortcuts associated with this plugin" msgstr "" -#: config.py:1168 +#: config.py:1169 msgid "Reset disabled &confirmation dialogs" msgstr "" -#: config.py:1169 +#: config.py:1170 msgid "Reset all show me again dialogs for the FanFicFare plugin" msgstr "" -#: config.py:1173 +#: config.py:1174 msgid "&View library preferences..." msgstr "" -#: config.py:1174 +#: config.py:1175 msgid "View data stored in the library database for this plugin" msgstr "" -#: config.py:1185 +#: config.py:1186 msgid "Done" msgstr "" -#: config.py:1186 +#: config.py:1187 msgid "Confirmation dialogs have all been reset" msgstr "" -#: config.py:1234 +#: config.py:1235 msgid "Category" msgstr "" -#: config.py:1235 +#: config.py:1236 msgid "Genre" msgstr "" -#: config.py:1236 +#: config.py:1237 msgid "Language" msgstr "" -#: config.py:1237 fff_plugin.py:1464 fff_plugin.py:1663 fff_plugin.py:1693 +#: config.py:1238 fff_plugin.py:1464 fff_plugin.py:1663 fff_plugin.py:1693 msgid "Status" msgstr "" -#: config.py:1238 +#: config.py:1239 msgid "Status:%(cmplt)s" msgstr "" -#: config.py:1239 +#: config.py:1240 msgid "Status:%(inprog)s" msgstr "" -#: config.py:1240 config.py:1388 +#: config.py:1241 config.py:1403 msgid "Series" msgstr "" -#: config.py:1241 +#: config.py:1242 msgid "Characters" msgstr "" -#: config.py:1242 +#: config.py:1243 msgid "Relationships" msgstr "" -#: config.py:1243 +#: config.py:1244 msgid "Published" msgstr "" -#: config.py:1244 fff_plugin.py:1776 fff_plugin.py:1795 +#: config.py:1245 fff_plugin.py:1776 fff_plugin.py:1795 msgid "Updated" msgstr "" -#: config.py:1245 +#: config.py:1246 msgid "Created" msgstr "" -#: config.py:1246 +#: config.py:1247 msgid "Rating" msgstr "" -#: config.py:1247 +#: config.py:1248 msgid "Warnings" msgstr "" -#: config.py:1248 +#: config.py:1249 msgid "Chapters" msgstr "" -#: config.py:1249 +#: config.py:1250 msgid "Words" msgstr "" -#: config.py:1250 +#: config.py:1251 msgid "Site" msgstr "" -#: config.py:1251 +#: config.py:1252 msgid "Story ID" msgstr "" -#: config.py:1252 +#: config.py:1253 msgid "Author ID" msgstr "" -#: config.py:1253 +#: config.py:1254 msgid "Extra Tags" msgstr "" -#: config.py:1254 config.py:1380 dialogs.py:891 dialogs.py:987 +#: config.py:1255 config.py:1395 dialogs.py:893 dialogs.py:989 #: fff_plugin.py:1464 fff_plugin.py:1663 fff_plugin.py:1693 msgid "Title" msgstr "" -#: config.py:1255 +#: config.py:1256 msgid "Story URL" msgstr "" -#: config.py:1256 +#: config.py:1257 msgid "Description" msgstr "" -#: config.py:1257 dialogs.py:891 dialogs.py:987 fff_plugin.py:1464 +#: config.py:1258 dialogs.py:893 dialogs.py:989 fff_plugin.py:1464 #: fff_plugin.py:1663 fff_plugin.py:1693 msgid "Author" msgstr "" -#: config.py:1258 +#: config.py:1259 msgid "Author URL" msgstr "" -#: config.py:1259 +#: config.py:1260 msgid "File Format" msgstr "" -#: config.py:1260 +#: config.py:1261 msgid "File Extension" msgstr "" -#: config.py:1261 +#: config.py:1262 msgid "Site Abbrev" msgstr "" -#: config.py:1262 +#: config.py:1263 msgid "FanFicFare Version" msgstr "" -#: config.py:1277 +#: config.py:1278 msgid "If you have custom columns defined, they will be listed below. Choose a metadata value type to fill your columns automatically." msgstr "" -#: config.py:1302 +#: config.py:1303 msgid "Update this %s column(%s) with..." msgstr "" -#: config.py:1312 +#: config.py:1313 msgid "Values that aren't valid for this enumeration column will be ignored." msgstr "" -#: config.py:1312 config.py:1314 +#: config.py:1313 config.py:1315 msgid "Metadata values valid for this type of column." msgstr "" -#: config.py:1317 config.py:1407 +#: config.py:1318 config.py:1422 msgid "New Only" msgstr "" -#: config.py:1318 +#: config.py:1319 msgid "" "Write to %s(%s) only for new\n" "books, not updates to existing books." msgstr "" -#: config.py:1329 +#: config.py:1330 msgid "Allow %(ccset)s from %(pini)s to override" msgstr "" -#: config.py:1330 +#: config.py:1331 msgid "The %(pini)s parameter %(ccset)s allows you to set custom columns to site specific values that aren't common to all sites.
%(ccset)s is ignored when this is off." msgstr "" -#: config.py:1334 +#: config.py:1335 msgid "Special column:" msgstr "" -#: config.py:1339 +#: config.py:1340 msgid "Update/Overwrite Error Column:" msgstr "" -#: config.py:1340 +#: config.py:1341 msgid "" "When an update or overwrite of an existing story fails, record the reason in this column.\n" "(Text and Long Text columns only.)" msgstr "" #: config.py:1354 -msgid "Saved Metadata Column:" +msgid "Save All Errors" msgstr "" #: config.py:1355 +msgid "If unchecked, these errors will not be saved:%s" +msgstr "" + +#: config.py:1357 fff_plugin.py:1342 jobs.py:223 +msgid "Not Overwriting, web site is not newer." +msgstr "" + +#: config.py:1358 fff_plugin.py:1321 jobs.py:262 +msgid "Already contains %d chapters." +msgstr "" + +#: config.py:1365 +msgid "Saved Metadata Column:" +msgstr "" + +#: config.py:1366 msgid "If set, FanFicFare will save a copy of all its metadata in this column when the book is downloaded or updated.
The metadata from this column can later be used to update custom columns without having to request the metadata from the server again.
(Long Text columns only.)" msgstr "" -#: config.py:1381 +#: config.py:1396 msgid "Author(s)" msgstr "" -#: config.py:1382 +#: config.py:1397 msgid "Publisher" msgstr "" -#: config.py:1383 +#: config.py:1398 msgid "Tags" msgstr "" -#: config.py:1384 +#: config.py:1399 msgid "Languages" msgstr "" -#: config.py:1385 +#: config.py:1400 msgid "Published Date" msgstr "" -#: config.py:1386 +#: config.py:1401 msgid "Date" msgstr "" -#: config.py:1387 +#: config.py:1402 msgid "Comments" msgstr "" -#: config.py:1389 +#: config.py:1404 msgid "Ids(url id only)" msgstr "" -#: config.py:1394 +#: config.py:1409 msgid "The standard calibre metadata columns are listed below. You may choose whether FanFicFare will fill each column automatically on updates or only for new books." msgstr "" -#: config.py:1408 +#: config.py:1423 msgid "" "Write to %s only for new\n" "books, not updates to existing books." msgstr "" -#: config.py:1417 +#: config.py:1432 msgid "Other Standard Column Options" msgstr "" -#: config.py:1422 +#: config.py:1437 msgid "Set Calibre Author URL" msgstr "" -#: config.py:1423 +#: config.py:1438 msgid "Set Calibre Author URL to Author's URL on story site." msgstr "" -#: config.py:1440 +#: config.py:1455 msgid "These settings will allow FanFicFare to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below." msgstr "" -#: config.py:1445 +#: config.py:1460 msgid "IMAP Server Name" msgstr "" -#: config.py:1446 +#: config.py:1461 msgid "Name of IMAP server--must allow IMAP4 with SSL. Eg: imap.gmail.com" msgstr "" -#: config.py:1455 +#: config.py:1470 msgid "IMAP User Name" msgstr "" -#: config.py:1456 +#: config.py:1471 msgid "" "Name of IMAP user. Eg: yourname@gmail.com\n" "Note that Gmail accounts need to have IMAP enabled in Gmail Settings first." msgstr "" -#: config.py:1465 +#: config.py:1480 msgid "IMAP User Password" msgstr "" -#: config.py:1466 +#: config.py:1481 msgid "IMAP password. If left empty, FanFicFare will ask you for your password when you use the feature." msgstr "" -#: config.py:1476 +#: config.py:1491 msgid "Remember Password for Session (when not saved above)" msgstr "" -#: config.py:1477 +#: config.py:1492 msgid "If checked, and no password is entered above, FanFicFare will remember your password until you close calibre or change Libraries." msgstr "" -#: config.py:1482 +#: config.py:1497 msgid "IMAP Folder Name" msgstr "" -#: config.py:1483 +#: config.py:1498 msgid "Name of IMAP folder to search for new emails. The folder (or label) has to already exist. Use INBOX for your default inbox." msgstr "" -#: config.py:1492 +#: config.py:1507 msgid "Mark Emails Read" msgstr "" -#: config.py:1493 +#: config.py:1508 msgid "If checked, emails will be marked as having been read if they contain any story URLs." msgstr "" -#: config.py:1498 +#: config.py:1513 msgid "Discard URLs on Reject List" msgstr "" -#: config.py:1499 +#: config.py:1514 msgid "If checked, FanFicFare will silently discard story URLs from emails that are on your Reject URL List.
Otherwise they will appear and you will see the normal Reject URL dialog.
The Emails will still be marked Read if configured to." msgstr "" -#: config.py:1504 +#: config.py:1519 msgid "Download from Email Immediately" msgstr "" -#: config.py:1505 +#: config.py:1520 msgid "If checked, FanFicFare will start downloading story URLs from emails immediately.
Otherwise the usual Download from URLs dialog will appear." msgstr "" -#: config.py:1510 +#: config.py:1525 msgid "It's safest if you create a separate email account that you use only for your story update notices. FanFicFare and calibre cannot guarantee that malicious code cannot get your email password once you've entered it.
Use this feature at your own risk.
" msgstr "" -#: dialogs.py:244 dialogs.py:771 +#: dialogs.py:245 dialogs.py:773 msgid "Show Download Options" msgstr "" -#: dialogs.py:263 dialogs.py:791 +#: dialogs.py:264 dialogs.py:793 msgid "Output &Format:" msgstr "" -#: dialogs.py:271 dialogs.py:799 +#: dialogs.py:272 dialogs.py:801 msgid "Choose output format to create. May set default from plugin configuration." msgstr "" -#: dialogs.py:299 dialogs.py:819 +#: dialogs.py:300 dialogs.py:821 msgid "Update Calibre &Metadata?" msgstr "" -#: dialogs.py:300 dialogs.py:820 +#: dialogs.py:301 dialogs.py:822 msgid "" "Update metadata for existing stories in Calibre from web site?\n" "(Columns set to 'New Only' in the column tabs will only be set for new books.)" msgstr "" -#: dialogs.py:306 dialogs.py:824 +#: dialogs.py:307 dialogs.py:826 msgid "Update EPUB Cover?" msgstr "" -#: dialogs.py:307 dialogs.py:825 +#: dialogs.py:308 dialogs.py:827 msgid "Update book cover image from site or defaults (if found) inside the EPUB when EPUB is updated." msgstr "" -#: dialogs.py:369 +#: dialogs.py:370 msgid "Story URLs for anthology, one per line:" msgstr "" -#: dialogs.py:370 +#: dialogs.py:371 msgid "" "URLs for stories to include in the anthology, one per line.\n" "Will take URLs from clipboard, but only valid URLs." msgstr "" -#: dialogs.py:371 +#: dialogs.py:372 msgid "If Story Already Exists in Anthology?" msgstr "" -#: dialogs.py:372 +#: dialogs.py:373 msgid "What to do if there's already an existing story with the same URL in the anthology." msgstr "" -#: dialogs.py:381 +#: dialogs.py:382 msgid "Story URLs, one per line:" msgstr "" -#: dialogs.py:382 +#: dialogs.py:383 msgid "" "URLs for stories, one per line.\n" "Will take URLs from clipboard, but only valid URLs.\n" "Add [1,5] after the URL to limit the download to chapters 1-5." msgstr "" -#: dialogs.py:383 +#: dialogs.py:384 msgid "If Story Already Exists?" msgstr "" -#: dialogs.py:384 +#: dialogs.py:385 msgid "What to do if there's already an existing story with the same URL or title and author." msgstr "" -#: dialogs.py:504 +#: dialogs.py:505 msgid "For Individual Books" msgstr "" -#: dialogs.py:505 +#: dialogs.py:506 msgid "Get URLs and go to dialog for individual story downloads." msgstr "" -#: dialogs.py:510 +#: dialogs.py:511 msgid "For Anthology Epub" msgstr "" -#: dialogs.py:511 +#: dialogs.py:512 msgid "" "Get URLs and go to dialog for Anthology download.\n" "Requires %s plugin." msgstr "" -#: dialogs.py:515 dialogs.py:569 dialogs.py:596 dialogs.py:1502 +#: dialogs.py:516 dialogs.py:570 dialogs.py:597 dialogs.py:1504 msgid "Cancel" msgstr "" -#: dialogs.py:547 dialogs.py:1490 +#: dialogs.py:548 dialogs.py:1492 msgid "Password" msgstr "" -#: dialogs.py:548 +#: dialogs.py:549 msgid "Author requires a password for this story(%s)." msgstr "" -#: dialogs.py:553 +#: dialogs.py:554 msgid "User/Password" msgstr "" -#: dialogs.py:554 +#: dialogs.py:555 msgid "%s requires you to login to download this story." msgstr "" -#: dialogs.py:556 +#: dialogs.py:557 msgid "User:" msgstr "" -#: dialogs.py:560 +#: dialogs.py:561 msgid "Password:" msgstr "" -#: dialogs.py:565 dialogs.py:713 dialogs.py:1498 +#: dialogs.py:566 dialogs.py:715 dialogs.py:1500 msgid "OK" msgstr "" -#: dialogs.py:591 fff_plugin.py:958 +#: dialogs.py:592 fff_plugin.py:958 msgid "Fetching metadata for stories..." msgstr "" -#: dialogs.py:592 fff_plugin.py:959 +#: dialogs.py:593 fff_plugin.py:959 msgid "Downloading metadata for stories" msgstr "" -#: dialogs.py:593 fff_plugin.py:960 +#: dialogs.py:594 fff_plugin.py:960 msgid "Fetched metadata for" msgstr "" -#: dialogs.py:623 +#: dialogs.py:624 msgid " - %s estimated until done" msgstr "" -#: dialogs.py:673 +#: dialogs.py:675 msgid "%d day" msgstr "" -#: dialogs.py:673 +#: dialogs.py:675 msgid "%d days" msgstr "" -#: dialogs.py:674 +#: dialogs.py:676 msgid "%d hour" msgstr "" -#: dialogs.py:674 +#: dialogs.py:676 msgid "%d hours" msgstr "" -#: dialogs.py:675 +#: dialogs.py:677 msgid "%d minute" msgstr "" -#: dialogs.py:675 +#: dialogs.py:677 msgid "%d minutes" msgstr "" -#: dialogs.py:676 +#: dialogs.py:678 msgid "%d second" msgstr "" -#: dialogs.py:676 +#: dialogs.py:678 msgid "%d seconds" msgstr "" -#: dialogs.py:691 +#: dialogs.py:693 msgid "less than 1 second" msgstr "" -#: dialogs.py:708 fff_plugin.py:381 fff_plugin.py:384 +#: dialogs.py:710 fff_plugin.py:381 fff_plugin.py:384 msgid "About FanFicFare" msgstr "" -#: dialogs.py:762 +#: dialogs.py:764 msgid "Remove selected books from the list" msgstr "" -#: dialogs.py:804 +#: dialogs.py:806 msgid "Update Mode:" msgstr "" -#: dialogs.py:807 +#: dialogs.py:809 msgid "What sort of update to perform. May set default from plugin configuration." msgstr "" -#: dialogs.py:829 +#: dialogs.py:831 msgid "Background Metadata?" msgstr "" -#: dialogs.py:830 +#: dialogs.py:832 msgid "Collect Metadata from sites in a Background process.
This returns control to you quicker while updating, but you won't be asked for username/passwords or if you are an adult--stories that need those will just fail." msgstr "" -#: dialogs.py:891 fff_plugin.py:1464 fff_plugin.py:1663 fff_plugin.py:1693 +#: dialogs.py:893 fff_plugin.py:1464 fff_plugin.py:1663 fff_plugin.py:1693 msgid "Comment" msgstr "" -#: dialogs.py:959 +#: dialogs.py:961 msgid "Are you sure you want to remove this book from the list?" msgstr "" -#: dialogs.py:961 +#: dialogs.py:963 msgid "Are you sure you want to remove the selected %d books from the list?" msgstr "" -#: dialogs.py:987 +#: dialogs.py:989 msgid "Note" msgstr "" -#: dialogs.py:1026 +#: dialogs.py:1028 msgid "Select or Edit Reject Note." msgstr "" -#: dialogs.py:1035 +#: dialogs.py:1037 msgid "Are you sure you want to remove this URL from the list?" msgstr "" -#: dialogs.py:1037 +#: dialogs.py:1039 msgid "Are you sure you want to remove the %d selected URLs from the list?" msgstr "" -#: dialogs.py:1055 +#: dialogs.py:1057 msgid "List of Books to Reject" msgstr "" -#: dialogs.py:1068 +#: dialogs.py:1070 msgid "FFF will remember these URLs and display the note and offer to reject them if you try to download them again later." msgstr "" -#: dialogs.py:1082 +#: dialogs.py:1084 msgid "Remove selected URLs from the list" msgstr "" -#: dialogs.py:1097 dialogs.py:1101 +#: dialogs.py:1099 dialogs.py:1103 msgid "This will be added to whatever note you've set for each URL above." msgstr "" -#: dialogs.py:1111 +#: dialogs.py:1113 msgid "Delete Books (including books without FanFiction URLs)?" msgstr "" -#: dialogs.py:1112 +#: dialogs.py:1114 msgid "Delete the selected books after adding them to the Rejected URLs list." msgstr "" -#: dialogs.py:1268 +#: dialogs.py:1270 msgid "Search for string in edit box." msgstr "" -#: dialogs.py:1271 +#: dialogs.py:1273 msgid "Find:" msgstr "" -#: dialogs.py:1276 +#: dialogs.py:1278 msgid "Find" msgstr "" -#: dialogs.py:1286 +#: dialogs.py:1288 msgid "Case sensitive" msgstr "" -#: dialogs.py:1287 +#: dialogs.py:1289 msgid "Search for case sensitive string; don't treat Harry, HARRY and harry all the same." msgstr "" -#: dialogs.py:1316 +#: dialogs.py:1318 msgid "Go back to fix errors?" msgstr "" -#: dialogs.py:1428 +#: dialogs.py:1430 msgid "Click an error below to return to Editing directly on that line:" msgstr "" -#: dialogs.py:1442 +#: dialogs.py:1444 msgid "Click to go to line %s" msgstr "" -#: dialogs.py:1458 +#: dialogs.py:1460 msgid "Return to Editing" msgstr "" -#: dialogs.py:1462 +#: dialogs.py:1464 msgid "Save Anyway" msgstr "" -#: dialogs.py:1491 +#: dialogs.py:1493 msgid "Enter Email Password for %s:" msgstr "" @@ -1725,10 +1741,6 @@ msgstr "" msgid "Metadata collected." msgstr "" -#: fff_plugin.py:1321 jobs.py:262 -msgid "Already contains %d chapters." -msgstr "" - #: fff_plugin.py:1323 jobs.py:264 msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update." msgstr "" @@ -1737,10 +1749,6 @@ msgstr "" msgid "FanFicFare doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update." msgstr "" -#: fff_plugin.py:1342 jobs.py:223 -msgid "Not Overwriting, web site is not newer." -msgstr "" - #: fff_plugin.py:1460 msgid "None of the %d URLs/stories given can be/need to be downloaded." msgstr "" @@ -1865,7 +1873,7 @@ msgstr "" msgid "Adding format to book failed for some reason..." msgstr "" -#: fff_plugin.py:1823 jobs.py:320 +#: fff_plugin.py:1823 jobs.py:321 msgid "Error" msgstr "" @@ -1885,39 +1893,39 @@ msgstr "" msgid "You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?" msgstr "" -#: fff_plugin.py:2234 +#: fff_plugin.py:2238 msgid "Same story already included." msgstr "" -#: fff_plugin.py:2294 +#: fff_plugin.py:2298 msgid "No story URL found." msgstr "" -#: fff_plugin.py:2297 +#: fff_plugin.py:2301 msgid "Not Found" msgstr "" -#: fff_plugin.py:2303 +#: fff_plugin.py:2307 msgid "URL is not a valid story URL." msgstr "" -#: fff_plugin.py:2306 +#: fff_plugin.py:2310 msgid "Bad URL" msgstr "" -#: fff_plugin.py:2445 fff_plugin.py:2448 +#: fff_plugin.py:2449 fff_plugin.py:2452 msgid "Anthology containing:" msgstr "" -#: fff_plugin.py:2446 +#: fff_plugin.py:2450 msgid "%s by %s" msgstr "" -#: fff_plugin.py:2468 +#: fff_plugin.py:2472 msgid " Anthology" msgstr "" -#: fff_plugin.py:2511 +#: fff_plugin.py:2515 msgid "(was set, removed for security)" msgstr ""