diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py
index 0ef49b5..8f57c27 100644
--- a/calibre-plugin/config.py
+++ b/calibre-plugin/config.py
@@ -78,6 +78,8 @@ no_trans = { 'pini':'personal.ini',
'p':'password',
}
+STD_COLS_SKIP = ['size','cover','news','ondevice','path','series_sort','sort']
+
from calibre_plugins.fanficfare_plugin.prefs \
import (prefs, PREFS_NAMESPACE, updatecalcover_order, calcover_save_options,
gencalcover_order, SAVE_YES, SAVE_NO)
@@ -686,7 +688,7 @@ class PersonalIniTab(QWidget):
def show_showcalcols(self):
lines=[]#[('calibre_std_user_categories',_('User Categories'))]
for k,f in field_metadata.iteritems():
- if f['name']: # only if it has a human readable name.
+ if f['name'] and k not in STD_COLS_SKIP: # only if it has a human readable name.
lines.append(('calibre_std_'+k,f['name']))
for k, column in self.plugin_action.gui.library_view.model().custom_columns.iteritems():
diff --git a/calibre-plugin/fff_plugin.py b/calibre-plugin/fff_plugin.py
index 77213db..3bfbb98 100644
--- a/calibre-plugin/fff_plugin.py
+++ b/calibre-plugin/fff_plugin.py
@@ -76,7 +76,7 @@ from calibre_plugins.fanficfare_plugin.fff_util import (
get_fff_adapter, get_fff_config, get_fff_personalini)
from calibre_plugins.fanficfare_plugin.config import (
- permitted_values, rejecturllist)
+ permitted_values, rejecturllist, STD_COLS_SKIP)
from calibre_plugins.fanficfare_plugin.prefs import (
prefs, SAVE_YES, SAVE_NO, SAVE_YES_IF_IMG, SAVE_YES_UNLESS_IMG)
@@ -803,10 +803,10 @@ class FanFicFarePlugin(InterfaceAction):
# No need to do anything with perfs here, but we could.
prefs
- def make_id_searchstr(self,url):
+ def do_id_search(self,url):
# older idents can be uri vs url and have | instead of : after
# http, plus many sites are now switching to https.
- return 'identifiers:"~ur(i|l):~^%s$"'%re.sub(r'https?\\\:','https?(\:|\|)',re.escape(url))
+ return self.gui.current_db.search_getting_ids('identifiers:"~ur(i|l):~^%s$"'%re.sub(r'https?\\\:','https?(\:|\|)',re.escape(url)),None)
def prep_downloads(self, options, books, merge=False, extrapayload=None):
'''Fetch metadata for stories from servers, launch BG job when done.'''
@@ -922,20 +922,29 @@ class FanFicFarePlugin(InterfaceAction):
options['cookiejar'] = adapter.get_empty_cookiejar()
adapter.set_cookiejar(options['cookiejar'])
- ## XXX 1==0 and
if collision in (CALIBREONLY, CALIBREONLYSAVECOL):
+ ## Getting metadata from configured column.
custom_columns = self.gui.library_view.model().custom_columns
if ( collision in (CALIBREONLYSAVECOL) and
- book['calibre_id'] and
prefs['savemetacol'] != '' and
prefs['savemetacol'] in custom_columns ):
- label = custom_columns[prefs['savemetacol']]['label']
- savedmetadata = db.get_custom(book['calibre_id'], label=label, index_is_id=True)
- else:
- savedmetadata = None
-
- if savedmetadata:
- adapter.setStoryMetadata(savedmetadata)
+
+ savedmeta_book_id = book['calibre_id']
+ # won't have calibre_id if update by URL vs book.
+ if not savedmeta_book_id:
+ identicalbooks = self.do_id_search(url)
+ if len(identicalbooks) == 1:
+ savedmeta_book_id = identicalbooks.pop()
+
+ if savedmeta_book_id:
+ label = custom_columns[prefs['savemetacol']]['label']
+ savedmetadata = db.get_custom(savedmeta_book_id, label=label, index_is_id=True)
+ else:
+ savedmetadata = None
+
+ if savedmetadata:
+ # sets flag inside story so getStoryMetadataOnly won't hit server.
+ adapter.setStoryMetadata(savedmetadata)
# let other exceptions percolate up.
story = adapter.getStoryMetadataOnly(get_cover=False)
@@ -978,9 +987,7 @@ class FanFicFarePlugin(InterfaceAction):
series = story.getMetadata('series')
if not merge and series and prefs['checkforseriesurlid']:
# try to find *series anthology* by *seriesUrl* identifier url or uri first.
- searchstr = self.make_id_searchstr(story.getMetadata('seriesUrl'))
- identicalbooks = db.search_getting_ids(searchstr, None)
- # print("searchstr:%s"%searchstr)
+ identicalbooks = self.do_id_search(story.getMetadata('seriesUrl'))
# print("identicalbooks:%s"%identicalbooks)
if len(identicalbooks) > 0 and question_dialog(self.gui, _('Skip Story?'),'''
%s
@@ -1001,44 +1008,6 @@ class FanFicFarePlugin(InterfaceAction):
book['status'] = _('Skipped')
return
- ## if existing book, populate existing calibre column values in
- ## metadata.
- if 'calibre_id' in book:
- book['calibre_columns']={}
- # std columns
- mi = db.get_metadata(book['calibre_id'],index_is_id=True)
- # book['calibre_columns']['calibre_std_identifiers']=\
- # {'val':', '.join(["%s:%s"%(k,v) for (k,v) in mi.get_identifiers().iteritems()]),
- # 'label':_('Ids')}
- for k in mi.standard_field_keys():
- # for k in mi:
- (label,value,v,fmd) = mi.format_field_extended(k)
- if not label and k in field_metadata:
- label=field_metadata[k]['name']
- key='calibre_std_'+k
-
- # if k == 'user_categories':
- # value=u', '.join(mi.get(k))
- # label=_('User Categories')
-
- if label: # only if it has a human readable name.
- book['calibre_columns'][key]={'val':value,'label':label}
- #logger.debug("%s(%s): %s"%(label,key,value))
-
- # custom columns
- for k, column in self.gui.library_view.model().custom_columns.iteritems():
- if k != prefs['savemetacol']:
- key='calibre_cust_'+k[1:]
- label=column['name']
- value=db.get_custom(book['calibre_id'],
- label=column['label'],
- index_is_id=True)
- # custom always have name.
- if value is None:
- value=''
- book['calibre_columns'][key]={'val':value,'label':label}
- # logger.debug("%s(%s): %s"%(label,key,value))
-
################################################################################################################################################33
# set PI version instead of default.
@@ -1047,6 +1016,7 @@ class FanFicFarePlugin(InterfaceAction):
# all_metadata duplicates some data, but also includes extra_entries, etc.
book['all_metadata'] = story.getAllMetadata(removeallentities=True)
+ # get metadata to save in configured column.
book['savemetacol'] = story.dump_html_metadata()
book['title'] = story.getMetadata("title", removeallentities=True)
@@ -1093,9 +1063,7 @@ class FanFicFarePlugin(InterfaceAction):
logger.debug("from URL(%s)"%url)
# try to find by identifier url or uri first.
- searchstr = self.make_id_searchstr(url)
- identicalbooks = db.search_getting_ids(searchstr, None)
- # print("searchstr:%s"%searchstr)
+ identicalbooks = self.do_id_search(url)
# print("identicalbooks:%s"%identicalbooks)
if len(identicalbooks) < 1:
# find dups
@@ -1227,6 +1195,51 @@ class FanFicFarePlugin(InterfaceAction):
#print("calibre_series:%s [%s]"%book['calibre_series'])
if book['good']: # there shouldn't be any !'good' books at this point.
+
+ ## Filling calibre_std_* and calibre_cust_* metadata
+ book['calibre_columns']={}
+ # std columns
+ mi = db.get_metadata(book['calibre_id'],index_is_id=True)
+ # book['calibre_columns']['calibre_std_identifiers']=\
+ # {'val':', '.join(["%s:%s"%(k,v) for (k,v) in mi.get_identifiers().iteritems()]),
+ # 'label':_('Ids')}
+ for k in mi.standard_field_keys():
+ # for k in mi:
+ if k in STD_COLS_SKIP:
+ continue
+ (label,value,v,fmd) = mi.format_field_extended(k)
+ if not label and k in field_metadata:
+ label=field_metadata[k]['name']
+ key='calibre_std_'+k
+
+ # if k == 'user_categories':
+ # value=u', '.join(mi.get(k))
+ # label=_('User Categories')
+
+ if label: # only if it has a human readable name.
+ if value is None or not book['calibre_id']:
+ ## if existing book, populate existing calibre column
+ ## values in metadata, else '' to hide.
+ value=''
+ book['calibre_columns'][key]={'val':value,'label':label}
+ #logger.debug("%s(%s): %s"%(label,key,value))
+
+ # custom columns
+ for k, column in self.gui.library_view.model().custom_columns.iteritems():
+ if k != prefs['savemetacol']:
+ key='calibre_cust_'+k[1:]
+ label=column['name']
+ value=db.get_custom(book['calibre_id'],
+ label=column['label'],
+ index_is_id=True)
+ # custom always have name.
+ if value is None or not book['calibre_id']:
+ ## if existing book, populate existing calibre column
+ ## values in metadata, else '' to hide.
+ value=''
+ book['calibre_columns'][key]={'val':value,'label':label}
+ # logger.debug("%s(%s): %s"%(label,key,value))
+
# if still 'good', make a temp file to write the output to.
# For HTML format users, make the filename inside the zip something reasonable.
# For crazy long titles/authors, limit it to 200chars.
@@ -1715,6 +1728,7 @@ class FanFicFarePlugin(InterfaceAction):
#print("all_metadata: %s"%book['all_metadata'])
custom_columns = self.gui.library_view.model().custom_columns
+ # save metadata to configured column
if 'savemetacol' in book and prefs['savemetacol'] != '' and prefs['savemetacol'] in custom_columns:
label = custom_columns[prefs['savemetacol']]['label']
self.set_custom(db, book_id, 'comment', book['savemetacol'], label=label, commit=True) # book['comment'] book['savemetacol'] = story.dump_html_metadata()
diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot
index a9c617a..f78fd9b 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: 2015-05-14 22:54+Central Daylight Time\n"
+"POT-Creation-Date: 2015-05-15 11:48+Central Daylight Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -71,97 +71,97 @@ msgstr ""
msgid "Restart calibre now"
msgstr ""
-#: config.py:187
+#: config.py:192
msgid "List of Supported Sites"
msgstr ""
-#: config.py:189
+#: config.py:194
msgid "FAQs"
msgstr ""
-#: config.py:204
+#: config.py:209
msgid "Basic"
msgstr ""
-#: config.py:215
+#: config.py:220
msgid "Calibre Cover"
msgstr ""
-#: config.py:223
+#: config.py:228
msgid "Standard Columns"
msgstr ""
-#: config.py:226
+#: config.py:231
msgid "Custom Columns"
msgstr ""
-#: config.py:229
+#: config.py:234
msgid "Email Settings"
msgstr ""
-#: config.py:232
+#: config.py:237
msgid "Other"
msgstr ""
-#: config.py:367
+#: config.py:375
msgid "These settings control the basic features of the plugin--downloading FanFiction."
msgstr ""
-#: config.py:371
+#: config.py:379
msgid "Defaults Options on Download"
msgstr ""
-#: config.py:375
+#: config.py:383
msgid "On each download, FanFicFare offers an option to select the output format.
This sets what that option will default to."
msgstr ""
-#: config.py:377
+#: config.py:385
msgid "Default Output &Format:"
msgstr ""
-#: config.py:392
+#: config.py:400
msgid "On each download, FanFicFare offers an option of what happens if that story already exists.
This sets what that option will default to."
msgstr ""
-#: config.py:394
+#: config.py:402
msgid "Default If Story Already Exists?"
msgstr ""
-#: config.py:409
+#: config.py:417
msgid "Default Update Calibre &Metadata?"
msgstr ""
-#: config.py:410
+#: config.py:418
msgid "On each download, FanFicFare offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site.
This sets whether that will default to on or off.
Columns set to 'New Only' in the column tabs will only be set for new books."
msgstr ""
-#: config.py:414
+#: config.py:422
msgid "Default Update EPUB Cover when Updating EPUB?"
msgstr ""
-#: config.py:415
+#: config.py:423
msgid "On each download, FanFicFare offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated.
This sets whether that will default to on or off."
msgstr ""
-#: config.py:420
+#: config.py:428
msgid "Updating Calibre Options"
msgstr ""
-#: config.py:424
+#: config.py:432
msgid "Delete other existing formats?"
msgstr ""
-#: config.py:425
+#: config.py:433
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:429
+#: config.py:437
msgid "Keep Existing Tags when Updating Metadata?"
msgstr ""
-#: config.py:430
+#: config.py:438
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"
@@ -169,304 +169,320 @@ msgid ""
"(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)"
msgstr ""
-#: config.py:434
+#: config.py:442
msgid "Force Author into Author Sort?"
msgstr ""
-#: config.py:435
+#: config.py:443
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:439
+#: config.py:447
msgid "Force Title into Title Sort?"
msgstr ""
-#: config.py:440
+#: config.py:448
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:444
+#: config.py:452
msgid "Check for existing Series Anthology books?"
msgstr ""
-#: config.py:445
+#: config.py:453
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:449
+#: config.py:457
msgid "Check for changed Story URL?"
msgstr ""
-#: config.py:450
+#: config.py:458
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:454
+#: config.py:462
msgid "Search EPUB text for Story URL?"
msgstr ""
-#: config.py:455
+#: config.py:463
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:459
+#: config.py:467
msgid "Mark added/updated books when finished?"
msgstr ""
-#: config.py:460
+#: config.py:468
msgid ""
"Mark added/updated books when finished. Use with option below.\n"
"You can also manually search for 'marked:fff_success'.\n"
"'marked:fff_failed' is also available, or search 'marked:fff' for both."
msgstr ""
-#: config.py:464
+#: config.py:472
msgid "Show Marked books when finished?"
msgstr ""
-#: config.py:465
+#: config.py:473
msgid ""
"Show Marked added/updated books only when finished.\n"
"You can also manually search for 'marked:fff_success'.\n"
"'marked:fff_failed' is also available, or search 'marked:fff' for both."
msgstr ""
-#: config.py:469
+#: config.py:477
msgid "Smarten Punctuation (EPUB only)"
msgstr ""
-#: config.py:470
+#: config.py:478
msgid "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB download and update."
msgstr ""
-#: config.py:474
+#: config.py:482
msgid "Automatically Convert new/update books?"
msgstr ""
-#: config.py:475
+#: config.py:483
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:479
+#: config.py:487
msgid "GUI Options"
msgstr ""
-#: config.py:483
+#: config.py:491
msgid "Take URLs from Clipboard?"
msgstr ""
-#: config.py:484
+#: config.py:492
msgid "Prefill URLs from valid URLs in Clipboard when Adding New."
msgstr ""
-#: config.py:488
+#: config.py:496
msgid "Default to Update when books selected?"
msgstr ""
-#: config.py:489
+#: config.py:497
msgid ""
"The top FanFicFare plugin button will start Update if\n"
"books are selected. If unchecked, it will always bring up 'Add New'."
msgstr ""
-#: config.py:493
+#: config.py:501
msgid "Keep 'Add New from URL(s)' dialog on top?"
msgstr ""
-#: config.py:494
+#: config.py:502
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:498
+#: config.py:506
msgid "Show estimated time left?"
msgstr ""
-#: config.py:499
+#: config.py:507
msgid "When a Progress Bar is shown, show a rough estimate of the time left."
msgstr ""
-#: config.py:503
+#: config.py:511
msgid "Misc Options"
msgstr ""
-#: config.py:507
+#: config.py:515
msgid "Inject calibre Series when none found?"
msgstr ""
-#: config.py:508
+#: config.py:516
msgid ""
"If no series is found, inject the calibre series (if there is one) so \n"
"it appears on the FanFicFare title page(not cover)."
msgstr ""
-#: config.py:512
+#: config.py:520
msgid "Reject List"
msgstr ""
-#: config.py:516
+#: config.py:524
msgid "Edit Reject URL List"
msgstr ""
-#: config.py:517
+#: config.py:525
msgid "Edit list of URLs FanFicFare will automatically Reject."
msgstr ""
-#: config.py:521 config.py:592
+#: config.py:529 config.py:600
msgid "Add Reject URLs"
msgstr ""
-#: config.py:522
+#: config.py:530
msgid "Add additional URLs to Reject as text."
msgstr ""
-#: config.py:526
+#: config.py:534
msgid "Edit Reject Reasons List"
msgstr ""
-#: config.py:527 config.py:582
+#: config.py:535 config.py:590
msgid "Customize the Reasons presented when Rejecting URLs"
msgstr ""
-#: config.py:531
+#: config.py:539
msgid "Reject Without Confirmation?"
msgstr ""
-#: config.py:532
+#: config.py:540
msgid "Always reject URLs on the Reject List without stopping and asking."
msgstr ""
-#: config.py:566
+#: config.py:574
msgid "Edit Reject URLs List"
msgstr ""
-#: config.py:580
+#: config.py:588
msgid "Reject Reasons"
msgstr ""
-#: config.py:581
+#: config.py:589
msgid "Customize Reject List Reasons"
msgstr ""
-#: config.py:590
+#: config.py:598
msgid "Reason why I rejected it"
msgstr ""
-#: config.py:590
+#: config.py:598
msgid "Title by Author"
msgstr ""
-#: config.py:593
+#: config.py:601
msgid "Add Reject URLs. Use: http://...,note or http://...,title by author - note
Invalid story URLs will be ignored."
msgstr ""
-#: config.py:594
+#: config.py:602
msgid ""
"One URL per line:\n"
"http://...,note\n"
"http://...,title by author - note"
msgstr ""
-#: config.py:596 dialogs.py:1075
+#: config.py:604 dialogs.py:1094
msgid "Add this reason to all URLs added:"
msgstr ""
-#: config.py:612
+#: config.py:620
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:617
+#: config.py:625
msgid "FanFicFare now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors."
msgstr ""
-#: config.py:636 config.py:667 config.py:668
+#: config.py:644 config.py:680 config.py:681
msgid "Edit personal.ini"
msgstr ""
-#: config.py:641
+#: config.py:649
+msgid "Changes will only be saved if you click 'OK' to leave Customize FanFicFare."
+msgstr ""
+
+#: config.py:653
msgid "View Defaults"
msgstr ""
-#: config.py:642
+#: config.py:654
msgid ""
"View all of the plugin's configurable settings\n"
"and their default settings."
msgstr ""
-#: config.py:646
-msgid "Changes will only be saved if you click 'OK' to leave Customize FanFicFare."
+#: config.py:658
+msgid "Show Calibre Column Names"
msgstr ""
-#: config.py:657
+#: config.py:659
+msgid "FanFicFare passes the Calibre columns into the download/update process. This will show you the columns available by name."
+msgstr ""
+
+#: config.py:670
msgid "Plugin Defaults"
msgstr ""
-#: config.py:658
+#: config.py:671
msgid "Plugin Defaults (%s) (Read-Only)"
msgstr ""
-#: config.py:691
+#: config.py:704
+msgid "Calibre Column Entry Names"
+msgstr ""
+
+#: config.py:705
+msgid "Label (entry_name)"
+msgstr ""
+
+#: config.py:725
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:696
+#: config.py:730
msgid "Add new/updated stories to \"Send to Device\" Reading List(s)."
msgstr ""
-#: config.py:697
+#: config.py:731
msgid "Automatically add new/updated stories to these lists in the %(rl)s plugin."
msgstr ""
-#: config.py:702
+#: config.py:736
msgid "\"Send to Device\" Reading Lists"
msgstr ""
-#: config.py:703 config.py:706 config.py:720 config.py:723
+#: config.py:737 config.py:740 config.py:754 config.py:757
msgid "When enabled, new/updated stories will be automatically added to these lists."
msgstr ""
-#: config.py:713
+#: config.py:747
msgid "Add new/updated stories to \"To Read\" Reading List(s)."
msgstr ""
-#: config.py:714
+#: config.py:748
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:719
+#: config.py:753
msgid "\"To Read\" Reading Lists"
msgstr ""
-#: config.py:730
+#: config.py:764
msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"."
msgstr ""
-#: config.py:731
+#: config.py:765
msgid "Menu option to remove from \"To Read\" lists will also add stories back to \"Send to Device\" Reading List(s)"
msgstr ""
-#: config.py:759
+#: config.py:793
msgid "The Calibre cover image for a downloaded book can come from the story site(if EPUB and images are enabled), or from either Calibre's built-in random cover generator or the %(gc)s plugin."
msgstr ""
-#: config.py:767
+#: config.py:801
msgid ""
"Update Calibre book cover image from EPUB when Calibre metadata is updated.\n"
"Doesn't go looking for new images on 'Update Calibre Metadata Only'.\n"
@@ -474,405 +490,413 @@ msgid ""
"This comes before Generate Cover so %(gc)s(Plugin) use the image if configured to."
msgstr ""
-#: config.py:772
+#: config.py:806
msgid "Update Calibre Cover (from EPUB):"
msgstr ""
-#: config.py:790
+#: config.py:824
msgid "Generate a Calibre book cover image when Calibre metadata is updated.
Defaults to 'Yes, Always' for backward compatibility and because %(gc)s(Plugin) will only run if configured for Default or site."
msgstr ""
-#: config.py:794
+#: config.py:828
msgid "Generate Calibre Cover:"
msgstr ""
-#: config.py:821
+#: config.py:855
msgid "Plugin %(gc)s"
msgstr ""
-#: config.py:822
+#: config.py:856
msgid "Use plugin to create covers. Additional settings are below."
msgstr ""
-#: config.py:829
+#: config.py:863
msgid "Calibre Generate Cover"
msgstr ""
-#: config.py:830
+#: config.py:864
msgid "Call Calibre's Edit Metadata Generate cover feature to create a random cover each time a story is downloaded or updated.
Right click or long click the 'Generate cover' button in Calibre's Edit Metadata to customize."
msgstr ""
-#: config.py:844
+#: config.py:878
msgid "Generate Covers Only for New Books"
msgstr ""
-#: config.py:845
+#: config.py:879
msgid "Default is to generate a cover any time the calibre metadata is updated.
Used for both Calibre and Plugin generated covers."
msgstr ""
-#: config.py:851
+#: config.py:885
msgid "Inject/update the cover inside EPUB"
msgstr ""
-#: config.py:852
+#: config.py:886
msgid "Calibre's Polish feature will be used to inject or update the generated cover into the EPUB ebook file.
Used for both Calibre and Plugin generated covers."
msgstr ""
-#: config.py:858
+#: config.py:892
msgid "%(gc)s(Plugin) Settings"
msgstr ""
-#: config.py:866
+#: config.py:900
msgid "The %(gc)s plugin can create cover images for books using various metadata (including existing cover image). If you have %(gc)s installed, FanFicFare can run %(gc)s on new downloads and metadata updates. Pick a %(gc)s setting by site and/or one to use by Default."
msgstr ""
-#: config.py:884 config.py:888 config.py:901
+#: config.py:918 config.py:922 config.py:935
msgid "Default"
msgstr ""
-#: config.py:889
+#: config.py:923
msgid "On Metadata update, run %(gc)s with this setting, if there isn't a more specific setting below."
msgstr ""
-#: config.py:892
+#: config.py:926
msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories."
msgstr ""
-#: config.py:915
+#: config.py:949
msgid "Allow %(gcset)s from %(pini)s to override"
msgstr ""
-#: config.py:916
+#: config.py:950
msgid "The %(pini)s parameter %(gcset)s allows you to choose a %(gc)s setting based on metadata rather than site, but it's much more complex.
%(gcset)s is ignored when this is off."
msgstr ""
-#: config.py:954
+#: config.py:988
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:959
+#: config.py:993
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:965
+#: config.py:999
msgid "Which column and algorithm to use are configured in %(cp)s."
msgstr ""
-#: config.py:975
+#: config.py:1009
msgid "Will overwrite word count from FanFicFare metadata if set to update the same custom column."
msgstr ""
-#: config.py:980
+#: config.py:1014
msgid "Only run Count Page's Word Count if checked and FanFicFare metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice."
msgstr ""
-#: config.py:1016
+#: config.py:1050
msgid "These controls aren't plugin settings as such, but convenience buttons for setting Keyboard shortcuts and getting all the FanFicFare confirmation dialogs back again."
msgstr ""
-#: config.py:1021
+#: config.py:1055
msgid "Keyboard shortcuts..."
msgstr ""
-#: config.py:1022
+#: config.py:1056
msgid "Edit the keyboard shortcuts associated with this plugin"
msgstr ""
-#: config.py:1026
+#: config.py:1060
msgid "Reset disabled &confirmation dialogs"
msgstr ""
-#: config.py:1027
+#: config.py:1061
msgid "Reset all show me again dialogs for the FanFicFare plugin"
msgstr ""
-#: config.py:1031
+#: config.py:1065
msgid "&View library preferences..."
msgstr ""
-#: config.py:1032
+#: config.py:1066
msgid "View data stored in the library database for this plugin"
msgstr ""
-#: config.py:1043
+#: config.py:1077
msgid "Done"
msgstr ""
-#: config.py:1044
+#: config.py:1078
msgid "Confirmation dialogs have all been reset"
msgstr ""
-#: config.py:1092
+#: config.py:1126
msgid "Category"
msgstr ""
-#: config.py:1093
+#: config.py:1127
msgid "Genre"
msgstr ""
-#: config.py:1094
+#: config.py:1128
msgid "Language"
msgstr ""
-#: config.py:1095 fff_plugin.py:1223 fff_plugin.py:1421 fff_plugin.py:1451
+#: config.py:1129 fff_plugin.py:1293 fff_plugin.py:1491 fff_plugin.py:1521
msgid "Status"
msgstr ""
-#: config.py:1096
+#: config.py:1130
msgid "Status:%(cmplt)s"
msgstr ""
-#: config.py:1097
+#: config.py:1131
msgid "Status:%(inprog)s"
msgstr ""
-#: config.py:1098 config.py:1232
+#: config.py:1132 config.py:1281
msgid "Series"
msgstr ""
-#: config.py:1099
+#: config.py:1133
msgid "Characters"
msgstr ""
-#: config.py:1100
+#: config.py:1134
msgid "Relationships"
msgstr ""
-#: config.py:1101
+#: config.py:1135
msgid "Published"
msgstr ""
-#: config.py:1102 fff_plugin.py:1534 fff_plugin.py:1553
+#: config.py:1136 fff_plugin.py:1604 fff_plugin.py:1623
msgid "Updated"
msgstr ""
-#: config.py:1103
+#: config.py:1137
msgid "Created"
msgstr ""
-#: config.py:1104
+#: config.py:1138
msgid "Rating"
msgstr ""
-#: config.py:1105
+#: config.py:1139
msgid "Warnings"
msgstr ""
-#: config.py:1106
+#: config.py:1140
msgid "Chapters"
msgstr ""
-#: config.py:1107
+#: config.py:1141
msgid "Words"
msgstr ""
-#: config.py:1108
+#: config.py:1142
msgid "Site"
msgstr ""
-#: config.py:1109
+#: config.py:1143
msgid "Story ID"
msgstr ""
-#: config.py:1110
+#: config.py:1144
msgid "Author ID"
msgstr ""
-#: config.py:1111
+#: config.py:1145
msgid "Extra Tags"
msgstr ""
-#: config.py:1112 config.py:1224 dialogs.py:866 dialogs.py:962
-#: fff_plugin.py:1223 fff_plugin.py:1421 fff_plugin.py:1451
+#: config.py:1146 config.py:1273 dialogs.py:885 dialogs.py:981
+#: fff_plugin.py:1293 fff_plugin.py:1491 fff_plugin.py:1521
msgid "Title"
msgstr ""
-#: config.py:1113
+#: config.py:1147
msgid "Story URL"
msgstr ""
-#: config.py:1114
+#: config.py:1148
msgid "Description"
msgstr ""
-#: config.py:1115 dialogs.py:866 dialogs.py:962 fff_plugin.py:1223
-#: fff_plugin.py:1421 fff_plugin.py:1451
+#: config.py:1149 dialogs.py:885 dialogs.py:981 fff_plugin.py:1293
+#: fff_plugin.py:1491 fff_plugin.py:1521
msgid "Author"
msgstr ""
-#: config.py:1116
+#: config.py:1150
msgid "Author URL"
msgstr ""
-#: config.py:1117
+#: config.py:1151
msgid "File Format"
msgstr ""
-#: config.py:1118
+#: config.py:1152
msgid "File Extension"
msgstr ""
-#: config.py:1119
+#: config.py:1153
msgid "Site Abbrev"
msgstr ""
-#: config.py:1120
+#: config.py:1154
msgid "FanFicFare Version"
msgstr ""
-#: config.py:1135
+#: config.py:1169
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:1160
+#: config.py:1194
msgid "Update this %s column(%s) with..."
msgstr ""
-#: config.py:1170
+#: config.py:1204
msgid "Values that aren't valid for this enumeration column will be ignored."
msgstr ""
-#: config.py:1170 config.py:1172
+#: config.py:1204 config.py:1206
msgid "Metadata values valid for this type of column."
msgstr ""
-#: config.py:1175 config.py:1251
+#: config.py:1209 config.py:1300
msgid "New Only"
msgstr ""
-#: config.py:1176
+#: config.py:1210
msgid ""
"Write to %s(%s) only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1187
+#: config.py:1221
msgid "Allow %(ccset)s from %(pini)s to override"
msgstr ""
-#: config.py:1188
+#: config.py:1222
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:1193
+#: config.py:1227
msgid "Special column:"
msgstr ""
-#: config.py:1198
+#: config.py:1232
msgid "Update/Overwrite Error Column:"
msgstr ""
-#: config.py:1199
+#: config.py:1233
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:1225
+#: config.py:1247
+msgid "Saved Metadata Column:"
+msgstr ""
+
+#: config.py:1248
+msgid "If set, FanFicFare will save a copy of all its metadata in this column when the book is downloaded or updated.
The metadata from this column can later be used to update custom columns without having to request the metadata from the server again.
(Long Text columns only.)"
+msgstr ""
+
+#: config.py:1274
msgid "Author(s)"
msgstr ""
-#: config.py:1226
+#: config.py:1275
msgid "Publisher"
msgstr ""
-#: config.py:1227
+#: config.py:1276
msgid "Tags"
msgstr ""
-#: config.py:1228
+#: config.py:1277
msgid "Languages"
msgstr ""
-#: config.py:1229
+#: config.py:1278
msgid "Published Date"
msgstr ""
-#: config.py:1230
+#: config.py:1279
msgid "Date"
msgstr ""
-#: config.py:1231
+#: config.py:1280
msgid "Comments"
msgstr ""
-#: config.py:1233
+#: config.py:1282
msgid "Ids(url id only)"
msgstr ""
-#: config.py:1238
+#: config.py:1287
msgid "The standard calibre metadata columns are listed below. You may choose whether FanFicFare will fill each column automatically on updates or only for new books."
msgstr ""
-#: config.py:1252
+#: config.py:1301
msgid ""
"Write to %s only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1273
+#: config.py:1322
msgid "These settings will allow FanFicFare to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below."
msgstr ""
-#: config.py:1278
+#: config.py:1327
msgid "IMAP Server Name"
msgstr ""
-#: config.py:1279
+#: config.py:1328
msgid "Name of IMAP server--must allow IMAP4 with SSL. Eg: imap.gmail.com"
msgstr ""
-#: config.py:1288
+#: config.py:1337
msgid "IMAP User Name"
msgstr ""
-#: config.py:1289
+#: config.py:1338
msgid ""
"Name of IMAP user. Eg: yourname@gmail.com\n"
"Note that Gmail accounts need to have IMAP enabled in Gmail Settings first."
msgstr ""
-#: config.py:1298
+#: config.py:1347
msgid "IMAP User Password"
msgstr ""
-#: config.py:1299
+#: config.py:1348
msgid "IMAP password. If left empty, FanFicFare will ask you for your password when you use the feature."
msgstr ""
-#: config.py:1309
+#: config.py:1358
msgid "Remember Password for Session (when not saved above)"
msgstr ""
-#: config.py:1310
+#: config.py:1359
msgid "If checked, and no password is entered above, FanFicFare will remember your password until you close calibre or change Libraries."
msgstr ""
-#: config.py:1315
+#: config.py:1364
msgid "IMAP Folder Name"
msgstr ""
-#: config.py:1316
+#: config.py:1365
msgid "Name of IMAP folder to search for new emails. The folder (or label) has to already exist. Use INBOX for your default inbox."
msgstr ""
-#: config.py:1325
+#: config.py:1374
msgid "Mark Emails Read"
msgstr ""
-#: config.py:1326
+#: config.py:1375
msgid "If checked, emails will be marked as having been read if they contain any story URLs."
msgstr ""
-#: config.py:1331
+#: config.py:1380
msgid "Discard URLs on Reject List"
msgstr ""
-#: config.py:1332
+#: config.py:1381
msgid "If checked, FanFicFare will silently discard story URLs from emails that are on your Reject URL List.
Otherwise they will appear and you will see the normal Reject URL dialog.
The Emails will still be marked Read if configured to."
msgstr ""
-#: config.py:1337
+#: config.py:1386
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 ""
@@ -901,903 +925,907 @@ msgid "Overwrite Always"
msgstr ""
#: dialogs.py:82
-msgid "Update Calibre Metadata Only"
+msgid "Update Calibre Metadata from Web Site"
msgstr ""
-#: dialogs.py:263 dialogs.py:765
+#: dialogs.py:83
+msgid "Update Calibre Metadata from Saved Metadata Column"
+msgstr ""
+
+#: dialogs.py:267 dialogs.py:776
msgid "Show Download Options"
msgstr ""
-#: dialogs.py:282 dialogs.py:782
+#: dialogs.py:286 dialogs.py:793
msgid "Output &Format:"
msgstr ""
-#: dialogs.py:290 dialogs.py:790
+#: dialogs.py:294 dialogs.py:801
msgid "Choose output format to create. May set default from plugin configuration."
msgstr ""
-#: dialogs.py:318 dialogs.py:807
+#: dialogs.py:322 dialogs.py:818
msgid "Update Calibre &Metadata?"
msgstr ""
-#: dialogs.py:319 dialogs.py:808
+#: dialogs.py:323 dialogs.py:819
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:325 dialogs.py:812
+#: dialogs.py:329 dialogs.py:823
msgid "Update EPUB Cover?"
msgstr ""
-#: dialogs.py:326 dialogs.py:813
+#: dialogs.py:330 dialogs.py:824
msgid "Update book cover image from site or defaults (if found) inside the EPUB when EPUB is updated."
msgstr ""
-#: dialogs.py:376
+#: dialogs.py:380
msgid "Story URLs for anthology, one per line:"
msgstr ""
-#: dialogs.py:377
+#: dialogs.py:381
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:378
+#: dialogs.py:382
msgid "If Story Already Exists in Anthology?"
msgstr ""
-#: dialogs.py:379
+#: dialogs.py:383
msgid "What to do if there's already an existing story with the same URL in the anthology."
msgstr ""
-#: dialogs.py:388
+#: dialogs.py:392
msgid "Story URLs, one per line:"
msgstr ""
-#: dialogs.py:389
+#: dialogs.py:393
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:390
+#: dialogs.py:394
msgid "If Story Already Exists?"
msgstr ""
-#: dialogs.py:391
+#: dialogs.py:395
msgid "What to do if there's already an existing story with the same URL or title and author."
msgstr ""
-#: dialogs.py:501
+#: dialogs.py:512
msgid "For Individual Books"
msgstr ""
-#: dialogs.py:502
+#: dialogs.py:513
msgid "Get URLs and go to dialog for individual story downloads."
msgstr ""
-#: dialogs.py:507
+#: dialogs.py:518
msgid "For Anthology Epub"
msgstr ""
-#: dialogs.py:508
+#: dialogs.py:519
msgid ""
"Get URLs and go to dialog for Anthology download.\n"
"Requires %s plugin."
msgstr ""
-#: dialogs.py:512 dialogs.py:566 dialogs.py:593 dialogs.py:1473
+#: dialogs.py:523 dialogs.py:577 dialogs.py:604 dialogs.py:1494
msgid "Cancel"
msgstr ""
-#: dialogs.py:544 dialogs.py:1461
+#: dialogs.py:555 dialogs.py:1482
msgid "Password"
msgstr ""
-#: dialogs.py:545
+#: dialogs.py:556
msgid "Author requires a password for this story(%s)."
msgstr ""
-#: dialogs.py:550
+#: dialogs.py:561
msgid "User/Password"
msgstr ""
-#: dialogs.py:551
+#: dialogs.py:562
msgid "%s requires you to login to download this story."
msgstr ""
-#: dialogs.py:553
+#: dialogs.py:564
msgid "User:"
msgstr ""
-#: dialogs.py:557
+#: dialogs.py:568
msgid "Password:"
msgstr ""
-#: dialogs.py:562 dialogs.py:707 dialogs.py:1469
+#: dialogs.py:573 dialogs.py:718 dialogs.py:1490
msgid "OK"
msgstr ""
-#: dialogs.py:588
+#: dialogs.py:599
msgid "Fetching metadata for stories..."
msgstr ""
-#: dialogs.py:589
+#: dialogs.py:600
msgid "Downloading metadata for stories"
msgstr ""
-#: dialogs.py:590
+#: dialogs.py:601
msgid "Fetched metadata for"
msgstr ""
-#: dialogs.py:617
+#: dialogs.py:628
msgid " - %s estimated until done"
msgstr ""
-#: dialogs.py:667
+#: dialogs.py:678
msgid "%d day"
msgstr ""
-#: dialogs.py:667
+#: dialogs.py:678
msgid "%d days"
msgstr ""
-#: dialogs.py:668
+#: dialogs.py:679
msgid "%d hour"
msgstr ""
-#: dialogs.py:668
+#: dialogs.py:679
msgid "%d hours"
msgstr ""
-#: dialogs.py:669
+#: dialogs.py:680
msgid "%d minute"
msgstr ""
-#: dialogs.py:669
+#: dialogs.py:680
msgid "%d minutes"
msgstr ""
-#: dialogs.py:670
+#: dialogs.py:681
msgid "%d second"
msgstr ""
-#: dialogs.py:670
+#: dialogs.py:681
msgid "%d seconds"
msgstr ""
-#: dialogs.py:685
+#: dialogs.py:696
msgid "less than 1 second"
msgstr ""
-#: dialogs.py:702 fff_plugin.py:341 fff_plugin.py:344
+#: dialogs.py:713 fff_plugin.py:358 fff_plugin.py:361
msgid "About FanFicFare"
msgstr ""
-#: dialogs.py:756
+#: dialogs.py:767
msgid "Remove selected books from the list"
msgstr ""
-#: dialogs.py:795
+#: dialogs.py:806
msgid "Update Mode:"
msgstr ""
-#: dialogs.py:798
+#: dialogs.py:809
msgid "What sort of update to perform. May set default from plugin configuration."
msgstr ""
-#: dialogs.py:866 fff_plugin.py:1223 fff_plugin.py:1421 fff_plugin.py:1451
+#: dialogs.py:885 fff_plugin.py:1293 fff_plugin.py:1491 fff_plugin.py:1521
msgid "Comment"
msgstr ""
-#: dialogs.py:934
+#: dialogs.py:953
msgid "Are you sure you want to remove this book from the list?"
msgstr ""
-#: dialogs.py:936
+#: dialogs.py:955
msgid "Are you sure you want to remove the selected %d books from the list?"
msgstr ""
-#: dialogs.py:962
+#: dialogs.py:981
msgid "Note"
msgstr ""
-#: dialogs.py:1001
+#: dialogs.py:1020
msgid "Select or Edit Reject Note."
msgstr ""
-#: dialogs.py:1010
+#: dialogs.py:1029
msgid "Are you sure you want to remove this URL from the list?"
msgstr ""
-#: dialogs.py:1012
+#: dialogs.py:1031
msgid "Are you sure you want to remove the %d selected URLs from the list?"
msgstr ""
-#: dialogs.py:1030
+#: dialogs.py:1049
msgid "List of Books to Reject"
msgstr ""
-#: dialogs.py:1043
+#: dialogs.py:1062
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:1057
+#: dialogs.py:1076
msgid "Remove selected URLs from the list"
msgstr ""
-#: dialogs.py:1072 dialogs.py:1076
+#: dialogs.py:1091 dialogs.py:1095
msgid "This will be added to whatever note you've set for each URL above."
msgstr ""
-#: dialogs.py:1086
+#: dialogs.py:1105
msgid "Delete Books (including books without FanFiction URLs)?"
msgstr ""
-#: dialogs.py:1087
+#: dialogs.py:1106
msgid "Delete the selected books after adding them to the Rejected URLs list."
msgstr ""
-#: dialogs.py:1241
+#: dialogs.py:1262
msgid "Search for string in edit box."
msgstr ""
-#: dialogs.py:1244
+#: dialogs.py:1265
msgid "Find:"
msgstr ""
-#: dialogs.py:1249
+#: dialogs.py:1270
msgid "Find"
msgstr ""
-#: dialogs.py:1259
+#: dialogs.py:1280
msgid "Case sensitive"
msgstr ""
-#: dialogs.py:1260
+#: dialogs.py:1281
msgid "Search for case sensitive string; don't treat Harry, HARRY and harry all the same."
msgstr ""
-#: dialogs.py:1289
+#: dialogs.py:1310
msgid "Go back to fix errors?"
msgstr ""
-#: dialogs.py:1401
+#: dialogs.py:1422
msgid "Click an error below to return to Editing directly on that line:"
msgstr ""
-#: dialogs.py:1413
+#: dialogs.py:1434
msgid "Click to go to line %s"
msgstr ""
-#: dialogs.py:1429
+#: dialogs.py:1450
msgid "Return to Editing"
msgstr ""
-#: dialogs.py:1433
+#: dialogs.py:1454
msgid "Save Anyway"
msgstr ""
-#: dialogs.py:1462
+#: dialogs.py:1483
msgid "Enter Email Password for %s:"
msgstr ""
-#: fff_plugin.py:97 fff_plugin.py:128
+#: fff_plugin.py:114 fff_plugin.py:145
msgid "FanFicFare"
msgstr ""
-#: fff_plugin.py:98
+#: fff_plugin.py:115
msgid "Download FanFiction stories from various web sites"
msgstr ""
-#: fff_plugin.py:259
+#: fff_plugin.py:276
msgid "&Download from URLs"
msgstr ""
-#: fff_plugin.py:261
+#: fff_plugin.py:278
msgid "Download FanFiction Books from URLs"
msgstr ""
-#: fff_plugin.py:264
+#: fff_plugin.py:281
msgid "&Update Existing FanFiction Books"
msgstr ""
-#: fff_plugin.py:269
+#: fff_plugin.py:286
msgid "Get Story URLs from &Email"
msgstr ""
-#: fff_plugin.py:273 fff_plugin.py:460
+#: fff_plugin.py:290 fff_plugin.py:477
msgid "Get Story URLs from Web Page"
msgstr ""
-#: fff_plugin.py:279
+#: fff_plugin.py:296
msgid "&Make Anthology Epub from URLs"
msgstr ""
-#: fff_plugin.py:281
+#: fff_plugin.py:298
msgid "Make FanFiction Anthology Epub from URLs"
msgstr ""
-#: fff_plugin.py:284
+#: fff_plugin.py:301
msgid "Make Anthology Epub from Web Page"
msgstr ""
-#: fff_plugin.py:286
+#: fff_plugin.py:303
msgid "Make FanFiction Anthology Epub from Web Page"
msgstr ""
-#: fff_plugin.py:289
+#: fff_plugin.py:306
msgid "Update Anthology Epub"
msgstr ""
-#: fff_plugin.py:291
+#: fff_plugin.py:308
msgid "Update FanFiction Anthology Epub"
msgstr ""
-#: fff_plugin.py:298
+#: fff_plugin.py:315
msgid "Mark Unread: Add to \"To Read\" and \"Send to Device\" Lists"
msgstr ""
-#: fff_plugin.py:300
+#: fff_plugin.py:317
msgid "Mark Read: Remove from \"To Read\" and add to \"Send to Device\" Lists"
msgstr ""
-#: fff_plugin.py:302 fff_plugin.py:307
+#: fff_plugin.py:319 fff_plugin.py:324
msgid "Mark Read: Remove from \"To Read\" Lists"
msgstr ""
-#: fff_plugin.py:304
+#: fff_plugin.py:321
msgid "Add to \"Send to Device\" Lists"
msgstr ""
-#: fff_plugin.py:306
+#: fff_plugin.py:323
msgid "Mark Unread: Add to \"To Read\" Lists"
msgstr ""
-#: fff_plugin.py:322
+#: fff_plugin.py:339
msgid "Get Story URLs from Selected Books"
msgstr ""
-#: fff_plugin.py:327
+#: fff_plugin.py:344
msgid "Reject Selected Books"
msgstr ""
-#: fff_plugin.py:335
+#: fff_plugin.py:352
msgid "&Configure FanFicFare"
msgstr ""
-#: fff_plugin.py:338
+#: fff_plugin.py:355
msgid "Configure FanFicFare"
msgstr ""
-#: fff_plugin.py:393
+#: fff_plugin.py:410
msgid "Cannot Update Reading Lists from Device View"
msgstr ""
-#: fff_plugin.py:397
+#: fff_plugin.py:414
msgid "No Selected Books to Update Reading Lists"
msgstr ""
-#: fff_plugin.py:405
+#: fff_plugin.py:422
msgid "FanFicFare Email Settings are not configured."
msgstr ""
-#: fff_plugin.py:425
+#: fff_plugin.py:442
msgid "Fetching Story URLs from Email..."
msgstr ""
-#: fff_plugin.py:436
+#: fff_plugin.py:453
msgid "Finished Fetching Story URLs from Email."
msgstr ""
-#: fff_plugin.py:443
+#: fff_plugin.py:460
msgid "No Valid Story URLs Found in Unread Emails."
msgstr ""
-#: fff_plugin.py:445
+#: fff_plugin.py:462
msgid "(%d Story URLs Skipped, on Rejected URL List)"
msgstr ""
-#: fff_plugin.py:446
+#: fff_plugin.py:463
msgid "Get Story URLs from Email"
msgstr ""
-#: fff_plugin.py:469
+#: fff_plugin.py:486
msgid "Fetching Story URLs from Page..."
msgstr ""
-#: fff_plugin.py:473
+#: fff_plugin.py:490
msgid "Finished Fetching Story URLs from Page."
msgstr ""
-#: fff_plugin.py:479 fff_plugin.py:531
+#: fff_plugin.py:496 fff_plugin.py:548
msgid "List of Story URLs"
msgstr ""
-#: fff_plugin.py:480
+#: fff_plugin.py:497
msgid "No Valid Story URLs found on given page."
msgstr ""
-#: fff_plugin.py:495
+#: fff_plugin.py:512
msgid "No Selected Books to Get URLs From"
msgstr ""
-#: fff_plugin.py:513
+#: fff_plugin.py:530
msgid "Collecting URLs for stories..."
msgstr ""
-#: fff_plugin.py:514
+#: fff_plugin.py:531
msgid "Get URLs for stories"
msgstr ""
-#: fff_plugin.py:515 fff_plugin.py:562 fff_plugin.py:749
+#: fff_plugin.py:532 fff_plugin.py:579 fff_plugin.py:766
msgid "URL retrieved"
msgstr ""
-#: fff_plugin.py:535
+#: fff_plugin.py:552
msgid "List of URLs"
msgstr ""
-#: fff_plugin.py:536
+#: fff_plugin.py:553
msgid "No Story URLs found in selected books."
msgstr ""
-#: fff_plugin.py:552
+#: fff_plugin.py:569
msgid "No Selected Books have URLs to Reject"
msgstr ""
-#: fff_plugin.py:560
+#: fff_plugin.py:577
msgid "Collecting URLs for Reject List..."
msgstr ""
-#: fff_plugin.py:561
+#: fff_plugin.py:578
msgid "Get URLs for Reject List"
msgstr ""
-#: fff_plugin.py:596
+#: fff_plugin.py:613
msgid "Proceed to Remove?"
msgstr ""
-#: fff_plugin.py:596
+#: fff_plugin.py:613
msgid "Rejecting FanFicFare URLs: None of the books selected have FanFiction URLs."
msgstr ""
-#: fff_plugin.py:618
+#: fff_plugin.py:635
msgid "Cannot Make Anthologys without %s"
msgstr ""
-#: fff_plugin.py:622 fff_plugin.py:726
+#: fff_plugin.py:639 fff_plugin.py:743
msgid "Cannot Update Books from Device View"
msgstr ""
-#: fff_plugin.py:626
+#: fff_plugin.py:643
msgid "Can only update 1 anthology at a time"
msgstr ""
-#: fff_plugin.py:635
+#: fff_plugin.py:652
msgid "Can only Update Epub Anthologies"
msgstr ""
-#: fff_plugin.py:653 fff_plugin.py:654
+#: fff_plugin.py:670 fff_plugin.py:671
msgid "Cannot Update Anthology"
msgstr ""
-#: fff_plugin.py:654
+#: fff_plugin.py:671
msgid "Book isn't an FanFicFare Anthology or contains book(s) without valid Story URLs."
msgstr ""
-#: fff_plugin.py:712
+#: fff_plugin.py:729
msgid "There are %d stories in the current anthology that are not going to be kept if you go ahead."
msgstr ""
-#: fff_plugin.py:713
+#: fff_plugin.py:730
msgid "Story URLs that will be removed:"
msgstr ""
-#: fff_plugin.py:715
+#: fff_plugin.py:732
msgid "Update anyway?"
msgstr ""
-#: fff_plugin.py:716
+#: fff_plugin.py:733
msgid "Stories Removed"
msgstr ""
-#: fff_plugin.py:733
+#: fff_plugin.py:750
msgid "No Selected Books to Update"
msgstr ""
-#: fff_plugin.py:747
+#: fff_plugin.py:764
msgid "Collecting stories for update..."
msgstr ""
-#: fff_plugin.py:748
+#: fff_plugin.py:765
msgid "Get stories for updates"
msgstr ""
-#: fff_plugin.py:758
+#: fff_plugin.py:775
msgid "Update Existing List"
msgstr ""
-#: fff_plugin.py:816
+#: fff_plugin.py:833
msgid "Started fetching metadata for %s stories."
msgstr ""
-#: fff_plugin.py:822
+#: fff_plugin.py:839
msgid "No valid story URLs entered."
msgstr ""
-#: fff_plugin.py:847 fff_plugin.py:853
+#: fff_plugin.py:864 fff_plugin.py:870
msgid "Reject URL?"
msgstr ""
-#: fff_plugin.py:854 fff_plugin.py:872
+#: fff_plugin.py:871 fff_plugin.py:889
msgid "%s is on your Reject URL list:"
msgstr ""
-#: fff_plugin.py:856
+#: fff_plugin.py:873
msgid "Click 'Yes' to Reject."
msgstr ""
-#: fff_plugin.py:857 fff_plugin.py:961
+#: fff_plugin.py:874 fff_plugin.py:1001
msgid "Click 'No' to download anyway."
msgstr ""
-#: fff_plugin.py:859
+#: fff_plugin.py:876
msgid "Story on Reject URLs list (%s)."
msgstr ""
-#: fff_plugin.py:862
+#: fff_plugin.py:879
msgid "Rejected"
msgstr ""
-#: fff_plugin.py:865
+#: fff_plugin.py:882
msgid "Remove Reject URL?"
msgstr ""
-#: fff_plugin.py:871
+#: fff_plugin.py:888
msgid "Remove URL from Reject List?"
msgstr ""
-#: fff_plugin.py:874
+#: fff_plugin.py:891
msgid "Click 'Yes' to remove it from the list,"
msgstr ""
-#: fff_plugin.py:875
+#: fff_plugin.py:892
msgid "Click 'No' to leave it on the list."
msgstr ""
-#: fff_plugin.py:892
+#: fff_plugin.py:909
msgid "Cannot update non-epub format."
msgstr ""
-#: fff_plugin.py:937
+#: fff_plugin.py:979
msgid "Are You an Adult?"
msgstr ""
-#: fff_plugin.py:938
+#: fff_plugin.py:980
msgid "%s requires that you be an adult. Please confirm you are an adult in your locale:"
msgstr ""
-#: fff_plugin.py:952
+#: fff_plugin.py:992
msgid "Skip Story?"
msgstr ""
-#: fff_plugin.py:958
+#: fff_plugin.py:998
msgid "Skip Anthology Story?"
msgstr ""
-#: fff_plugin.py:959
+#: fff_plugin.py:999
msgid "\"%s\" is in series \"%s\" that you have an anthology book for."
msgstr ""
-#: fff_plugin.py:960
+#: fff_plugin.py:1000
msgid "Click 'Yes' to Skip."
msgstr ""
-#: fff_plugin.py:963
+#: fff_plugin.py:1003
msgid "Story in Series Anthology(%s)."
msgstr ""
-#: fff_plugin.py:968
+#: fff_plugin.py:1008
msgid "Skipped"
msgstr ""
-#: fff_plugin.py:996
+#: fff_plugin.py:1037
msgid "Add"
msgstr ""
-#: fff_plugin.py:1009
+#: fff_plugin.py:1050
msgid "Meta"
msgstr ""
-#: fff_plugin.py:1042
+#: fff_plugin.py:1081
msgid "Skipping duplicate story."
msgstr ""
-#: fff_plugin.py:1045
+#: fff_plugin.py:1084
msgid "More than one identical book by Identifer URL or title/author(s)--can't tell which book to update/overwrite."
msgstr ""
-#: fff_plugin.py:1056
+#: fff_plugin.py:1095
msgid "Update"
msgstr ""
-#: fff_plugin.py:1064 fff_plugin.py:1071
+#: fff_plugin.py:1103 fff_plugin.py:1110
msgid "Change Story URL?"
msgstr ""
-#: fff_plugin.py:1072
+#: fff_plugin.py:1111
msgid "%s by %s is already in your library with a different source URL:"
msgstr ""
-#: fff_plugin.py:1073
+#: fff_plugin.py:1112
msgid "In library: %(liburl)s"
msgstr ""
-#: fff_plugin.py:1074 fff_plugin.py:1088
+#: fff_plugin.py:1113 fff_plugin.py:1127
msgid "New URL: %(newurl)s"
msgstr ""
-#: fff_plugin.py:1075
+#: fff_plugin.py:1114
msgid "Click 'Yes' to update/overwrite book with new URL."
msgstr ""
-#: fff_plugin.py:1076
+#: fff_plugin.py:1115
msgid "Click 'No' to skip updating/overwriting this book."
msgstr ""
-#: fff_plugin.py:1078 fff_plugin.py:1085
+#: fff_plugin.py:1117 fff_plugin.py:1124
msgid "Download as New Book?"
msgstr ""
-#: fff_plugin.py:1086
+#: fff_plugin.py:1125
msgid "%s by %s is already in your library with a different source URL."
msgstr ""
-#: fff_plugin.py:1087
+#: fff_plugin.py:1126
msgid "You chose not to update the existing book. Do you want to add a new book for this URL?"
msgstr ""
-#: fff_plugin.py:1089
+#: fff_plugin.py:1128
msgid "Click 'Yes' to a new book with new URL."
msgstr ""
-#: fff_plugin.py:1090
+#: fff_plugin.py:1129
msgid "Click 'No' to skip URL."
msgstr ""
-#: fff_plugin.py:1096
+#: fff_plugin.py:1135
msgid "Update declined by user due to differing story URL(%s)"
msgstr ""
-#: fff_plugin.py:1099
+#: fff_plugin.py:1138
msgid "Different URL"
msgstr ""
-#: fff_plugin.py:1104
+#: fff_plugin.py:1143
msgid "Metadata collected."
msgstr ""
-#: fff_plugin.py:1120
+#: fff_plugin.py:1159
msgid "Already contains %d chapters."
msgstr ""
-#: fff_plugin.py:1125 jobs.py:208
+#: fff_plugin.py:1161 jobs.py:206
msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update."
msgstr ""
-#: fff_plugin.py:1127
+#: fff_plugin.py:1163
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:1139
+#: fff_plugin.py:1175
msgid "Not Overwriting, web site is not newer."
msgstr ""
-#: fff_plugin.py:1219
+#: fff_plugin.py:1289
msgid "None of the %d URLs/stories given can be/need to be downloaded."
msgstr ""
-#: fff_plugin.py:1220 fff_plugin.py:1417 fff_plugin.py:1447
+#: fff_plugin.py:1290 fff_plugin.py:1487 fff_plugin.py:1517
msgid "See log for details."
msgstr ""
-#: fff_plugin.py:1221
+#: fff_plugin.py:1291
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr ""
-#: fff_plugin.py:1228 fff_plugin.py:1429
+#: fff_plugin.py:1298 fff_plugin.py:1499
msgid "Bad"
msgstr ""
-#: fff_plugin.py:1236
+#: fff_plugin.py:1306
msgid "FanFicFare download ended"
msgstr ""
-#: fff_plugin.py:1236 fff_plugin.py:1472
+#: fff_plugin.py:1306 fff_plugin.py:1542
msgid "FanFicFare log"
msgstr ""
-#: fff_plugin.py:1256
+#: fff_plugin.py:1326
msgid "Download FanFiction Book"
msgstr ""
-#: fff_plugin.py:1263
+#: fff_plugin.py:1333
msgid "Starting %d FanFicFare Downloads"
msgstr ""
-#: fff_plugin.py:1293
+#: fff_plugin.py:1363
msgid "Story Details:"
msgstr ""
-#: fff_plugin.py:1296
+#: fff_plugin.py:1366
msgid "Error Updating Metadata"
msgstr ""
-#: fff_plugin.py:1297
+#: fff_plugin.py:1367
msgid "An error has occurred while FanFicFare was updating calibre's metadata for %s."
msgstr ""
-#: fff_plugin.py:1298
+#: fff_plugin.py:1368
msgid "The ebook has been updated, but the metadata has not."
msgstr ""
-#: fff_plugin.py:1350
+#: fff_plugin.py:1420
msgid "Finished Adding/Updating %d books."
msgstr ""
-#: fff_plugin.py:1380
+#: fff_plugin.py:1450
msgid "Starting auto conversion of %d books."
msgstr ""
-#: fff_plugin.py:1401
+#: fff_plugin.py:1471
msgid "No Good Stories for Anthology"
msgstr ""
-#: fff_plugin.py:1402
+#: fff_plugin.py:1472
msgid "No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr ""
-#: fff_plugin.py:1407 fff_plugin.py:1446
+#: fff_plugin.py:1477 fff_plugin.py:1516
msgid "FanFicFare found %s good and %s bad updates."
msgstr ""
-#: fff_plugin.py:1414
+#: fff_plugin.py:1484
msgid "Are you sure you want to continue with creating/updating this Anthology?"
msgstr ""
-#: fff_plugin.py:1415
+#: fff_plugin.py:1485
msgid "Any updates that failed will not be included in the Anthology."
msgstr ""
-#: fff_plugin.py:1416
+#: fff_plugin.py:1486
msgid "However, if there's an older version, it will still be included."
msgstr ""
-#: fff_plugin.py:1419
+#: fff_plugin.py:1489
msgid "Proceed with updating this anthology and your library?"
msgstr ""
-#: fff_plugin.py:1427
+#: fff_plugin.py:1497
msgid "Good"
msgstr ""
-#: fff_plugin.py:1448
+#: fff_plugin.py:1518
msgid "Proceed with updating your library?"
msgstr ""
-#: fff_plugin.py:1472
+#: fff_plugin.py:1542
msgid "FanFicFare download complete"
msgstr ""
-#: fff_plugin.py:1485
+#: fff_plugin.py:1555
msgid "Merging %s books."
msgstr ""
-#: fff_plugin.py:1525
+#: fff_plugin.py:1595
msgid "FanFicFare Adding/Updating books."
msgstr ""
-#: fff_plugin.py:1532
+#: fff_plugin.py:1602
msgid "Updating calibre for FanFiction stories..."
msgstr ""
-#: fff_plugin.py:1533
+#: fff_plugin.py:1603
msgid "Update calibre for FanFiction stories"
msgstr ""
-#: fff_plugin.py:1542
+#: fff_plugin.py:1612
msgid "Adding/Updating %s BAD books."
msgstr ""
-#: fff_plugin.py:1551
+#: fff_plugin.py:1621
msgid "Updating calibre for BAD FanFiction stories..."
msgstr ""
-#: fff_plugin.py:1552
+#: fff_plugin.py:1622
msgid "Update calibre for BAD FanFiction stories"
msgstr ""
-#: fff_plugin.py:1578
+#: fff_plugin.py:1648
msgid "Adding format to book failed for some reason..."
msgstr ""
-#: fff_plugin.py:1581
+#: fff_plugin.py:1651
msgid "Error"
msgstr ""
-#: fff_plugin.py:1889
+#: fff_plugin.py:1964
msgid "You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?"
msgstr ""
-#: fff_plugin.py:1901
+#: fff_plugin.py:1976
msgid "You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: fff_plugin.py:1911 fff_plugin.py:1929
+#: fff_plugin.py:1986 fff_plugin.py:2004
msgid "You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?"
msgstr ""
-#: fff_plugin.py:1917
+#: fff_plugin.py:1992
msgid "You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: fff_plugin.py:2038
+#: fff_plugin.py:2113
msgid "No story URL found."
msgstr ""
-#: fff_plugin.py:2041
+#: fff_plugin.py:2116
msgid "Not Found"
msgstr ""
-#: fff_plugin.py:2047
+#: fff_plugin.py:2122
msgid "URL is not a valid story URL."
msgstr ""
-#: fff_plugin.py:2050
+#: fff_plugin.py:2125
msgid "Bad URL"
msgstr ""
-#: fff_plugin.py:2189 fff_plugin.py:2192
+#: fff_plugin.py:2264 fff_plugin.py:2267
msgid "Anthology containing:"
msgstr ""
-#: fff_plugin.py:2190
+#: fff_plugin.py:2265
msgid "%s by %s"
msgstr ""
-#: fff_plugin.py:2212
+#: fff_plugin.py:2287
msgid " Anthology"
msgstr ""
-#: fff_plugin.py:2255
+#: fff_plugin.py:2330
msgid "(was set, removed for security)"
msgstr ""
-#: jobs.py:59
+#: jobs.py:60
msgid "Downloading FanFiction Stories"
msgstr ""
-#: jobs.py:81
+#: jobs.py:82
msgid "Successful:"
msgstr ""
-#: jobs.py:83
+#: jobs.py:84
msgid "Unsuccessful:"
msgstr ""
-#: jobs.py:109
+#: jobs.py:110
msgid "Download started..."
msgstr ""
-#: jobs.py:201
+#: jobs.py:198
msgid "Already contains %d chapters. Reuse as is."
msgstr ""
-#: jobs.py:219
+#: jobs.py:218
msgid "Update %s completed, added %s chapters for %s total."
msgstr ""
diff --git a/fanficfare/story.py b/fanficfare/story.py
index b8a65da..f7abe43 100644
--- a/fanficfare/story.py
+++ b/fanficfare/story.py
@@ -570,7 +570,8 @@ class Story(Configurable):
else:
val = v
- if not k.startswith('calibre_'): # don't include items passed in for calibre cols.
+ # don't include items passed in for calibre cols, etc.
+ if not k.startswith('calibre_') and k not in ['output_css']:
lines.append("%s:
%s
\n"%(
self.get_label(k),
" ".join(classes),
@@ -603,7 +604,7 @@ class Story(Configurable):
else:
val = unicode("\n".join([ unicode(c) for c in tag.contents ]))
- logger.debug("tag['id'](%s)=val(%s)"%(tag['id'],val))
+ #logger.debug("key(%s)=val(%s)"%(tag['id'],val))
if val:
self.metadata[tag['id']]=val