diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py
index fa692d87..0ef49b58 100644
--- a/calibre-plugin/config.py
+++ b/calibre-plugin/config.py
@@ -348,6 +348,7 @@ class ConfigWidget(QWidget):
prefs['imapfolder'] = unicode(self.imap_tab.imapfolder.text())
prefs['imapmarkread'] = self.imap_tab.imapmarkread.isChecked()
prefs['imapsessionpass'] = self.imap_tab.imapsessionpass.isChecked()
+ prefs['auto_reject_from_email'] = self.imap_tab.auto_reject_from_email.isChecked()
prefs.save_to_db()
@@ -1374,6 +1375,12 @@ class ImapTab(QWidget):
self.l.addWidget(self.imapmarkread,row,0,1,-1)
row+=1
+ self.auto_reject_from_email = QCheckBox(_('Discard URLs on Reject List'),self)
+ self.auto_reject_from_email.setToolTip(_('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.'))
+ self.auto_reject_from_email.setChecked(prefs['auto_reject_from_email'])
+ self.l.addWidget(self.auto_reject_from_email,row,0,1,-1)
+ row+=1
+
label = QLabel(_("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. "
diff --git a/calibre-plugin/fff_plugin.py b/calibre-plugin/fff_plugin.py
index 38763373..0e9c9e31 100644
--- a/calibre-plugin/fff_plugin.py
+++ b/calibre-plugin/fff_plugin.py
@@ -20,10 +20,10 @@ import email
import traceback
try:
- from PyQt5.Qt import (QApplication, QMenu, QTimer)
+ from PyQt5.Qt import (QApplication, QMenu, QTimer, QCursor, Qt)
from PyQt5.QtCore import QBuffer
except ImportError as e:
- from PyQt4.Qt import (QApplication, QMenu, QTimer)
+ from PyQt4.Qt import (QApplication, QMenu, QTimer, QCursor, Qt)
from PyQt4.QtCore import QBuffer
from calibre.constants import numeric_version as calibre_version
@@ -438,17 +438,30 @@ class FanFicFarePlugin(InterfaceAction):
if prefs['imapsessionpass']:
self.imap_pass = imap_pass
+ QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
+ self.gui.status_bar.show_message(_('Fetching Story URLs from Email...'))
url_list = get_urls_from_imap(prefs['imapserver'],
prefs['imapuser'],
imap_pass,
prefs['imapfolder'],
prefs['imapmarkread'],)
+ reject_list=[]
+ if prefs['auto_reject_from_email']:
+ reject_list = set([x for x in url_list if rejecturllist.check(x)])
+ url_list = url_list - reject_list
+ self.gui.status_bar.show_message(_('Finished Fetching Story URLs from Email.'),3000)
+ QApplication.restoreOverrideCursor()
+
if url_list:
self.add_dialog("\n".join(url_list),merge=False)
else:
+
+ msg = _('No Valid Story URLs Found in Unread Emails.')
+ if reject_list:
+ msg = msg + '
'+(_('(%d Story URLs Skipped, on Rejected URL List)')%len(reject_list))+'
'
info_dialog(self.gui, _('Get Story URLs from Email'),
- _('No Valid Story URLs Found in Unread Emails.'),
+ msg,
show=True,
show_copy_button=False)
diff --git a/calibre-plugin/prefs.py b/calibre-plugin/prefs.py
index f751577f..0609674d 100644
--- a/calibre-plugin/prefs.py
+++ b/calibre-plugin/prefs.py
@@ -111,6 +111,7 @@ default_prefs['imappass'] = ''
default_prefs['imapsessionpass'] = False
default_prefs['imapfolder'] = 'INBOX'
default_prefs['imapmarkread'] = True
+default_prefs['auto_reject_from_email'] = False
def set_library_config(library_config,db):
db.prefs.set_namespaced(PREFS_NAMESPACE,
diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot
index 86908d7a..6bbf9605 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-04-27 11:35+Central Daylight Time\n"
+"POT-Creation-Date: 2015-05-14 22:14+Central Daylight Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -103,65 +103,65 @@ msgstr ""
msgid "Other"
msgstr ""
-#: config.py:366
+#: config.py:367
msgid "These settings control the basic features of the plugin--downloading FanFiction."
msgstr ""
-#: config.py:370
+#: config.py:371
msgid "Defaults Options on Download"
msgstr ""
-#: config.py:374
+#: config.py:375
msgid "On each download, FanFicFare offers an option to select the output format.
This sets what that option will default to."
msgstr ""
-#: config.py:376
+#: config.py:377
msgid "Default Output &Format:"
msgstr ""
-#: config.py:391
+#: config.py:392
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:393
+#: config.py:394
msgid "Default If Story Already Exists?"
msgstr ""
-#: config.py:408
+#: config.py:409
msgid "Default Update Calibre &Metadata?"
msgstr ""
-#: config.py:409
+#: config.py:410
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:413
+#: config.py:414
msgid "Default Update EPUB Cover when Updating EPUB?"
msgstr ""
-#: config.py:414
+#: config.py:415
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:419
+#: config.py:420
msgid "Updating Calibre Options"
msgstr ""
-#: config.py:423
+#: config.py:424
msgid "Delete other existing formats?"
msgstr ""
-#: config.py:424
+#: config.py:425
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:428
+#: config.py:429
msgid "Keep Existing Tags when Updating Metadata?"
msgstr ""
-#: config.py:429
+#: config.py:430
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,304 @@ msgid ""
"(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)"
msgstr ""
-#: config.py:433
+#: config.py:434
msgid "Force Author into Author Sort?"
msgstr ""
-#: config.py:434
+#: config.py:435
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:438
+#: config.py:439
msgid "Force Title into Title Sort?"
msgstr ""
-#: config.py:439
+#: config.py:440
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:443
+#: config.py:444
msgid "Check for existing Series Anthology books?"
msgstr ""
-#: config.py:444
+#: config.py:445
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:448
+#: config.py:449
msgid "Check for changed Story URL?"
msgstr ""
-#: config.py:449
+#: config.py:450
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:453
+#: config.py:454
msgid "Search EPUB text for Story URL?"
msgstr ""
-#: config.py:454
+#: config.py:455
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:458
+#: config.py:459
msgid "Mark added/updated books when finished?"
msgstr ""
-#: config.py:459
+#: config.py:460
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:463
+#: config.py:464
msgid "Show Marked books when finished?"
msgstr ""
-#: config.py:464
+#: config.py:465
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:468
+#: config.py:469
msgid "Smarten Punctuation (EPUB only)"
msgstr ""
-#: config.py:469
+#: config.py:470
msgid "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB download and update."
msgstr ""
-#: config.py:473
+#: config.py:474
msgid "Automatically Convert new/update books?"
msgstr ""
-#: config.py:474
+#: config.py:475
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:478
+#: config.py:479
msgid "GUI Options"
msgstr ""
-#: config.py:482
+#: config.py:483
msgid "Take URLs from Clipboard?"
msgstr ""
-#: config.py:483
+#: config.py:484
msgid "Prefill URLs from valid URLs in Clipboard when Adding New."
msgstr ""
-#: config.py:487
+#: config.py:488
msgid "Default to Update when books selected?"
msgstr ""
-#: config.py:488
+#: config.py:489
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:492
+#: config.py:493
msgid "Keep 'Add New from URL(s)' dialog on top?"
msgstr ""
-#: config.py:493
+#: config.py:494
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:497
+#: config.py:498
msgid "Show estimated time left?"
msgstr ""
-#: config.py:498
+#: config.py:499
msgid "When a Progress Bar is shown, show a rough estimate of the time left."
msgstr ""
-#: config.py:502
+#: config.py:503
msgid "Misc Options"
msgstr ""
-#: config.py:506
+#: config.py:507
msgid "Inject calibre Series when none found?"
msgstr ""
-#: config.py:507
+#: config.py:508
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:511
+#: config.py:512
msgid "Reject List"
msgstr ""
-#: config.py:515
+#: config.py:516
msgid "Edit Reject URL List"
msgstr ""
-#: config.py:516
+#: config.py:517
msgid "Edit list of URLs FanFicFare will automatically Reject."
msgstr ""
-#: config.py:520 config.py:591
+#: config.py:521 config.py:592
msgid "Add Reject URLs"
msgstr ""
-#: config.py:521
+#: config.py:522
msgid "Add additional URLs to Reject as text."
msgstr ""
-#: config.py:525
+#: config.py:526
msgid "Edit Reject Reasons List"
msgstr ""
-#: config.py:526 config.py:581
+#: config.py:527 config.py:582
msgid "Customize the Reasons presented when Rejecting URLs"
msgstr ""
-#: config.py:530
+#: config.py:531
msgid "Reject Without Confirmation?"
msgstr ""
-#: config.py:531
+#: config.py:532
msgid "Always reject URLs on the Reject List without stopping and asking."
msgstr ""
-#: config.py:565
+#: config.py:566
msgid "Edit Reject URLs List"
msgstr ""
-#: config.py:579
+#: config.py:580
msgid "Reject Reasons"
msgstr ""
-#: config.py:580
+#: config.py:581
msgid "Customize Reject List Reasons"
msgstr ""
-#: config.py:589
+#: config.py:590
msgid "Reason why I rejected it"
msgstr ""
-#: config.py:589
+#: config.py:590
msgid "Title by Author"
msgstr ""
-#: config.py:592
+#: config.py:593
msgid "Add Reject URLs. Use: http://...,note or http://...,title by author - note
Invalid story URLs will be ignored."
msgstr ""
-#: config.py:593
+#: config.py:594
msgid ""
"One URL per line:\n"
"http://...,note\n"
"http://...,title by author - note"
msgstr ""
-#: config.py:595 dialogs.py:1072
+#: config.py:596 dialogs.py:1072
msgid "Add this reason to all URLs added:"
msgstr ""
-#: config.py:611
+#: config.py:612
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:616
+#: config.py:617
msgid "FanFicFare now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors."
msgstr ""
-#: config.py:635 config.py:666 config.py:667
+#: config.py:636 config.py:667 config.py:668
msgid "Edit personal.ini"
msgstr ""
-#: config.py:640
+#: config.py:641
msgid "View Defaults"
msgstr ""
-#: config.py:641
+#: config.py:642
msgid ""
"View all of the plugin's configurable settings\n"
"and their default settings."
msgstr ""
-#: config.py:645
+#: config.py:646
msgid "Changes will only be saved if you click 'OK' to leave Customize FanFicFare."
msgstr ""
-#: config.py:656
+#: config.py:657
msgid "Plugin Defaults"
msgstr ""
-#: config.py:657
+#: config.py:658
msgid "Plugin Defaults (%s) (Read-Only)"
msgstr ""
-#: config.py:690
+#: config.py:691
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:695
+#: config.py:696
msgid "Add new/updated stories to \"Send to Device\" Reading List(s)."
msgstr ""
-#: config.py:696
+#: config.py:697
msgid "Automatically add new/updated stories to these lists in the %(rl)s plugin."
msgstr ""
-#: config.py:701
+#: config.py:702
msgid "\"Send to Device\" Reading Lists"
msgstr ""
-#: config.py:702 config.py:705 config.py:719 config.py:722
+#: config.py:703 config.py:706 config.py:720 config.py:723
msgid "When enabled, new/updated stories will be automatically added to these lists."
msgstr ""
-#: config.py:712
+#: config.py:713
msgid "Add new/updated stories to \"To Read\" Reading List(s)."
msgstr ""
-#: config.py:713
+#: config.py:714
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:718
+#: config.py:719
msgid "\"To Read\" Reading Lists"
msgstr ""
-#: config.py:729
+#: config.py:730
msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"."
msgstr ""
-#: config.py:730
+#: config.py:731
msgid "Menu option to remove from \"To Read\" lists will also add stories back to \"Send to Device\" Reading List(s)"
msgstr ""
-#: config.py:758
+#: config.py:759
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:766
+#: config.py:767
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,397 +474,405 @@ msgid ""
"This comes before Generate Cover so %(gc)s(Plugin) use the image if configured to."
msgstr ""
-#: config.py:771
+#: config.py:772
msgid "Update Calibre Cover (from EPUB):"
msgstr ""
-#: config.py:789
+#: config.py:790
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:793
+#: config.py:794
msgid "Generate Calibre Cover:"
msgstr ""
-#: config.py:820
+#: config.py:821
msgid "Plugin %(gc)s"
msgstr ""
-#: config.py:821
+#: config.py:822
msgid "Use plugin to create covers. Additional settings are below."
msgstr ""
-#: config.py:828
+#: config.py:829
msgid "Calibre Generate Cover"
msgstr ""
-#: config.py:829
+#: config.py:830
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:843
+#: config.py:844
msgid "Generate Covers Only for New Books"
msgstr ""
-#: config.py:844
+#: config.py:845
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:850
+#: config.py:851
msgid "Inject/update the cover inside EPUB"
msgstr ""
-#: config.py:851
+#: config.py:852
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:857
+#: config.py:858
msgid "%(gc)s(Plugin) Settings"
msgstr ""
-#: config.py:865
+#: config.py:866
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:883 config.py:887 config.py:900
+#: config.py:884 config.py:888 config.py:901
msgid "Default"
msgstr ""
-#: config.py:888
+#: config.py:889
msgid "On Metadata update, run %(gc)s with this setting, if there isn't a more specific setting below."
msgstr ""
-#: config.py:891
+#: config.py:892
msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories."
msgstr ""
-#: config.py:914
+#: config.py:915
msgid "Allow %(gcset)s from %(pini)s to override"
msgstr ""
-#: config.py:915
+#: config.py:916
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:953
+#: config.py:954
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:958
+#: config.py:959
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:964
+#: config.py:965
msgid "Which column and algorithm to use are configured in %(cp)s."
msgstr ""
-#: config.py:974
+#: config.py:975
msgid "Will overwrite word count from FanFicFare metadata if set to update the same custom column."
msgstr ""
-#: config.py:979
+#: config.py:980
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:1015
+#: config.py:1016
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:1020
+#: config.py:1021
msgid "Keyboard shortcuts..."
msgstr ""
-#: config.py:1021
+#: config.py:1022
msgid "Edit the keyboard shortcuts associated with this plugin"
msgstr ""
-#: config.py:1025
+#: config.py:1026
msgid "Reset disabled &confirmation dialogs"
msgstr ""
-#: config.py:1026
+#: config.py:1027
msgid "Reset all show me again dialogs for the FanFicFare plugin"
msgstr ""
-#: config.py:1030
+#: config.py:1031
msgid "&View library preferences..."
msgstr ""
-#: config.py:1031
+#: config.py:1032
msgid "View data stored in the library database for this plugin"
msgstr ""
-#: config.py:1042
+#: config.py:1043
msgid "Done"
msgstr ""
-#: config.py:1043
+#: config.py:1044
msgid "Confirmation dialogs have all been reset"
msgstr ""
-#: config.py:1091
+#: config.py:1092
msgid "Category"
msgstr ""
-#: config.py:1092
+#: config.py:1093
msgid "Genre"
msgstr ""
-#: config.py:1093
+#: config.py:1094
msgid "Language"
msgstr ""
-#: config.py:1094 fff_plugin.py:1204 fff_plugin.py:1402 fff_plugin.py:1432
+#: config.py:1095 fff_plugin.py:1217 fff_plugin.py:1415 fff_plugin.py:1445
msgid "Status"
msgstr ""
-#: config.py:1095
+#: config.py:1096
msgid "Status:%(cmplt)s"
msgstr ""
-#: config.py:1096
+#: config.py:1097
msgid "Status:%(inprog)s"
msgstr ""
-#: config.py:1097 config.py:1231
+#: config.py:1098 config.py:1232
msgid "Series"
msgstr ""
-#: config.py:1098
+#: config.py:1099
msgid "Characters"
msgstr ""
-#: config.py:1099
+#: config.py:1100
msgid "Relationships"
msgstr ""
-#: config.py:1100
+#: config.py:1101
msgid "Published"
msgstr ""
-#: config.py:1101 fff_plugin.py:1515 fff_plugin.py:1534
+#: config.py:1102 fff_plugin.py:1528 fff_plugin.py:1547
msgid "Updated"
msgstr ""
-#: config.py:1102
+#: config.py:1103
msgid "Created"
msgstr ""
-#: config.py:1103
+#: config.py:1104
msgid "Rating"
msgstr ""
-#: config.py:1104
+#: config.py:1105
msgid "Warnings"
msgstr ""
-#: config.py:1105
+#: config.py:1106
msgid "Chapters"
msgstr ""
-#: config.py:1106
+#: config.py:1107
msgid "Words"
msgstr ""
-#: config.py:1107
+#: config.py:1108
msgid "Site"
msgstr ""
-#: config.py:1108
+#: config.py:1109
msgid "Story ID"
msgstr ""
-#: config.py:1109
+#: config.py:1110
msgid "Author ID"
msgstr ""
-#: config.py:1110
+#: config.py:1111
msgid "Extra Tags"
msgstr ""
-#: config.py:1111 config.py:1223 dialogs.py:863 dialogs.py:959
-#: fff_plugin.py:1204 fff_plugin.py:1402 fff_plugin.py:1432
+#: config.py:1112 config.py:1224 dialogs.py:863 dialogs.py:959
+#: fff_plugin.py:1217 fff_plugin.py:1415 fff_plugin.py:1445
msgid "Title"
msgstr ""
-#: config.py:1112
+#: config.py:1113
msgid "Story URL"
msgstr ""
-#: config.py:1113
+#: config.py:1114
msgid "Description"
msgstr ""
-#: config.py:1114 dialogs.py:863 dialogs.py:959 fff_plugin.py:1204
-#: fff_plugin.py:1402 fff_plugin.py:1432
+#: config.py:1115 dialogs.py:863 dialogs.py:959 fff_plugin.py:1217
+#: fff_plugin.py:1415 fff_plugin.py:1445
msgid "Author"
msgstr ""
-#: config.py:1115
+#: config.py:1116
msgid "Author URL"
msgstr ""
-#: config.py:1116
+#: config.py:1117
msgid "File Format"
msgstr ""
-#: config.py:1117
+#: config.py:1118
msgid "File Extension"
msgstr ""
-#: config.py:1118
+#: config.py:1119
msgid "Site Abbrev"
msgstr ""
-#: config.py:1119
+#: config.py:1120
msgid "FanFicFare Version"
msgstr ""
-#: config.py:1134
+#: config.py:1135
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:1159
+#: config.py:1160
msgid "Update this %s column(%s) with..."
msgstr ""
-#: config.py:1169
+#: config.py:1170
msgid "Values that aren't valid for this enumeration column will be ignored."
msgstr ""
-#: config.py:1169 config.py:1171
+#: config.py:1170 config.py:1172
msgid "Metadata values valid for this type of column."
msgstr ""
-#: config.py:1174 config.py:1250
+#: config.py:1175 config.py:1251
msgid "New Only"
msgstr ""
-#: config.py:1175
+#: config.py:1176
msgid ""
"Write to %s(%s) only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1186
+#: config.py:1187
msgid "Allow %(ccset)s from %(pini)s to override"
msgstr ""
-#: config.py:1187
+#: config.py:1188
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:1192
+#: config.py:1193
msgid "Special column:"
msgstr ""
-#: config.py:1197
+#: config.py:1198
msgid "Update/Overwrite Error Column:"
msgstr ""
-#: config.py:1198
+#: config.py:1199
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:1224
+#: config.py:1225
msgid "Author(s)"
msgstr ""
-#: config.py:1225
+#: config.py:1226
msgid "Publisher"
msgstr ""
-#: config.py:1226
+#: config.py:1227
msgid "Tags"
msgstr ""
-#: config.py:1227
+#: config.py:1228
msgid "Languages"
msgstr ""
-#: config.py:1228
+#: config.py:1229
msgid "Published Date"
msgstr ""
-#: config.py:1229
+#: config.py:1230
msgid "Date"
msgstr ""
-#: config.py:1230
+#: config.py:1231
msgid "Comments"
msgstr ""
-#: config.py:1232
+#: config.py:1233
msgid "Ids(url id only)"
msgstr ""
-#: config.py:1237
+#: config.py:1238
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:1251
+#: config.py:1252
msgid ""
"Write to %s only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1272
+#: config.py:1273
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:1277
+#: config.py:1278
msgid "IMAP Server Name"
msgstr ""
-#: config.py:1278
+#: config.py:1279
msgid "Name of IMAP server--must allow IMAP4 with SSL. Eg: imap.gmail.com"
msgstr ""
-#: config.py:1287
+#: config.py:1288
msgid "IMAP User Name"
msgstr ""
-#: config.py:1288
+#: config.py:1289
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:1297
+#: config.py:1298
msgid "IMAP User Password"
msgstr ""
-#: config.py:1298
+#: config.py:1299
msgid "IMAP password. If left empty, FanFicFare will ask you for your password when you use the feature."
msgstr ""
-#: config.py:1308
+#: config.py:1309
msgid "Remember Password for Session (when not saved above)"
msgstr ""
-#: config.py:1309
+#: config.py:1310
msgid "If checked, and no password is entered above, FanFicFare will remember your password until you close calibre or change Libraries."
msgstr ""
-#: config.py:1314
+#: config.py:1315
msgid "IMAP Folder Name"
msgstr ""
-#: config.py:1315
+#: config.py:1316
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:1324
+#: config.py:1325
msgid "Mark Emails Read"
msgstr ""
-#: config.py:1325
+#: config.py:1326
msgid "If checked, emails will be marked as having been read if they contain any story URLs."
msgstr ""
-#: config.py:1330
+#: config.py:1331
+msgid "Discard URLs on Reject List"
+msgstr ""
+
+#: config.py:1332
+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
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 ""
@@ -1081,7 +1089,7 @@ msgstr ""
msgid "What sort of update to perform. May set default from plugin configuration."
msgstr ""
-#: dialogs.py:863 fff_plugin.py:1204 fff_plugin.py:1402 fff_plugin.py:1432
+#: dialogs.py:863 fff_plugin.py:1217 fff_plugin.py:1415 fff_plugin.py:1445
msgid "Comment"
msgstr ""
@@ -1201,7 +1209,7 @@ msgstr ""
msgid "Get Story URLs from &Email"
msgstr ""
-#: fff_plugin.py:273 fff_plugin.py:447
+#: fff_plugin.py:273 fff_plugin.py:460
msgid "Get Story URLs from Web Page"
msgstr ""
@@ -1277,475 +1285,487 @@ msgstr ""
msgid "FanFicFare Email Settings are not configured."
msgstr ""
-#: fff_plugin.py:433
-msgid "Get Story URLs from Email"
+#: fff_plugin.py:425
+msgid "Fetching Story URLs from Email..."
msgstr ""
-#: fff_plugin.py:434
+#: fff_plugin.py:436
+msgid "Finished Fetching Story URLs from Email."
+msgstr ""
+
+#: fff_plugin.py:443
msgid "No Valid Story URLs Found in Unread Emails."
msgstr ""
-#: fff_plugin.py:460 fff_plugin.py:512
+#: fff_plugin.py:445
+msgid "(%d Story URLs Skipped, on Rejected URL List)"
+msgstr ""
+
+#: fff_plugin.py:446
+msgid "Get Story URLs from Email"
+msgstr ""
+
+#: fff_plugin.py:473 fff_plugin.py:525
msgid "List of Story URLs"
msgstr ""
-#: fff_plugin.py:461
+#: fff_plugin.py:474
msgid "No Valid Story URLs found on given page."
msgstr ""
-#: fff_plugin.py:476
+#: fff_plugin.py:489
msgid "No Selected Books to Get URLs From"
msgstr ""
-#: fff_plugin.py:494
+#: fff_plugin.py:507
msgid "Collecting URLs for stories..."
msgstr ""
-#: fff_plugin.py:495
+#: fff_plugin.py:508
msgid "Get URLs for stories"
msgstr ""
-#: fff_plugin.py:496 fff_plugin.py:543 fff_plugin.py:730
+#: fff_plugin.py:509 fff_plugin.py:556 fff_plugin.py:743
msgid "URL retrieved"
msgstr ""
-#: fff_plugin.py:516
+#: fff_plugin.py:529
msgid "List of URLs"
msgstr ""
-#: fff_plugin.py:517
+#: fff_plugin.py:530
msgid "No Story URLs found in selected books."
msgstr ""
-#: fff_plugin.py:533
+#: fff_plugin.py:546
msgid "No Selected Books have URLs to Reject"
msgstr ""
-#: fff_plugin.py:541
+#: fff_plugin.py:554
msgid "Collecting URLs for Reject List..."
msgstr ""
-#: fff_plugin.py:542
+#: fff_plugin.py:555
msgid "Get URLs for Reject List"
msgstr ""
-#: fff_plugin.py:577
+#: fff_plugin.py:590
msgid "Proceed to Remove?"
msgstr ""
-#: fff_plugin.py:577
+#: fff_plugin.py:590
msgid "Rejecting FanFicFare URLs: None of the books selected have FanFiction URLs."
msgstr ""
-#: fff_plugin.py:599
+#: fff_plugin.py:612
msgid "Cannot Make Anthologys without %s"
msgstr ""
-#: fff_plugin.py:603 fff_plugin.py:707
+#: fff_plugin.py:616 fff_plugin.py:720
msgid "Cannot Update Books from Device View"
msgstr ""
-#: fff_plugin.py:607
+#: fff_plugin.py:620
msgid "Can only update 1 anthology at a time"
msgstr ""
-#: fff_plugin.py:616
+#: fff_plugin.py:629
msgid "Can only Update Epub Anthologies"
msgstr ""
-#: fff_plugin.py:634 fff_plugin.py:635
+#: fff_plugin.py:647 fff_plugin.py:648
msgid "Cannot Update Anthology"
msgstr ""
-#: fff_plugin.py:635
+#: fff_plugin.py:648
msgid "Book isn't an FanFicFare Anthology or contains book(s) without valid Story URLs."
msgstr ""
-#: fff_plugin.py:693
+#: fff_plugin.py:706
msgid "There are %d stories in the current anthology that are not going to be kept if you go ahead."
msgstr ""
-#: fff_plugin.py:694
+#: fff_plugin.py:707
msgid "Story URLs that will be removed:"
msgstr ""
-#: fff_plugin.py:696
+#: fff_plugin.py:709
msgid "Update anyway?"
msgstr ""
-#: fff_plugin.py:697
+#: fff_plugin.py:710
msgid "Stories Removed"
msgstr ""
-#: fff_plugin.py:714
+#: fff_plugin.py:727
msgid "No Selected Books to Update"
msgstr ""
-#: fff_plugin.py:728
+#: fff_plugin.py:741
msgid "Collecting stories for update..."
msgstr ""
-#: fff_plugin.py:729
+#: fff_plugin.py:742
msgid "Get stories for updates"
msgstr ""
-#: fff_plugin.py:739
+#: fff_plugin.py:752
msgid "Update Existing List"
msgstr ""
-#: fff_plugin.py:797
+#: fff_plugin.py:810
msgid "Started fetching metadata for %s stories."
msgstr ""
-#: fff_plugin.py:803
+#: fff_plugin.py:816
msgid "No valid story URLs entered."
msgstr ""
-#: fff_plugin.py:828 fff_plugin.py:834
+#: fff_plugin.py:841 fff_plugin.py:847
msgid "Reject URL?"
msgstr ""
-#: fff_plugin.py:835 fff_plugin.py:853
+#: fff_plugin.py:848 fff_plugin.py:866
msgid "%s is on your Reject URL list:"
msgstr ""
-#: fff_plugin.py:837
+#: fff_plugin.py:850
msgid "Click 'Yes' to Reject."
msgstr ""
-#: fff_plugin.py:838 fff_plugin.py:942
+#: fff_plugin.py:851 fff_plugin.py:955
msgid "Click 'No' to download anyway."
msgstr ""
-#: fff_plugin.py:840
+#: fff_plugin.py:853
msgid "Story on Reject URLs list (%s)."
msgstr ""
-#: fff_plugin.py:843
+#: fff_plugin.py:856
msgid "Rejected"
msgstr ""
-#: fff_plugin.py:846
+#: fff_plugin.py:859
msgid "Remove Reject URL?"
msgstr ""
-#: fff_plugin.py:852
+#: fff_plugin.py:865
msgid "Remove URL from Reject List?"
msgstr ""
-#: fff_plugin.py:855
+#: fff_plugin.py:868
msgid "Click 'Yes' to remove it from the list,"
msgstr ""
-#: fff_plugin.py:856
+#: fff_plugin.py:869
msgid "Click 'No' to leave it on the list."
msgstr ""
-#: fff_plugin.py:873
+#: fff_plugin.py:886
msgid "Cannot update non-epub format."
msgstr ""
-#: fff_plugin.py:918
+#: fff_plugin.py:931
msgid "Are You an Adult?"
msgstr ""
-#: fff_plugin.py:919
+#: fff_plugin.py:932
msgid "%s requires that you be an adult. Please confirm you are an adult in your locale:"
msgstr ""
-#: fff_plugin.py:933
+#: fff_plugin.py:946
msgid "Skip Story?"
msgstr ""
-#: fff_plugin.py:939
+#: fff_plugin.py:952
msgid "Skip Anthology Story?"
msgstr ""
-#: fff_plugin.py:940
+#: fff_plugin.py:953
msgid "\"%s\" is in series \"%s\" that you have an anthology book for."
msgstr ""
-#: fff_plugin.py:941
+#: fff_plugin.py:954
msgid "Click 'Yes' to Skip."
msgstr ""
-#: fff_plugin.py:944
+#: fff_plugin.py:957
msgid "Story in Series Anthology(%s)."
msgstr ""
-#: fff_plugin.py:949
+#: fff_plugin.py:962
msgid "Skipped"
msgstr ""
-#: fff_plugin.py:977
+#: fff_plugin.py:990
msgid "Add"
msgstr ""
-#: fff_plugin.py:990
+#: fff_plugin.py:1003
msgid "Meta"
msgstr ""
-#: fff_plugin.py:1023
+#: fff_plugin.py:1036
msgid "Skipping duplicate story."
msgstr ""
-#: fff_plugin.py:1026
+#: fff_plugin.py:1039
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:1037
+#: fff_plugin.py:1050
msgid "Update"
msgstr ""
-#: fff_plugin.py:1045 fff_plugin.py:1052
+#: fff_plugin.py:1058 fff_plugin.py:1065
msgid "Change Story URL?"
msgstr ""
-#: fff_plugin.py:1053
+#: fff_plugin.py:1066
msgid "%s by %s is already in your library with a different source URL:"
msgstr ""
-#: fff_plugin.py:1054
+#: fff_plugin.py:1067
msgid "In library: %(liburl)s"
msgstr ""
-#: fff_plugin.py:1055 fff_plugin.py:1069
+#: fff_plugin.py:1068 fff_plugin.py:1082
msgid "New URL: %(newurl)s"
msgstr ""
-#: fff_plugin.py:1056
+#: fff_plugin.py:1069
msgid "Click 'Yes' to update/overwrite book with new URL."
msgstr ""
-#: fff_plugin.py:1057
+#: fff_plugin.py:1070
msgid "Click 'No' to skip updating/overwriting this book."
msgstr ""
-#: fff_plugin.py:1059 fff_plugin.py:1066
+#: fff_plugin.py:1072 fff_plugin.py:1079
msgid "Download as New Book?"
msgstr ""
-#: fff_plugin.py:1067
+#: fff_plugin.py:1080
msgid "%s by %s is already in your library with a different source URL."
msgstr ""
-#: fff_plugin.py:1068
+#: fff_plugin.py:1081
msgid "You chose not to update the existing book. Do you want to add a new book for this URL?"
msgstr ""
-#: fff_plugin.py:1070
+#: fff_plugin.py:1083
msgid "Click 'Yes' to a new book with new URL."
msgstr ""
-#: fff_plugin.py:1071
+#: fff_plugin.py:1084
msgid "Click 'No' to skip URL."
msgstr ""
-#: fff_plugin.py:1077
+#: fff_plugin.py:1090
msgid "Update declined by user due to differing story URL(%s)"
msgstr ""
-#: fff_plugin.py:1080
+#: fff_plugin.py:1093
msgid "Different URL"
msgstr ""
-#: fff_plugin.py:1085
+#: fff_plugin.py:1098
msgid "Metadata collected."
msgstr ""
-#: fff_plugin.py:1101
+#: fff_plugin.py:1114
msgid "Already contains %d chapters."
msgstr ""
-#: fff_plugin.py:1106 jobs.py:208
+#: fff_plugin.py:1119 jobs.py:208
msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update."
msgstr ""
-#: fff_plugin.py:1108
+#: fff_plugin.py:1121
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:1120
+#: fff_plugin.py:1133
msgid "Not Overwriting, web site is not newer."
msgstr ""
-#: fff_plugin.py:1200
+#: fff_plugin.py:1213
msgid "None of the %d URLs/stories given can be/need to be downloaded."
msgstr ""
-#: fff_plugin.py:1201 fff_plugin.py:1398 fff_plugin.py:1428
+#: fff_plugin.py:1214 fff_plugin.py:1411 fff_plugin.py:1441
msgid "See log for details."
msgstr ""
-#: fff_plugin.py:1202
+#: fff_plugin.py:1215
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr ""
-#: fff_plugin.py:1209 fff_plugin.py:1410
+#: fff_plugin.py:1222 fff_plugin.py:1423
msgid "Bad"
msgstr ""
-#: fff_plugin.py:1217
+#: fff_plugin.py:1230
msgid "FanFicFare download ended"
msgstr ""
-#: fff_plugin.py:1217 fff_plugin.py:1453
+#: fff_plugin.py:1230 fff_plugin.py:1466
msgid "FanFicFare log"
msgstr ""
-#: fff_plugin.py:1237
+#: fff_plugin.py:1250
msgid "Download FanFiction Book"
msgstr ""
-#: fff_plugin.py:1244
+#: fff_plugin.py:1257
msgid "Starting %d FanFicFare Downloads"
msgstr ""
-#: fff_plugin.py:1274
+#: fff_plugin.py:1287
msgid "Story Details:"
msgstr ""
-#: fff_plugin.py:1277
+#: fff_plugin.py:1290
msgid "Error Updating Metadata"
msgstr ""
-#: fff_plugin.py:1278
+#: fff_plugin.py:1291
msgid "An error has occurred while FanFicFare was updating calibre's metadata for %s."
msgstr ""
-#: fff_plugin.py:1279
+#: fff_plugin.py:1292
msgid "The ebook has been updated, but the metadata has not."
msgstr ""
-#: fff_plugin.py:1331
+#: fff_plugin.py:1344
msgid "Finished Adding/Updating %d books."
msgstr ""
-#: fff_plugin.py:1361
+#: fff_plugin.py:1374
msgid "Starting auto conversion of %d books."
msgstr ""
-#: fff_plugin.py:1382
+#: fff_plugin.py:1395
msgid "No Good Stories for Anthology"
msgstr ""
-#: fff_plugin.py:1383
+#: fff_plugin.py:1396
msgid "No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr ""
-#: fff_plugin.py:1388 fff_plugin.py:1427
+#: fff_plugin.py:1401 fff_plugin.py:1440
msgid "FanFicFare found %s good and %s bad updates."
msgstr ""
-#: fff_plugin.py:1395
+#: fff_plugin.py:1408
msgid "Are you sure you want to continue with creating/updating this Anthology?"
msgstr ""
-#: fff_plugin.py:1396
+#: fff_plugin.py:1409
msgid "Any updates that failed will not be included in the Anthology."
msgstr ""
-#: fff_plugin.py:1397
+#: fff_plugin.py:1410
msgid "However, if there's an older version, it will still be included."
msgstr ""
-#: fff_plugin.py:1400
+#: fff_plugin.py:1413
msgid "Proceed with updating this anthology and your library?"
msgstr ""
-#: fff_plugin.py:1408
+#: fff_plugin.py:1421
msgid "Good"
msgstr ""
-#: fff_plugin.py:1429
+#: fff_plugin.py:1442
msgid "Proceed with updating your library?"
msgstr ""
-#: fff_plugin.py:1453
+#: fff_plugin.py:1466
msgid "FanFicFare download complete"
msgstr ""
-#: fff_plugin.py:1466
+#: fff_plugin.py:1479
msgid "Merging %s books."
msgstr ""
-#: fff_plugin.py:1506
+#: fff_plugin.py:1519
msgid "FanFicFare Adding/Updating books."
msgstr ""
-#: fff_plugin.py:1513
+#: fff_plugin.py:1526
msgid "Updating calibre for FanFiction stories..."
msgstr ""
-#: fff_plugin.py:1514
+#: fff_plugin.py:1527
msgid "Update calibre for FanFiction stories"
msgstr ""
-#: fff_plugin.py:1523
+#: fff_plugin.py:1536
msgid "Adding/Updating %s BAD books."
msgstr ""
-#: fff_plugin.py:1532
+#: fff_plugin.py:1545
msgid "Updating calibre for BAD FanFiction stories..."
msgstr ""
-#: fff_plugin.py:1533
+#: fff_plugin.py:1546
msgid "Update calibre for BAD FanFiction stories"
msgstr ""
-#: fff_plugin.py:1559
+#: fff_plugin.py:1572
msgid "Adding format to book failed for some reason..."
msgstr ""
-#: fff_plugin.py:1562
+#: fff_plugin.py:1575
msgid "Error"
msgstr ""
-#: fff_plugin.py:1870
+#: fff_plugin.py:1883
msgid "You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?"
msgstr ""
-#: fff_plugin.py:1882
+#: fff_plugin.py:1895
msgid "You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: fff_plugin.py:1892 fff_plugin.py:1910
+#: fff_plugin.py:1905 fff_plugin.py:1923
msgid "You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?"
msgstr ""
-#: fff_plugin.py:1898
+#: fff_plugin.py:1911
msgid "You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: fff_plugin.py:2019
+#: fff_plugin.py:2032
msgid "No story URL found."
msgstr ""
-#: fff_plugin.py:2022
+#: fff_plugin.py:2035
msgid "Not Found"
msgstr ""
-#: fff_plugin.py:2028
+#: fff_plugin.py:2041
msgid "URL is not a valid story URL."
msgstr ""
-#: fff_plugin.py:2031
+#: fff_plugin.py:2044
msgid "Bad URL"
msgstr ""
-#: fff_plugin.py:2170 fff_plugin.py:2173
+#: fff_plugin.py:2183 fff_plugin.py:2186
msgid "Anthology containing:"
msgstr ""
-#: fff_plugin.py:2171
+#: fff_plugin.py:2184
msgid "%s by %s"
msgstr ""
-#: fff_plugin.py:2193
+#: fff_plugin.py:2206
msgid " Anthology"
msgstr ""
-#: fff_plugin.py:2230
+#: fff_plugin.py:2243
msgid "(was set, removed for security)"
msgstr ""
diff --git a/fanficfare/geturls.py b/fanficfare/geturls.py
index 9f30d6ec..ae0e047f 100644
--- a/fanficfare/geturls.py
+++ b/fanficfare/geturls.py
@@ -216,9 +216,9 @@ def get_urls_from_imap(srv,user,passwd,folder,markread=True):
try:
#print("part mime:%s"%part.get_content_type())
if part.get_content_type() == 'text/plain':
- urllist.extend(get_urls_from_text(part.get_payload(decode=True)))
+ urllist.extend(get_urls_from_text(part.get_payload(decode=True),normalize=True))
if part.get_content_type() == 'text/html':
- urllist.extend(get_urls_from_html(part.get_payload(decode=True)))
+ urllist.extend(get_urls_from_html(part.get_payload(decode=True),normalize=True))
except Exception as e:
print("Failed to read email content: %s"%e)
#print "urls:%s"%get_urls_from_text(get_first_text_block(email_message))