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='
| '+_('Status')+' | '+_('Title')+' | '+_('Author')+' | '+_('Comment')+' | URL |
'
for book in book_list:
- if 'status' in book:
- status = book['status']
- else:
- status = _('Bad')
- htmllog = htmllog + '| ' + ' | '.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
+ htmllog = htmllog + '| ' + ' | '.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
htmllog = htmllog + '
'
@@ -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='| '+_('Status')+' | '+_('Title')+' | '+_('Author')+' | '+_('Comment')+' | URL |
'
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 + '| ' + ' | '.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
+ htmllog = htmllog + '| ' + ' | '.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
htmllog = htmllog + '
'
@@ -1742,18 +1732,10 @@ class FanFicFarePlugin(InterfaceAction):
htmllog='| '+_('Status')+' | '+_('Title')+' | '+_('Author')+' | '+_('Comment')+' | URL |
'
for book in good_list:
- if 'status' in book:
- status = book['status']
- else:
- status = _('Good')
- htmllog = htmllog + '| ' + ' | '.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
+ htmllog = htmllog + '| ' + ' | '.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
for book in bad_list:
- if 'status' in book:
- status = book['status']
- else:
- status = _('Bad')
- htmllog = htmllog + '| ' + ' | '.join([escapehtml(status),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
+ htmllog = htmllog + '| ' + ' | '.join([escapehtml(book['status']),escapehtml(book['title']),escapehtml(", ".join(book['author'])),escapehtml(book['comment']),book['url']]) + ' |
'
htmllog = htmllog + '
'
@@ -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 ""