Merge remote-tracking branch 'refs/remotes/JimmXinu/master'

master
FaceDeer 2018-03-04 23:06:34 -07:00
commit e940fa7202
23 changed files with 202 additions and 149 deletions

View File

@ -33,7 +33,7 @@ except NameError:
from calibre.customize import InterfaceActionBase from calibre.customize import InterfaceActionBase
# pulled out from FanFicFareBase for saving in prefs.py # pulled out from FanFicFareBase for saving in prefs.py
__version__ = (2, 20, 0) __version__ = (2, 23, 0)
## Apparently the name for this class doesn't matter--it was still ## Apparently the name for this class doesn't matter--it was still
## 'demo' for the first few versions. ## 'demo' for the first few versions.

View File

@ -1333,7 +1333,9 @@ class FanFicFarePlugin(InterfaceAction):
(epuburl,chaptercount) = \ (epuburl,chaptercount) = \
get_dcsource_chaptercount(StringIO(db.format(book_id,'EPUB', get_dcsource_chaptercount(StringIO(db.format(book_id,'EPUB',
index_is_id=True))) index_is_id=True)))
urlchaptercount = int(story.getMetadata('numChapters').replace(',','')) #urlchaptercount = int(story.getMetadata('numChapters').replace(',',''))
# returns int adjusted for start-end range.
urlchaptercount = story.getChapterCount()
if chaptercount == urlchaptercount: if chaptercount == urlchaptercount:
if collision == UPDATE: if collision == UPDATE:
raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png',showerror=False) raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png',showerror=False)

View File

@ -233,7 +233,9 @@ def do_download_for_worker(book,options,merge,notification=lambda x,y:x):
# update now handled by pre-populating the old images and # update now handled by pre-populating the old images and
# chapters in the adapter rather than merging epubs. # chapters in the adapter rather than merging epubs.
urlchaptercount = int(story.getMetadata('numChapters').replace(',','')) #urlchaptercount = int(story.getMetadata('numChapters').replace(',',''))
# returns int adjusted for start-end range.
urlchaptercount = story.getChapterCount()
(url, (url,
chaptercount, chaptercount,
adapter.oldchapters, adapter.oldchapters,

View File

@ -1031,7 +1031,7 @@ website_encodings:Windows-1252,utf8
## extra_titlepage_entries, logpage_entries, extra_logpage_entries, ## extra_titlepage_entries, logpage_entries, extra_logpage_entries,
## and include_in_* config items. You can also add additional entries ## and include_in_* config items. You can also add additional entries
## here to build up composite metadata entries. ## here to build up composite metadata entries.
## archiveofourown.org.org, for example, fills genre (a standard ## archiveofourown.org, for example, fills genre (a standard
## entry) as the composite offreeformtags, ao3categories in ## entry) as the composite offreeformtags, ao3categories in
## include_in_genre. If there's ever more than 4 series, add ## include_in_genre. If there's ever more than 4 series, add
## series04,series04Url etc. ## series04,series04Url etc.
@ -2477,7 +2477,7 @@ extracategories:My Little Pony: Friendship is Magic
## Extra metadata that this adapter knows about. See [archiveofourown.org] ## Extra metadata that this adapter knows about. See [archiveofourown.org]
## for examples of how to use them. ## for examples of how to use them.
extra_valid_entries:likes,dislikes,views,total_views,short_description,groups,groupsUrl,groupsHTML,prequel,prequelUrl,prequelHTML,sequels,sequelsUrl,sequelsHTML,comment_count,coverSource,coverSourceUrl,coverSourceHTML,authorLastLogin extra_valid_entries:likes,dislikes,views,total_views,short_description,groups,groupsUrl,groupsHTML,prequel,prequelUrl,prequelHTML,sequels,sequelsUrl,sequelsHTML,comment_count,coverSource,coverSourceUrl,coverSourceHTML,authorLastLogin,content,fandoms
likes_label:Likes likes_label:Likes
dislikes_label:Dislikes dislikes_label:Dislikes
views_label:Highest Single Chapter Views views_label:Highest Single Chapter Views
@ -2497,6 +2497,8 @@ coverSource_label:Cover Source
coverSourceUrl_label:Cover Source URL coverSourceUrl_label:Cover Source URL
coverSourceHTML_label:Cover Source coverSourceHTML_label:Cover Source
authorLastLogin_label:Author Last Logged In authorLastLogin_label:Author Last Logged In
content_label:Content
fandoms_label:Fandoms
keep_in_order_sequels:true keep_in_order_sequels:true
keep_in_order_sequelsUrl:true keep_in_order_sequelsUrl:true
@ -2507,6 +2509,15 @@ keep_in_order_groupsUrl:true
## make entryHTML. ## make entryHTML.
make_linkhtml_entries:prequel,sequels,groups,coverSource make_linkhtml_entries:prequel,sequels,groups,coverSource
## What are now content tags used to be included in genre. Copy to
## genre by default.
include_in_genre:genre,content
## What fimfiction.net has labeled 'fandoms', FFF historically calls
## 'category'. Commented out by default due to "My Little Pony:
## Friendship is Magic" from extracategories vs "MLP: FiM" in fandoms.
#include_in_category:category,fandoms
[www.fireflyfans.net] [www.fireflyfans.net]
website_encodings:Windows-1252,utf8,iso-8859-1 website_encodings:Windows-1252,utf8,iso-8859-1
@ -2981,4 +2992,3 @@ website_encodings:Windows-1252,utf8
## uncommon for there to be links to chapters that haven't been ## uncommon for there to be links to chapters that haven't been
## uploaded yet. ## uploaded yet.
continue_on_chapter_error:true continue_on_chapter_error:true

View File

@ -2,7 +2,7 @@
# Copyright (C) YEAR ORGANIZATION # Copyright (C) YEAR ORGANIZATION
# #
# Translators: # Translators:
# Adolfo Jayme Barrientos, 2014 # Adolfo Jayme-Barrientos, 2014
# jmontane, 2014 # jmontane, 2014
# Queralt Iglesias <queralt.ig92@gmail.com>, 2016 # Queralt Iglesias <queralt.ig92@gmail.com>, 2016
# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2016-2017 # Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2016-2017

View File

@ -3,7 +3,7 @@
# #
# Translators: # Translators:
# Ettore Atalan <atalanttore@googlemail.com>, 2014-2016 # Ettore Atalan <atalanttore@googlemail.com>, 2014-2016
# ILB, 2014-2016 # ILB, 2014-2017
# jumo, 2016 # jumo, 2016
# Sebastian Keller <Haggard@gmx.de>, 2015 # Sebastian Keller <Haggard@gmx.de>, 2015
# Simon_Schuette <simonschuette@arcor.de>, 2014-2016 # Simon_Schuette <simonschuette@arcor.de>, 2014-2016
@ -14,8 +14,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre-plugins\n" "Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n" "POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n"
"PO-Revision-Date: 2017-09-20 06:01+0000\n" "PO-Revision-Date: 2018-01-18 17:51+0000\n"
"Last-Translator: Kovid Goyal <kovid@kovidgoyal.net>\n" "Last-Translator: ILB\n"
"Language-Team: German (http://www.transifex.com/calibre/calibre-plugins/language/de/)\n" "Language-Team: German (http://www.transifex.com/calibre/calibre-plugins/language/de/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -265,13 +265,13 @@ msgstr "Sie werden gewarnt, wenn eine Aktualisierung die URL eines vorhandenen B
#: config.py:496 #: config.py:496
msgid "Search inside ebooks for Story URL?" msgid "Search inside ebooks for Story URL?"
msgstr "" msgstr "Soll im ebook nach der StoryURL gesucht werden?"
#: config.py:497 #: config.py:497
msgid "" msgid ""
"Look for first valid story URL inside EPUB, ZIP(HTML) or TXT ebook formats if not found in metadata.\n" "Look for first valid story URL inside EPUB, ZIP(HTML) or TXT ebook formats if not found in metadata.\n"
"Somewhat risky, could find wrong URL depending on ebook content." "Somewhat risky, could find wrong URL depending on ebook content."
msgstr "" msgstr "Sucht nach der ersten gültigen Story-URL in EPUB-, ZIP- (HTML) oder TXT-E-Book-Formaten, wenn sie nicht in Metadaten gefunden werden\nEtwas riskant, es könnte je nach E-Book-Inhalt eine falsche URL gefunden werden."
#: config.py:501 #: config.py:501
msgid "Post Processing Options" msgid "Post Processing Options"
@ -430,11 +430,11 @@ msgstr "Generell URLs die auf Ablehnungsliste stehen zurückweisen, ohne nachzuf
#: config.py:605 #: config.py:605
msgid "Delete on Reject by Default?" msgid "Delete on Reject by Default?"
msgstr "" msgstr "Automatisch löschen, wenn standardmäßig abgelehnt wird?"
#: config.py:606 #: config.py:606
msgid "Should the checkbox to delete Rejected books be checked by default?" msgid "Should the checkbox to delete Rejected books be checked by default?"
msgstr "" msgstr "Soll das Kontrollkästchen zum Löschen abgelehnter Bücher standardmäßig aktiviert werden?"
#: config.py:643 #: config.py:643
msgid "Edit Reject URLs List" msgid "Edit Reject URLs List"
@ -520,24 +520,24 @@ msgstr "Ansicht der Standardeinstellungen"
#: config.py:744 #: config.py:744
msgid "Calibre Columns" msgid "Calibre Columns"
msgstr "Calible Spalten" msgstr "Calibre-Spalten"
#: config.py:751 #: config.py:751
msgid "" msgid ""
"If checked, when updating/overwriting an existing book, FanFicFare will have" "If checked, when updating/overwriting an existing book, FanFicFare will have"
" the Calibre Columns available to use in replace_metadata, title_page, " " the Calibre Columns available to use in replace_metadata, title_page, "
"etc.<br>Click the button below to see the Calibre Column names." "etc.<br>Click the button below to see the Calibre Column names."
msgstr "" msgstr "Wenn diese Option aktiviert ist, verfügt FanFicFare beim Aktualisieren / Überschreiben eines vorhandenen Buchs über die Calibre-Spalten, die in replace_metadata, title_page usw. verwendet werden können.\nKlicken Sie auf die Schaltfläche, um die Calibre-Spalten-Namen anzuzeigen."
#: config.py:752 #: config.py:752
msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite" msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite"
msgstr "" msgstr " Calibre Spalten in FanFicFare beim Updaten/Überschreiben verwenden"
#: config.py:765 #: config.py:765
msgid "" msgid ""
"FanFicFare can pass the Calibre Columns into the download/update " "FanFicFare can pass the Calibre Columns into the download/update "
"process.<br>This will show you the columns available by name." "process.<br>This will show you the columns available by name."
msgstr "" msgstr "FanFicFare kann die Calibre Spalten in den Download/Update-Prozess weitergeben.\nDies zeigt Ihnen die verfügbaren Spalten nach Namen."
#: config.py:766 #: config.py:766
msgid "Show Calibre Column Names" msgid "Show Calibre Column Names"
@ -685,7 +685,7 @@ msgstr "Erstellt Cover nur für Neue Bücher"
msgid "" msgid ""
"Default is to generate a cover any time the calibre metadata is updated.<br " "Default is to generate a cover any time the calibre metadata is updated.<br "
"/>Used for both Calibre and Plugin generated covers." "/>Used for both Calibre and Plugin generated covers."
msgstr "" msgstr "Standardmäßig wird jedes Mal, wenn die Calibre-Metadaten aktualisiert werden, ein Cover generiert.\nWird für Calibre- und Plugin-generierte Cover verwendet."
#: config.py:1017 #: config.py:1017
msgid "Inject/update the cover inside EPUB" msgid "Inject/update the cover inside EPUB"
@ -1005,13 +1005,13 @@ msgstr ""
#: config.py:1406 #: config.py:1406
msgid "Last Checked Column:" msgid "Last Checked Column:"
msgstr "" msgstr "Zuletzt überprüfte Spalte:"
#: config.py:1407 #: config.py:1407
msgid "" msgid ""
"Record the last time FanFicFare updated or checked for updates.\n" "Record the last time FanFicFare updated or checked for updates.\n"
"(Date columns only.)" "(Date columns only.)"
msgstr "" msgstr "Erfasst, wann FanFicFare das letzte Mal aktualisiert oder auf Updates überprüft wurde\n(Nur Datumsspalten.)"
#: config.py:1436 #: config.py:1436
msgid "Author(s)" msgid "Author(s)"
@ -1072,13 +1072,13 @@ msgstr ""
#: config.py:1482 #: config.py:1482
msgid "Include Books' Comments in Anthology Comments?" msgid "Include Books' Comments in Anthology Comments?"
msgstr "" msgstr "Bücher-Kommentare in Anthology-Kommentare einbeziehen?"
#: config.py:1483 #: config.py:1483
msgid "" msgid ""
"Include all the merged books' comments in the new book's comments.\n" "Include all the merged books' comments in the new book's comments.\n"
"Default is a list of included titles only." "Default is a list of included titles only."
msgstr "" msgstr "Fügt alle Kommentare der zusammengeführten Bücher in den Kommentar des neuen Buches ein."
#: config.py:1488 #: config.py:1488
msgid "Set Anthology Comments only for new books" msgid "Set Anthology Comments only for new books"
@ -1095,7 +1095,7 @@ msgid ""
"These settings will allow FanFicFare to fetch story URLs from your email " "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 " "account. It will only look for story URLs in unread emails in the folder "
"specified below." "specified below."
msgstr "" msgstr "Diese Einstellungen ermöglichen es FanFicFare URLs aus Ihrem E-Mail-Konto abzurufen. Es wird nur nach Story-URLs in ungelesenen E-Mails in dem unten angegebenen Ordner gesucht."
#: config.py:1511 #: config.py:1511
msgid "IMAP Server Name" msgid "IMAP Server Name"
@ -1157,7 +1157,7 @@ msgstr "Wenn aktiviert, werden eMails als gelesen markiert, wenn sie irgendwelch
#: config.py:1564 #: config.py:1564
msgid "Discard URLs on Reject List" msgid "Discard URLs on Reject List"
msgstr "" msgstr "URLs in der Ablehnungsliste werden abgewiesen."
#: config.py:1565 #: config.py:1565
msgid "" msgid ""
@ -1165,7 +1165,7 @@ msgid ""
" on your Reject URL List.<br>Otherwise they will appear and you will see the" " on your Reject URL List.<br>Otherwise they will appear and you will see the"
" normal Reject URL dialog.<br>The Emails will still be marked Read if " " normal Reject URL dialog.<br>The Emails will still be marked Read if "
"configured to." "configured to."
msgstr "" msgstr "Wenn diese Option aktiviert ist, verwirft FanFicFare die URLs (aus E-Mails) von Storys automatisch, die sich auf der Liste der abgelehnten URLs befinden. Andernfalls werden sie angezeigt und Sie sehen den normalen Reject-URL-Dialog. Die E-Mails werden weiterhin als gelesen markiert angezeigt."
#: config.py:1570 #: config.py:1570
msgid "Update Existing Books Only" msgid "Update Existing Books Only"
@ -1176,7 +1176,7 @@ msgid ""
"If checked, FanFicFare will silently discard story URLs from emails that are" "If checked, FanFicFare will silently discard story URLs from emails that are"
" not already in your library.<br>Otherwise all story URLs, new and existing," " not already in your library.<br>Otherwise all story URLs, new and existing,"
" will be used.<br>The Emails will still be marked Read if configured to." " will be used.<br>The Emails will still be marked Read if configured to."
msgstr "" msgstr "Wenn diese Option aktiviert ist, verwirft FanFicFare die URLs (aus Mails) von Storys automatisch, die sich noch niAndernfalls werden alle neuen und bestehenden Story-URLs verwendet. Die E-Mails werden weiterhin als gelesen markiert angezeigt."
#: config.py:1576 #: config.py:1576
msgid "Download from Email Immediately" msgid "Download from Email Immediately"
@ -1186,7 +1186,7 @@ msgstr "Aus E-Mail sofort herunterladen"
msgid "" msgid ""
"If checked, FanFicFare will start downloading story URLs from emails " "If checked, FanFicFare will start downloading story URLs from emails "
"immediately.<br>Otherwise the usual Download from URLs dialog will appear." "immediately.<br>Otherwise the usual Download from URLs dialog will appear."
msgstr "" msgstr "Wenn diese Option aktiviert ist, startet FanFicFare sofort mit dem Herunterladen von Story-URLs aus E-Mails. Andernfalls wird das übliche Dialogfeld Download von URLs angezeigt."
#: config.py:1582 #: config.py:1582
msgid "" msgid ""
@ -1619,15 +1619,15 @@ msgstr "Es wurden keine gültigen StoryURLs in den ungelesenen eMails gefunden."
#: fff_plugin.py:512 #: fff_plugin.py:512
msgid "Finished Fetching Story URLs from Email." msgid "Finished Fetching Story URLs from Email."
msgstr "" msgstr "Das Abrufen der StoryURL´s aus den Mails ist abgeschlossen."
#: fff_plugin.py:520 #: fff_plugin.py:520
msgid "(%d Story URLs Skipped, on Rejected URL List)" msgid "(%d Story URLs Skipped, on Rejected URL List)"
msgstr "" msgstr "(%d StoryURLs´ wurden übersprungen, da auf der Ablehnungsliste)"
#: fff_plugin.py:522 #: fff_plugin.py:522
msgid "(%d Story URLs Skipped, no Existing Book in Library)" msgid "(%d Story URLs Skipped, no Existing Book in Library)"
msgstr "" msgstr "(%d Story URLs übersprungen, kein vorhandenes Buch in der Bibliothek) "
#: fff_plugin.py:523 #: fff_plugin.py:523
msgid "Get Story URLs from Email" msgid "Get Story URLs from Email"
@ -1898,7 +1898,7 @@ msgstr "Doppelte Story überspringen."
msgid "" msgid ""
"More than one identical book by Identifier URL or title/author(s)--can't " "More than one identical book by Identifier URL or title/author(s)--can't "
"tell which book to update/overwrite." "tell which book to update/overwrite."
msgstr "" msgstr "Mehr als ein identisches Buch mit ID-URL oder Titel / Autor (en) - es kann nicht festgestellt werden, welches Buch aktualisiert / überschrieben werden soll."
#: fff_plugin.py:1271 #: fff_plugin.py:1271
msgid "Update" msgid "Update"

View File

@ -2,7 +2,7 @@
# Copyright (C) YEAR ORGANIZATION # Copyright (C) YEAR ORGANIZATION
# #
# Translators: # Translators:
# Adolfo Jayme Barrientos, 2014 # Adolfo Jayme-Barrientos, 2014
# Albert, 2016 # Albert, 2016
# dario hereñu <magallania@gmail.com>, 2015-2016 # dario hereñu <magallania@gmail.com>, 2015-2016
# Enrique Medina <medina9304@gmail.com>, 2016 # Enrique Medina <medina9304@gmail.com>, 2016

View File

@ -4,6 +4,7 @@
# Translators: # Translators:
# Alex, 2016 # Alex, 2016
# erkfuizfeuadjfjzefzfuzeff gbhygsregfges <erkfuizfeuadjfjzefzfuzeff@gmail.com>, 2017 # erkfuizfeuadjfjzefzfuzeff gbhygsregfges <erkfuizfeuadjfjzefzfuzeff@gmail.com>, 2017
# Herman van der Vaart <vaarttuig@gmail.com>, 2018
# Mario Moens <marimo.it4u@gmail.com>, 2017 # Mario Moens <marimo.it4u@gmail.com>, 2017
# Nathan Follens, 2015 # Nathan Follens, 2015
# Nathan Follens, 2016 # Nathan Follens, 2016
@ -14,8 +15,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre-plugins\n" "Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n" "POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n"
"PO-Revision-Date: 2017-09-20 06:01+0000\n" "PO-Revision-Date: 2018-02-26 15:13+0000\n"
"Last-Translator: Mario Moens <marimo.it4u@gmail.com>\n" "Last-Translator: Herman van der Vaart <vaarttuig@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.com/calibre/calibre-plugins/language/nl/)\n" "Language-Team: Dutch (http://www.transifex.com/calibre/calibre-plugins/language/nl/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -158,7 +159,7 @@ msgid ""
"(title, author, URL, tags, custom columns, etc) from the web site. <br " "(title, author, URL, tags, custom columns, etc) from the web site. <br "
"/>This sets whether that will default to on or off. <br />Columns set to " "/>This sets whether that will default to on or off. <br />Columns set to "
"'New Only' in the column tabs will only be set for new books." "'New Only' in the column tabs will only be set for new books."
msgstr "" msgstr "Bij elke download biedt FanFicFare een optie om Calibre metadata (titel, auteur, URL, tags, aangepaste kolommen, enz.) van de website bij te werken. <br />Hiermee wordt de standaard ingesteld op aan of uit.<br /> Kolommen die zijn ingesteld als 'Alleen Nieuw' in de kolomtabs, worden alleen ingesteld voor nieuwe boeken."
#: config.py:442 #: config.py:442
msgid "Default Update EPUB Cover when Updating EPUB?" msgid "Default Update EPUB Cover when Updating EPUB?"
@ -169,7 +170,7 @@ msgid ""
"On each download, FanFicFare offers an option to update the book cover image" "On each download, FanFicFare offers an option to update the book cover image"
" <i>inside</i> the EPUB from the web site when the EPUB is updated.<br " " <i>inside</i> the EPUB from the web site when the EPUB is updated.<br "
"/>This sets whether that will default to on or off." "/>This sets whether that will default to on or off."
msgstr "" msgstr "Bij elke download biedt FanFicFare de optie om de boekomslag<i> in </i>de EPUB vanaf de website bij te werken wanneer de EPUB wordt bijgewerkt.<br /> Hiermee wordt ingesteld of dit standaard wordt in- of uitgeschakeld."
#: config.py:447 #: config.py:447
msgid "Default Background Metadata?" msgid "Default Background Metadata?"
@ -183,7 +184,7 @@ msgid ""
"adult--stories that need those will just fail.<br />Only available for " "adult--stories that need those will just fail.<br />Only available for "
"Update/Overwrite of existing books in case URL given isn't canonical or " "Update/Overwrite of existing books in case URL given isn't canonical or "
"matches to existing book by Title/Author." "matches to existing book by Title/Author."
msgstr "" msgstr "Bij elke download biedt FanFicFare een optie om metagegevens van sites te verzamelen in een achtergrondproces.<br /> Dit geeft u sneller controle terug tijdens het bijwerken, maar u wordt niet gevraagd om gebruikersnaam / wachtwoorden of als u een volwassene bent - zullen verhalen die dit nodig hebben, gewoon falen.<br /> Alleen beschikbaar voor het bijwerken / overschrijven van bestaande boeken in het geval de gegeven URL niet canoniek is of overeenkomt met titel / auteur van bestaand boek."
#: config.py:454 #: config.py:454
msgid "Updating Calibre Options" msgid "Updating Calibre Options"
@ -197,7 +198,7 @@ msgstr "Wis andere aanwezige formaten?"
msgid "" msgid ""
"Check this to automatically delete all other ebook formats when updating an existing book.\n" "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." "Handy if you have both a Nook(epub) and Kindle(mobi), for example."
msgstr "" msgstr "Selecteer dit om alle andere e-boekformaten automatisch te verwijderen bij het bijwerken van een bestaand boek.\nHandig als je zowel een Nook (epub) als Kindle (mobi) hebt, bijvoorbeeld."
#: config.py:463 #: config.py:463
msgid "Keep Existing Tags when Updating Metadata?" msgid "Keep Existing Tags when Updating Metadata?"
@ -209,7 +210,7 @@ msgid ""
"%(cmplt)s and %(inprog)s tags will be still be updated, if known.\n" "%(cmplt)s and %(inprog)s tags will be still be updated, if known.\n"
"%(lul)s tags will be updated if %(lus)s in %(is)s.\n" "%(lul)s tags will be updated if %(lus)s in %(is)s.\n"
"(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)" "(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)"
msgstr "" msgstr "Bestaande tags zullen worden bewaard en nieuwe tags toegevoegd. \n%(cmplt)sen%(inprog)s tags, indien bekend, zullen nog steeds worden bijgewerkt. \n%(lul)sTags worden bijgewerkt als%(lus)s in%(is)s. \n(Als Tags is ingesteld op 'Alleen Nieuw' op het tabblad Standaardkolommen, heeft dit geen effect.)"
#: config.py:468 #: config.py:468
msgid "Force Author into Author Sort?" msgid "Force Author into Author Sort?"
@ -219,7 +220,7 @@ msgstr "Forceer auteur naar auteursortering?"
msgid "" msgid ""
"If checked, the author(s) as given will be used for the Author Sort, too.\n" "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." "If not checked, calibre will apply it's built in algorithm which makes 'Bob Smith' sort as 'Smith, Bob', etc."
msgstr "" msgstr "Indien aangevinkt, zal de auteur (s) zoals gegeven ook worden gebruikt voor het Auteur Sorteren.\nIndien niet aangevinkt, zal calibre het ingebouwde algoritme toepassen waardoor 'Bob Smith' sorteert als 'Smith, Bob', etc."
#: config.py:473 #: config.py:473
msgid "Force Title into Title Sort?" msgid "Force Title into Title Sort?"
@ -229,7 +230,7 @@ msgstr "Forceer titel naar titelsortering?"
msgid "" msgid ""
"If checked, the title as given will be used for the Title Sort, too.\n" "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." "If not checked, calibre will apply it's built in algorithm which makes 'The Title' sort as 'Title, The', etc."
msgstr "" msgstr "Indien aangevinkt, zal de titel zoals gegeven ook worden gebruikt voor het Titel Sorteren. \nAls dit niet is aangevinkt, zal calibre het ingebouwde algoritme toepassen waardoor 'De Titel' sorteert als 'Titel, De', etc."
#: config.py:478 #: config.py:478
msgid "Check for existing Series Anthology books?" msgid "Check for existing Series Anthology books?"
@ -240,7 +241,7 @@ msgid ""
"Check for existing Series Anthology books using each new story's series URL before downloading.\n" "Check for existing Series Anthology books using each new story's series URL before downloading.\n"
"Offer to skip downloading if a Series Anthology is found.\n" "Offer to skip downloading if a Series Anthology is found.\n"
"Doesn't work when Collect Metadata in Background is selected." "Doesn't work when Collect Metadata in Background is selected."
msgstr "" msgstr "Controleer voor bestaande series bloemlezing-boeken de URL van elk nieuw verhaal voordat je het downloadt. \nAanbieden om het downloaden over te slaan als een bloemlezing serie is gevonden.\nWerkt niet wanneer Collect Metadata in achtergrond is geselecteerd."
#: config.py:483 config.py:600 #: config.py:483 config.py:600
msgid "Reject Without Confirmation?" msgid "Reject Without Confirmation?"
@ -251,7 +252,7 @@ msgid ""
"Automatically reject storys with existing Series Anthology books.\n" "Automatically reject storys with existing Series Anthology books.\n"
"Only works if 'Check for existing Series Anthology books' is on.\n" "Only works if 'Check for existing Series Anthology books' is on.\n"
"Doesn't work when Collect Metadata in Background is selected." "Doesn't work when Collect Metadata in Background is selected."
msgstr "" msgstr "Verwerp automatisch verhalen met bestaande series bloemlezing-boeken.\n Werkt alleen als 'Zoeken naar bestaande bloemlezing boeken' is ingeschakeld. \nWerkt niet wanneer Collect Metadata in achtergrond is geselecteerd."
#: config.py:491 #: config.py:491
msgid "Check for changed Story URL?" msgid "Check for changed Story URL?"
@ -261,32 +262,32 @@ msgstr "Controleer veranderd verhaal URL?"
msgid "" msgid ""
"Warn you if an update will change the URL of an existing book.\n" "Warn you if an update will change the URL of an existing book.\n"
"fanfiction.net URLs will change from http to https silently." "fanfiction.net URLs will change from http to https silently."
msgstr "" msgstr "Waarschuwt u als een update de URL van een bestaand boek zal wijzigen.\nfanfiction.net URL's veranderen geruisloos van http naar https."
#: config.py:496 #: config.py:496
msgid "Search inside ebooks for Story URL?" msgid "Search inside ebooks for Story URL?"
msgstr "" msgstr "Zoeken in e-boeken naar Story URL?"
#: config.py:497 #: config.py:497
msgid "" msgid ""
"Look for first valid story URL inside EPUB, ZIP(HTML) or TXT ebook formats if not found in metadata.\n" "Look for first valid story URL inside EPUB, ZIP(HTML) or TXT ebook formats if not found in metadata.\n"
"Somewhat risky, could find wrong URL depending on ebook content." "Somewhat risky, could find wrong URL depending on ebook content."
msgstr "" msgstr "Zoek naar de eerste geldige Story-URL in EPUB-, ZIP (HTML) of TXT ebook-formaten indien niet gevonden in metadata.\nEnigszins riskant, zou een verkeerde URL kunnen vinden afhankelijk van de inhoud van het e-boek."
#: config.py:501 #: config.py:501
msgid "Post Processing Options" msgid "Post Processing Options"
msgstr "" msgstr "Postverwerkingsopties"
#: config.py:505 #: config.py:505
msgid "Mark added/updated books when finished?" msgid "Mark added/updated books when finished?"
msgstr "" msgstr "Markeer toegevoegde / bijgewerkte boeken na beëindiging?"
#: config.py:506 #: config.py:506
msgid "" msgid ""
"Mark added/updated books when finished. Use with option below.\n" "Mark added/updated books when finished. Use with option below.\n"
"You can also manually search for 'marked:fff_success'.\n" "You can also manually search for 'marked:fff_success'.\n"
"'marked:fff_failed' is also available, or search 'marked:fff' for both." "'marked:fff_failed' is also available, or search 'marked:fff' for both."
msgstr "" msgstr "Markeer toegevoegde/bijgewerkte boeken na beëindiging. Gebruik met de onderstaande optie.\nU kunt ook handmatig zoeken naar 'marked: fff_success'. \n'gemarkeerd: fff_failed' is ook beschikbaar, of zoek 'gemarkeerd: fff' voor beide."
#: config.py:510 #: config.py:510
msgid "Show Marked books when finished?" msgid "Show Marked books when finished?"
@ -297,7 +298,7 @@ msgid ""
"Show Marked added/updated books only when finished.\n" "Show Marked added/updated books only when finished.\n"
"You can also manually search for 'marked:fff_success'.\n" "You can also manually search for 'marked:fff_success'.\n"
"'marked:fff_failed' is also available, or search 'marked:fff' for both." "'marked:fff_failed' is also available, or search 'marked:fff' for both."
msgstr "" msgstr "Toon gemarkeerde toegevoegde/bijgewerkte boeken alleen na beëindiging.\n U kunt ook handmatig zoeken naar 'marked: fff_success'. \n'gemarkeerd: fff_failed' is ook beschikbaar, of zoek 'gemarkeerd: fff' voor beide."
#: config.py:515 #: config.py:515
msgid "Smarten Punctuation (EPUB only)" msgid "Smarten Punctuation (EPUB only)"
@ -307,14 +308,14 @@ msgstr "Slimme interpunctie (enkel EPUB)"
msgid "" msgid ""
"Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB " "Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB "
"download and update." "download and update."
msgstr "" msgstr "Voer slimme-interpunctie uit vanuit Calibre's \"Polijst boek\" functie op elke EPUB-download en update."
#: config.py:521 #: config.py:521
msgid "" msgid ""
"Calculate Word Counts using Calibre internal methods.\n" "Calculate Word Counts using Calibre internal methods.\n"
"Many sites include Word Count, but many do not.\n" "Many sites include Word Count, but many do not.\n"
"This will count the words in each book and include it as if it came from the site." "This will count the words in each book and include it as if it came from the site."
msgstr "" msgstr "Bereken woordtellingen met behulp van de interne methoden van Calibre.\nVeel sites bevatten Word Count, maar veel ook niet.\nDit telt de woorden in elk boek en neemt het op alsof het van de site komt."
#: config.py:525 #: config.py:525
msgid "Calculate Word Count:" msgid "Calculate Word Count:"
@ -329,7 +330,7 @@ msgid ""
"Automatically call calibre's Convert for new/update books.\n" "Automatically call calibre's Convert for new/update books.\n"
"Converts to the current output format as chosen in calibre's\n" "Converts to the current output format as chosen in calibre's\n"
"Preferences->Behavior settings." "Preferences->Behavior settings."
msgstr "" msgstr " Automatisch aanroepen van calibre Convert voor nieuwe/update-boeken.\nConverteert naar het huidige uitvoerformaat zoals gekozen in Calibre's\nVoorkeuren-> Gedragsinstellingen."
#: config.py:543 #: config.py:543
msgid "GUI Options" msgid "GUI Options"
@ -341,27 +342,27 @@ msgstr "URLs overnemen van klembord?"
#: config.py:548 #: config.py:548
msgid "Prefill URLs from valid URLs in Clipboard when Adding New." msgid "Prefill URLs from valid URLs in Clipboard when Adding New."
msgstr "" msgstr "Vooraf invullen URL's van geldige URL's in het klembord bij het toevoegen van nieuw."
#: config.py:552 #: config.py:552
msgid "Default to Update when books selected?" msgid "Default to Update when books selected?"
msgstr "" msgstr "Standaard updaten wanneer boeken zijn geselecteerd?"
#: config.py:553 #: config.py:553
msgid "" msgid ""
"The top FanFicFare plugin button will start Update if\n" "The top FanFicFare plugin button will start Update if\n"
"books are selected. If unchecked, it will always bring up 'Add New'." "books are selected. If unchecked, it will always bring up 'Add New'."
msgstr "" msgstr "De bovenste knop van de FanFicFare plug-in start Update als\nboeken zijn geselecteerd. Indien niet aangevinkt, wordt altijd 'Nieuw toevoegen' weergegeven."
#: config.py:557 #: config.py:557
msgid "Keep 'Add New from URL(s)' dialog on top?" msgid "Keep 'Add New from URL(s)' dialog on top?"
msgstr "" msgstr "De dialoog 'Nieuw toevoegen van URL(' s) ' bovenaan houden?"
#: config.py:558 #: config.py:558
msgid "" msgid ""
"Instructs the OS and Window Manager to keep the 'Add New from URL(s)'\n" "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." "dialog on top of all other windows. Useful for dragging URLs onto it."
msgstr "" msgstr "Instrueert het OS en vensterbeheerder de dialoog 'Nieuw toevoegen van URL(' s) '\nboven alle andere vensters te houden. Handig om URL's naartoe te slepen."
#: config.py:562 #: config.py:562
msgid "Show estimated time left?" msgid "Show estimated time left?"
@ -377,24 +378,24 @@ msgstr "Diverse opties"
#: config.py:571 #: config.py:571
msgid "Inject calibre Series when none found?" msgid "Inject calibre Series when none found?"
msgstr "" msgstr "Calibre serie toevoegen als er geen gevonden is?"
#: config.py:572 #: config.py:572
msgid "" msgid ""
"If no series is found, inject the calibre series (if there is one) so \n" "If no series is found, inject the calibre series (if there is one) so \n"
"it appears on the FanFicFare title page(not cover)." "it appears on the FanFicFare title page(not cover)."
msgstr "" msgstr "Als er geen serie wordt gevonden, voeg dan de Calibre serie toe (als die er is)\nzodat deze op de titelpagina van FanFicFare verschijnt (niet de omslag)."
#: config.py:576 #: config.py:576
msgid "Search by Title/Author(s) for If Story Already Exists?" msgid "Search by Title/Author(s) for If Story Already Exists?"
msgstr "" msgstr "Zoeken op titel/auteur(s) voor het geval verhaal al bestaat?"
#: config.py:577 #: config.py:577
msgid "" msgid ""
"When checking <i>If Story Already Exists</i> FanFicFare will first match by " "When checking <i>If Story Already Exists</i> FanFicFare will first match by "
"URL Identifier. But if not found, it can also search existing books by " "URL Identifier. But if not found, it can also search existing books by "
"Title and Author(s)." "Title and Author(s)."
msgstr "" msgstr "Bij de controle<i> of verhaal al bestaat</i>, zal FanFicFare eerst vergelijken op URL-identificatie. Maar als het niet wordt gevonden, kan het ook naar bestaande boeken zoeken op titel en auteur(s)."
#: config.py:581 #: config.py:581
msgid "Reject List" msgid "Reject List"
@ -406,7 +407,7 @@ msgstr "Bewerk afgewezen URL lijst"
#: config.py:586 #: config.py:586
msgid "Edit list of URLs FanFicFare will automatically Reject." msgid "Edit list of URLs FanFicFare will automatically Reject."
msgstr "" msgstr "Bewerk lijst met URL's die FanFicFare automatisch weigert."
#: config.py:590 config.py:669 #: config.py:590 config.py:669
msgid "Add Reject URLs" msgid "Add Reject URLs"
@ -414,7 +415,7 @@ msgstr "Voeg afgewezen URL's toe"
#: config.py:591 #: config.py:591
msgid "Add additional URLs to Reject as text." msgid "Add additional URLs to Reject as text."
msgstr "" msgstr "Voeg extra te weigeren URL's toe als tekst."
#: config.py:595 #: config.py:595
msgid "Edit Reject Reasons List" msgid "Edit Reject Reasons List"
@ -422,19 +423,19 @@ msgstr "Bewerk afwijs-redenen lijst"
#: config.py:596 config.py:659 #: config.py:596 config.py:659
msgid "Customize the Reasons presented when Rejecting URLs" msgid "Customize the Reasons presented when Rejecting URLs"
msgstr "" msgstr "Pas de voorgestelde redenen aan voor het verwerpen van URL's"
#: config.py:601 #: config.py:601
msgid "Always reject URLs on the Reject List without stopping and asking." msgid "Always reject URLs on the Reject List without stopping and asking."
msgstr "" msgstr "Altijd URL's op de lijst met afwijzingen verwerpen zonder te stoppen en te vragen."
#: config.py:605 #: config.py:605
msgid "Delete on Reject by Default?" msgid "Delete on Reject by Default?"
msgstr "" msgstr "Standaard wissen bij weigering?"
#: config.py:606 #: config.py:606
msgid "Should the checkbox to delete Rejected books be checked by default?" msgid "Should the checkbox to delete Rejected books be checked by default?"
msgstr "" msgstr "Moet het selectievakje om verworpen boeken te verwijderen standaard worden aangevinkt?"
#: config.py:643 #: config.py:643
msgid "Edit Reject URLs List" msgid "Edit Reject URLs List"
@ -460,29 +461,29 @@ msgstr "Titel door auteur"
msgid "" msgid ""
"Add Reject URLs. Use: <b>http://...,note</b> or <b>http://...,title by " "Add Reject URLs. Use: <b>http://...,note</b> or <b>http://...,title by "
"author - note</b><br>Invalid story URLs will be ignored." "author - note</b><br>Invalid story URLs will be ignored."
msgstr "" msgstr "Voeg te weigeren URL's toe. Gebruik:<b> http: //...,note</b> of <b>http: //...,title by author - note</b><br> Ongeldige verhaal-URL's worden genegeerd."
#: config.py:671 #: config.py:671
msgid "" msgid ""
"One URL per line:\n" "One URL per line:\n"
"<b>http://...,note</b>\n" "<b>http://...,note</b>\n"
"<b>http://...,title by author - note</b>" "<b>http://...,title by author - note</b>"
msgstr "" msgstr "Een URL per regel:\n<b>http://...,note</b>\n<b>http://...,title by author - note</b>"
#: config.py:673 dialogs.py:1126 #: config.py:673 dialogs.py:1126
msgid "Add this reason to all URLs added:" msgid "Add this reason to all URLs added:"
msgstr "" msgstr "Voeg deze reden toe aan alle toegevoegde URL's:"
#: config.py:689 #: config.py:689
msgid "" msgid ""
"These settings provide more detailed control over what metadata will be " "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 " "displayed inside the ebook as well as let you set %(isa)s and %(u)s/%(p)s "
"for different sites." "for different sites."
msgstr "" msgstr "Deze instellingen bieden meer gedetailleerde controle over welke metagegevens in het e-boek worden getoond en laten u ook%(isa)s en%(u)s / %(p)s voor verschillende sites instellen."
#: config.py:696 #: config.py:696
msgid "personal.ini" msgid "personal.ini"
msgstr "" msgstr "personal.ini"
#: config.py:703 config.py:807 config.py:808 #: config.py:703 config.py:807 config.py:808
msgid "Edit personal.ini" msgid "Edit personal.ini"
@ -492,27 +493,27 @@ msgstr "Bewerk personal.ini"
msgid "" msgid ""
"FanFicFare now includes find, color coding, and error checking for " "FanFicFare now includes find, color coding, and error checking for "
"personal.ini editing. Red generally indicates errors." "personal.ini editing. Red generally indicates errors."
msgstr "" msgstr "FanFicFare bevat nu zoeken, kleurcodering en foutcontrole voor het bewerken van personal.ini. Rood geeft over het algemeen fouten aan."
#: config.py:716 #: config.py:716
msgid "View \"Safe\" personal.ini" msgid "View \"Safe\" personal.ini"
msgstr "" msgstr "Bekijk \"Safe\" personal.ini"
#: config.py:721 config.py:798 #: config.py:721 config.py:798
msgid "" msgid ""
"View your personal.ini with usernames and passwords removed. For safely " "View your personal.ini with usernames and passwords removed. For safely "
"sharing your personal.ini settings with others." "sharing your personal.ini settings with others."
msgstr "" msgstr "Bekijk uw personal.ini met verwijderde gebruikersnamen en wachtwoorden. Voor het veilig delen van uw persoonlijke.ini-instellingen met anderen."
#: config.py:727 #: config.py:727
msgid "defaults.ini" msgid "defaults.ini"
msgstr "" msgstr "defaults.ini"
#: config.py:732 #: config.py:732
msgid "" msgid ""
"View all of the plugin's configurable settings\n" "View all of the plugin's configurable settings\n"
"and their default settings." "and their default settings."
msgstr "" msgstr "Bekijk alle te wijzigen instellingen van de plug-in en hun standaardwaarden."
#: config.py:733 #: config.py:733
msgid "View Defaults" msgid "View Defaults"
@ -520,24 +521,24 @@ msgstr "Toon standaarden"
#: config.py:744 #: config.py:744
msgid "Calibre Columns" msgid "Calibre Columns"
msgstr "" msgstr "Calibre kolommen"
#: config.py:751 #: config.py:751
msgid "" msgid ""
"If checked, when updating/overwriting an existing book, FanFicFare will have" "If checked, when updating/overwriting an existing book, FanFicFare will have"
" the Calibre Columns available to use in replace_metadata, title_page, " " the Calibre Columns available to use in replace_metadata, title_page, "
"etc.<br>Click the button below to see the Calibre Column names." "etc.<br>Click the button below to see the Calibre Column names."
msgstr "" msgstr "Indien aangevinkt, zal FanFicFare bij het bijwerken / overschrijven van een bestaand boek de Calibre kolommen beschikbaar hebben om te gebruiken in replace_metadata, title_page, etc. <br> Klik op de knop hieronder om de Calibre kolomnamen te zien."
#: config.py:752 #: config.py:752
msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite" msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite"
msgstr "" msgstr "Voeg kolommen van Caliber in in FanFicFare bij bijwerken / overschrijven"
#: config.py:765 #: config.py:765
msgid "" msgid ""
"FanFicFare can pass the Calibre Columns into the download/update " "FanFicFare can pass the Calibre Columns into the download/update "
"process.<br>This will show you the columns available by name." "process.<br>This will show you the columns available by name."
msgstr "" msgstr "FanFicFare kan de Calibre kolommen doorgeven aan het download / update-proces.<br> Dit toont je de kolommen die op naam beschikbaar zijn."
#: config.py:766 #: config.py:766
msgid "Show Calibre Column Names" msgid "Show Calibre Column Names"
@ -546,7 +547,7 @@ msgstr "Toon calibre kolomnamen"
#: config.py:775 #: config.py:775
msgid "" msgid ""
"Changes will only be saved if you click 'OK' to leave Customize FanFicFare." "Changes will only be saved if you click 'OK' to leave Customize FanFicFare."
msgstr "" msgstr "Wijzigingen worden alleen opgeslagen wanneer u op 'OK' klikt bij het verlaten van aanpassen FanFicFare ."
#: config.py:785 #: config.py:785
msgid "Plugin Defaults" msgid "Plugin Defaults"
@ -554,79 +555,79 @@ msgstr "Plugin standaarden"
#: config.py:786 #: config.py:786
msgid "Plugin Defaults (%s) (Read-Only)" msgid "Plugin Defaults (%s) (Read-Only)"
msgstr "" msgstr "Plugin standaarden (%s) (alleen-lezen)"
#: config.py:797 #: config.py:797
msgid "View 'Safe' personal.ini" msgid "View 'Safe' personal.ini"
msgstr "" msgstr "Bekijk 'Veilig' personal.ini"
#: config.py:831 #: config.py:831
msgid "Calibre Column Entry Names" msgid "Calibre Column Entry Names"
msgstr "" msgstr "Calibre kolominvoernamen"
#: config.py:832 #: config.py:832
msgid "Label (entry_name)" msgid "Label (entry_name)"
msgstr "" msgstr "Label (invoernaam)"
#: config.py:852 #: config.py:852
msgid "" msgid ""
"These settings provide integration with the %(rl)s Plugin. %(rl)s can " "These settings provide integration with the %(rl)s Plugin. %(rl)s can "
"automatically send to devices and change custom columns. You have to create" "automatically send to devices and change custom columns. You have to create"
" and configure the lists in %(rl)s to be useful." " and configure the lists in %(rl)s to be useful."
msgstr "" msgstr "Deze instellingen bieden integratie met de %(rl)s plug-in. %(rl)s kan automatisch naar apparaten verzenden en aangepaste kolommen wijzigen. Om bruikbaar te zijn, moet je de lijsten in %(rl)s maken en configureren."
#: config.py:857 #: config.py:857
msgid "Add new/updated stories to \"Send to Device\" Reading List(s)." msgid "Add new/updated stories to \"Send to Device\" Reading List(s)."
msgstr "" msgstr "Voeg nieuwe / bijgewerkte verhalen toe aan de leeslijst(en) van \"Verzenden naar apparaat\"."
#: config.py:858 #: config.py:858
msgid "" msgid ""
"Automatically add new/updated stories to these lists in the %(rl)s plugin." "Automatically add new/updated stories to these lists in the %(rl)s plugin."
msgstr "" msgstr "Voeg automatisch nieuwe / bijgewerkte verhalen toe aan deze lijsten in de %(rl)splug-in."
#: config.py:863 #: config.py:863
msgid "\"Send to Device\" Reading Lists" msgid "\"Send to Device\" Reading Lists"
msgstr "" msgstr "Leeslijst(en) van \"Verzenden naar apparaat\"."
#: config.py:864 config.py:867 config.py:881 config.py:884 #: config.py:864 config.py:867 config.py:881 config.py:884
msgid "" msgid ""
"When enabled, new/updated stories will be automatically added to these " "When enabled, new/updated stories will be automatically added to these "
"lists." "lists."
msgstr "" msgstr "Indien ingeschakeld, worden nieuwe / bijgewerkte verhalen automatisch aan deze lijsten toegevoegd."
#: config.py:874 #: config.py:874
msgid "Add new/updated stories to \"To Read\" Reading List(s)." msgid "Add new/updated stories to \"To Read\" Reading List(s)."
msgstr "" msgstr "Voeg nieuwe / bijgewerkte verhalen toe aan de leeslijst(en) van \"Te Lezen\"."
#: config.py:875 #: config.py:875
msgid "" msgid ""
"Automatically add new/updated stories to these lists in the %(rl)s plugin.\n" "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." "Also offers menu option to remove stories from the \"To Read\" lists."
msgstr "" msgstr "Voeg automatisch nieuwe / bijgewerkte verhalen toe aan deze lijsten in de %(rl)splug-in.\nBiedt ook een menuoptie om verhalen uit de lijsten \"Te lezen\" te verwijderen."
#: config.py:880 #: config.py:880
msgid "\"To Read\" Reading Lists" msgid "\"To Read\" Reading Lists"
msgstr "" msgstr "\"Te lezen\" leeslijst"
#: config.py:891 #: config.py:891
msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"." msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"."
msgstr "" msgstr "Plaats verhalen, die zijn gemarkeerd als \"Gelezen\", terug op de leeslijst(en) van \"Verzenden naar apparaat\"."
#: config.py:892 #: config.py:892
msgid "" msgid ""
"Menu option to remove from \"To Read\" lists will also add stories back to " "Menu option to remove from \"To Read\" lists will also add stories back to "
"\"Send to Device\" Reading List(s)" "\"Send to Device\" Reading List(s)"
msgstr "" msgstr "Menu-optie om te verwijderen uit \"Te Lezen\" -lijsten zal ook verhalen terugplaatsen op \"Verzenden naar apparaat\" Leeslijst (en)"
#: config.py:896 #: config.py:896
msgid "Automatically run Remove \"New\" Chapter Marks when marking books \"Read\"." msgid "Automatically run Remove \"New\" Chapter Marks when marking books \"Read\"."
msgstr "" msgstr "Automatisch verwijderen van \"Nieuw\" hoofdstukmarkeringen bij het markeren van boeken \"Gelezen\"."
#: config.py:897 #: config.py:897
msgid "" msgid ""
"Menu option to remove from \"To Read\" lists will also remove \"(new)\" " "Menu option to remove from \"To Read\" lists will also remove \"(new)\" "
"chapter marks created by personal.ini <i>mark_new_chapters</i> setting." "chapter marks created by personal.ini <i>mark_new_chapters</i> setting."
msgstr "" msgstr "Menuoptie om te verwijderen uit \"Te Lezen\" -lijsten zal ook \"(nieuw)\" hoofdstukmarkeringen verwijderen die zijn aangemaakt door de instelling <i>mark_new_chapters</i> in personal.ini."
#: config.py:925 #: config.py:925
msgid "" msgid ""

View File

@ -47,7 +47,7 @@ class EFPFanFicNet(BaseSiteAdapter):
# normalized story URL. # normalized story URL.
self._setURL('http://' + self.getSiteDomain() + '/viewstory.php?sid='+self.story.getMetadata('storyId')) self._setURL('https://' + self.getSiteDomain() + '/viewstory.php?sid='+self.story.getMetadata('storyId'))
# Each adapter needs to have a unique site abbreviation. # Each adapter needs to have a unique site abbreviation.
self.story.setMetadata('siteabbrev','efp') self.story.setMetadata('siteabbrev','efp')
@ -59,14 +59,14 @@ class EFPFanFicNet(BaseSiteAdapter):
@staticmethod # must be @staticmethod, don't remove it. @staticmethod # must be @staticmethod, don't remove it.
def getSiteDomain(): def getSiteDomain():
# The site domain. Does have www here, if it uses it. # The site domain. Does have www here, if it uses it.
return 'www.efpfanfic.net' return 'efpfanfic.net'
@classmethod @classmethod
def getSiteExampleURLs(cls): def getSiteExampleURLs(cls):
return "http://"+cls.getSiteDomain()+"/viewstory.php?sid=1234" return "https://"+cls.getSiteDomain()+"/viewstory.php?sid=1234"
def getSiteURLPattern(self): def getSiteURLPattern(self):
return re.escape("http://"+self.getSiteDomain()+"/viewstory.php?sid=")+r"\d+$" return r"https?://(www\.)?"+re.escape(self.getSiteDomain()+"/viewstory.php?sid=")+r"\d+$"
## Login seems to be reasonably standard across eFiction sites. ## Login seems to be reasonably standard across eFiction sites.
def needToLoginCheck(self, data): def needToLoginCheck(self, data):
@ -88,7 +88,7 @@ class EFPFanFicNet(BaseSiteAdapter):
params['cookiecheck'] = '1' params['cookiecheck'] = '1'
params['submit'] = 'Invia' params['submit'] = 'Invia'
loginUrl = 'http://' + self.getSiteDomain() + '/user.php?sid='+self.story.getMetadata('storyId') loginUrl = 'https://' + self.getSiteDomain() + '/user.php?sid='+self.story.getMetadata('storyId')
logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl, logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl,
params['penname'])) params['penname']))
@ -137,7 +137,7 @@ class EFPFanFicNet(BaseSiteAdapter):
# Find authorid and URL from... author url. # Find authorid and URL from... author url.
a = soup.find('a', href=re.compile(r"viewuser.php\?uid=\d+")) a = soup.find('a', href=re.compile(r"viewuser.php\?uid=\d+"))
self.story.setMetadata('authorId',a['href'].split('=')[1]) self.story.setMetadata('authorId',a['href'].split('=')[1])
self.story.setMetadata('authorUrl','http://'+self.host+'/'+a['href']) self.story.setMetadata('authorUrl','https://'+self.host+'/'+a['href'])
self.story.setMetadata('author',a.string) self.story.setMetadata('author',a.string)
# Find the chapter selector # Find the chapter selector
@ -149,7 +149,7 @@ class EFPFanFicNet(BaseSiteAdapter):
else: else:
allOptions = select.findAll('option', {'value' : re.compile(r'viewstory')}) allOptions = select.findAll('option', {'value' : re.compile(r'viewstory')})
for o in allOptions: for o in allOptions:
url = u'http://%s/%s' % ( self.getSiteDomain(), url = u'https://%s/%s' % ( self.getSiteDomain(),
o['value']) o['value'])
# just in case there's tags, like <i> in chapter titles. # just in case there's tags, like <i> in chapter titles.
title = stripHTML(o) title = stripHTML(o)
@ -179,7 +179,7 @@ class EFPFanFicNet(BaseSiteAdapter):
# no storya, but do have authsoup--we're looping on author pages. # no storya, but do have authsoup--we're looping on author pages.
if authsoup != None: if authsoup != None:
# last author link with offset should be the 'next' link. # last author link with offset should be the 'next' link.
authurl = u'http://%s/%s' % ( self.getSiteDomain(), authurl = u'https://%s/%s' % ( self.getSiteDomain(),
authsoup.findAll('a',href=re.compile(r'viewuser\.php\?uid=\d+&catid=&offset='))[-1]['href'] ) authsoup.findAll('a',href=re.compile(r'viewuser\.php\?uid=\d+&catid=&offset='))[-1]['href'] )
# Need author page for most of the metadata. # Need author page for most of the metadata.
@ -268,7 +268,7 @@ class EFPFanFicNet(BaseSiteAdapter):
# Find Series name from series URL. # Find Series name from series URL.
a = soup.find('a', href=re.compile(r"viewseries.php\?ssid=\d+&i=1")) a = soup.find('a', href=re.compile(r"viewseries.php\?ssid=\d+&i=1"))
series_name = a.string series_name = a.string
series_url = 'http://'+self.host+'/'+a['href'] series_url = 'https://'+self.host+'/'+a['href']
# use BeautifulSoup HTML parser to make everything easier to find. # use BeautifulSoup HTML parser to make everything easier to find.
seriessoup = self.make_soup(self._fetchUrl(series_url)) seriessoup = self.make_soup(self._fetchUrl(series_url))

View File

@ -109,8 +109,9 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter):
if "Unable to locate story" in data: if "Unable to locate story" in data:
raise exceptions.StoryDoesNotExist(url) raise exceptions.StoryDoesNotExist(url)
# some times "Chapter not found...", sometimes "Chapter text not found..." # some times "Chapter not found...", sometimes "Chapter text
if "not found. Please check to see you are not using an outdated url." in data: # not found..." or "Story does not have any chapters"
if "Please check to see you are not using an outdated url." in data:
raise exceptions.FailedToDownload("Error downloading Chapter: %s! 'Chapter not found. Please check to see you are not using an outdated url.'" % url) raise exceptions.FailedToDownload("Error downloading Chapter: %s! 'Chapter not found. Please check to see you are not using an outdated url.'" % url)
if self.getConfig('check_next_chapter'): if self.getConfig('check_next_chapter'):

View File

@ -114,6 +114,7 @@ class FicBookNetAdapter(BaseSiteAdapter):
logger.debug("Author: (%s)"%self.story.getMetadata('author')) logger.debug("Author: (%s)"%self.story.getMetadata('author'))
# Find the chapters: # Find the chapters:
pubdate = None
chapters = soup.find('ul', {'class' : 'table-of-contents'}) chapters = soup.find('ul', {'class' : 'table-of-contents'})
if chapters != None: if chapters != None:
chapters=chapters.findAll('a', href=re.compile(r'/readfic/'+self.story.getMetadata('storyId')+"/\d+#part_content$")) chapters=chapters.findAll('a', href=re.compile(r'/readfic/'+self.story.getMetadata('storyId')+"/\d+#part_content$"))
@ -122,7 +123,8 @@ class FicBookNetAdapter(BaseSiteAdapter):
chapter=chapters[x] chapter=chapters[x]
churl='https://'+self.host+chapter['href'] churl='https://'+self.host+chapter['href']
self.chapterUrls.append((stripHTML(chapter),churl)) self.chapterUrls.append((stripHTML(chapter),churl))
if x == 0: ## First chapter doesn't always have a date, skip it.
if pubdate == None and chapter.parent.find('span'):
pubdate = translit.translit(stripHTML(chapter.parent.find('span'))) pubdate = translit.translit(stripHTML(chapter.parent.find('span')))
# pubdate = translit.translit(stripHTML(self.make_soup(self._fetchUrl(churl)).find('div', {'class' : 'part_added'}).find('span'))) # pubdate = translit.translit(stripHTML(self.make_soup(self._fetchUrl(churl)).find('div', {'class' : 'part_added'}).find('span')))
if x == len(chapters)-1: if x == len(chapters)-1:

View File

@ -133,16 +133,6 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
table = soup.find('table',{'class':'storymaininfo'}) table = soup.find('table',{'class':'storymaininfo'})
if table: if table:
metastr = stripHTML(unicode(table)).replace('\n',' ').replace('\t',' ') metastr = stripHTML(unicode(table)).replace('\n',' ').replace('\t',' ')
# Rating: 12+ Story Reviews: 3
# Chapters: 3
# Characters: Andromeda, Ted, Bellatrix, R. Lestrange, Lucius, Narcissa, OC
# Genre(s): Fluff, Romance, Young Adult Era: OtherPairings: Other Pairing, Lucius/Narcissa
# Status: Completed
# First Published: 2010.09.02
# Last Published Chapter: 2010.09.28
# Last Updated: 2010.09.28
# Favorite Story Of: 1 users
# Warnings: Scenes of a Mild Sexual Nature
m = re.match(r".*?Status: Completed.*?",metastr) m = re.match(r".*?Status: Completed.*?",metastr)
if m: if m:
@ -150,7 +140,7 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
else: else:
self.story.setMetadata('status','In-Progress') self.story.setMetadata('status','In-Progress')
m = re.match(r".*?Rating: (.+?) Story Reviews.*?",metastr) m = re.match(r".*?Rating: (.+?)Story",metastr)
if m: if m:
self.story.setMetadata('rating', m.group(1)) self.story.setMetadata('rating', m.group(1))
@ -164,9 +154,14 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
for g in m.group(1).split(','): for g in m.group(1).split(','):
self.story.addToList('characters',g) self.story.addToList('characters',g)
m = re.match(r".*?Warnings: (.+).*?",metastr) m = re.match(r".*?Pairings: (.+?) +Status",metastr)
if m: if m:
for w in m.group(1).split(','): for g in m.group(1).split(','):
self.story.addToList('ships',g)
m = re.match(r".*?(Warnings|Advisory): (.+).*?",metastr)
if m:
for w in m.group(2).split(','):
if w != 'Now Warnings': if w != 'Now Warnings':
self.story.addToList('warnings',w) self.story.addToList('warnings',w)

View File

@ -115,6 +115,25 @@ class TwistingTheHellmouthSiteAdapter(BaseSiteAdapter):
else: else:
return True return True
def setSiteMaxRating(self,url,data=None,soup=None):
if not data:
data = self._fetchUrl(url)
soup = self.make_soup(data)
if self.is_adult or self.getConfig("is_adult"):
form = soup.find('form', {'id':'sitemaxratingform'})
# if is_adult and rating isn't already set to FR21, set it so.
if not form.find('option',{'value':'5'}).get('selected'):
params={'ctkn':form.find('input', {'name':'ctkn'})['value'],
'sitemaxrating':'5'}
logger.info("Attempting to get rating cookie for %s" % url)
data = self._postUrl("https://"+self.getSiteDomain()+'/setmaxrating.php',params)
# refetch story page.
## XXX - needs cache invalidate? Or at least check that it this needs doing...
data = self._fetchUrl(url,usecache=False)
soup = self.make_soup(data)
return (data,soup)
def extractChapterUrlsAndMetadata(self): def extractChapterUrlsAndMetadata(self):
# fetch the chapter. From that we will get almost all the # fetch the chapter. From that we will get almost all the
# metadata and chapter list # metadata and chapter list
@ -143,18 +162,8 @@ class TwistingTheHellmouthSiteAdapter(BaseSiteAdapter):
if "<h2>Story Not Found</h2>" in data: if "<h2>Story Not Found</h2>" in data:
raise exceptions.StoryDoesNotExist(url) raise exceptions.StoryDoesNotExist(url)
if self.is_adult or self.getConfig("is_adult"): ## conditionally set sitemaxrating
form = soup.find('form', {'id':'sitemaxratingform'}) (data,soup) = self.setSiteMaxRating(url,data,soup)
# if is_adult and rating isn't already set to FR21, set it so.
if not form.find('option',{'value':'5'}).get('selected'):
params={'ctkn':form.find('input', {'name':'ctkn'})['value'],
'sitemaxrating':'5'}
logger.info("Attempting to get rating cookie for %s" % url)
data = self._postUrl("https://"+self.getSiteDomain()+'/setmaxrating.php',params)
# refetch story page.
## XXX - needs cache invalidate? Or at least check that it this needs doing...
data = self._fetchUrl(url,usecache=False)
soup = self.make_soup(data)
if "NOTE: This story is rated FR21 which is above your chosen filter level." in data: if "NOTE: This story is rated FR21 which is above your chosen filter level." in data:
raise exceptions.AdultCheckRequired(self.url) raise exceptions.AdultCheckRequired(self.url)

View File

@ -36,6 +36,7 @@ class WattpadComAdapter(BaseSiteAdapter):
def __init__(self, config, url): def __init__(self, config, url):
BaseSiteAdapter.__init__(self, config, url) BaseSiteAdapter.__init__(self, config, url)
self.storyId = unicode(self.getStoryId(url)) self.storyId = unicode(self.getStoryId(url))
self.story.setMetadata('siteabbrev',self.getSiteAbbrev())
self.story.setMetadata('storyId', self.storyId) self.story.setMetadata('storyId', self.storyId)
self._setURL('https://www.wattpad.com/story/%s' % self.storyId) self._setURL('https://www.wattpad.com/story/%s' % self.storyId)

View File

@ -84,7 +84,7 @@ class WWWWebNovelComAdapter(BaseSiteAdapter):
self.story.setMetadata('storyId', self.parsedUrl.path.split('/')[2]) self.story.setMetadata('storyId', self.parsedUrl.path.split('/')[2])
# normalized story URL. # normalized story URL.
self._setURL('https://' + self.getSiteDomain() + '/book/'+self.story.getMetadata('storyId')) self._setURL('https://' + self.getSiteDomain() + '/book/' + self.story.getMetadata('storyId'))
# Each adapter needs to have a unique site abbreviation. # Each adapter needs to have a unique site abbreviation.
self.story.setMetadata('siteabbrev', 'wncom') self.story.setMetadata('siteabbrev', 'wncom')
@ -169,6 +169,10 @@ class WWWWebNovelComAdapter(BaseSiteAdapter):
"https://" + self.getSiteDomain() + "/apiajax/chapter/GetChapterList?_csrfToken=" + csrf_token + "&bookId=" + self.story.getMetadata( "https://" + self.getSiteDomain() + "/apiajax/chapter/GetChapterList?_csrfToken=" + csrf_token + "&bookId=" + self.story.getMetadata(
'storyId'))) 'storyId')))
for chap in jsondata["data"]["chapterItems"]: for chap in jsondata["data"]["chapterItems"]:
# Only allow free and VIP type 1 chapters
if chap['isVip'] not in {0, 1}:
continue
chap_title = 'Chapter ' + unicode(chap['chapterIndex']) + ' - ' + chap['chapterName'] chap_title = 'Chapter ' + unicode(chap['chapterIndex']) + ' - ' + chap['chapterName']
chap_Url = url.rstrip('/') + '/' + chap['chapterId'] chap_Url = url.rstrip('/') + '/' + chap['chapterId']
self.chapterUrls.append((chap_title, chap_Url)) self.chapterUrls.append((chap_title, chap_Url))
@ -200,8 +204,8 @@ class WWWWebNovelComAdapter(BaseSiteAdapter):
self.getSiteDomain(), self._csrf_token, book_id, chapter_id, time.time() * 1000) self.getSiteDomain(), self._csrf_token, book_id, chapter_id, time.time() * 1000)
chapter_info = json.loads(self._fetchUrl(content_url))['data']['chapterInfo'] chapter_info = json.loads(self._fetchUrl(content_url))['data']['chapterInfo']
# Check if chapter is marked as VIP (requires an ad to be watched) # Check if chapter is marked as VIP type 1 (requires an ad to be watched)
if chapter_info['isVip']: if chapter_info['isVip'] == 1:
content_token_url = 'https://%s/apiajax/chapter/GetChapterContentToken?_csrfToken=%s&bookId=%s&chapterId=%s' % ( content_token_url = 'https://%s/apiajax/chapter/GetChapterContentToken?_csrfToken=%s&bookId=%s&chapterId=%s' % (
self.getSiteDomain(), self._csrf_token, self.story.getMetadata('storyId'), chapter_id) self.getSiteDomain(), self._csrf_token, self.story.getMetadata('storyId'), chapter_id)
content_token = json.loads(self._fetchUrl(content_token_url))['data']['token'] content_token = json.loads(self._fetchUrl(content_token_url))['data']['token']

View File

@ -124,6 +124,10 @@ class BaseSiteAdapter(Configurable):
# Limit chapters to download. Input starts at 1, list starts at 0 # Limit chapters to download. Input starts at 1, list starts at 0
def setChaptersRange(self,first=None,last=None): def setChaptersRange(self,first=None,last=None):
if not first:
first = self.getConfig("first_chapter",default=None)
if not last:
last = self.getConfig("last_chapter",default=None)
if first: if first:
self.chapterFirst=int(first)-1 self.chapterFirst=int(first)-1
if last: if last:

View File

@ -30,7 +30,7 @@ import sys
import pickle import pickle
import cookielib as cl import cookielib as cl
version="2.20.0" version="2.23.0"
if sys.version_info < (2, 5) or sys.version_info > (3,0): if sys.version_info < (2, 5) or sys.version_info > (3,0):
print('This program requires Python 2.5 or newer. Python 3 is not supported.') print('This program requires Python 2.5 or newer. Python 3 is not supported.')
@ -385,6 +385,8 @@ def do_download(arg,
if options.update and not options.force: if options.update and not options.force:
urlchaptercount = int(adapter.getStoryMetadataOnly().getMetadata('numChapters').replace(',','')) urlchaptercount = int(adapter.getStoryMetadataOnly().getMetadata('numChapters').replace(',',''))
# returns int adjusted for start-end range.
urlchaptercount = adapter.getStoryMetadataOnly().getChapterCount()
if chaptercount == urlchaptercount and not options.metaonly: if chaptercount == urlchaptercount and not options.metaonly:
print '%s already contains %d chapters.' % (output_filename, chaptercount) print '%s already contains %d chapters.' % (output_filename, chaptercount)

View File

@ -2536,6 +2536,15 @@ keep_in_order_groupsUrl:true
## make entryHTML. ## make entryHTML.
make_linkhtml_entries:prequel,sequels,groups,coverSource make_linkhtml_entries:prequel,sequels,groups,coverSource
## What are now content tags used to be included in genre. Copy to
## genre by default.
include_in_genre:genre,content
## What fimfiction.net has labeled 'fandoms', FFF historically calls
## 'category'. Commented out by default due to "My Little Pony:
## Friendship is Magic" from extracategories vs "MLP: FiM" in fandoms.
#include_in_category:category,fandoms
[www.fireflyfans.net] [www.fireflyfans.net]
website_encodings:Windows-1252,utf8,iso-8859-1 website_encodings:Windows-1252,utf8,iso-8859-1
@ -3010,5 +3019,3 @@ website_encodings:Windows-1252,utf8
## uncommon for there to be links to chapters that haven't been ## uncommon for there to be links to chapters that haven't been
## uploaded yet. ## uploaded yet.
continue_on_chapter_error:true continue_on_chapter_error:true

View File

@ -65,8 +65,13 @@ def get_urls_from_page(url,configuration=None,normalize=False):
data = adapter._fetchUrl(url) data = adapter._fetchUrl(url)
adapter.set_adult_cookie() adapter.set_adult_cookie()
# this way it uses User-Agent or other special settings. Only AO3 if 'tthfanfic.org' in url and adapter.getConfig("is_adult"):
# is doing login. ## Simple fetch works in testing, but actual pages use a
## POST and has a 'ctkn' value, so we do too.
# adapter._fetchUrl("https://www.tthfanfic.org/setmaxrating.php?sitemaxrating=5")
adapter.setSiteMaxRating(url)
# this way it uses User-Agent or other special settings.
data = adapter._fetchUrl(url,usecache=False) data = adapter._fetchUrl(url,usecache=False)
except UnknownSite: except UnknownSite:
# no adapter with anyurl=True, must be a random site. # no adapter with anyurl=True, must be a random site.

View File

@ -679,6 +679,15 @@ class Story(Configurable):
# self.metadata = json.loads(s, object_hook=datetime_decoder) # self.metadata = json.loads(s, object_hook=datetime_decoder)
def getChapterCount(self):
## returns chapter count adjusted for start-end range.
url_chapters = value = int(self.getMetadata("numChapters").replace(',',''))
if self.chapter_first:
value = url_chapters - (int(self.chapter_first) - 1)
if self.chapter_last:
value = value - (url_chapters - int(self.chapter_last))
return value
def getMetadataRaw(self,key): def getMetadataRaw(self,key):
if self.isValidMetaEntry(key) and self.metadata.has_key(key): if self.isValidMetaEntry(key) and self.metadata.has_key(key):
return self.metadata[key] return self.metadata[key]
@ -717,7 +726,6 @@ class Story(Configurable):
if isinstance(value, (datetime.date, datetime.datetime, datetime.time)) and self.hasConfig(key+"_format"): if isinstance(value, (datetime.date, datetime.datetime, datetime.time)) and self.hasConfig(key+"_format"):
# logger.info("DATE: %s"%key) # logger.info("DATE: %s"%key)
value = value.strftime(self.getConfig(key+"_format")) value = value.strftime(self.getConfig(key+"_format"))
if key == "title" and (self.chapter_first or self.chapter_last) and self.getConfig("title_chapter_range_pattern"): if key == "title" and (self.chapter_first or self.chapter_last) and self.getConfig("title_chapter_range_pattern"):
first = self.chapter_first or "1" first = self.chapter_first or "1"
last = self.chapter_last or self.getMetadata("numChapters") last = self.chapter_last or self.getMetadata("numChapters")

View File

@ -21,7 +21,7 @@ setup(
name="FanFicFare", name="FanFicFare",
# Versions should comply with PEP440. # Versions should comply with PEP440.
version="2.20.0", version="2.23.0",
description='A tool for downloading fanfiction to eBook formats', description='A tool for downloading fanfiction to eBook formats',
long_description=long_description, long_description=long_description,

View File

@ -1,6 +1,6 @@
# ffd-retief-hrd fanficfare # ffd-retief-hrd fanficfare
application: fanficfare application: fanficfare
version: 2-20-0 version: 2-23-0
runtime: python27 runtime: python27
api_version: 1 api_version: 1
threadsafe: true threadsafe: true

View File

@ -35,7 +35,7 @@
If you have any problems with this application, please If you have any problems with this application, please
report them in report them in
the <a href="http://groups.google.com/group/fanfic-downloader">FanFicFare Google Group</a>. The the <a href="http://groups.google.com/group/fanfic-downloader">FanFicFare Google Group</a>. The
<a href="http://2-19-0.fanficfare.appspot.com">previous version <a href="http://2-22-0.fanficfare.appspot.com">previous version
</a> is also available for you to use if necessary. </a> is also available for you to use if necessary.
</p> </p>
<div id='error'> <div id='error'>