From ac72c1967642410c660426bcc32cadb4e646b799 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Fri, 12 Jul 2019 21:54:05 -0500 Subject: [PATCH] Plugin: Group reported results better. --- calibre-plugin/dialogs.py | 1 + calibre-plugin/fff_plugin.py | 34 +- calibre-plugin/jobs.py | 42 +- calibre-plugin/translations/messages.pot | 846 +++++++++++------------ 4 files changed, 461 insertions(+), 462 deletions(-) diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py index 2dd86ea5..aa21d393 100644 --- a/calibre-plugin/dialogs.py +++ b/calibre-plugin/dialogs.py @@ -704,6 +704,7 @@ class _LoopProgressDialog(QProgressDialog): except Exception as e: book['good']=False + book['status']=_("Error") book['comment']=unicode(e) logger.error("Exception: %s:%s"%(book,unicode(e)),exc_info=True) diff --git a/calibre-plugin/fff_plugin.py b/calibre-plugin/fff_plugin.py index 8fa37981..53046230 100644 --- a/calibre-plugin/fff_plugin.py +++ b/calibre-plugin/fff_plugin.py @@ -596,6 +596,7 @@ class FanFicFarePlugin(InterfaceAction): if book['url'] == None: book['good']=False + book['status']=_('Bad') else: book['good']=True @@ -1499,11 +1500,7 @@ class FanFicFarePlugin(InterfaceAction): htmllog='' for book in book_list: - if 'status' in book: - status = book['status'] - else: - status = _('Bad') - htmllog = htmllog + '' + htmllog = htmllog + '' htmllog = htmllog + '
'+_('Status')+''+_('Title')+''+_('Author')+''+_('Comment')+'URL
' + ''.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' + ''.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' @@ -1683,8 +1680,8 @@ class FanFicFarePlugin(InterfaceAction): book_list = job.result good_list = [ x for x in book_list if x['good'] ] bad_list = [ x for x in book_list if not x['good'] ] - good_list = sorted(good_list,key=lambda x : x['listorder']) - bad_list = sorted(bad_list,key=lambda x : x['listorder']) + good_list = sorted(good_list,key=lambda x : x['reportorder']) + bad_list = sorted(bad_list,key=lambda x : x['reportorder']) #print("book_list:%s"%book_list) payload = (good_list, bad_list, options) @@ -1712,14 +1709,7 @@ class FanFicFarePlugin(InterfaceAction): htmllog='' for book in sorted(good_list+bad_list,key=lambda x : x['listorder']): - if 'status' in book: - status = book['status'] - else: - if book in good_list: - status = _('Good') - else: - status = _('Bad') - htmllog = htmllog + '' + htmllog = htmllog + '' htmllog = htmllog + '
'+_('Status')+''+_('Title')+''+_('Author')+''+_('Comment')+'URL
' + ''.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' + ''.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' @@ -1742,18 +1732,10 @@ class FanFicFarePlugin(InterfaceAction): htmllog='' for book in good_list: - if 'status' in book: - status = book['status'] - else: - status = _('Good') - htmllog = htmllog + '' + htmllog = htmllog + '' for book in bad_list: - if 'status' in book: - status = book['status'] - else: - status = _('Bad') - htmllog = htmllog + '' + htmllog = htmllog + '' htmllog = htmllog + '
'+_('Status')+''+_('Title')+''+_('Author')+''+_('Comment')+'URL
' + ''.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' + ''.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' + ''.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' + ''.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + '
' @@ -2390,6 +2372,7 @@ class FanFicFarePlugin(InterfaceAction): book['comments'] = '' # note this is the book comments. book['good'] = True + book['status'] = 'Bad' book['showerror'] = True # False when NotGoingToDownload is # not-overwrite / not-update / skip # -- what some would consider 'not an @@ -2414,6 +2397,7 @@ class FanFicFarePlugin(InterfaceAction): if book['uniqueurl'] in uniqueurls: book['good'] = False book['comment'] = _("Same story already included.") + book['status']=_('Skipped') uniqueurls.add(book['uniqueurl']) book['listorder']=i # BG d/l jobs don't come back in order. # Didn't matter until anthologies & 'marked' successes diff --git a/calibre-plugin/jobs.py b/calibre-plugin/jobs.py index d63c6834..e88369f7 100644 --- a/calibre-plugin/jobs.py +++ b/calibre-plugin/jobs.py @@ -13,6 +13,7 @@ logger = logging.getLogger(__name__) import traceback from datetime import time from StringIO import StringIO +from collections import defaultdict from calibre.utils.ipc.server import Server from calibre.utils.ipc.job import ParallelJob @@ -93,16 +94,39 @@ def do_download_worker(book_list, logger.info(job.details) if count >= total: - ## ordering first by good vs bad, then by listorder. - good_list = [ x for x in book_list if x['good'] ] - bad_list = [ x for x in book_list if not x['good'] ] - good_list = sorted(good_list,key=lambda x : x['listorder']) - bad_list = sorted(bad_list,key=lambda x : x['listorder']) + book_list = sorted(book_list,key=lambda x : x['listorder']) + logger.info("\n"+_("Download Results:")+"\n%s\n"%("\n".join([ "%(status)s %(url)s %(comment)s" % book for book in book_list]))) - logger.info("\n"+_("Download Results:")+"\n%s\n"%("\n".join([ "%(url)s %(comment)s" % book for book in good_list+bad_list]))) + good_lists = defaultdict(list) + bad_lists = defaultdict(list) + for book in book_list: + if book['good']: + good_lists[book['status']].append(book) + else: + bad_lists[book['status']].append(book) - logger.info("\n"+_("Successful:")+"\n%s\n"%("\n".join([book['url'] for book in good_list]))) - logger.info("\n"+_("Unsuccessful:")+"\n%s\n"%("\n".join([book['url'] for book in bad_list]))) + order = [_('Add'), + _('Update'), + _('Meta'), + _('Different URL'), + _('Rejected'), + _('Skipped'), + _('Bad'), + _('Error'), + ] + j = 0 + for d in [ good_lists, bad_lists ]: + for status in order: + if d[status]: + l = d[status] + logger.info("\n"+status+"\n%s\n"%("\n".join([book['url'] for book in l]))) + for book in l: + book['reportorder'] = j + j += 1 + del d[status] + # just in case a status is added but doesn't appear in order. + for status in d.keys(): + logger.info("\n"+status+"\n%s\n"%("\n".join([book['url'] for book in d[status]]))) break server.close() @@ -306,12 +330,14 @@ def do_download_for_worker(book,options,merge,notification=lambda x,y:x): except NotGoingToDownload as d: book['good']=False + book['status']=_('Bad') book['showerror']=d.showerror book['comment']=unicode(d) book['icon'] = d.icon except Exception as e: book['good']=False + book['status']=_('Error') book['comment']=unicode(e) book['icon']='dialog_error.png' book['status'] = _('Error') diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot index 0a09160e..20ab7dbf 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: 2019-05-16 14:52+Central Daylight Time\n" +"POT-Creation-Date: 2019-07-12 21:47+Central Daylight Time\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -440,7 +440,7 @@ msgid "" "http://...,title by author - note" msgstr "" -#: config.py:695 dialogs.py:1161 +#: config.py:695 dialogs.py:1162 msgid "Add this reason to all URLs added:" msgstr "" @@ -728,7 +728,7 @@ msgstr "" msgid "Language" msgstr "" -#: config.py:1283 fff_plugin.py:1500 fff_plugin.py:1713 fff_plugin.py:1743 +#: config.py:1283 fff_plugin.py:1501 fff_plugin.py:1710 fff_plugin.py:1733 msgid "Status" msgstr "" @@ -756,7 +756,7 @@ msgstr "" msgid "Published" msgstr "" -#: config.py:1290 fff_plugin.py:1891 fff_plugin.py:1907 +#: config.py:1290 fff_plugin.py:1873 fff_plugin.py:1889 msgid "Updated" msgstr "" @@ -800,8 +800,8 @@ msgstr "" msgid "Extra Tags" msgstr "" -#: config.py:1301 config.py:1459 dialogs.py:952 dialogs.py:1048 -#: fff_plugin.py:1500 fff_plugin.py:1713 fff_plugin.py:1743 +#: config.py:1301 config.py:1459 dialogs.py:953 dialogs.py:1049 +#: fff_plugin.py:1501 fff_plugin.py:1710 fff_plugin.py:1733 msgid "Title" msgstr "" @@ -813,8 +813,8 @@ msgstr "" msgid "Description" msgstr "" -#: config.py:1304 dialogs.py:952 dialogs.py:1048 fff_plugin.py:1500 -#: fff_plugin.py:1713 fff_plugin.py:1743 +#: config.py:1304 dialogs.py:953 dialogs.py:1049 fff_plugin.py:1501 +#: fff_plugin.py:1710 fff_plugin.py:1733 msgid "Author" msgstr "" @@ -894,11 +894,11 @@ msgstr "" msgid "If unchecked, these errors will not be saved: %s" msgstr "" -#: config.py:1403 fff_plugin.py:1372 jobs.py:217 +#: config.py:1403 fff_plugin.py:1373 jobs.py:241 msgid "Not Overwriting, web site is not newer." msgstr "" -#: config.py:1404 fff_plugin.py:1351 jobs.py:258 +#: config.py:1404 fff_plugin.py:1352 jobs.py:282 msgid "Already contains %d chapters." msgstr "" @@ -1116,33 +1116,33 @@ msgstr "" msgid "It's safest if you create a separate email account that you use only for your story update notices. FanFicFare and calibre cannot guarantee that malicious code cannot get your email password once you've entered it.
Use this feature at your own risk.
" msgstr "" -#: dialogs.py:269 dialogs.py:828 +#: dialogs.py:269 dialogs.py:829 msgid "Show Download Options" msgstr "" -#: dialogs.py:288 dialogs.py:848 +#: dialogs.py:288 dialogs.py:849 msgid "Output &Format:" msgstr "" -#: dialogs.py:296 dialogs.py:856 +#: dialogs.py:296 dialogs.py:857 msgid "Choose output format to create. May set default from plugin configuration." msgstr "" -#: dialogs.py:324 dialogs.py:876 +#: dialogs.py:324 dialogs.py:877 msgid "Update Calibre &Metadata?" msgstr "" -#: dialogs.py:325 dialogs.py:877 +#: dialogs.py:325 dialogs.py:878 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:331 dialogs.py:881 +#: dialogs.py:331 dialogs.py:882 msgid "Update EPUB Cover?" msgstr "" -#: dialogs.py:332 dialogs.py:882 +#: dialogs.py:332 dialogs.py:883 msgid "Update book cover image from site or defaults (if found) inside the EPUB when EPUB is updated." msgstr "" @@ -1201,11 +1201,11 @@ msgid "" "Requires %s plugin." msgstr "" -#: dialogs.py:547 dialogs.py:601 dialogs.py:648 dialogs.py:1575 +#: dialogs.py:547 dialogs.py:601 dialogs.py:648 dialogs.py:1576 msgid "Cancel" msgstr "" -#: dialogs.py:579 dialogs.py:1563 +#: dialogs.py:579 dialogs.py:1564 msgid "Password" msgstr "" @@ -1229,19 +1229,19 @@ msgstr "" msgid "Password:" msgstr "" -#: dialogs.py:597 dialogs.py:770 dialogs.py:1571 +#: dialogs.py:597 dialogs.py:771 dialogs.py:1572 msgid "OK" msgstr "" -#: dialogs.py:619 dialogs.py:643 fff_plugin.py:974 +#: dialogs.py:619 dialogs.py:643 fff_plugin.py:975 msgid "Fetching metadata for stories..." msgstr "" -#: dialogs.py:620 dialogs.py:644 fff_plugin.py:975 +#: dialogs.py:620 dialogs.py:644 fff_plugin.py:976 msgid "Downloading metadata for stories" msgstr "" -#: dialogs.py:621 dialogs.py:645 fff_plugin.py:976 +#: dialogs.py:621 dialogs.py:645 fff_plugin.py:977 msgid "Fetched metadata for" msgstr "" @@ -1249,163 +1249,167 @@ msgstr "" msgid " - %s estimated until done" msgstr "" -#: dialogs.py:699 fff_plugin.py:1192 +#: dialogs.py:699 fff_plugin.py:1193 fff_plugin.py:2400 jobs.py:113 msgid "Skipped" msgstr "" -#: dialogs.py:730 +#: dialogs.py:707 fff_plugin.py:1936 jobs.py:115 jobs.py:340 jobs.py:343 +msgid "Error" +msgstr "" + +#: dialogs.py:731 msgid "%d day" msgstr "" -#: dialogs.py:730 +#: dialogs.py:731 msgid "%d days" msgstr "" -#: dialogs.py:731 +#: dialogs.py:732 msgid "%d hour" msgstr "" -#: dialogs.py:731 +#: dialogs.py:732 msgid "%d hours" msgstr "" -#: dialogs.py:732 +#: dialogs.py:733 msgid "%d minute" msgstr "" -#: dialogs.py:732 +#: dialogs.py:733 msgid "%d minutes" msgstr "" -#: dialogs.py:733 +#: dialogs.py:734 msgid "%d second" msgstr "" -#: dialogs.py:733 +#: dialogs.py:734 msgid "%d seconds" msgstr "" -#: dialogs.py:748 +#: dialogs.py:749 msgid "less than 1 second" msgstr "" -#: dialogs.py:765 fff_plugin.py:387 fff_plugin.py:390 +#: dialogs.py:766 fff_plugin.py:387 fff_plugin.py:390 msgid "About FanFicFare" msgstr "" -#: dialogs.py:819 +#: dialogs.py:820 msgid "Remove selected books from the list" msgstr "" -#: dialogs.py:861 +#: dialogs.py:862 msgid "Update Mode:" msgstr "" -#: dialogs.py:864 +#: dialogs.py:865 msgid "What sort of update to perform. May set default from plugin configuration." msgstr "" -#: dialogs.py:886 +#: dialogs.py:887 msgid "Background Metadata?" msgstr "" -#: dialogs.py:887 +#: dialogs.py:888 msgid "Collect Metadata from sites in a Background process.
This returns control to you quicker while updating, but you won't be asked for username/passwords or if you are an adult--stories that need those will just fail." msgstr "" -#: dialogs.py:952 fff_plugin.py:1500 fff_plugin.py:1713 fff_plugin.py:1743 +#: dialogs.py:953 fff_plugin.py:1501 fff_plugin.py:1710 fff_plugin.py:1733 msgid "Comment" msgstr "" -#: dialogs.py:1020 +#: dialogs.py:1021 msgid "Are you sure you want to remove this book from the list?" msgstr "" -#: dialogs.py:1022 +#: dialogs.py:1023 msgid "Are you sure you want to remove the selected %d books from the list?" msgstr "" -#: dialogs.py:1048 +#: dialogs.py:1049 msgid "Note" msgstr "" -#: dialogs.py:1087 +#: dialogs.py:1088 msgid "Select or Edit Reject Note." msgstr "" -#: dialogs.py:1096 +#: dialogs.py:1097 msgid "Are you sure you want to remove this URL from the list?" msgstr "" -#: dialogs.py:1098 +#: dialogs.py:1099 msgid "Are you sure you want to remove the %d selected URLs from the list?" msgstr "" -#: dialogs.py:1116 +#: dialogs.py:1117 msgid "List of Books to Reject" msgstr "" -#: dialogs.py:1129 +#: dialogs.py:1130 msgid "FFF will remember these URLs and display the note and offer to reject them if you try to download them again later." msgstr "" -#: dialogs.py:1143 +#: dialogs.py:1144 msgid "Remove selected URLs from the list" msgstr "" -#: dialogs.py:1158 dialogs.py:1162 +#: dialogs.py:1159 dialogs.py:1163 msgid "This will be added to whatever note you've set for each URL above." msgstr "" -#: dialogs.py:1175 +#: dialogs.py:1176 msgid "Delete Books (including books without FanFiction URLs)?" msgstr "" -#: dialogs.py:1176 +#: dialogs.py:1177 msgid "Delete the selected books after adding them to the Rejected URLs list." msgstr "" -#: dialogs.py:1332 +#: dialogs.py:1333 msgid "Search for string in edit box." msgstr "" -#: dialogs.py:1335 +#: dialogs.py:1336 msgid "Find:" msgstr "" -#: dialogs.py:1340 +#: dialogs.py:1341 msgid "Find" msgstr "" -#: dialogs.py:1350 +#: dialogs.py:1351 msgid "Case sensitive" msgstr "" -#: dialogs.py:1351 +#: dialogs.py:1352 msgid "Search for case sensitive string; don't treat Harry, HARRY and harry all the same." msgstr "" -#: dialogs.py:1380 +#: dialogs.py:1381 msgid "Go back to fix errors?" msgstr "" -#: dialogs.py:1492 +#: dialogs.py:1493 msgid "Click an error below to return to Editing directly on that line:" msgstr "" -#: dialogs.py:1515 +#: dialogs.py:1516 msgid "Click to go to line %s" msgstr "" -#: dialogs.py:1531 +#: dialogs.py:1532 msgid "Return to Editing" msgstr "" -#: dialogs.py:1535 +#: dialogs.py:1536 msgid "Save Anyway" msgstr "" -#: dialogs.py:1564 +#: dialogs.py:1565 msgid "Enter Email Password for %s:" msgstr "" @@ -1545,7 +1549,7 @@ msgstr "" msgid "Finished Fetching Story URLs from Page." msgstr "" -#: fff_plugin.py:554 fff_plugin.py:605 +#: fff_plugin.py:554 fff_plugin.py:606 msgid "List of Story URLs" msgstr "" @@ -1553,7 +1557,7 @@ msgstr "" msgid "No Valid Story URLs found on given page." msgstr "" -#: fff_plugin.py:571 fff_plugin.py:622 +#: fff_plugin.py:571 fff_plugin.py:623 msgid "No Selected Books to Get URLs From" msgstr "" @@ -1565,451 +1569,443 @@ msgstr "" msgid "Get URLs for stories" msgstr "" -#: fff_plugin.py:589 fff_plugin.py:707 fff_plugin.py:899 +#: fff_plugin.py:589 fff_plugin.py:708 fff_plugin.py:900 msgid "URL retrieved" msgstr "" -#: fff_plugin.py:609 -msgid "List of URLs" -msgstr "" - -#: fff_plugin.py:610 -msgid "No Story URLs found in selected books." -msgstr "" - -#: fff_plugin.py:617 -msgid "Can only UnNew books in library" -msgstr "" - -#: fff_plugin.py:634 -msgid "UnNewing books..." -msgstr "" - -#: fff_plugin.py:635 -msgid "UnNew Books" -msgstr "" - -#: fff_plugin.py:636 -msgid "Books UnNewed" -msgstr "" - -#: fff_plugin.py:682 fff_plugin.py:1672 -msgid "Starting auto conversion of %d books." -msgstr "" - -#: fff_plugin.py:697 -msgid "No Selected Books have URLs to Reject" -msgstr "" - -#: fff_plugin.py:705 -msgid "Collecting URLs for Reject List..." -msgstr "" - -#: fff_plugin.py:706 -msgid "Get URLs for Reject List" -msgstr "" - -#: fff_plugin.py:741 -msgid "Proceed to Remove?" -msgstr "" - -#: fff_plugin.py:741 -msgid "Rejecting FanFicFare URLs: None of the books selected have FanFiction URLs." -msgstr "" - -#: fff_plugin.py:763 -msgid "Cannot Make Anthologys without %s" -msgstr "" - -#: fff_plugin.py:767 fff_plugin.py:876 -msgid "Cannot Update Books from Device View" -msgstr "" - -#: fff_plugin.py:771 -msgid "Can only update 1 anthology at a time" -msgstr "" - -#: fff_plugin.py:780 -msgid "Can only Update Epub Anthologies" -msgstr "" - -#: fff_plugin.py:798 fff_plugin.py:799 -msgid "Cannot Update Anthology" -msgstr "" - -#: fff_plugin.py:799 -msgid "Book isn't an FanFicFare Anthology or contains book(s) without valid Story URLs." -msgstr "" - -#: fff_plugin.py:806 -msgid "Fetching Story URLs for Series..." -msgstr "" - -#: fff_plugin.py:816 -msgid "Finished Fetching Story URLs for Series." -msgstr "" - -#: fff_plugin.py:862 -msgid "There are %d stories in the current anthology that are not going to be kept if you go ahead." -msgstr "" - -#: fff_plugin.py:863 -msgid "Story URLs that will be removed:" -msgstr "" - -#: fff_plugin.py:865 -msgid "Update anyway?" -msgstr "" - -#: fff_plugin.py:866 -msgid "Stories Removed" -msgstr "" - -#: fff_plugin.py:883 -msgid "No Selected Books to Update" -msgstr "" - -#: fff_plugin.py:897 -msgid "Collecting stories for update..." -msgstr "" - -#: fff_plugin.py:898 -msgid "Get stories for updates" -msgstr "" - -#: fff_plugin.py:908 -msgid "Update Existing List" -msgstr "" - -#: fff_plugin.py:968 -msgid "Start queuing downloading for %s stories." -msgstr "" - -#: fff_plugin.py:969 -msgid "Queuing download for stories..." -msgstr "" - -#: fff_plugin.py:970 -msgid "Queuing download for stories" -msgstr "" - -#: fff_plugin.py:971 -msgid "Queued download for" -msgstr "" - -#: fff_plugin.py:973 -msgid "Started fetching metadata for %s stories." -msgstr "" - -#: fff_plugin.py:987 -msgid "No valid story URLs entered." -msgstr "" - -#: fff_plugin.py:997 fff_plugin.py:1003 -msgid "Reject URL?" -msgstr "" - -#: fff_plugin.py:1004 fff_plugin.py:1022 -msgid "%s is on your Reject URL list:" -msgstr "" - -#: fff_plugin.py:1006 -msgid "Click 'Yes' to Reject." -msgstr "" - -#: fff_plugin.py:1007 fff_plugin.py:1184 -msgid "Click 'No' to download anyway." -msgstr "" - -#: fff_plugin.py:1009 -msgid "Story on Reject URLs list (%s)." -msgstr "" - -#: fff_plugin.py:1012 -msgid "Rejected" -msgstr "" - -#: fff_plugin.py:1015 -msgid "Remove Reject URL?" -msgstr "" - -#: fff_plugin.py:1021 -msgid "Remove URL from Reject List?" -msgstr "" - -#: fff_plugin.py:1024 -msgid "Click 'Yes' to remove it from the list," -msgstr "" - -#: fff_plugin.py:1025 -msgid "Click 'No' to leave it on the list." -msgstr "" - -#: fff_plugin.py:1046 -msgid "Are You an Adult?" -msgstr "" - -#: fff_plugin.py:1047 -msgid "%s requires that you be an adult. Please confirm you are an adult in your locale:" -msgstr "" - -#: fff_plugin.py:1092 -msgid "Cannot update non-epub format." -msgstr "" - -#: fff_plugin.py:1175 -msgid "Skip Story?" -msgstr "" - -#: fff_plugin.py:1181 -msgid "Skip Anthology Story?" -msgstr "" - -#: fff_plugin.py:1182 -msgid "\"%s\" is in series \"%s\" that you have an anthology book for." -msgstr "" - -#: fff_plugin.py:1183 -msgid "Click 'Yes' to Skip." -msgstr "" - -#: fff_plugin.py:1186 -msgid "Story in Series Anthology(%s)." -msgstr "" - -#: fff_plugin.py:1202 -msgid "Add" -msgstr "" - -#: fff_plugin.py:1235 -msgid "Meta" -msgstr "" - -#: fff_plugin.py:1264 -msgid "Skipping duplicate story." -msgstr "" - -#: fff_plugin.py:1267 -msgid "More than one identical book by Identifier URL or title/author(s)--can't tell which book to update/overwrite." -msgstr "" - -#: fff_plugin.py:1278 -msgid "Update" -msgstr "" - -#: fff_plugin.py:1288 -msgid "Update declined due to differing story URL(%s)(%s tag present)" -msgstr "" - -#: fff_plugin.py:1291 fff_plugin.py:1328 -msgid "Different URL" -msgstr "" - -#: fff_plugin.py:1293 fff_plugin.py:1300 -msgid "Change Story URL?" -msgstr "" - -#: fff_plugin.py:1301 -msgid "%s by %s is already in your library with a different source URL:" -msgstr "" - -#: fff_plugin.py:1302 -msgid "In library: %(liburl)s" -msgstr "" - -#: fff_plugin.py:1303 fff_plugin.py:1317 -msgid "New URL: %(newurl)s" -msgstr "" - -#: fff_plugin.py:1304 -msgid "Click 'Yes' to update/overwrite book with new URL." -msgstr "" - -#: fff_plugin.py:1305 -msgid "Click 'No' to skip updating/overwriting this book." -msgstr "" - -#: fff_plugin.py:1307 fff_plugin.py:1314 -msgid "Download as New Book?" -msgstr "" - -#: fff_plugin.py:1315 -msgid "%s by %s is already in your library with a different source URL." -msgstr "" - -#: fff_plugin.py:1316 -msgid "You chose not to update the existing book. Do you want to add a new book for this URL?" -msgstr "" - -#: fff_plugin.py:1318 -msgid "Click 'Yes' to a new book with new URL." -msgstr "" - -#: fff_plugin.py:1319 -msgid "Click 'No' to skip URL." -msgstr "" - -#: fff_plugin.py:1325 -msgid "Update declined by user due to differing story URL(%s)" -msgstr "" - -#: fff_plugin.py:1333 -msgid "Metadata collected." -msgstr "" - -#: fff_plugin.py:1353 jobs.py:260 -msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update." -msgstr "" - -#: fff_plugin.py:1355 jobs.py:262 -msgid "FanFicFare doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update." -msgstr "" - -#: fff_plugin.py:1496 -msgid "None of the %d URLs/stories given can be/need to be downloaded." -msgstr "" - -#: fff_plugin.py:1497 fff_plugin.py:1709 fff_plugin.py:1739 -msgid "See log for details." -msgstr "" - -#: fff_plugin.py:1498 -msgid "Proceed with updating your library(Error or Last Checked Columns, if configured)?" -msgstr "" - -#: fff_plugin.py:1505 fff_plugin.py:1721 fff_plugin.py:1755 +#: fff_plugin.py:599 jobs.py:114 jobs.py:333 msgid "Bad" msgstr "" -#: fff_plugin.py:1516 fff_plugin.py:1522 +#: fff_plugin.py:610 +msgid "List of URLs" +msgstr "" + +#: fff_plugin.py:611 +msgid "No Story URLs found in selected books." +msgstr "" + +#: fff_plugin.py:618 +msgid "Can only UnNew books in library" +msgstr "" + +#: fff_plugin.py:635 +msgid "UnNewing books..." +msgstr "" + +#: fff_plugin.py:636 +msgid "UnNew Books" +msgstr "" + +#: fff_plugin.py:637 +msgid "Books UnNewed" +msgstr "" + +#: fff_plugin.py:683 fff_plugin.py:1669 +msgid "Starting auto conversion of %d books." +msgstr "" + +#: fff_plugin.py:698 +msgid "No Selected Books have URLs to Reject" +msgstr "" + +#: fff_plugin.py:706 +msgid "Collecting URLs for Reject List..." +msgstr "" + +#: fff_plugin.py:707 +msgid "Get URLs for Reject List" +msgstr "" + +#: fff_plugin.py:742 +msgid "Proceed to Remove?" +msgstr "" + +#: fff_plugin.py:742 +msgid "Rejecting FanFicFare URLs: None of the books selected have FanFiction URLs." +msgstr "" + +#: fff_plugin.py:764 +msgid "Cannot Make Anthologys without %s" +msgstr "" + +#: fff_plugin.py:768 fff_plugin.py:877 +msgid "Cannot Update Books from Device View" +msgstr "" + +#: fff_plugin.py:772 +msgid "Can only update 1 anthology at a time" +msgstr "" + +#: fff_plugin.py:781 +msgid "Can only Update Epub Anthologies" +msgstr "" + +#: fff_plugin.py:799 fff_plugin.py:800 +msgid "Cannot Update Anthology" +msgstr "" + +#: fff_plugin.py:800 +msgid "Book isn't an FanFicFare Anthology or contains book(s) without valid Story URLs." +msgstr "" + +#: fff_plugin.py:807 +msgid "Fetching Story URLs for Series..." +msgstr "" + +#: fff_plugin.py:817 +msgid "Finished Fetching Story URLs for Series." +msgstr "" + +#: fff_plugin.py:863 +msgid "There are %d stories in the current anthology that are not going to be kept if you go ahead." +msgstr "" + +#: fff_plugin.py:864 +msgid "Story URLs that will be removed:" +msgstr "" + +#: fff_plugin.py:866 +msgid "Update anyway?" +msgstr "" + +#: fff_plugin.py:867 +msgid "Stories Removed" +msgstr "" + +#: fff_plugin.py:884 +msgid "No Selected Books to Update" +msgstr "" + +#: fff_plugin.py:898 +msgid "Collecting stories for update..." +msgstr "" + +#: fff_plugin.py:899 +msgid "Get stories for updates" +msgstr "" + +#: fff_plugin.py:909 +msgid "Update Existing List" +msgstr "" + +#: fff_plugin.py:969 +msgid "Start queuing downloading for %s stories." +msgstr "" + +#: fff_plugin.py:970 +msgid "Queuing download for stories..." +msgstr "" + +#: fff_plugin.py:971 +msgid "Queuing download for stories" +msgstr "" + +#: fff_plugin.py:972 +msgid "Queued download for" +msgstr "" + +#: fff_plugin.py:974 +msgid "Started fetching metadata for %s stories." +msgstr "" + +#: fff_plugin.py:988 +msgid "No valid story URLs entered." +msgstr "" + +#: fff_plugin.py:998 fff_plugin.py:1004 +msgid "Reject URL?" +msgstr "" + +#: fff_plugin.py:1005 fff_plugin.py:1023 +msgid "%s is on your Reject URL list:" +msgstr "" + +#: fff_plugin.py:1007 +msgid "Click 'Yes' to Reject." +msgstr "" + +#: fff_plugin.py:1008 fff_plugin.py:1185 +msgid "Click 'No' to download anyway." +msgstr "" + +#: fff_plugin.py:1010 +msgid "Story on Reject URLs list (%s)." +msgstr "" + +#: fff_plugin.py:1013 jobs.py:112 +msgid "Rejected" +msgstr "" + +#: fff_plugin.py:1016 +msgid "Remove Reject URL?" +msgstr "" + +#: fff_plugin.py:1022 +msgid "Remove URL from Reject List?" +msgstr "" + +#: fff_plugin.py:1025 +msgid "Click 'Yes' to remove it from the list," +msgstr "" + +#: fff_plugin.py:1026 +msgid "Click 'No' to leave it on the list." +msgstr "" + +#: fff_plugin.py:1047 +msgid "Are You an Adult?" +msgstr "" + +#: fff_plugin.py:1048 +msgid "%s requires that you be an adult. Please confirm you are an adult in your locale:" +msgstr "" + +#: fff_plugin.py:1093 +msgid "Cannot update non-epub format." +msgstr "" + +#: fff_plugin.py:1176 +msgid "Skip Story?" +msgstr "" + +#: fff_plugin.py:1182 +msgid "Skip Anthology Story?" +msgstr "" + +#: fff_plugin.py:1183 +msgid "\"%s\" is in series \"%s\" that you have an anthology book for." +msgstr "" + +#: fff_plugin.py:1184 +msgid "Click 'Yes' to Skip." +msgstr "" + +#: fff_plugin.py:1187 +msgid "Story in Series Anthology(%s)." +msgstr "" + +#: fff_plugin.py:1203 jobs.py:108 +msgid "Add" +msgstr "" + +#: fff_plugin.py:1236 jobs.py:110 +msgid "Meta" +msgstr "" + +#: fff_plugin.py:1265 +msgid "Skipping duplicate story." +msgstr "" + +#: fff_plugin.py:1268 +msgid "More than one identical book by Identifier URL or title/author(s)--can't tell which book to update/overwrite." +msgstr "" + +#: fff_plugin.py:1279 jobs.py:109 +msgid "Update" +msgstr "" + +#: fff_plugin.py:1289 +msgid "Update declined due to differing story URL(%s)(%s tag present)" +msgstr "" + +#: fff_plugin.py:1292 fff_plugin.py:1329 jobs.py:111 +msgid "Different URL" +msgstr "" + +#: fff_plugin.py:1294 fff_plugin.py:1301 +msgid "Change Story URL?" +msgstr "" + +#: fff_plugin.py:1302 +msgid "%s by %s is already in your library with a different source URL:" +msgstr "" + +#: fff_plugin.py:1303 +msgid "In library: %(liburl)s" +msgstr "" + +#: fff_plugin.py:1304 fff_plugin.py:1318 +msgid "New URL: %(newurl)s" +msgstr "" + +#: fff_plugin.py:1305 +msgid "Click 'Yes' to update/overwrite book with new URL." +msgstr "" + +#: fff_plugin.py:1306 +msgid "Click 'No' to skip updating/overwriting this book." +msgstr "" + +#: fff_plugin.py:1308 fff_plugin.py:1315 +msgid "Download as New Book?" +msgstr "" + +#: fff_plugin.py:1316 +msgid "%s by %s is already in your library with a different source URL." +msgstr "" + +#: fff_plugin.py:1317 +msgid "You chose not to update the existing book. Do you want to add a new book for this URL?" +msgstr "" + +#: fff_plugin.py:1319 +msgid "Click 'Yes' to a new book with new URL." +msgstr "" + +#: fff_plugin.py:1320 +msgid "Click 'No' to skip URL." +msgstr "" + +#: fff_plugin.py:1326 +msgid "Update declined by user due to differing story URL(%s)" +msgstr "" + +#: fff_plugin.py:1334 +msgid "Metadata collected." +msgstr "" + +#: fff_plugin.py:1354 jobs.py:284 +msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update." +msgstr "" + +#: fff_plugin.py:1356 jobs.py:286 +msgid "FanFicFare doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update." +msgstr "" + +#: fff_plugin.py:1497 +msgid "None of the %d URLs/stories given can be/need to be downloaded." +msgstr "" + +#: fff_plugin.py:1498 fff_plugin.py:1706 fff_plugin.py:1729 +msgid "See log for details." +msgstr "" + +#: fff_plugin.py:1499 +msgid "Proceed with updating your library(Error or Last Checked Columns, if configured)?" +msgstr "" + +#: fff_plugin.py:1513 fff_plugin.py:1519 msgid "FanFicFare download ended" msgstr "" -#: fff_plugin.py:1516 fff_plugin.py:1522 fff_plugin.py:1766 fff_plugin.py:1772 +#: fff_plugin.py:1513 fff_plugin.py:1519 fff_plugin.py:1748 fff_plugin.py:1754 msgid "FanFicFare log" msgstr "" -#: fff_plugin.py:1543 +#: fff_plugin.py:1540 msgid "Download %s FanFiction Book(s)" msgstr "" -#: fff_plugin.py:1550 +#: fff_plugin.py:1547 msgid "Starting %d FanFicFare Downloads" msgstr "" -#: fff_plugin.py:1584 +#: fff_plugin.py:1581 msgid "Story Details:" msgstr "" -#: fff_plugin.py:1587 +#: fff_plugin.py:1584 msgid "Error Updating Metadata" msgstr "" -#: fff_plugin.py:1588 +#: fff_plugin.py:1585 msgid "An error has occurred while FanFicFare was updating calibre's metadata for %s." msgstr "" -#: fff_plugin.py:1589 +#: fff_plugin.py:1586 msgid "The ebook has been updated, but the metadata has not." msgstr "" -#: fff_plugin.py:1643 +#: fff_plugin.py:1640 msgid "Finished Adding/Updating %d books." msgstr "" -#: fff_plugin.py:1693 +#: fff_plugin.py:1690 msgid "No Good Stories for Anthology" msgstr "" -#: fff_plugin.py:1694 +#: fff_plugin.py:1691 msgid "No good stories/updates where downloaded, Anthology creation/update aborted." msgstr "" -#: fff_plugin.py:1699 fff_plugin.py:1738 +#: fff_plugin.py:1696 fff_plugin.py:1728 msgid "FanFicFare found %s good and %s bad updates." msgstr "" -#: fff_plugin.py:1706 +#: fff_plugin.py:1703 msgid "Are you sure you want to continue with creating/updating this Anthology?" msgstr "" -#: fff_plugin.py:1707 +#: fff_plugin.py:1704 msgid "Any updates that failed will not be included in the Anthology." msgstr "" -#: fff_plugin.py:1708 +#: fff_plugin.py:1705 msgid "However, if there's an older version, it will still be included." msgstr "" -#: fff_plugin.py:1711 +#: fff_plugin.py:1708 msgid "Proceed with updating this anthology and your library?" msgstr "" -#: fff_plugin.py:1719 fff_plugin.py:1748 -msgid "Good" -msgstr "" - -#: fff_plugin.py:1740 +#: fff_plugin.py:1730 msgid "Proceed with updating your library?" msgstr "" -#: fff_plugin.py:1766 fff_plugin.py:1772 +#: fff_plugin.py:1748 fff_plugin.py:1754 msgid "FanFicFare download complete" msgstr "" -#: fff_plugin.py:1786 +#: fff_plugin.py:1768 msgid "Merging %s books." msgstr "" -#: fff_plugin.py:1875 +#: fff_plugin.py:1857 msgid "FanFicFare Adding/Updating books." msgstr "" -#: fff_plugin.py:1889 +#: fff_plugin.py:1871 msgid "Updating calibre for FanFiction stories..." msgstr "" -#: fff_plugin.py:1890 +#: fff_plugin.py:1872 msgid "Update calibre for FanFiction stories" msgstr "" -#: fff_plugin.py:1900 +#: fff_plugin.py:1882 msgid "Adding/Updating %s BAD books." msgstr "" -#: fff_plugin.py:1905 +#: fff_plugin.py:1887 msgid "Updating calibre for BAD FanFiction stories..." msgstr "" -#: fff_plugin.py:1906 +#: fff_plugin.py:1888 msgid "Update calibre for BAD FanFiction stories" msgstr "" -#: fff_plugin.py:1951 +#: fff_plugin.py:1933 msgid "Adding format to book failed for some reason..." msgstr "" -#: fff_plugin.py:1954 jobs.py:317 -msgid "Error" -msgstr "" - -#: fff_plugin.py:2299 +#: fff_plugin.py:2297 msgid "You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?" msgstr "" -#: fff_plugin.py:2311 +#: fff_plugin.py:2309 msgid "You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?" msgstr "" -#: fff_plugin.py:2321 fff_plugin.py:2339 +#: fff_plugin.py:2319 fff_plugin.py:2337 msgid "You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?" msgstr "" -#: fff_plugin.py:2327 +#: fff_plugin.py:2325 msgid "You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?" msgstr "" -#: fff_plugin.py:2400 +#: fff_plugin.py:2399 msgid "Same story already included." msgstr "" @@ -2045,39 +2041,31 @@ msgstr "" msgid "(was set, removed for security)" msgstr "" -#: jobs.py:74 +#: jobs.py:75 msgid "Downloading FanFiction Stories" msgstr "" -#: jobs.py:90 +#: jobs.py:91 msgid "%d of %d stories finished downloading" msgstr "" -#: jobs.py:102 +#: jobs.py:98 msgid "Download Results:" msgstr "" -#: jobs.py:104 -msgid "Successful:" -msgstr "" - -#: jobs.py:105 -msgid "Unsuccessful:" -msgstr "" - -#: jobs.py:137 +#: jobs.py:161 msgid "Download started..." msgstr "" -#: jobs.py:224 +#: jobs.py:248 msgid "Download %s completed, %s chapters." msgstr "" -#: jobs.py:251 +#: jobs.py:275 msgid "Already contains %d chapters. Reuse as is." msgstr "" -#: jobs.py:274 +#: jobs.py:298 msgid "Update %s completed, added %s chapters for %s total." msgstr ""