diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py index 5b1b6586..792e66a5 100644 --- a/calibre-plugin/config.py +++ b/calibre-plugin/config.py @@ -231,6 +231,7 @@ class ConfigWidget(QWidget): prefs['mark'] = self.basic_tab.mark.isChecked() prefs['showmarked'] = self.basic_tab.showmarked.isChecked() prefs['autoconvert'] = self.basic_tab.autoconvert.isChecked() + prefs['show_est_time'] = self.basic_tab.show_est_time.isChecked() prefs['urlsfromclip'] = self.basic_tab.urlsfromclip.isChecked() prefs['updatedefault'] = self.basic_tab.updatedefault.isChecked() prefs['deleteotherforms'] = self.basic_tab.deleteotherforms.isChecked() @@ -451,6 +452,11 @@ class BasicTab(QWidget): self.autoconvert.setChecked(prefs['autoconvert']) self.l.addWidget(self.autoconvert) + self.show_est_time = QCheckBox(_("Show estimated time left?"),self) + self.show_est_time.setToolTip(_("When a Progress Bar is shown, show a rough estimate of the time left.")) + self.show_est_time.setChecked(prefs['show_est_time']) + self.l.addWidget(self.show_est_time) + gui_gb = groupbox = QGroupBox(_("GUI Options")) self.l = QVBoxLayout() groupbox.setLayout(self.l) diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py index 19095e5a..218a780e 100644 --- a/calibre-plugin/dialogs.py +++ b/calibre-plugin/dialogs.py @@ -19,6 +19,8 @@ logger = logging.getLogger(__name__) import urllib import email +from datetime import datetime + try: from PyQt5 import QtWidgets as QtGui from PyQt5.Qt import (QDialog, QTableWidget, QVBoxLayout, QHBoxLayout, QGridLayout, @@ -578,14 +580,25 @@ class LoopProgressDialog(QProgressDialog): self.finish_function = finish_function self.status_prefix = status_prefix self.i = 0 - + self.start_time = datetime.now() + + # can't import at file load. + from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs + self.show_est_time = prefs['show_est_time'] + ## self.do_loop does QTimer.singleShot on self.do_loop also. ## A weird way to do a loop, but that was the example I had. QTimer.singleShot(0, self.do_loop) self.exec_() def updateStatus(self): - self.setLabelText("%s %d / %d"%(self.status_prefix,self.i+1,len(self.book_list))) + remaining_time_string = '' + if self.show_est_time and self.i > -1: + time_spent = (datetime.now() - self.start_time).total_seconds() + estimated_remaining = (time_spent/(self.i+1)) * len(self.book_list) - time_spent + remaining_time_string = _(' - %s estimated until done') % ( time_duration_format(estimated_remaining)) + + self.setLabelText('%s %d / %d%s' % (self.status_prefix, self.i+1, len(self.book_list), remaining_time_string)) self.setValue(self.i+1) #print(self.labelText()) @@ -624,6 +637,37 @@ class LoopProgressDialog(QProgressDialog): # Queues a job to process these books in the background. self.finish_function(self.book_list) +def time_duration_format(seconds): + """ + Convert seconds into a string describing the duration in larger time units (seconds, minutes, hours, days) + Only returns the two largest time divisions (eg, will drop seconds if there's hours remaining) + + :param seconds: number of seconds + :return: string description of the duration + """ + periods = [ + (_('%d day'),_('%d days'), 60*60*24), + (_('%d hour'),_('%d hours'), 60*60), + (_('%d minute'),_('%d minutes'), 60), + (_('%d second'),_('%d seconds'), 1) + ] + + strings = [] + for period_label, period_plural_label, period_seconds in periods: + if seconds > period_seconds: + period_value, seconds = divmod(seconds,period_seconds) + if period_value == 1: + strings.append( period_label % period_value) + else: + strings.append(period_plural_label % period_value) + if len(strings) == 2: + break + + if len(strings) == 0: + return _('less than 1 second') + else: + return ', '.join(strings) + class AboutDialog(QDialog): def __init__(self, parent, icon, text): diff --git a/calibre-plugin/prefs.py b/calibre-plugin/prefs.py index 90af87bf..083768da 100644 --- a/calibre-plugin/prefs.py +++ b/calibre-plugin/prefs.py @@ -48,6 +48,7 @@ default_prefs['checkforseriesurlid'] = True default_prefs['checkforurlchange'] = True default_prefs['injectseries'] = False default_prefs['smarten_punctuation'] = False +default_prefs['show_est_time'] = False default_prefs['send_lists'] = '' default_prefs['read_lists'] = '' diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot index 1b1e93fa..9ad19334 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: 2014-09-09 15:54+Central Daylight Time\n" +"POT-Creation-Date: 2014-12-24 12:28+Central Standard Time\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" msgid "UI plugin to download FanFiction stories from various sites." msgstr "" -#: __init__.py:109 +#: __init__.py:116 msgid "Path to the calibre library. Default is to use the path stored in the settings." msgstr "" @@ -47,83 +47,83 @@ msgstr "" msgid "Other" msgstr "" -#: config.py:338 +#: config.py:339 msgid "These settings control the basic features of the plugin--downloading FanFiction." msgstr "" -#: config.py:342 +#: config.py:343 msgid "Defaults Options on Download" msgstr "" -#: config.py:346 +#: config.py:347 msgid "On each download, FFDL offers an option to select the output format.
This sets what that option will default to." msgstr "" -#: config.py:348 +#: config.py:349 msgid "Default Output &Format:" msgstr "" -#: config.py:363 +#: config.py:364 msgid "On each download, FFDL offers an option of what happens if that story already exists.
This sets what that option will default to." msgstr "" -#: config.py:365 +#: config.py:366 msgid "Default If Story Already Exists?" msgstr "" -#: config.py:379 +#: config.py:380 msgid "Default Update Calibre &Metadata?" msgstr "" -#: config.py:380 +#: config.py:381 msgid "On each download, FFDL 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:384 +#: config.py:385 msgid "Default Update EPUB Cover when Updating EPUB?" msgstr "" -#: config.py:385 +#: config.py:386 msgid "On each download, FFDL 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:389 +#: config.py:390 msgid "Smarten Punctuation (EPUB only)" msgstr "" -#: config.py:390 +#: config.py:391 msgid "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB download and update." msgstr "" -#: config.py:395 +#: config.py:396 msgid "Updating Calibre Options" msgstr "" -#: config.py:399 +#: config.py:400 msgid "Delete other existing formats?" msgstr "" -#: config.py:400 +#: config.py:401 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:404 +#: config.py:405 msgid "Update Calibre Cover when Updating Metadata?" msgstr "" -#: config.py:405 +#: config.py:406 msgid "" "Update calibre book cover image from EPUB when metadata is updated. (EPUB only.)\n" "Doesn't go looking for new images on 'Update Calibre Metadata Only'." msgstr "" -#: config.py:409 +#: config.py:410 msgid "Keep Existing Tags when Updating Metadata?" msgstr "" -#: config.py:410 +#: config.py:411 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" @@ -131,809 +131,857 @@ msgid "" "(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)" msgstr "" -#: config.py:414 +#: config.py:415 msgid "Force Author into Author Sort?" msgstr "" -#: config.py:415 +#: config.py:416 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:419 +#: config.py:420 msgid "Force Title into Title Sort?" msgstr "" -#: config.py:420 +#: config.py:421 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:424 +#: config.py:425 msgid "Check for existing Series Anthology books?" msgstr "" -#: config.py:425 +#: config.py:426 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." msgstr "" -#: config.py:429 +#: config.py:430 msgid "Check for changed Story URL?" msgstr "" -#: config.py:430 +#: config.py:431 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:434 +#: config.py:435 msgid "Search EPUB text for Story URL?" msgstr "" -#: config.py:435 +#: config.py:436 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:439 +#: config.py:440 msgid "Mark added/updated books when finished?" msgstr "" -#: config.py:440 +#: config.py:441 msgid "" "Mark added/updated books when finished. Use with option below.\n" "You can also manually search for 'marked:ffdl_success'.\n" "'marked:ffdl_failed' is also available, or search 'marked:ffdl' for both." msgstr "" -#: config.py:444 +#: config.py:445 msgid "Show Marked books when finished?" msgstr "" -#: config.py:445 +#: config.py:446 msgid "" "Show Marked added/updated books only when finished.\n" "You can also manually search for 'marked:ffdl_success'.\n" "'marked:ffdl_failed' is also available, or search 'marked:ffdl' for both." msgstr "" -#: config.py:449 +#: config.py:450 msgid "Automatically Convert new/update books?" msgstr "" -#: config.py:450 +#: config.py:451 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:454 +#: config.py:455 +msgid "Show estimated time left?" +msgstr "" + +#: config.py:456 +msgid "When a Progress Bar is shown, show a rough estimate of the time left." +msgstr "" + +#: config.py:460 msgid "GUI Options" msgstr "" -#: config.py:458 +#: config.py:464 msgid "Take URLs from Clipboard?" msgstr "" -#: config.py:459 +#: config.py:465 msgid "Prefill URLs from valid URLs in Clipboard when Adding New." msgstr "" -#: config.py:463 +#: config.py:469 msgid "Default to Update when books selected?" msgstr "" -#: config.py:464 +#: config.py:470 msgid "" "The top FanFictionDownLoader plugin button will start Update if\n" "books are selected. If unchecked, it will always bring up 'Add New'." msgstr "" -#: config.py:468 +#: config.py:474 msgid "Keep 'Add New from URL(s)' dialog on top?" msgstr "" -#: config.py:469 +#: config.py:475 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:473 +#: config.py:479 msgid "Misc Options" msgstr "" -#: config.py:478 +#: config.py:484 msgid "Include images in EPUBs?" msgstr "" -#: config.py:479 +#: config.py:485 msgid "Download and include images in EPUB stories. This is equivalent to adding:%(imgset)s ...to the top of %(pini)s. Your settings in %(pini)s will override this." msgstr "" -#: config.py:483 +#: config.py:489 msgid "Inject calibre Series when none found?" msgstr "" -#: config.py:484 +#: config.py:490 msgid "If no series is found, inject the calibre series (if there is one) so it appears on the FFDL title page(not cover)." msgstr "" -#: config.py:488 +#: config.py:494 msgid "Reject List" msgstr "" -#: config.py:492 +#: config.py:498 msgid "Edit Reject URL List" msgstr "" -#: config.py:493 +#: config.py:499 msgid "Edit list of URLs FFDL will automatically Reject." msgstr "" -#: config.py:497 config.py:571 +#: config.py:503 config.py:577 msgid "Add Reject URLs" msgstr "" -#: config.py:498 +#: config.py:504 msgid "Add additional URLs to Reject as text." msgstr "" -#: config.py:502 +#: config.py:508 msgid "Edit Reject Reasons List" msgstr "" -#: config.py:503 config.py:562 +#: config.py:509 config.py:568 msgid "Customize the Reasons presented when Rejecting URLs" msgstr "" -#: config.py:507 +#: config.py:513 msgid "Reject Without Confirmation?" msgstr "" -#: config.py:508 +#: config.py:514 msgid "Always reject URLs on the Reject List without stopping and asking." msgstr "" -#: config.py:546 +#: config.py:552 msgid "Edit Reject URLs List" msgstr "" -#: config.py:560 +#: config.py:566 msgid "Reject Reasons" msgstr "" -#: config.py:561 +#: config.py:567 msgid "Customize Reject List Reasons" msgstr "" -#: config.py:569 +#: config.py:575 msgid "Reason why I rejected it" msgstr "" -#: config.py:569 +#: config.py:575 msgid "Title by Author" msgstr "" -#: config.py:572 +#: config.py:578 msgid "Add Reject URLs. Use: http://...,note or http://...,title by author - note
Invalid story URLs will be ignored." msgstr "" -#: config.py:573 +#: config.py:579 msgid "" "One URL per line:\n" "http://...,note\n" "http://...,title by author - note" msgstr "" -#: config.py:575 dialogs.py:1012 +#: config.py:581 dialogs.py:1056 msgid "Add this reason to all URLs added:" msgstr "" -#: config.py:590 +#: config.py:596 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:608 +#: config.py:614 msgid "View Defaults" msgstr "" -#: config.py:609 +#: config.py:615 msgid "" "View all of the plugin's configurable settings\n" "and their default settings." msgstr "" -#: config.py:627 +#: config.py:633 msgid "Plugin Defaults (%s) (Read-Only)" msgstr "" -#: config.py:628 config.py:634 +#: config.py:634 config.py:640 msgid "" "These are all of the plugin's configurable options\n" "and their default settings." msgstr "" -#: config.py:629 +#: config.py:635 msgid "Plugin Defaults" msgstr "" -#: config.py:645 dialogs.py:542 dialogs.py:645 +#: config.py:651 dialogs.py:544 dialogs.py:689 msgid "OK" msgstr "" -#: config.py:665 +#: config.py:671 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:670 +#: config.py:676 msgid "Add new/updated stories to \"Send to Device\" Reading List(s)." msgstr "" -#: config.py:671 +#: config.py:677 msgid "Automatically add new/updated stories to these lists in the %(rl)s plugin." msgstr "" -#: config.py:676 +#: config.py:682 msgid "\"Send to Device\" Reading Lists" msgstr "" -#: config.py:677 config.py:680 config.py:693 config.py:696 +#: config.py:683 config.py:686 config.py:699 config.py:702 msgid "When enabled, new/updated stories will be automatically added to these lists." msgstr "" -#: config.py:686 +#: config.py:692 msgid "Add new/updated stories to \"To Read\" Reading List(s)." msgstr "" -#: config.py:687 +#: config.py:693 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:692 +#: config.py:698 msgid "\"To Read\" Reading Lists" msgstr "" -#: config.py:702 +#: config.py:708 msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"." msgstr "" -#: config.py:703 +#: config.py:709 msgid "Menu option to remove from \"To Read\" lists will also add stories back to \"Send to Device\" Reading List(s)" msgstr "" -#: config.py:725 +#: config.py:731 msgid "The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFDL can run GC on new downloads and metadata updates. Pick a GC setting by site or Default." msgstr "" -#: config.py:743 config.py:747 config.py:760 +#: config.py:749 config.py:753 config.py:766 msgid "Default" msgstr "" -#: config.py:748 +#: config.py:754 msgid "On Metadata update, run %(gc)s with this setting, if not selected for specific site." msgstr "" -#: config.py:751 +#: config.py:757 msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories." msgstr "" -#: config.py:774 +#: config.py:780 msgid "Run %(gc)s Only on New Books" msgstr "" -#: config.py:775 +#: config.py:781 msgid "Default is to run GC any time the calibre metadata is updated." msgstr "" -#: config.py:779 +#: config.py:785 msgid "Allow %(gcset)s from %(pini)s to override" msgstr "" -#: config.py:780 +#: config.py:786 msgid "The %(pini)s parameter %(gcset)s allows you to choose a GC setting based on metadata rather than site, but it's much more complex.
%(gcset)s is ignored when this is off." msgstr "" -#: config.py:784 +#: config.py:790 msgid "Use calibre's Polish feature to inject/update the cover" msgstr "" -#: config.py:785 +#: config.py:791 msgid "Calibre's Polish feature will be used to inject or update the generated cover into the ebook, EPUB only." msgstr "" -#: config.py:799 +#: config.py:805 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:804 +#: config.py:810 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:810 +#: config.py:816 msgid "Which column and algorithm to use are configured in %(cp)s." msgstr "" -#: config.py:818 +#: config.py:824 msgid "Will overwrite word count from FFDL metadata if set to update the same custom column." msgstr "" -#: config.py:849 +#: config.py:855 msgid "These controls aren't plugin settings as such, but convenience buttons for setting Keyboard shortcuts and getting all the FanFictionDownLoader confirmation dialogs back again." msgstr "" -#: config.py:854 +#: config.py:860 msgid "Keyboard shortcuts..." msgstr "" -#: config.py:855 +#: config.py:861 msgid "Edit the keyboard shortcuts associated with this plugin" msgstr "" -#: config.py:859 +#: config.py:865 msgid "Reset disabled &confirmation dialogs" msgstr "" -#: config.py:860 +#: config.py:866 msgid "Reset all show me again dialogs for the FanFictionDownLoader plugin" msgstr "" -#: config.py:864 +#: config.py:870 msgid "&View library preferences..." msgstr "" -#: config.py:865 +#: config.py:871 msgid "View data stored in the library database for this plugin" msgstr "" -#: config.py:876 +#: config.py:882 msgid "Done" msgstr "" -#: config.py:877 +#: config.py:883 msgid "Confirmation dialogs have all been reset" msgstr "" -#: config.py:925 +#: config.py:931 msgid "Category" msgstr "" -#: config.py:926 +#: config.py:932 msgid "Genre" msgstr "" -#: config.py:927 +#: config.py:933 msgid "Language" msgstr "" -#: config.py:928 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354 +#: config.py:934 ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Status" msgstr "" -#: config.py:929 +#: config.py:935 msgid "Status:%(cmplt)s" msgstr "" -#: config.py:930 +#: config.py:936 msgid "Status:%(inprog)s" msgstr "" -#: config.py:931 config.py:1065 +#: config.py:937 config.py:1071 msgid "Series" msgstr "" -#: config.py:932 +#: config.py:938 msgid "Characters" msgstr "" -#: config.py:933 +#: config.py:939 msgid "Relationships" msgstr "" -#: config.py:934 +#: config.py:940 msgid "Published" msgstr "" -#: config.py:935 ffdl_plugin.py:1437 ffdl_plugin.py:1456 +#: config.py:941 ffdl_plugin.py:1441 ffdl_plugin.py:1460 msgid "Updated" msgstr "" -#: config.py:936 +#: config.py:942 msgid "Created" msgstr "" -#: config.py:937 +#: config.py:943 msgid "Rating" msgstr "" -#: config.py:938 +#: config.py:944 msgid "Warnings" msgstr "" -#: config.py:939 +#: config.py:945 msgid "Chapters" msgstr "" -#: config.py:940 +#: config.py:946 msgid "Words" msgstr "" -#: config.py:941 +#: config.py:947 msgid "Site" msgstr "" -#: config.py:942 +#: config.py:948 msgid "Story ID" msgstr "" -#: config.py:943 +#: config.py:949 msgid "Author ID" msgstr "" -#: config.py:944 +#: config.py:950 msgid "Extra Tags" msgstr "" -#: config.py:945 config.py:1057 dialogs.py:804 dialogs.py:900 -#: ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354 +#: config.py:951 config.py:1063 dialogs.py:848 dialogs.py:944 +#: ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Title" msgstr "" -#: config.py:946 +#: config.py:952 msgid "Story URL" msgstr "" -#: config.py:947 +#: config.py:953 msgid "Description" msgstr "" -#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1152 -#: ffdl_plugin.py:1324 ffdl_plugin.py:1354 +#: config.py:954 dialogs.py:848 dialogs.py:944 ffdl_plugin.py:1152 +#: ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Author" msgstr "" -#: config.py:949 +#: config.py:955 msgid "Author URL" msgstr "" -#: config.py:950 +#: config.py:956 msgid "File Format" msgstr "" -#: config.py:951 +#: config.py:957 msgid "File Extension" msgstr "" -#: config.py:952 +#: config.py:958 msgid "Site Abbrev" msgstr "" -#: config.py:953 +#: config.py:959 msgid "FFDL Version" msgstr "" -#: config.py:968 +#: config.py:974 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:993 +#: config.py:999 msgid "Update this %s column(%s) with..." msgstr "" -#: config.py:1003 +#: config.py:1009 msgid "Values that aren't valid for this enumeration column will be ignored." msgstr "" -#: config.py:1003 config.py:1005 +#: config.py:1009 config.py:1011 msgid "Metadata values valid for this type of column." msgstr "" -#: config.py:1008 config.py:1084 +#: config.py:1014 config.py:1090 msgid "New Only" msgstr "" -#: config.py:1009 +#: config.py:1015 msgid "" "Write to %s(%s) only for new\n" "books, not updates to existing books." msgstr "" -#: config.py:1020 +#: config.py:1026 msgid "Allow %(ccset)s from %(pini)s to override" msgstr "" -#: config.py:1021 +#: config.py:1027 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:1026 +#: config.py:1032 msgid "Special column:" msgstr "" -#: config.py:1031 +#: config.py:1037 msgid "Update/Overwrite Error Column:" msgstr "" -#: config.py:1032 +#: config.py:1038 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:1058 +#: config.py:1064 msgid "Author(s)" msgstr "" -#: config.py:1059 +#: config.py:1065 msgid "Publisher" msgstr "" -#: config.py:1060 +#: config.py:1066 msgid "Tags" msgstr "" -#: config.py:1061 +#: config.py:1067 msgid "Languages" msgstr "" -#: config.py:1062 +#: config.py:1068 msgid "Published Date" msgstr "" -#: config.py:1063 +#: config.py:1069 msgid "Date" msgstr "" -#: config.py:1064 +#: config.py:1070 msgid "Comments" msgstr "" -#: config.py:1066 +#: config.py:1072 msgid "Ids(url id only)" msgstr "" -#: config.py:1071 +#: config.py:1077 msgid "The standard calibre metadata columns are listed below. You may choose whether FFDL will fill each column automatically on updates or only for new books." msgstr "" -#: config.py:1085 +#: config.py:1091 msgid "" "Write to %s only for new\n" "books, not updates to existing books." msgstr "" -#: dialogs.py:69 +#: dialogs.py:71 msgid "Skip" msgstr "" -#: dialogs.py:70 +#: dialogs.py:72 msgid "Add New Book" msgstr "" -#: dialogs.py:71 +#: dialogs.py:73 msgid "Update EPUB if New Chapters" msgstr "" -#: dialogs.py:72 +#: dialogs.py:74 msgid "Update EPUB Always" msgstr "" -#: dialogs.py:73 +#: dialogs.py:75 msgid "Overwrite if Newer" msgstr "" -#: dialogs.py:74 +#: dialogs.py:76 msgid "Overwrite Always" msgstr "" -#: dialogs.py:75 +#: dialogs.py:77 msgid "Update Calibre Metadata Only" msgstr "" -#: dialogs.py:239 ffdl_plugin.py:89 +#: dialogs.py:241 ffdl_plugin.py:89 msgid "FanFictionDownLoader" msgstr "" -#: dialogs.py:256 dialogs.py:703 +#: dialogs.py:258 dialogs.py:747 msgid "Show Download Options" msgstr "" -#: dialogs.py:275 dialogs.py:720 +#: dialogs.py:277 dialogs.py:764 msgid "Output &Format:" msgstr "" -#: dialogs.py:283 dialogs.py:728 +#: dialogs.py:285 dialogs.py:772 msgid "Choose output format to create. May set default from plugin configuration." msgstr "" -#: dialogs.py:311 dialogs.py:745 +#: dialogs.py:313 dialogs.py:789 msgid "Update Calibre &Metadata?" msgstr "" -#: dialogs.py:312 dialogs.py:746 +#: dialogs.py:314 dialogs.py:790 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:318 dialogs.py:750 +#: dialogs.py:320 dialogs.py:794 msgid "Update EPUB Cover?" msgstr "" -#: dialogs.py:319 dialogs.py:751 +#: dialogs.py:321 dialogs.py:795 msgid "Update book cover image from site or defaults (if found) inside the EPUB when EPUB is updated." msgstr "" -#: dialogs.py:366 +#: dialogs.py:368 msgid "Story URL(s) for anthology, one per line:" msgstr "" -#: dialogs.py:367 +#: dialogs.py:369 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:368 +#: dialogs.py:370 msgid "If Story Already Exists in Anthology?" msgstr "" -#: dialogs.py:369 +#: dialogs.py:371 msgid "What to do if there's already an existing story with the same URL in the anthology." msgstr "" -#: dialogs.py:378 +#: dialogs.py:380 msgid "Story URL(s), one per line:" msgstr "" -#: dialogs.py:379 +#: dialogs.py:381 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:380 +#: dialogs.py:382 msgid "If Story Already Exists?" msgstr "" -#: dialogs.py:381 +#: dialogs.py:383 msgid "What to do if there's already an existing story with the same URL or title and author." msgstr "" -#: dialogs.py:481 +#: dialogs.py:483 msgid "For Individual Books" msgstr "" -#: dialogs.py:482 +#: dialogs.py:484 msgid "Get URLs and go to dialog for individual story downloads." msgstr "" -#: dialogs.py:486 +#: dialogs.py:488 msgid "For Anthology Epub" msgstr "" -#: dialogs.py:487 +#: dialogs.py:489 msgid "" "Get URLs and go to dialog for Anthology download.\n" "Requires %s plugin." msgstr "" -#: dialogs.py:492 dialogs.py:546 dialogs.py:573 +#: dialogs.py:494 dialogs.py:548 dialogs.py:575 msgid "Cancel" msgstr "" -#: dialogs.py:524 +#: dialogs.py:526 msgid "Password" msgstr "" -#: dialogs.py:525 +#: dialogs.py:527 msgid "Author requires a password for this story(%s)." msgstr "" -#: dialogs.py:530 +#: dialogs.py:532 msgid "User/Password" msgstr "" -#: dialogs.py:531 +#: dialogs.py:533 msgid "%s requires you to login to download this story." msgstr "" -#: dialogs.py:533 +#: dialogs.py:535 msgid "User:" msgstr "" -#: dialogs.py:537 +#: dialogs.py:539 msgid "Password:" msgstr "" -#: dialogs.py:568 +#: dialogs.py:570 msgid "Fetching metadata for stories..." msgstr "" -#: dialogs.py:569 +#: dialogs.py:571 msgid "Downloading metadata for stories" msgstr "" -#: dialogs.py:570 +#: dialogs.py:572 msgid "Fetched metadata for" msgstr "" -#: dialogs.py:640 ffdl_plugin.py:325 +#: dialogs.py:599 +msgid " - %s estimated until done" +msgstr "" + +#: dialogs.py:649 +msgid "%d day" +msgstr "" + +#: dialogs.py:649 +msgid "%d days" +msgstr "" + +#: dialogs.py:650 +msgid "%d hour" +msgstr "" + +#: dialogs.py:650 +msgid "%d hours" +msgstr "" + +#: dialogs.py:651 +msgid "%d minute" +msgstr "" + +#: dialogs.py:651 +msgid "%d minutes" +msgstr "" + +#: dialogs.py:652 +msgid "%d second" +msgstr "" + +#: dialogs.py:652 +msgid "%d seconds" +msgstr "" + +#: dialogs.py:667 +msgid "less than 1 second" +msgstr "" + +#: dialogs.py:684 ffdl_plugin.py:331 msgid "About FanFictionDownLoader" msgstr "" -#: dialogs.py:694 +#: dialogs.py:738 msgid "Remove selected books from the list" msgstr "" -#: dialogs.py:733 +#: dialogs.py:777 msgid "Update Mode:" msgstr "" -#: dialogs.py:736 +#: dialogs.py:780 msgid "What sort of update to perform. May set default from plugin configuration." msgstr "" -#: dialogs.py:804 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354 +#: dialogs.py:848 ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Comment" msgstr "" -#: dialogs.py:872 +#: dialogs.py:916 msgid "Are you sure you want to remove this book from the list?" msgstr "" -#: dialogs.py:874 +#: dialogs.py:918 msgid "Are you sure you want to remove the selected %d books from the list?" msgstr "" -#: dialogs.py:900 +#: dialogs.py:944 msgid "Note" msgstr "" -#: dialogs.py:939 +#: dialogs.py:983 msgid "Select or Edit Reject Note." msgstr "" -#: dialogs.py:947 +#: dialogs.py:991 msgid "Are you sure you want to remove this URL from the list?" msgstr "" -#: dialogs.py:949 +#: dialogs.py:993 msgid "Are you sure you want to remove the %d selected URLs from the list?" msgstr "" -#: dialogs.py:967 +#: dialogs.py:1011 msgid "List of Books to Reject" msgstr "" -#: dialogs.py:980 +#: dialogs.py:1024 msgid "FFDL will remember these URLs and display the note and offer to reject them if you try to download them again later." msgstr "" -#: dialogs.py:994 +#: dialogs.py:1038 msgid "Remove selected URL(s) from the list" msgstr "" -#: dialogs.py:1009 dialogs.py:1013 +#: dialogs.py:1053 dialogs.py:1057 msgid "This will be added to whatever note you've set for each URL above." msgstr "" -#: dialogs.py:1022 +#: dialogs.py:1066 msgid "Delete Books (including books without FanFiction URLs)?" msgstr "" -#: dialogs.py:1023 +#: dialogs.py:1067 msgid "Delete the selected books after adding them to the Rejected URLs list." msgstr "" @@ -945,79 +993,79 @@ msgstr "" msgid "FanFictionDL" msgstr "" -#: ffdl_plugin.py:243 +#: ffdl_plugin.py:249 msgid "&Add New from URL(s)" msgstr "" -#: ffdl_plugin.py:245 +#: ffdl_plugin.py:251 msgid "Add New FanFiction Book(s) from URL(s)" msgstr "" -#: ffdl_plugin.py:248 +#: ffdl_plugin.py:254 msgid "&Update Existing FanFiction Book(s)" msgstr "" -#: ffdl_plugin.py:254 +#: ffdl_plugin.py:260 msgid "Get Story URLs to Download from Web Page" msgstr "" -#: ffdl_plugin.py:258 +#: ffdl_plugin.py:264 msgid "&Make Anthology Epub Manually from URL(s)" msgstr "" -#: ffdl_plugin.py:260 +#: ffdl_plugin.py:266 msgid "Make FanFiction Anthology Epub Manually from URL(s)" msgstr "" -#: ffdl_plugin.py:263 +#: ffdl_plugin.py:269 msgid "&Update Anthology Epub" msgstr "" -#: ffdl_plugin.py:265 +#: ffdl_plugin.py:271 msgid "Update FanFiction Anthology Epub" msgstr "" -#: ffdl_plugin.py:273 +#: ffdl_plugin.py:279 msgid "Add to \"To Read\" and \"Send to Device\" Lists" msgstr "" -#: ffdl_plugin.py:275 +#: ffdl_plugin.py:281 msgid "Remove from \"To Read\" and add to \"Send to Device\" Lists" msgstr "" -#: ffdl_plugin.py:277 ffdl_plugin.py:282 +#: ffdl_plugin.py:283 ffdl_plugin.py:288 msgid "Remove from \"To Read\" Lists" msgstr "" -#: ffdl_plugin.py:279 +#: ffdl_plugin.py:285 msgid "Add Selected to \"Send to Device\" Lists" msgstr "" -#: ffdl_plugin.py:281 +#: ffdl_plugin.py:287 msgid "Add to \"To Read\" Lists" msgstr "" -#: ffdl_plugin.py:297 +#: ffdl_plugin.py:303 msgid "Get URLs from Selected Books" msgstr "" -#: ffdl_plugin.py:303 ffdl_plugin.py:397 +#: ffdl_plugin.py:309 ffdl_plugin.py:397 msgid "Get Story URLs from Web Page" msgstr "" -#: ffdl_plugin.py:308 +#: ffdl_plugin.py:314 msgid "Reject Selected Books" msgstr "" -#: ffdl_plugin.py:316 +#: ffdl_plugin.py:322 msgid "&Configure Plugin" msgstr "" -#: ffdl_plugin.py:319 +#: ffdl_plugin.py:325 msgid "Configure FanFictionDownLoader" msgstr "" -#: ffdl_plugin.py:322 +#: ffdl_plugin.py:328 msgid "About Plugin" msgstr "" @@ -1301,7 +1349,7 @@ msgstr "" msgid "Already contains %d chapters." msgstr "" -#: ffdl_plugin.py:1054 jobs.py:199 +#: ffdl_plugin.py:1054 jobs.py:198 msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update." msgstr "" @@ -1317,7 +1365,7 @@ msgstr "" msgid "None of the %d URLs/stories given can be/need to be downloaded." msgstr "" -#: ffdl_plugin.py:1149 ffdl_plugin.py:1320 ffdl_plugin.py:1350 +#: ffdl_plugin.py:1149 ffdl_plugin.py:1324 ffdl_plugin.py:1354 msgid "See log for details." msgstr "" @@ -1325,7 +1373,7 @@ msgstr "" msgid "Proceed with updating your library(Error Column, if configured)?" msgstr "" -#: ffdl_plugin.py:1157 ffdl_plugin.py:1332 +#: ffdl_plugin.py:1157 ffdl_plugin.py:1336 msgid "Bad" msgstr "" @@ -1333,187 +1381,187 @@ msgstr "" msgid "FFDL download ended" msgstr "" -#: ffdl_plugin.py:1165 ffdl_plugin.py:1375 +#: ffdl_plugin.py:1165 ffdl_plugin.py:1379 msgid "FFDL log" msgstr "" -#: ffdl_plugin.py:1181 +#: ffdl_plugin.py:1185 msgid "Download FanFiction Book" msgstr "" -#: ffdl_plugin.py:1188 +#: ffdl_plugin.py:1192 msgid "Starting %d FanFictionDownLoads" msgstr "" -#: ffdl_plugin.py:1218 +#: ffdl_plugin.py:1222 msgid "Story Details:" msgstr "" -#: ffdl_plugin.py:1221 +#: ffdl_plugin.py:1225 msgid "Error Updating Metadata" msgstr "" -#: ffdl_plugin.py:1222 +#: ffdl_plugin.py:1226 msgid "An error has occurred while FFDL was updating calibre's metadata for %s." msgstr "" -#: ffdl_plugin.py:1223 +#: ffdl_plugin.py:1227 msgid "The ebook has been updated, but the metadata has not." msgstr "" -#: ffdl_plugin.py:1275 +#: ffdl_plugin.py:1279 msgid "Finished Adding/Updating %d books." msgstr "" -#: ffdl_plugin.py:1283 +#: ffdl_plugin.py:1287 msgid "Starting auto conversion of %d books." msgstr "" -#: ffdl_plugin.py:1304 +#: ffdl_plugin.py:1308 msgid "No Good Stories for Anthology" msgstr "" -#: ffdl_plugin.py:1305 +#: ffdl_plugin.py:1309 msgid "No good stories/updates where downloaded, Anthology creation/update aborted." msgstr "" -#: ffdl_plugin.py:1310 ffdl_plugin.py:1349 +#: ffdl_plugin.py:1314 ffdl_plugin.py:1353 msgid "FFDL found %s good and %s bad updates." msgstr "" -#: ffdl_plugin.py:1317 +#: ffdl_plugin.py:1321 msgid "Are you sure you want to continue with creating/updating this Anthology?" msgstr "" -#: ffdl_plugin.py:1318 +#: ffdl_plugin.py:1322 msgid "Any updates that failed will not be included in the Anthology." msgstr "" -#: ffdl_plugin.py:1319 +#: ffdl_plugin.py:1323 msgid "However, if there's an older version, it will still be included." msgstr "" -#: ffdl_plugin.py:1322 +#: ffdl_plugin.py:1326 msgid "Proceed with updating this anthology and your library?" msgstr "" -#: ffdl_plugin.py:1330 +#: ffdl_plugin.py:1334 msgid "Good" msgstr "" -#: ffdl_plugin.py:1351 +#: ffdl_plugin.py:1355 msgid "Proceed with updating your library?" msgstr "" -#: ffdl_plugin.py:1375 +#: ffdl_plugin.py:1379 msgid "FFDL download complete" msgstr "" -#: ffdl_plugin.py:1388 +#: ffdl_plugin.py:1392 msgid "Merging %s books." msgstr "" -#: ffdl_plugin.py:1428 +#: ffdl_plugin.py:1432 msgid "FFDL Adding/Updating books." msgstr "" -#: ffdl_plugin.py:1435 +#: ffdl_plugin.py:1439 msgid "Updating calibre for FanFiction stories..." msgstr "" -#: ffdl_plugin.py:1436 +#: ffdl_plugin.py:1440 msgid "Update calibre for FanFiction stories" msgstr "" -#: ffdl_plugin.py:1445 +#: ffdl_plugin.py:1449 msgid "Adding/Updating %s BAD books." msgstr "" -#: ffdl_plugin.py:1454 +#: ffdl_plugin.py:1458 msgid "Updating calibre for BAD FanFiction stories..." msgstr "" -#: ffdl_plugin.py:1455 +#: ffdl_plugin.py:1459 msgid "Update calibre for BAD FanFiction stories" msgstr "" -#: ffdl_plugin.py:1481 +#: ffdl_plugin.py:1485 msgid "Adding format to book failed for some reason..." msgstr "" -#: ffdl_plugin.py:1484 +#: ffdl_plugin.py:1488 msgid "Error" msgstr "" -#: ffdl_plugin.py:1757 +#: ffdl_plugin.py:1764 msgid "You configured FanFictionDownLoader to automatically update Reading Lists, but you don't have the %s plugin installed anymore?" msgstr "" -#: ffdl_plugin.py:1769 +#: ffdl_plugin.py:1776 msgid "You configured FanFictionDownLoader to automatically update \"To Read\" Reading Lists, but you don't have any lists set?" msgstr "" -#: ffdl_plugin.py:1779 ffdl_plugin.py:1797 +#: ffdl_plugin.py:1786 ffdl_plugin.py:1804 msgid "You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?" msgstr "" -#: ffdl_plugin.py:1785 +#: ffdl_plugin.py:1792 msgid "You configured FanFictionDownLoader to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?" msgstr "" -#: ffdl_plugin.py:1906 +#: ffdl_plugin.py:1913 msgid "No story URL found." msgstr "" -#: ffdl_plugin.py:1909 +#: ffdl_plugin.py:1916 msgid "Not Found" msgstr "" -#: ffdl_plugin.py:1915 +#: ffdl_plugin.py:1922 msgid "URL is not a valid story URL." msgstr "" -#: ffdl_plugin.py:1918 +#: ffdl_plugin.py:1925 msgid "Bad URL" msgstr "" -#: ffdl_plugin.py:2054 ffdl_plugin.py:2057 +#: ffdl_plugin.py:2061 ffdl_plugin.py:2064 msgid "Anthology containing:" msgstr "" -#: ffdl_plugin.py:2055 +#: ffdl_plugin.py:2062 msgid "%s by %s" msgstr "" -#: ffdl_plugin.py:2077 +#: ffdl_plugin.py:2084 msgid " Anthology" msgstr "" -#: ffdl_plugin.py:2114 +#: ffdl_plugin.py:2121 msgid "(was set, removed for security)" msgstr "" -#: jobs.py:73 +#: jobs.py:60 msgid "Downloading FanFiction Stories" msgstr "" -#: jobs.py:95 +#: jobs.py:82 msgid "Successful:" msgstr "" -#: jobs.py:97 +#: jobs.py:84 msgid "Unsuccessful:" msgstr "" -#: jobs.py:111 +#: jobs.py:110 msgid "Download started..." msgstr "" -#: jobs.py:193 +#: jobs.py:192 msgid "Already contains %d chapters. Reuse as is." msgstr "" -#: jobs.py:210 +#: jobs.py:209 msgid "Update %s completed, added %s chapters for %s total." msgstr "" diff --git a/calibre-plugin/translations/zz.po b/calibre-plugin/translations/zz.po index 0f1a9572..bbedb87c 100644 --- a/calibre-plugin/translations/zz.po +++ b/calibre-plugin/translations/zz.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: FanFictionDownLoader 1.8\n" -"POT-Creation-Date: 2014-07-14 10:52+Central Daylight Time\n" -"PO-Revision-Date: 2014-08-01 12:43-0600\n" +"POT-Creation-Date: 2014-12-24 12:28+Central Standard Time\n" +"PO-Revision-Date: 2014-12-24 12:31-0600\n" "Last-Translator: Jim Miller \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -19,7 +19,7 @@ msgstr "" msgid "UI plugin to download FanFiction stories from various sites." msgstr "zzUI plugin to download FanFiction stories from various sites." -#: __init__.py:109 +#: __init__.py:116 msgid "" "Path to the calibre library. Default is to use the path stored in the " "settings." @@ -27,31 +27,31 @@ msgstr "" "zzPath to the calibre library. Default is to use the path stored in the " "settings." -#: config.py:161 +#: config.py:176 msgid "FAQs" msgstr "zzFAQs" -#: config.py:161 +#: config.py:176 msgid "List of Supported Sites" msgstr "zzList of Supported Sites" -#: config.py:175 +#: config.py:190 msgid "Basic" msgstr "zzBasic" -#: config.py:196 +#: config.py:211 msgid "Standard Columns" msgstr "zzStandard Columns" -#: config.py:199 +#: config.py:214 msgid "Custom Columns" msgstr "zzCustom Columns" -#: config.py:202 +#: config.py:217 msgid "Other" msgstr "zzOther" -#: config.py:323 +#: config.py:339 msgid "" "These settings control the basic features of the plugin--downloading " "FanFiction." @@ -59,11 +59,11 @@ msgstr "" "zzThese settings control the basic features of the plugin--downloading " "FanFiction." -#: config.py:327 +#: config.py:343 msgid "Defaults Options on Download" msgstr "zzDefaults Options on Download" -#: config.py:331 +#: config.py:347 msgid "" "On each download, FFDL offers an option to select the output format.
This sets what that option will default to." @@ -71,11 +71,11 @@ msgstr "" "zzOn each download, FFDL offers an option to select the output format.
This sets what that option will default to." -#: config.py:333 +#: config.py:349 msgid "Default Output &Format:" msgstr "zzDefault Output &Format:" -#: config.py:348 +#: config.py:364 msgid "" "On each download, FFDL offers an option of what happens if that story " "already exists.
This sets what that option will default to." @@ -83,15 +83,15 @@ msgstr "" "zzOn each download, FFDL offers an option of what happens if that story " "already exists.
This sets what that option will default to." -#: config.py:350 +#: config.py:366 msgid "Default If Story Already Exists?" msgstr "zzDefault If Story Already Exists?" -#: config.py:364 +#: config.py:380 msgid "Default Update Calibre &Metadata?" msgstr "zzDefault Update Calibre &Metadata?" -#: config.py:365 +#: config.py:381 msgid "" "On each download, FFDL offers an option to update Calibre's metadata (title, " "author, URL, tags, custom columns, etc) from the web site.
This sets " @@ -103,11 +103,11 @@ msgstr "" ">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." -#: config.py:369 +#: config.py:385 msgid "Default Update EPUB Cover when Updating EPUB?" msgstr "zzDefault Update EPUB Cover when Updating EPUB?" -#: config.py:370 +#: config.py:386 msgid "" "On each download, FFDL offers an option to update the book cover image " "inside the EPUB from the web site when the EPUB is updated.
This " @@ -117,11 +117,11 @@ msgstr "" "inside the EPUB from the web site when the EPUB is updated.
This " "sets whether that will default to on or off." -#: config.py:374 +#: config.py:390 msgid "Smarten Punctuation (EPUB only)" msgstr "zzSmarten Punctuation (EPUB only)" -#: config.py:375 +#: config.py:391 msgid "" "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB " "download and update." @@ -129,15 +129,15 @@ msgstr "" "zzRun Smarten Punctuation from Calibre's Polish Book feature on each EPUB " "download and update." -#: config.py:380 +#: config.py:396 msgid "Updating Calibre Options" msgstr "zzUpdating Calibre Options" -#: config.py:384 +#: config.py:400 msgid "Delete other existing formats?" msgstr "zzDelete other existing formats?" -#: config.py:385 +#: config.py:401 msgid "" "Check this to automatically delete all other ebook formats when updating an " "existing book.\n" @@ -147,11 +147,11 @@ msgstr "" "an existing book.\n" "Handy if you have both a Nook(epub) and Kindle(mobi), for example." -#: config.py:389 +#: config.py:405 msgid "Update Calibre Cover when Updating Metadata?" msgstr "zzUpdate Calibre Cover when Updating Metadata?" -#: config.py:390 +#: config.py:406 msgid "" "Update calibre book cover image from EPUB when metadata is updated. (EPUB " "only.)\n" @@ -161,11 +161,11 @@ msgstr "" "only.)\n" "Doesn't go looking for new images on 'Update Calibre Metadata Only'." -#: config.py:394 +#: config.py:410 msgid "Keep Existing Tags when Updating Metadata?" msgstr "zzKeep Existing Tags when Updating Metadata?" -#: config.py:395 +#: config.py:411 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" @@ -179,11 +179,11 @@ msgstr "" "(If Tags is set to 'New Only' in the Standard Columns tab, this has no " "effect.)" -#: config.py:399 +#: config.py:415 msgid "Force Author into Author Sort?" msgstr "zzForce Author into Author Sort?" -#: config.py:400 +#: config.py:416 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 " @@ -193,11 +193,11 @@ msgstr "" "If not checked, calibre will apply it's built in algorithm which makes 'Bob " "Smith' sort as 'Smith, Bob', etc." -#: config.py:404 +#: config.py:420 msgid "Force Title into Title Sort?" msgstr "zzForce Title into Title Sort?" -#: config.py:405 +#: config.py:421 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 " @@ -207,11 +207,11 @@ msgstr "" "If not checked, calibre will apply it's built in algorithm which makes 'The " "Title' sort as 'Title, The', etc." -#: config.py:409 +#: config.py:425 msgid "Check for existing Series Anthology books?" msgstr "zzCheck for existing Series Anthology books?" -#: config.py:410 +#: config.py:426 msgid "" "Check for existings Series Anthology books using each new story's series URL " "before downloading.\n" @@ -221,11 +221,11 @@ msgstr "" "URL before downloading.\n" "Offer to skip downloading if a Series Anthology is found." -#: config.py:414 +#: config.py:430 msgid "Check for changed Story URL?" msgstr "zzCheck for changed Story URL?" -#: config.py:415 +#: config.py:431 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." @@ -233,11 +233,11 @@ msgstr "" "zzWarn you if an update will change the URL of an existing book.\n" "fanfiction.net URLs will change from http to https silently." -#: config.py:419 +#: config.py:435 msgid "Search EPUB text for Story URL?" msgstr "zzSearch EPUB text for Story URL?" -#: config.py:420 +#: config.py:436 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" @@ -247,11 +247,11 @@ msgstr "" "Somewhat risky, could find wrong URL depending on EPUB content.\n" "Also finds and corrects bad ffnet URLs from ficsaver.com files." -#: config.py:424 +#: config.py:440 msgid "Mark added/updated books when finished?" msgstr "zzMark added/updated books when finished?" -#: config.py:425 +#: config.py:441 msgid "" "Mark added/updated books when finished. Use with option below.\n" "You can also manually search for 'marked:ffdl_success'.\n" @@ -261,11 +261,11 @@ msgstr "" "You can also manually search for 'marked:ffdl_success'.\n" "'marked:ffdl_failed' is also available, or search 'marked:ffdl' for both." -#: config.py:429 +#: config.py:445 msgid "Show Marked books when finished?" msgstr "zzShow Marked books when finished?" -#: config.py:430 +#: config.py:446 msgid "" "Show Marked added/updated books only when finished.\n" "You can also manually search for 'marked:ffdl_success'.\n" @@ -275,11 +275,11 @@ msgstr "" "You can also manually search for 'marked:ffdl_success'.\n" "'marked:ffdl_failed' is also available, or search 'marked:ffdl' for both." -#: config.py:434 +#: config.py:450 msgid "Automatically Convert new/update books?" msgstr "zzAutomatically Convert new/update books?" -#: config.py:435 +#: config.py:451 msgid "" "Automatically call calibre's Convert for new/update books.\n" "Converts to the current output format as chosen in calibre's\n" @@ -289,23 +289,32 @@ msgstr "" "Converts to the current output format as chosen in calibre's\n" "Preferences->Behavior settings." -#: config.py:439 +#: config.py:455 +msgid "Show estimated time left?" +msgstr "zzShow estimated time left?" + +#: config.py:456 +msgid "When a Progress Bar is shown, show a rough estimate of the time left." +msgstr "" +"zzWhen a Progress Bar is shown, show a rough estimate of the time left." + +#: config.py:460 msgid "GUI Options" msgstr "zzGUI Options" -#: config.py:443 +#: config.py:464 msgid "Take URLs from Clipboard?" msgstr "zzTake URLs from Clipboard?" -#: config.py:444 +#: config.py:465 msgid "Prefill URLs from valid URLs in Clipboard when Adding New." msgstr "zzPrefill URLs from valid URLs in Clipboard when Adding New." -#: config.py:448 +#: config.py:469 msgid "Default to Update when books selected?" msgstr "zzDefault to Update when books selected?" -#: config.py:449 +#: config.py:470 msgid "" "The top FanFictionDownLoader plugin button will start Update if\n" "books are selected. If unchecked, it will always bring up 'Add New'." @@ -313,11 +322,11 @@ msgstr "" "zzThe top FanFictionDownLoader plugin button will start Update if\n" "books are selected. If unchecked, it will always bring up 'Add New'." -#: config.py:453 +#: config.py:474 msgid "Keep 'Add New from URL(s)' dialog on top?" msgstr "zzKeep 'Add New from URL(s)' dialog on top?" -#: config.py:454 +#: config.py:475 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." @@ -325,15 +334,15 @@ msgstr "" "zzInstructs 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." -#: config.py:458 +#: config.py:479 msgid "Misc Options" msgstr "zzMisc Options" -#: config.py:463 +#: config.py:484 msgid "Include images in EPUBs?" msgstr "zzInclude images in EPUBs?" -#: config.py:464 +#: config.py:485 msgid "" "Download and include images in EPUB stories. This is equivalent to adding:" "%(imgset)s ...to the top of %(pini)s. Your settings in %(pini)s will " @@ -343,11 +352,11 @@ msgstr "" "%(imgset)s ...to the top of %(pini)s. Your settings in %(pini)s will " "override this." -#: config.py:468 +#: config.py:489 msgid "Inject calibre Series when none found?" msgstr "zzInject calibre Series when none found?" -#: config.py:469 +#: config.py:490 msgid "" "If no series is found, inject the calibre series (if there is one) so it " "appears on the FFDL title page(not cover)." @@ -355,63 +364,63 @@ msgstr "" "zzIf no series is found, inject the calibre series (if there is one) so it " "appears on the FFDL title page(not cover)." -#: config.py:473 +#: config.py:494 msgid "Reject List" msgstr "zzReject List" -#: config.py:477 +#: config.py:498 msgid "Edit Reject URL List" msgstr "zzEdit Reject URL List" -#: config.py:478 +#: config.py:499 msgid "Edit list of URLs FFDL will automatically Reject." msgstr "zzEdit list of URLs FFDL will automatically Reject." -#: config.py:482 config.py:556 +#: config.py:503 config.py:577 msgid "Add Reject URLs" msgstr "zzAdd Reject URLs" -#: config.py:483 +#: config.py:504 msgid "Add additional URLs to Reject as text." msgstr "zzAdd additional URLs to Reject as text." -#: config.py:487 +#: config.py:508 msgid "Edit Reject Reasons List" msgstr "zzEdit Reject Reasons List" -#: config.py:488 config.py:547 +#: config.py:509 config.py:568 msgid "Customize the Reasons presented when Rejecting URLs" msgstr "zzCustomize the Reasons presented when Rejecting URLs" -#: config.py:492 +#: config.py:513 msgid "Reject Without Confirmation?" msgstr "zzReject Without Confirmation?" -#: config.py:493 +#: config.py:514 msgid "Always reject URLs on the Reject List without stopping and asking." msgstr "zzAlways reject URLs on the Reject List without stopping and asking." -#: config.py:531 +#: config.py:552 msgid "Edit Reject URLs List" msgstr "zzEdit Reject URLs List" -#: config.py:545 +#: config.py:566 msgid "Reject Reasons" msgstr "zzReject Reasons" -#: config.py:546 +#: config.py:567 msgid "Customize Reject List Reasons" msgstr "zzCustomize Reject List Reasons" -#: config.py:554 +#: config.py:575 msgid "Reason why I rejected it" msgstr "zzReason why I rejected it" -#: config.py:554 +#: config.py:575 msgid "Title by Author" msgstr "zzTitle by Author" -#: config.py:557 +#: config.py:578 msgid "" "Add Reject URLs. Use: http://...,note or http://...,title by " "author - note
Invalid story URLs will be ignored." @@ -419,7 +428,7 @@ msgstr "" "zzAdd Reject URLs. Use: http://...,note or http://...,title by " "author - note
Invalid story URLs will be ignored." -#: config.py:558 +#: config.py:579 msgid "" "One URL per line:\n" "http://...,note\n" @@ -429,11 +438,11 @@ msgstr "" "http://...,note\n" "http://...,title by author - note" -#: config.py:560 dialogs.py:1031 +#: config.py:581 dialogs.py:1056 msgid "Add this reason to all URLs added:" msgstr "zzAdd this reason to all URLs added:" -#: config.py:575 +#: config.py:596 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 " @@ -443,11 +452,11 @@ msgstr "" "displayed inside the ebook as well as let you set %(isa)s and %(u)s/%(p)s " "for different sites." -#: config.py:593 +#: config.py:614 msgid "View Defaults" msgstr "zzView Defaults" -#: config.py:594 +#: config.py:615 msgid "" "View all of the plugin's configurable settings\n" "and their default settings." @@ -455,11 +464,11 @@ msgstr "" "zzView all of the plugin's configurable settings\n" "and their default settings." -#: config.py:612 +#: config.py:633 msgid "Plugin Defaults (%s) (Read-Only)" msgstr "zzPlugin Defaults (%s) (Read-Only)" -#: config.py:613 config.py:619 +#: config.py:634 config.py:640 msgid "" "These are all of the plugin's configurable options\n" "and their default settings." @@ -467,16 +476,16 @@ msgstr "" "zzThese are all of the plugin's configurable options\n" "and their default settings." -#: config.py:614 +#: config.py:635 msgid "Plugin Defaults" msgstr "zzPlugin Defaults" -#: config.py:630 dialogs.py:555 dialogs.py:658 +#: config.py:651 dialogs.py:544 dialogs.py:689 msgid "OK" msgstr "zzOK" # %(rl)s = Reading List. Keep as is. -#: config.py:650 +#: config.py:671 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 " @@ -486,34 +495,34 @@ msgstr "" "automatically send to devices and change custom columns. You have to create " "and configure the lists in %(rl)s to be useful." -#: config.py:655 +#: config.py:676 msgid "Add new/updated stories to \"Send to Device\" Reading List(s)." msgstr "zzAdd new/updated stories to \"Send to Device\" Reading List(s)." # %(rl)s = Reading List. Keep as is. -#: config.py:656 +#: config.py:677 msgid "" "Automatically add new/updated stories to these lists in the %(rl)s plugin." msgstr "" "zzAutomatically add new/updated stories to these lists in the %(rl)s plugin." -#: config.py:661 +#: config.py:682 msgid "\"Send to Device\" Reading Lists" msgstr "zz\"Send to Device\" Reading Lists" -#: config.py:662 config.py:665 config.py:678 config.py:681 +#: config.py:683 config.py:686 config.py:699 config.py:702 msgid "" "When enabled, new/updated stories will be automatically added to these lists." msgstr "" "zzWhen enabled, new/updated stories will be automatically added to these " "lists." -#: config.py:671 +#: config.py:692 msgid "Add new/updated stories to \"To Read\" Reading List(s)." msgstr "zzAdd new/updated stories to \"To Read\" Reading List(s)." # %(rl)s = Reading List. Keep as is. -#: config.py:672 +#: config.py:693 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." @@ -522,18 +531,18 @@ msgstr "" "plugin.\n" "Also offers menu option to remove stories from the \"To Read\" lists." -#: config.py:677 +#: config.py:698 msgid "\"To Read\" Reading Lists" msgstr "zz\"To Read\" Reading Lists" -#: config.py:687 +#: config.py:708 msgid "" "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"." msgstr "" "zzAdd stories back to \"Send to Device\" Reading List(s) when marked \"Read" "\"." -#: config.py:688 +#: config.py:709 msgid "" "Menu option to remove from \"To Read\" lists will also add stories back to " "\"Send to Device\" Reading List(s)" @@ -542,7 +551,7 @@ msgstr "" "\"Send to Device\" Reading List(s)" # %(gc)s = Generate Cover. Keep as is. -#: config.py:710 +#: config.py:731 msgid "" "The %(gc)s plugin can create cover images for books using various metadata " "and configurations. If you have GC installed, FFDL can run GC on new " @@ -552,12 +561,12 @@ msgstr "" "and configurations. If you have GC installed, FFDL can run GC on new " "downloads and metadata updates. Pick a GC setting by site or Default." -#: config.py:728 config.py:732 config.py:745 +#: config.py:749 config.py:753 config.py:766 msgid "Default" msgstr "zzDefault" # %(gc)s = Generate Cover. Keep as is. -#: config.py:733 +#: config.py:754 msgid "" "On Metadata update, run %(gc)s with this setting, if not selected for " "specific site." @@ -566,25 +575,25 @@ msgstr "" "specific site." # %(gc)s = Generate Cover. Keep as is. -#: config.py:736 +#: config.py:757 msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories." msgstr "" "zzOn Metadata update, run %(gc)s with this setting for %(site)s stories." # %(gc)s = Generate Cover. Keep as is. -#: config.py:759 +#: config.py:780 msgid "Run %(gc)s Only on New Books" msgstr "zzRun %(gc)s Only on New Books" -#: config.py:760 +#: config.py:781 msgid "Default is to run GC any time the calibre metadata is updated." msgstr "zzDefault is to run GC any time the calibre metadata is updated." -#: config.py:764 +#: config.py:785 msgid "Allow %(gcset)s from %(pini)s to override" msgstr "zzAllow %(gcset)s from %(pini)s to override" -#: config.py:765 +#: config.py:786 msgid "" "The %(pini)s parameter %(gcset)s allows you to choose a GC setting based on " "metadata rather than site, but it's much more complex.
%(gcset)s is " @@ -594,11 +603,11 @@ msgstr "" "on metadata rather than site, but it's much more complex.
%(gcset)s is " "ignored when this is off." -#: config.py:769 +#: config.py:790 msgid "Use calibre's Polish feature to inject/update the cover" msgstr "zzUse calibre's Polish feature to inject/update the cover" -#: config.py:770 +#: config.py:791 msgid "" "Calibre's Polish feature will be used to inject or update the generated " "cover into the ebook, EPUB only." @@ -606,7 +615,7 @@ msgstr "" "zzCalibre's Polish feature will be used to inject or update the generated " "cover into the ebook, EPUB only." -#: config.py:784 +#: config.py:805 msgid "" "These settings provide integration with the %(cp)s Plugin. %(cp)s can " "automatically update custom columns with page, word and reading level " @@ -616,7 +625,7 @@ msgstr "" "automatically update custom columns with page, word and reading level " "statistics. You have to create and configure the columns in %(cp)s first." -#: config.py:789 +#: config.py:810 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." @@ -624,11 +633,11 @@ msgstr "" "zzIf 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." -#: config.py:795 +#: config.py:816 msgid "Which column and algorithm to use are configured in %(cp)s." msgstr "zzWhich column and algorithm to use are configured in %(cp)s." -#: config.py:803 +#: config.py:824 msgid "" "Will overwrite word count from FFDL metadata if set to update the same " "custom column." @@ -636,7 +645,7 @@ msgstr "" "zzWill overwrite word count from FFDL metadata if set to update the same " "custom column." -#: config.py:834 +#: config.py:855 msgid "" "These controls aren't plugin settings as such, but convenience buttons for " "setting Keyboard shortcuts and getting all the FanFictionDownLoader " @@ -646,157 +655,157 @@ msgstr "" "setting Keyboard shortcuts and getting all the FanFictionDownLoader " "confirmation dialogs back again." -#: config.py:839 +#: config.py:860 msgid "Keyboard shortcuts..." msgstr "zzKeyboard shortcuts..." -#: config.py:840 +#: config.py:861 msgid "Edit the keyboard shortcuts associated with this plugin" msgstr "zzEdit the keyboard shortcuts associated with this plugin" -#: config.py:844 +#: config.py:865 msgid "Reset disabled &confirmation dialogs" msgstr "zzReset disabled &confirmation dialogs" -#: config.py:845 +#: config.py:866 msgid "Reset all show me again dialogs for the FanFictionDownLoader plugin" msgstr "zzReset all show me again dialogs for the FanFictionDownLoader plugin" -#: config.py:849 +#: config.py:870 msgid "&View library preferences..." msgstr "zz&View library preferences..." -#: config.py:850 +#: config.py:871 msgid "View data stored in the library database for this plugin" msgstr "zzView data stored in the library database for this plugin" -#: config.py:861 +#: config.py:882 msgid "Done" msgstr "zzDone" -#: config.py:862 +#: config.py:883 msgid "Confirmation dialogs have all been reset" msgstr "zzConfirmation dialogs have all been reset" -#: config.py:910 +#: config.py:931 msgid "Category" msgstr "zzCategory" -#: config.py:911 +#: config.py:932 msgid "Genre" msgstr "zzGenre" -#: config.py:912 +#: config.py:933 msgid "Language" msgstr "zzLanguage" -#: config.py:913 ffdl_plugin.py:1126 ffdl_plugin.py:1290 ffdl_plugin.py:1320 +#: config.py:934 ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Status" msgstr "zzStatus" -#: config.py:914 +#: config.py:935 msgid "Status:%(cmplt)s" msgstr "zzStatus:%(cmplt)s" -#: config.py:915 +#: config.py:936 msgid "Status:%(inprog)s" msgstr "zzStatus:%(inprog)s" -#: config.py:916 config.py:1050 +#: config.py:937 config.py:1071 msgid "Series" msgstr "zzSeries" -#: config.py:917 +#: config.py:938 msgid "Characters" msgstr "zzCharacters" -#: config.py:918 +#: config.py:939 msgid "Relationships" msgstr "zzRelationships" -#: config.py:919 +#: config.py:940 msgid "Published" msgstr "zzPublished" -#: config.py:920 ffdl_plugin.py:1403 ffdl_plugin.py:1422 +#: config.py:941 ffdl_plugin.py:1441 ffdl_plugin.py:1460 msgid "Updated" msgstr "zzUpdated" -#: config.py:921 +#: config.py:942 msgid "Created" msgstr "zzCreated" -#: config.py:922 +#: config.py:943 msgid "Rating" msgstr "zzRating" -#: config.py:923 +#: config.py:944 msgid "Warnings" msgstr "zzWarnings" -#: config.py:924 +#: config.py:945 msgid "Chapters" msgstr "zzChapters" -#: config.py:925 +#: config.py:946 msgid "Words" msgstr "zzWords" -#: config.py:926 +#: config.py:947 msgid "Site" msgstr "zzSite" -#: config.py:927 +#: config.py:948 msgid "Story ID" msgstr "zzStory ID" -#: config.py:928 +#: config.py:949 msgid "Author ID" msgstr "zzAuthor ID" -#: config.py:929 +#: config.py:950 msgid "Extra Tags" msgstr "zzExtra Tags" -#: config.py:930 config.py:1042 dialogs.py:817 dialogs.py:913 -#: ffdl_plugin.py:1126 ffdl_plugin.py:1290 ffdl_plugin.py:1320 +#: config.py:951 config.py:1063 dialogs.py:848 dialogs.py:944 +#: ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Title" msgstr "zzTitle" -#: config.py:931 +#: config.py:952 msgid "Story URL" msgstr "zzStory URL" -#: config.py:932 +#: config.py:953 msgid "Description" msgstr "zzDescription" -#: config.py:933 dialogs.py:817 dialogs.py:913 ffdl_plugin.py:1126 -#: ffdl_plugin.py:1290 ffdl_plugin.py:1320 +#: config.py:954 dialogs.py:848 dialogs.py:944 ffdl_plugin.py:1152 +#: ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Author" msgstr "zzAuthor" -#: config.py:934 +#: config.py:955 msgid "Author URL" msgstr "zzAuthor URL" -#: config.py:935 +#: config.py:956 msgid "File Format" msgstr "zzFile Format" -#: config.py:936 +#: config.py:957 msgid "File Extension" msgstr "zzFile Extension" -#: config.py:937 +#: config.py:958 msgid "Site Abbrev" msgstr "zzSite Abbrev" -#: config.py:938 +#: config.py:959 msgid "FFDL Version" msgstr "zzFFDL Version" -#: config.py:953 +#: config.py:974 msgid "" "If you have custom columns defined, they will be listed below. Choose a " "metadata value type to fill your columns automatically." @@ -804,24 +813,24 @@ msgstr "" "zzIf you have custom columns defined, they will be listed below. Choose a " "metadata value type to fill your columns automatically." -#: config.py:978 +#: config.py:999 msgid "Update this %s column(%s) with..." msgstr "zzUpdate this %s column(%s) with..." -#: config.py:988 +#: config.py:1009 msgid "Values that aren't valid for this enumeration column will be ignored." msgstr "" "zzValues that aren't valid for this enumeration column will be ignored." -#: config.py:988 config.py:990 +#: config.py:1009 config.py:1011 msgid "Metadata values valid for this type of column." msgstr "zzMetadata values valid for this type of column." -#: config.py:993 config.py:1069 +#: config.py:1014 config.py:1090 msgid "New Only" msgstr "zzNew Only" -#: config.py:994 +#: config.py:1015 msgid "" "Write to %s(%s) only for new\n" "books, not updates to existing books." @@ -829,11 +838,11 @@ msgstr "" "zzWrite to %s(%s) only for new\n" "books, not updates to existing books." -#: config.py:1005 +#: config.py:1026 msgid "Allow %(ccset)s from %(pini)s to override" msgstr "zzAllow %(ccset)s from %(pini)s to override" -#: config.py:1006 +#: config.py:1027 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 " @@ -843,15 +852,15 @@ msgstr "" "specific values that aren't common to all sites.
%(ccset)s is ignored " "when this is off." -#: config.py:1011 +#: config.py:1032 msgid "Special column:" msgstr "zzSpecial column:" -#: config.py:1016 +#: config.py:1037 msgid "Update/Overwrite Error Column:" msgstr "zzUpdate/Overwrite Error Column:" -#: config.py:1017 +#: config.py:1038 msgid "" "When an update or overwrite of an existing story fails, record the reason in " "this column.\n" @@ -861,39 +870,39 @@ msgstr "" "in this column.\n" "(Text and Long Text columns only.)" -#: config.py:1043 +#: config.py:1064 msgid "Author(s)" msgstr "zzAuthor(s)" -#: config.py:1044 +#: config.py:1065 msgid "Publisher" msgstr "zzPublisher" -#: config.py:1045 +#: config.py:1066 msgid "Tags" msgstr "zzTags" -#: config.py:1046 +#: config.py:1067 msgid "Languages" msgstr "zzLanguages" -#: config.py:1047 +#: config.py:1068 msgid "Published Date" msgstr "zzPublished Date" -#: config.py:1048 +#: config.py:1069 msgid "Date" msgstr "zzDate" -#: config.py:1049 +#: config.py:1070 msgid "Comments" msgstr "zzComments" -#: config.py:1051 +#: config.py:1072 msgid "Ids(url id only)" msgstr "zzIds(url id only)" -#: config.py:1056 +#: config.py:1077 msgid "" "The standard calibre metadata columns are listed below. You may choose " "whether FFDL will fill each column automatically on updates or only for new " @@ -903,7 +912,7 @@ msgstr "" "whether FFDL will fill each column automatically on updates or only for new " "books." -#: config.py:1070 +#: config.py:1091 msgid "" "Write to %s only for new\n" "books, not updates to existing books." @@ -911,57 +920,57 @@ msgstr "" "zzWrite to %s only for new\n" "books, not updates to existing books." -#: dialogs.py:69 +#: dialogs.py:71 msgid "Skip" msgstr "zzSkip" -#: dialogs.py:70 +#: dialogs.py:72 msgid "Add New Book" msgstr "zzAdd New Book" -#: dialogs.py:71 +#: dialogs.py:73 msgid "Update EPUB if New Chapters" msgstr "zzUpdate EPUB if New Chapters" -#: dialogs.py:72 +#: dialogs.py:74 msgid "Update EPUB Always" msgstr "zzUpdate EPUB Always" -#: dialogs.py:73 +#: dialogs.py:75 msgid "Overwrite if Newer" msgstr "zzOverwrite if Newer" -#: dialogs.py:74 +#: dialogs.py:76 msgid "Overwrite Always" msgstr "zzOverwrite Always" -#: dialogs.py:75 +#: dialogs.py:77 msgid "Update Calibre Metadata Only" msgstr "zzUpdate Calibre Metadata Only" -#: dialogs.py:252 ffdl_plugin.py:89 +#: dialogs.py:241 ffdl_plugin.py:89 msgid "FanFictionDownLoader" msgstr "zzFanFictionDownLoader" -#: dialogs.py:269 dialogs.py:716 +#: dialogs.py:258 dialogs.py:747 msgid "Show Download Options" msgstr "zzShow Download Options" -#: dialogs.py:288 dialogs.py:733 +#: dialogs.py:277 dialogs.py:764 msgid "Output &Format:" msgstr "zzOutput &Format:" -#: dialogs.py:296 dialogs.py:741 +#: dialogs.py:285 dialogs.py:772 msgid "" "Choose output format to create. May set default from plugin configuration." msgstr "" "zzChoose output format to create. May set default from plugin configuration." -#: dialogs.py:324 dialogs.py:758 +#: dialogs.py:313 dialogs.py:789 msgid "Update Calibre &Metadata?" msgstr "zzUpdate Calibre &Metadata?" -#: dialogs.py:325 dialogs.py:759 +#: dialogs.py:314 dialogs.py:790 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 " @@ -971,11 +980,11 @@ msgstr "" "(Columns set to 'New Only' in the column tabs will only be set for new " "books.)" -#: dialogs.py:331 dialogs.py:763 +#: dialogs.py:320 dialogs.py:794 msgid "Update EPUB Cover?" msgstr "zzUpdate EPUB Cover?" -#: dialogs.py:332 dialogs.py:764 +#: dialogs.py:321 dialogs.py:795 msgid "" "Update book cover image from site or defaults (if found) inside the " "EPUB when EPUB is updated." @@ -983,11 +992,11 @@ msgstr "" "zzUpdate book cover image from site or defaults (if found) inside the " "EPUB when EPUB is updated." -#: dialogs.py:379 +#: dialogs.py:368 msgid "Story URL(s) for anthology, one per line:" msgstr "zzStory URL(s) for anthology, one per line:" -#: dialogs.py:380 +#: dialogs.py:369 msgid "" "URLs for stories to include in the anthology, one per line.\n" "Will take URLs from clipboard, but only valid URLs." @@ -995,11 +1004,11 @@ msgstr "" "zzURLs for stories to include in the anthology, one per line.\n" "Will take URLs from clipboard, but only valid URLs." -#: dialogs.py:381 +#: dialogs.py:370 msgid "If Story Already Exists in Anthology?" msgstr "zzIf Story Already Exists in Anthology?" -#: dialogs.py:382 +#: dialogs.py:371 msgid "" "What to do if there's already an existing story with the same URL in the " "anthology." @@ -1007,11 +1016,11 @@ msgstr "" "zzWhat to do if there's already an existing story with the same URL in the " "anthology." -#: dialogs.py:391 +#: dialogs.py:380 msgid "Story URL(s), one per line:" msgstr "zzStory URL(s), one per line:" -#: dialogs.py:392 +#: dialogs.py:381 msgid "" "URLs for stories, one per line.\n" "Will take URLs from clipboard, but only valid URLs.\n" @@ -1021,11 +1030,11 @@ msgstr "" "Will take URLs from clipboard, but only valid URLs.\n" "Add [1,5] after the URL to limit the download to chapters 1-5." -#: dialogs.py:393 +#: dialogs.py:382 msgid "If Story Already Exists?" msgstr "zzIf Story Already Exists?" -#: dialogs.py:394 +#: dialogs.py:383 msgid "" "What to do if there's already an existing story with the same URL or title " "and author." @@ -1033,19 +1042,19 @@ msgstr "" "zzWhat to do if there's already an existing story with the same URL or title " "and author." -#: dialogs.py:494 +#: dialogs.py:483 msgid "For Individual Books" msgstr "zzFor Individual Books" -#: dialogs.py:495 +#: dialogs.py:484 msgid "Get URLs and go to dialog for individual story downloads." msgstr "zzGet URLs and go to dialog for individual story downloads." -#: dialogs.py:499 +#: dialogs.py:488 msgid "For Anthology Epub" msgstr "zzFor Anthology Epub" -#: dialogs.py:500 +#: dialogs.py:489 msgid "" "Get URLs and go to dialog for Anthology download.\n" "Requires %s plugin." @@ -1053,97 +1062,137 @@ msgstr "" "zzGet URLs and go to dialog for Anthology download.\n" "Requires %s plugin." -#: dialogs.py:505 dialogs.py:559 dialogs.py:586 +#: dialogs.py:494 dialogs.py:548 dialogs.py:575 msgid "Cancel" msgstr "zzCancel" -#: dialogs.py:537 +#: dialogs.py:526 msgid "Password" msgstr "zzPassword" -#: dialogs.py:538 +#: dialogs.py:527 msgid "Author requires a password for this story(%s)." msgstr "zzAuthor requires a password for this story(%s)." -#: dialogs.py:543 +#: dialogs.py:532 msgid "User/Password" msgstr "zzUser/Password" -#: dialogs.py:544 +#: dialogs.py:533 msgid "%s requires you to login to download this story." msgstr "zz%s requires you to login to download this story." -#: dialogs.py:546 +#: dialogs.py:535 msgid "User:" msgstr "zzUser:" -#: dialogs.py:550 +#: dialogs.py:539 msgid "Password:" msgstr "zzPassword:" -#: dialogs.py:581 +#: dialogs.py:570 msgid "Fetching metadata for stories..." msgstr "zzFetching metadata for stories..." -#: dialogs.py:582 +#: dialogs.py:571 msgid "Downloading metadata for stories" msgstr "zzDownloading metadata for stories" -#: dialogs.py:583 +#: dialogs.py:572 msgid "Fetched metadata for" msgstr "zzFetched metadata for" -#: dialogs.py:653 ffdl_plugin.py:325 +#: dialogs.py:599 +msgid " - %s estimated until done" +msgstr " - zz %s estimated until done" + +#: dialogs.py:649 +msgid "%d day" +msgstr "%d zzday" + +#: dialogs.py:649 +msgid "%d days" +msgstr "%d zzdays" + +#: dialogs.py:650 +msgid "%d hour" +msgstr "%d zzhour" + +#: dialogs.py:650 +msgid "%d hours" +msgstr "%d zzhours" + +#: dialogs.py:651 +msgid "%d minute" +msgstr "%d zzminute" + +#: dialogs.py:651 +msgid "%d minutes" +msgstr "%d zzminutes" + +#: dialogs.py:652 +msgid "%d second" +msgstr "%d zzsecond" + +#: dialogs.py:652 +msgid "%d seconds" +msgstr "%d zzseconds" + +#: dialogs.py:667 +msgid "less than 1 second" +msgstr "zzless than 1 second" + +#: dialogs.py:684 ffdl_plugin.py:331 msgid "About FanFictionDownLoader" msgstr "zzAbout FanFictionDownLoader" -#: dialogs.py:707 +#: dialogs.py:738 msgid "Remove selected books from the list" msgstr "zzRemove selected books from the list" -#: dialogs.py:746 +#: dialogs.py:777 msgid "Update Mode:" msgstr "zzUpdate Mode:" -#: dialogs.py:749 +#: dialogs.py:780 msgid "" "What sort of update to perform. May set default from plugin configuration." msgstr "" "zzWhat sort of update to perform. May set default from plugin configuration." -#: dialogs.py:817 ffdl_plugin.py:1126 ffdl_plugin.py:1290 ffdl_plugin.py:1320 +#: dialogs.py:848 ffdl_plugin.py:1152 ffdl_plugin.py:1328 ffdl_plugin.py:1358 msgid "Comment" msgstr "zzComment" -#: dialogs.py:885 +#: dialogs.py:916 msgid "Are you sure you want to remove this book from the list?" msgstr "zzAre you sure you want to remove this book from the list?" -#: dialogs.py:887 +#: dialogs.py:918 msgid "Are you sure you want to remove the selected %d books from the list?" msgstr "zzAre you sure you want to remove the selected %d books from the list?" -#: dialogs.py:913 +#: dialogs.py:944 msgid "Note" msgstr "zzNote" -#: dialogs.py:955 +#: dialogs.py:983 msgid "Select or Edit Reject Note." msgstr "zzSelect or Edit Reject Note." -#: dialogs.py:963 +#: dialogs.py:991 msgid "Are you sure you want to remove this URL from the list?" msgstr "zzAre you sure you want to remove this URL from the list?" -#: dialogs.py:965 +#: dialogs.py:993 msgid "Are you sure you want to remove the %d selected URLs from the list?" msgstr "zzAre you sure you want to remove the %d selected URLs from the list?" -#: dialogs.py:983 +#: dialogs.py:1011 msgid "List of Books to Reject" msgstr "zzList of Books to Reject" -#: dialogs.py:996 +#: dialogs.py:1024 msgid "" "FFDL will remember these URLs and display the note and offer to reject them " "if you try to download them again later." @@ -1151,19 +1200,19 @@ msgstr "" "zzFFDL will remember these URLs and display the note and offer to reject " "them if you try to download them again later." -#: dialogs.py:1010 +#: dialogs.py:1038 msgid "Remove selected URL(s) from the list" msgstr "zzRemove selected URL(s) from the list" -#: dialogs.py:1028 dialogs.py:1032 +#: dialogs.py:1053 dialogs.py:1057 msgid "This will be added to whatever note you've set for each URL above." msgstr "zzThis will be added to whatever note you've set for each URL above." -#: dialogs.py:1041 +#: dialogs.py:1066 msgid "Delete Books (including books without FanFiction URLs)?" msgstr "zzDelete Books (including books without FanFiction URLs)?" -#: dialogs.py:1042 +#: dialogs.py:1067 msgid "Delete the selected books after adding them to the Rejected URLs list." msgstr "" "zzDelete the selected books after adding them to the Rejected URLs list." @@ -1177,79 +1226,79 @@ msgstr "zzDownload FanFiction stories from various web sites" msgid "FanFictionDL" msgstr "zzFanFictionDL" -#: ffdl_plugin.py:243 +#: ffdl_plugin.py:249 msgid "&Add New from URL(s)" msgstr "zz&Add New from URL(s)" -#: ffdl_plugin.py:245 +#: ffdl_plugin.py:251 msgid "Add New FanFiction Book(s) from URL(s)" msgstr "zzAdd New FanFiction Book(s) from URL(s)" -#: ffdl_plugin.py:248 +#: ffdl_plugin.py:254 msgid "&Update Existing FanFiction Book(s)" msgstr "zz&Update Existing FanFiction Book(s)" -#: ffdl_plugin.py:254 +#: ffdl_plugin.py:260 msgid "Get Story URLs to Download from Web Page" msgstr "zzGet Story URLs to Download from Web Page" -#: ffdl_plugin.py:258 +#: ffdl_plugin.py:264 msgid "&Make Anthology Epub Manually from URL(s)" msgstr "zz&Make Anthology Epub Manually from URL(s)" -#: ffdl_plugin.py:260 +#: ffdl_plugin.py:266 msgid "Make FanFiction Anthology Epub Manually from URL(s)" msgstr "zzMake FanFiction Anthology Epub Manually from URL(s)" -#: ffdl_plugin.py:263 +#: ffdl_plugin.py:269 msgid "&Update Anthology Epub" msgstr "zz&Update Anthology Epub" -#: ffdl_plugin.py:265 +#: ffdl_plugin.py:271 msgid "Update FanFiction Anthology Epub" msgstr "zzUpdate FanFiction Anthology Epub" -#: ffdl_plugin.py:273 +#: ffdl_plugin.py:279 msgid "Add to \"To Read\" and \"Send to Device\" Lists" msgstr "zzAdd to \"To Read\" and \"Send to Device\" Lists" -#: ffdl_plugin.py:275 +#: ffdl_plugin.py:281 msgid "Remove from \"To Read\" and add to \"Send to Device\" Lists" msgstr "zzRemove from \"To Read\" and add to \"Send to Device\" Lists" -#: ffdl_plugin.py:277 ffdl_plugin.py:282 +#: ffdl_plugin.py:283 ffdl_plugin.py:288 msgid "Remove from \"To Read\" Lists" msgstr "zzRemove from \"To Read\" Lists" -#: ffdl_plugin.py:279 +#: ffdl_plugin.py:285 msgid "Add Selected to \"Send to Device\" Lists" msgstr "zzAdd Selected to \"Send to Device\" Lists" -#: ffdl_plugin.py:281 +#: ffdl_plugin.py:287 msgid "Add to \"To Read\" Lists" msgstr "zzAdd to \"To Read\" Lists" -#: ffdl_plugin.py:297 +#: ffdl_plugin.py:303 msgid "Get URLs from Selected Books" msgstr "zzGet URLs from Selected Books" -#: ffdl_plugin.py:303 ffdl_plugin.py:396 +#: ffdl_plugin.py:309 ffdl_plugin.py:397 msgid "Get Story URLs from Web Page" msgstr "zzGet Story URLs from Web Page" -#: ffdl_plugin.py:308 +#: ffdl_plugin.py:314 msgid "Reject Selected Books" msgstr "zzReject Selected Books" -#: ffdl_plugin.py:316 +#: ffdl_plugin.py:322 msgid "&Configure Plugin" msgstr "zz&Configure Plugin" -#: ffdl_plugin.py:319 +#: ffdl_plugin.py:325 msgid "Configure FanFictionDownLoader" msgstr "zzConfigure FanFictionDownLoader" -#: ffdl_plugin.py:322 +#: ffdl_plugin.py:328 msgid "About Plugin" msgstr "zzAbout Plugin" @@ -1261,87 +1310,87 @@ msgstr "zzCannot Update Reading Lists from Device View" msgid "No Selected Books to Update Reading Lists" msgstr "zzNo Selected Books to Update Reading Lists" -#: ffdl_plugin.py:407 ffdl_plugin.py:459 +#: ffdl_plugin.py:408 ffdl_plugin.py:460 msgid "List of Story URLs" msgstr "zzList of Story URLs" -#: ffdl_plugin.py:408 +#: ffdl_plugin.py:409 msgid "No Valid Story URLs found on given page." msgstr "zzNo Valid Story URLs found on given page." -#: ffdl_plugin.py:423 +#: ffdl_plugin.py:424 msgid "No Selected Books to Get URLs From" msgstr "zzNo Selected Books to Get URLs From" -#: ffdl_plugin.py:441 +#: ffdl_plugin.py:442 msgid "Collecting URLs for stories..." msgstr "zzCollecting URLs for stories..." -#: ffdl_plugin.py:442 +#: ffdl_plugin.py:443 msgid "Get URLs for stories" msgstr "zzGet URLs for stories" -#: ffdl_plugin.py:443 ffdl_plugin.py:490 ffdl_plugin.py:677 +#: ffdl_plugin.py:444 ffdl_plugin.py:491 ffdl_plugin.py:678 msgid "URL retrieved" msgstr "zzURL retrieved" -#: ffdl_plugin.py:463 +#: ffdl_plugin.py:464 msgid "List of URLs" msgstr "zzList of URLs" -#: ffdl_plugin.py:464 +#: ffdl_plugin.py:465 msgid "No Story URLs found in selected books." msgstr "zzNo Story URLs found in selected books." -#: ffdl_plugin.py:480 +#: ffdl_plugin.py:481 msgid "No Selected Books have URLs to Reject" msgstr "zzNo Selected Books have URLs to Reject" -#: ffdl_plugin.py:488 +#: ffdl_plugin.py:489 msgid "Collecting URLs for Reject List..." msgstr "zzCollecting URLs for Reject List..." -#: ffdl_plugin.py:489 +#: ffdl_plugin.py:490 msgid "Get URLs for Reject List" msgstr "zzGet URLs for Reject List" -#: ffdl_plugin.py:524 +#: ffdl_plugin.py:525 msgid "Proceed to Remove?" msgstr "zzProceed to Remove?" -#: ffdl_plugin.py:524 +#: ffdl_plugin.py:525 msgid "Rejecting FFDL URLs: None of the books selected have FanFiction URLs." msgstr "" "zzRejecting FFDL URLs: None of the books selected have FanFiction URLs." # %s = EpubMerge -#: ffdl_plugin.py:546 +#: ffdl_plugin.py:547 msgid "Cannot Make Anthologys without %s" msgstr "zzCannot Make Anthologys without %s" -#: ffdl_plugin.py:550 ffdl_plugin.py:654 +#: ffdl_plugin.py:551 ffdl_plugin.py:655 msgid "Cannot Update Books from Device View" msgstr "zzCannot Update Books from Device View" -#: ffdl_plugin.py:554 +#: ffdl_plugin.py:555 msgid "Can only update 1 anthology at a time" msgstr "zzCan only update 1 anthology at a time" -#: ffdl_plugin.py:563 +#: ffdl_plugin.py:564 msgid "Can only Update Epub Anthologies" msgstr "zzCan only Update Epub Anthologies" -#: ffdl_plugin.py:581 ffdl_plugin.py:582 +#: ffdl_plugin.py:582 ffdl_plugin.py:583 msgid "Cannot Update Anthology" msgstr "zzCannot Update Anthology" -#: ffdl_plugin.py:582 +#: ffdl_plugin.py:583 msgid "" "Book isn't an FFDL Anthology or contains book(s) without valid FFDL URLs." msgstr "" "zzBook isn't an FFDL Anthology or contains book(s) without valid FFDL URLs." -#: ffdl_plugin.py:640 +#: ffdl_plugin.py:641 msgid "" "There are %d stories in the current anthology that are not going to " "be kept if you go ahead." @@ -1349,91 +1398,91 @@ msgstr "" "zzThere are %d stories in the current anthology that are not going to " "be kept if you go ahead." -#: ffdl_plugin.py:641 +#: ffdl_plugin.py:642 msgid "Story URLs that will be removed:" msgstr "zzStory URLs that will be removed:" -#: ffdl_plugin.py:643 +#: ffdl_plugin.py:644 msgid "Update anyway?" msgstr "zzUpdate anyway?" -#: ffdl_plugin.py:644 +#: ffdl_plugin.py:645 msgid "Stories Removed" msgstr "zzStories Removed" -#: ffdl_plugin.py:661 +#: ffdl_plugin.py:662 msgid "No Selected Books to Update" msgstr "zzNo Selected Books to Update" -#: ffdl_plugin.py:675 +#: ffdl_plugin.py:676 msgid "Collecting stories for update..." msgstr "zzCollecting stories for update..." -#: ffdl_plugin.py:676 +#: ffdl_plugin.py:677 msgid "Get stories for updates" msgstr "zzGet stories for updates" -#: ffdl_plugin.py:686 +#: ffdl_plugin.py:687 msgid "Update Existing List" msgstr "zzUpdate Existing List" -#: ffdl_plugin.py:738 +#: ffdl_plugin.py:745 msgid "Started fetching metadata for %s stories." msgstr "zzStarted fetching metadata for %s stories." -#: ffdl_plugin.py:744 +#: ffdl_plugin.py:751 msgid "No valid story URLs entered." msgstr "zzNo valid story URLs entered." -#: ffdl_plugin.py:769 ffdl_plugin.py:775 +#: ffdl_plugin.py:776 ffdl_plugin.py:782 msgid "Reject URL?" msgstr "zzReject URL?" -#: ffdl_plugin.py:776 ffdl_plugin.py:794 +#: ffdl_plugin.py:783 ffdl_plugin.py:801 msgid "%s is on your Reject URL list:" msgstr "zz%s is on your Reject URL list:" -#: ffdl_plugin.py:778 +#: ffdl_plugin.py:785 msgid "Click 'Yes' to Reject." msgstr "zzClick 'Yes' to Reject." -#: ffdl_plugin.py:779 ffdl_plugin.py:875 +#: ffdl_plugin.py:786 ffdl_plugin.py:890 msgid "Click 'No' to download anyway." msgstr "zzClick 'No' to download anyway." -#: ffdl_plugin.py:781 +#: ffdl_plugin.py:788 msgid "Story on Reject URLs list (%s)." msgstr "zzStory on Reject URLs list (%s)." -#: ffdl_plugin.py:784 +#: ffdl_plugin.py:791 msgid "Rejected" msgstr "zzRejected" -#: ffdl_plugin.py:787 +#: ffdl_plugin.py:794 msgid "Remove Reject URL?" msgstr "zzRemove Reject URL?" -#: ffdl_plugin.py:793 +#: ffdl_plugin.py:800 msgid "Remove URL from Reject List?" msgstr "zzRemove URL from Reject List?" -#: ffdl_plugin.py:796 +#: ffdl_plugin.py:803 msgid "Click 'Yes' to remove it from the list," msgstr "zzClick 'Yes' to remove it from the list," -#: ffdl_plugin.py:797 +#: ffdl_plugin.py:804 msgid "Click 'No' to leave it on the list." msgstr "zzClick 'No' to leave it on the list." -#: ffdl_plugin.py:814 +#: ffdl_plugin.py:821 msgid "Cannot update non-epub format." msgstr "zzCannot update non-epub format." -#: ffdl_plugin.py:851 +#: ffdl_plugin.py:866 msgid "Are You an Adult?" msgstr "zzAre You an Adult?" -#: ffdl_plugin.py:852 +#: ffdl_plugin.py:867 msgid "" "%s requires that you be an adult. Please confirm you are an adult in your " "locale:" @@ -1441,15 +1490,15 @@ msgstr "" "zz%s requires that you be an adult. Please confirm you are an adult in your " "locale:" -#: ffdl_plugin.py:866 +#: ffdl_plugin.py:881 msgid "Skip Story?" msgstr "zzSkip Story?" -#: ffdl_plugin.py:872 +#: ffdl_plugin.py:887 msgid "Skip Anthology Story?" msgstr "zzSkip Anthology Story?" -#: ffdl_plugin.py:873 +#: ffdl_plugin.py:888 msgid "" "\"%s\" is in series \"%s\" that you have an " "anthology book for." @@ -1457,31 +1506,31 @@ msgstr "" "zz\"%s\" is in series \"%s\" that you have " "an anthology book for." -#: ffdl_plugin.py:874 +#: ffdl_plugin.py:889 msgid "Click 'Yes' to Skip." msgstr "zzClick 'Yes' to Skip." -#: ffdl_plugin.py:877 +#: ffdl_plugin.py:892 msgid "Story in Series Anthology(%s)." msgstr "zzStory in Series Anthology(%s)." -#: ffdl_plugin.py:882 +#: ffdl_plugin.py:897 msgid "Skipped" msgstr "zzSkipped" -#: ffdl_plugin.py:910 +#: ffdl_plugin.py:925 msgid "Add" msgstr "zzAdd" -#: ffdl_plugin.py:923 +#: ffdl_plugin.py:938 msgid "Meta" msgstr "zzMeta" -#: ffdl_plugin.py:956 +#: ffdl_plugin.py:971 msgid "Skipping duplicate story." msgstr "zzSkipping duplicate story." -#: ffdl_plugin.py:959 +#: ffdl_plugin.py:974 msgid "" "More than one identical book by Identifer URL or title/author(s)--can't tell " "which book to update/overwrite." @@ -1489,15 +1538,15 @@ msgstr "" "zzMore than one identical book by Identifer URL or title/author(s)--can't " "tell which book to update/overwrite." -#: ffdl_plugin.py:970 +#: ffdl_plugin.py:985 msgid "Update" msgstr "zzUpdate" -#: ffdl_plugin.py:978 ffdl_plugin.py:985 +#: ffdl_plugin.py:993 ffdl_plugin.py:1000 msgid "Change Story URL?" msgstr "zzChange Story URL?" -#: ffdl_plugin.py:986 +#: ffdl_plugin.py:1001 msgid "" "%s by %s is already in your library with a different source " "URL:" @@ -1505,27 +1554,27 @@ msgstr "" "zz%s by %s is already in your library with a different source " "URL:" -#: ffdl_plugin.py:987 +#: ffdl_plugin.py:1002 msgid "In library: %(liburl)s" msgstr "zzIn library: %(liburl)s" -#: ffdl_plugin.py:988 ffdl_plugin.py:1002 +#: ffdl_plugin.py:1003 ffdl_plugin.py:1017 msgid "New URL: %(newurl)s" msgstr "zzNew URL: %(newurl)s" -#: ffdl_plugin.py:989 +#: ffdl_plugin.py:1004 msgid "Click 'Yes' to update/overwrite book with new URL." msgstr "zzClick 'Yes' to update/overwrite book with new URL." -#: ffdl_plugin.py:990 +#: ffdl_plugin.py:1005 msgid "Click 'No' to skip updating/overwriting this book." msgstr "zzClick 'No' to skip updating/overwriting this book." -#: ffdl_plugin.py:992 ffdl_plugin.py:999 +#: ffdl_plugin.py:1007 ffdl_plugin.py:1014 msgid "Download as New Book?" msgstr "zzDownload as New Book?" -#: ffdl_plugin.py:1000 +#: ffdl_plugin.py:1015 msgid "" "%s by %s is already in your library with a different source " "URL." @@ -1533,7 +1582,7 @@ msgstr "" "zz%s by %s is already in your library with a different source " "URL." -#: ffdl_plugin.py:1001 +#: ffdl_plugin.py:1016 msgid "" "You chose not to update the existing book. Do you want to add a new book " "for this URL?" @@ -1541,31 +1590,31 @@ msgstr "" "zzYou chose not to update the existing book. Do you want to add a new book " "for this URL?" -#: ffdl_plugin.py:1003 +#: ffdl_plugin.py:1018 msgid "Click 'Yes' to a new book with new URL." msgstr "zzClick 'Yes' to a new book with new URL." -#: ffdl_plugin.py:1004 +#: ffdl_plugin.py:1019 msgid "Click 'No' to skip URL." msgstr "zzClick 'No' to skip URL." -#: ffdl_plugin.py:1010 +#: ffdl_plugin.py:1025 msgid "Update declined by user due to differing story URL(%s)" msgstr "zzUpdate declined by user due to differing story URL(%s)" -#: ffdl_plugin.py:1013 +#: ffdl_plugin.py:1028 msgid "Different URL" msgstr "zzDifferent URL" -#: ffdl_plugin.py:1018 +#: ffdl_plugin.py:1033 msgid "Metadata collected." msgstr "zzMetadata collected." -#: ffdl_plugin.py:1034 +#: ffdl_plugin.py:1049 msgid "Already contains %d chapters." msgstr "zzAlready contains %d chapters." -#: ffdl_plugin.py:1039 +#: ffdl_plugin.py:1054 jobs.py:198 msgid "" "Existing epub contains %d chapters, web site only has %d. Use Overwrite to " "force update." @@ -1573,7 +1622,7 @@ msgstr "" "zzExisting epub contains %d chapters, web site only has %d. Use Overwrite to " "force update." -#: ffdl_plugin.py:1041 +#: ffdl_plugin.py:1056 msgid "" "FFDL doesn't recognize chapters in existing epub, epub is probably from a " "different source. Use Overwrite to force update." @@ -1581,52 +1630,52 @@ msgstr "" "zzFFDL doesn't recognize chapters in existing epub, epub is probably from a " "different source. Use Overwrite to force update." -#: ffdl_plugin.py:1053 +#: ffdl_plugin.py:1068 msgid "Not Overwriting, web site is not newer." msgstr "zzNot Overwriting, web site is not newer." -#: ffdl_plugin.py:1122 +#: ffdl_plugin.py:1148 msgid "None of the %d URLs/stories given can be/need to be downloaded." msgstr "" "zzNone of the %d URLs/stories given can be/need to be downloaded." -#: ffdl_plugin.py:1123 ffdl_plugin.py:1286 ffdl_plugin.py:1316 +#: ffdl_plugin.py:1149 ffdl_plugin.py:1324 ffdl_plugin.py:1354 msgid "See log for details." msgstr "zzSee log for details." -#: ffdl_plugin.py:1124 +#: ffdl_plugin.py:1150 msgid "Proceed with updating your library(Error Column, if configured)?" msgstr "zzProceed with updating your library(Error Column, if configured)?" -#: ffdl_plugin.py:1131 ffdl_plugin.py:1298 +#: ffdl_plugin.py:1157 ffdl_plugin.py:1336 msgid "Bad" msgstr "zzBad" -#: ffdl_plugin.py:1139 +#: ffdl_plugin.py:1165 msgid "FFDL download ended" msgstr "zzFFDL download ended" -#: ffdl_plugin.py:1139 ffdl_plugin.py:1341 +#: ffdl_plugin.py:1165 ffdl_plugin.py:1379 msgid "FFDL log" msgstr "zzFFDL log" -#: ffdl_plugin.py:1147 +#: ffdl_plugin.py:1185 msgid "Download FanFiction Book" msgstr "zzDownload FanFiction Book" -#: ffdl_plugin.py:1154 +#: ffdl_plugin.py:1192 msgid "Starting %d FanFictionDownLoads" msgstr "zzStarting %d FanFictionDownLoads" -#: ffdl_plugin.py:1184 +#: ffdl_plugin.py:1222 msgid "Story Details:" msgstr "zzStory Details:" -#: ffdl_plugin.py:1187 +#: ffdl_plugin.py:1225 msgid "Error Updating Metadata" msgstr "zzError Updating Metadata" -#: ffdl_plugin.py:1188 +#: ffdl_plugin.py:1226 msgid "" "An error has occurred while FFDL was updating calibre's metadata for %s." @@ -1634,101 +1683,101 @@ msgstr "" "zzAn error has occurred while FFDL was updating calibre's metadata for %s." -#: ffdl_plugin.py:1189 +#: ffdl_plugin.py:1227 msgid "The ebook has been updated, but the metadata has not." msgstr "zzThe ebook has been updated, but the metadata has not." -#: ffdl_plugin.py:1241 +#: ffdl_plugin.py:1279 msgid "Finished Adding/Updating %d books." msgstr "zzFinished Adding/Updating %d books." -#: ffdl_plugin.py:1249 +#: ffdl_plugin.py:1287 msgid "Starting auto conversion of %d books." msgstr "zzStarting auto conversion of %d books." -#: ffdl_plugin.py:1270 +#: ffdl_plugin.py:1308 msgid "No Good Stories for Anthology" msgstr "zzNo Good Stories for Anthology" -#: ffdl_plugin.py:1271 +#: ffdl_plugin.py:1309 msgid "" "No good stories/updates where downloaded, Anthology creation/update aborted." msgstr "" "zzNo good stories/updates where downloaded, Anthology creation/update " "aborted." -#: ffdl_plugin.py:1276 ffdl_plugin.py:1315 +#: ffdl_plugin.py:1314 ffdl_plugin.py:1353 msgid "FFDL found %s good and %s bad updates." msgstr "zzFFDL found %s good and %s bad updates." -#: ffdl_plugin.py:1283 +#: ffdl_plugin.py:1321 msgid "" "Are you sure you want to continue with creating/updating this Anthology?" msgstr "" "zzAre you sure you want to continue with creating/updating this Anthology?" -#: ffdl_plugin.py:1284 +#: ffdl_plugin.py:1322 msgid "Any updates that failed will not be included in the Anthology." msgstr "" "zzAny updates that failed will not be included in the Anthology." -#: ffdl_plugin.py:1285 +#: ffdl_plugin.py:1323 msgid "However, if there's an older version, it will still be included." msgstr "zzHowever, if there's an older version, it will still be included." -#: ffdl_plugin.py:1288 +#: ffdl_plugin.py:1326 msgid "Proceed with updating this anthology and your library?" msgstr "zzProceed with updating this anthology and your library?" -#: ffdl_plugin.py:1296 +#: ffdl_plugin.py:1334 msgid "Good" msgstr "zzGood" -#: ffdl_plugin.py:1317 +#: ffdl_plugin.py:1355 msgid "Proceed with updating your library?" msgstr "zzProceed with updating your library?" -#: ffdl_plugin.py:1341 +#: ffdl_plugin.py:1379 msgid "FFDL download complete" msgstr "zzFFDL download complete" -#: ffdl_plugin.py:1354 +#: ffdl_plugin.py:1392 msgid "Merging %s books." msgstr "zzMerging %s books." -#: ffdl_plugin.py:1394 +#: ffdl_plugin.py:1432 msgid "FFDL Adding/Updating books." msgstr "zzFFDL Adding/Updating books." -#: ffdl_plugin.py:1401 +#: ffdl_plugin.py:1439 msgid "Updating calibre for FanFiction stories..." msgstr "zzUpdating calibre for FanFiction stories..." -#: ffdl_plugin.py:1402 +#: ffdl_plugin.py:1440 msgid "Update calibre for FanFiction stories" msgstr "zzUpdate calibre for FanFiction stories" -#: ffdl_plugin.py:1411 +#: ffdl_plugin.py:1449 msgid "Adding/Updating %s BAD books." msgstr "zzAdding/Updating %s BAD books." -#: ffdl_plugin.py:1420 +#: ffdl_plugin.py:1458 msgid "Updating calibre for BAD FanFiction stories..." msgstr "zzUpdating calibre for BAD FanFiction stories..." -#: ffdl_plugin.py:1421 +#: ffdl_plugin.py:1459 msgid "Update calibre for BAD FanFiction stories" msgstr "zzUpdate calibre for BAD FanFiction stories" -#: ffdl_plugin.py:1447 +#: ffdl_plugin.py:1485 msgid "Adding format to book failed for some reason..." msgstr "zzAdding format to book failed for some reason..." -#: ffdl_plugin.py:1450 +#: ffdl_plugin.py:1488 msgid "Error" msgstr "zzError" -#: ffdl_plugin.py:1723 +#: ffdl_plugin.py:1764 msgid "" "You configured FanFictionDownLoader to automatically update Reading Lists, " "but you don't have the %s plugin installed anymore?" @@ -1736,7 +1785,7 @@ msgstr "" "zzYou configured FanFictionDownLoader to automatically update Reading Lists, " "but you don't have the %s plugin installed anymore?" -#: ffdl_plugin.py:1735 +#: ffdl_plugin.py:1776 msgid "" "You configured FanFictionDownLoader to automatically update \"To Read\" " "Reading Lists, but you don't have any lists set?" @@ -1744,7 +1793,7 @@ msgstr "" "zzYou configured FanFictionDownLoader to automatically update \"To Read\" " "Reading Lists, but you don't have any lists set?" -#: ffdl_plugin.py:1745 ffdl_plugin.py:1763 +#: ffdl_plugin.py:1786 ffdl_plugin.py:1804 msgid "" "You configured FanFictionDownLoader to automatically update Reading List " "'%s', but you don't have a list of that name?" @@ -1752,7 +1801,7 @@ msgstr "" "zzYou configured FanFictionDownLoader to automatically update Reading List " "'%s', but you don't have a list of that name?" -#: ffdl_plugin.py:1751 +#: ffdl_plugin.py:1792 msgid "" "You configured FanFictionDownLoader to automatically update \"Send to Device" "\" Reading Lists, but you don't have any lists set?" @@ -1760,35 +1809,59 @@ msgstr "" "zzYou configured FanFictionDownLoader to automatically update \"Send to " "Device\" Reading Lists, but you don't have any lists set?" -#: ffdl_plugin.py:1871 +#: ffdl_plugin.py:1913 msgid "No story URL found." msgstr "zzNo story URL found." -#: ffdl_plugin.py:1874 +#: ffdl_plugin.py:1916 msgid "Not Found" msgstr "zzNot Found" -#: ffdl_plugin.py:1880 +#: ffdl_plugin.py:1922 msgid "URL is not a valid story URL." msgstr "zzURL is not a valid story URL." -#: ffdl_plugin.py:1883 +#: ffdl_plugin.py:1925 msgid "Bad URL" msgstr "zzBad URL" -#: ffdl_plugin.py:2018 +#: ffdl_plugin.py:2061 ffdl_plugin.py:2064 msgid "Anthology containing:" msgstr "zzAnthology containing:" # title by author -#: ffdl_plugin.py:2019 +#: ffdl_plugin.py:2062 msgid "%s by %s" msgstr "zz%s by %s" -#: ffdl_plugin.py:2038 +#: ffdl_plugin.py:2084 msgid " Anthology" msgstr "zz Anthology" -#: ffdl_plugin.py:2075 +#: ffdl_plugin.py:2121 msgid "(was set, removed for security)" msgstr "zz(was set, removed for security)" + +#: jobs.py:60 +msgid "Downloading FanFiction Stories" +msgstr "zzDownloading FanFiction Stories" + +#: jobs.py:82 +msgid "Successful:" +msgstr "zzSuccessful:" + +#: jobs.py:84 +msgid "Unsuccessful:" +msgstr "zzUnsuccessful:" + +#: jobs.py:110 +msgid "Download started..." +msgstr "zzDownload started..." + +#: jobs.py:192 +msgid "Already contains %d chapters. Reuse as is." +msgstr "zzAlready contains %d chapters. Reuse as is." + +#: jobs.py:209 +msgid "Update %s completed, added %s chapters for %s total." +msgstr "zzUpdate %s completed, added %s chapters for %s total."