Merge remote-tracking branch 'refs/remotes/JimmXinu/master'
commit
e940fa7202
|
@ -33,7 +33,7 @@ except NameError:
|
|||
from calibre.customize import InterfaceActionBase
|
||||
|
||||
# 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
|
||||
## 'demo' for the first few versions.
|
||||
|
|
|
@ -1333,7 +1333,9 @@ class FanFicFarePlugin(InterfaceAction):
|
|||
(epuburl,chaptercount) = \
|
||||
get_dcsource_chaptercount(StringIO(db.format(book_id,'EPUB',
|
||||
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 collision == UPDATE:
|
||||
raise NotGoingToDownload(_("Already contains %d chapters.")%chaptercount,'edit-undo.png',showerror=False)
|
||||
|
|
|
@ -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
|
||||
# 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,
|
||||
chaptercount,
|
||||
adapter.oldchapters,
|
||||
|
|
|
@ -1031,7 +1031,7 @@ website_encodings:Windows-1252,utf8
|
|||
## extra_titlepage_entries, logpage_entries, extra_logpage_entries,
|
||||
## and include_in_* config items. You can also add additional 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
|
||||
## include_in_genre. If there's ever more than 4 series, add
|
||||
## series04,series04Url etc.
|
||||
|
@ -2477,7 +2477,7 @@ extracategories:My Little Pony: Friendship is Magic
|
|||
|
||||
## Extra metadata that this adapter knows about. See [archiveofourown.org]
|
||||
## 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
|
||||
dislikes_label:Dislikes
|
||||
views_label:Highest Single Chapter Views
|
||||
|
@ -2497,6 +2497,8 @@ coverSource_label:Cover Source
|
|||
coverSourceUrl_label:Cover Source URL
|
||||
coverSourceHTML_label:Cover Source
|
||||
authorLastLogin_label:Author Last Logged In
|
||||
content_label:Content
|
||||
fandoms_label:Fandoms
|
||||
|
||||
keep_in_order_sequels:true
|
||||
keep_in_order_sequelsUrl:true
|
||||
|
@ -2507,6 +2509,15 @@ keep_in_order_groupsUrl:true
|
|||
## make entryHTML.
|
||||
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]
|
||||
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
|
||||
## uploaded yet.
|
||||
continue_on_chapter_error:true
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Copyright (C) YEAR ORGANIZATION
|
||||
#
|
||||
# Translators:
|
||||
# Adolfo Jayme Barrientos, 2014
|
||||
# Adolfo Jayme-Barrientos, 2014
|
||||
# jmontane, 2014
|
||||
# Queralt Iglesias <queralt.ig92@gmail.com>, 2016
|
||||
# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2016-2017
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# Ettore Atalan <atalanttore@googlemail.com>, 2014-2016
|
||||
# ILB, 2014-2016
|
||||
# ILB, 2014-2017
|
||||
# jumo, 2016
|
||||
# Sebastian Keller <Haggard@gmx.de>, 2015
|
||||
# Simon_Schuette <simonschuette@arcor.de>, 2014-2016
|
||||
|
@ -14,8 +14,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: calibre-plugins\n"
|
||||
"POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n"
|
||||
"PO-Revision-Date: 2017-09-20 06:01+0000\n"
|
||||
"Last-Translator: Kovid Goyal <kovid@kovidgoyal.net>\n"
|
||||
"PO-Revision-Date: 2018-01-18 17:51+0000\n"
|
||||
"Last-Translator: ILB\n"
|
||||
"Language-Team: German (http://www.transifex.com/calibre/calibre-plugins/language/de/)\n"
|
||||
"MIME-Version: 1.0\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
|
||||
msgid "Search inside ebooks for Story URL?"
|
||||
msgstr ""
|
||||
msgstr "Soll im ebook nach der StoryURL gesucht werden?"
|
||||
|
||||
#: config.py:497
|
||||
msgid ""
|
||||
"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."
|
||||
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
|
||||
msgid "Post Processing Options"
|
||||
|
@ -430,11 +430,11 @@ msgstr "Generell URLs die auf Ablehnungsliste stehen zurückweisen, ohne nachzuf
|
|||
|
||||
#: config.py:605
|
||||
msgid "Delete on Reject by Default?"
|
||||
msgstr ""
|
||||
msgstr "Automatisch löschen, wenn standardmäßig abgelehnt wird?"
|
||||
|
||||
#: config.py:606
|
||||
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
|
||||
msgid "Edit Reject URLs List"
|
||||
|
@ -520,24 +520,24 @@ msgstr "Ansicht der Standardeinstellungen"
|
|||
|
||||
#: config.py:744
|
||||
msgid "Calibre Columns"
|
||||
msgstr "Calible Spalten"
|
||||
msgstr "Calibre-Spalten"
|
||||
|
||||
#: config.py:751
|
||||
msgid ""
|
||||
"If checked, when updating/overwriting an existing book, FanFicFare will have"
|
||||
" the Calibre Columns available to use in replace_metadata, title_page, "
|
||||
"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
|
||||
msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite"
|
||||
msgstr ""
|
||||
msgstr " Calibre Spalten in FanFicFare beim Updaten/Überschreiben verwenden"
|
||||
|
||||
#: config.py:765
|
||||
msgid ""
|
||||
"FanFicFare can pass the Calibre Columns into the download/update "
|
||||
"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
|
||||
msgid "Show Calibre Column Names"
|
||||
|
@ -685,7 +685,7 @@ msgstr "Erstellt Cover nur für Neue Bücher"
|
|||
msgid ""
|
||||
"Default is to generate a cover any time the calibre metadata is updated.<br "
|
||||
"/>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
|
||||
msgid "Inject/update the cover inside EPUB"
|
||||
|
@ -1005,13 +1005,13 @@ msgstr ""
|
|||
|
||||
#: config.py:1406
|
||||
msgid "Last Checked Column:"
|
||||
msgstr ""
|
||||
msgstr "Zuletzt überprüfte Spalte:"
|
||||
|
||||
#: config.py:1407
|
||||
msgid ""
|
||||
"Record the last time FanFicFare updated or checked for updates.\n"
|
||||
"(Date columns only.)"
|
||||
msgstr ""
|
||||
msgstr "Erfasst, wann FanFicFare das letzte Mal aktualisiert oder auf Updates überprüft wurde\n(Nur Datumsspalten.)"
|
||||
|
||||
#: config.py:1436
|
||||
msgid "Author(s)"
|
||||
|
@ -1072,13 +1072,13 @@ msgstr ""
|
|||
|
||||
#: config.py:1482
|
||||
msgid "Include Books' Comments in Anthology Comments?"
|
||||
msgstr ""
|
||||
msgstr "Bücher-Kommentare in Anthology-Kommentare einbeziehen?"
|
||||
|
||||
#: config.py:1483
|
||||
msgid ""
|
||||
"Include all the merged books' comments in the new book's comments.\n"
|
||||
"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
|
||||
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 "
|
||||
"account. It will only look for story URLs in unread emails in the folder "
|
||||
"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
|
||||
msgid "IMAP Server Name"
|
||||
|
@ -1157,7 +1157,7 @@ msgstr "Wenn aktiviert, werden eMails als gelesen markiert, wenn sie irgendwelch
|
|||
|
||||
#: config.py:1564
|
||||
msgid "Discard URLs on Reject List"
|
||||
msgstr ""
|
||||
msgstr "URLs in der Ablehnungsliste werden abgewiesen."
|
||||
|
||||
#: config.py:1565
|
||||
msgid ""
|
||||
|
@ -1165,7 +1165,7 @@ msgid ""
|
|||
" 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 "
|
||||
"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
|
||||
msgid "Update Existing Books Only"
|
||||
|
@ -1176,7 +1176,7 @@ msgid ""
|
|||
"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,"
|
||||
" 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
|
||||
msgid "Download from Email Immediately"
|
||||
|
@ -1186,7 +1186,7 @@ msgstr "Aus E-Mail sofort herunterladen"
|
|||
msgid ""
|
||||
"If checked, FanFicFare will start downloading story URLs from emails "
|
||||
"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
|
||||
msgid ""
|
||||
|
@ -1619,15 +1619,15 @@ msgstr "Es wurden keine gültigen StoryURLs in den ungelesenen eMails gefunden."
|
|||
|
||||
#: fff_plugin.py:512
|
||||
msgid "Finished Fetching Story URLs from Email."
|
||||
msgstr ""
|
||||
msgstr "Das Abrufen der StoryURL´s aus den Mails ist abgeschlossen."
|
||||
|
||||
#: fff_plugin.py:520
|
||||
msgid "(%d Story URLs Skipped, on Rejected URL List)"
|
||||
msgstr ""
|
||||
msgstr "(%d StoryURLs´ wurden übersprungen, da auf der Ablehnungsliste)"
|
||||
|
||||
#: fff_plugin.py:522
|
||||
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
|
||||
msgid "Get Story URLs from Email"
|
||||
|
@ -1898,7 +1898,7 @@ msgstr "Doppelte Story überspringen."
|
|||
msgid ""
|
||||
"More than one identical book by Identifier URL or title/author(s)--can't "
|
||||
"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
|
||||
msgid "Update"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Copyright (C) YEAR ORGANIZATION
|
||||
#
|
||||
# Translators:
|
||||
# Adolfo Jayme Barrientos, 2014
|
||||
# Adolfo Jayme-Barrientos, 2014
|
||||
# Albert, 2016
|
||||
# dario hereñu <magallania@gmail.com>, 2015-2016
|
||||
# Enrique Medina <medina9304@gmail.com>, 2016
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
# Translators:
|
||||
# Alex, 2016
|
||||
# erkfuizfeuadjfjzefzfuzeff gbhygsregfges <erkfuizfeuadjfjzefzfuzeff@gmail.com>, 2017
|
||||
# Herman van der Vaart <vaarttuig@gmail.com>, 2018
|
||||
# Mario Moens <marimo.it4u@gmail.com>, 2017
|
||||
# Nathan Follens, 2015
|
||||
# Nathan Follens, 2016
|
||||
|
@ -14,8 +15,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: calibre-plugins\n"
|
||||
"POT-Creation-Date: 2017-05-09 11:44+Central Daylight Time\n"
|
||||
"PO-Revision-Date: 2017-09-20 06:01+0000\n"
|
||||
"Last-Translator: Mario Moens <marimo.it4u@gmail.com>\n"
|
||||
"PO-Revision-Date: 2018-02-26 15:13+0000\n"
|
||||
"Last-Translator: Herman van der Vaart <vaarttuig@gmail.com>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/calibre/calibre-plugins/language/nl/)\n"
|
||||
"MIME-Version: 1.0\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 "
|
||||
"/>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."
|
||||
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
|
||||
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"
|
||||
" <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."
|
||||
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
|
||||
msgid "Default Background Metadata?"
|
||||
|
@ -183,7 +184,7 @@ msgid ""
|
|||
"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 "
|
||||
"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
|
||||
msgid "Updating Calibre Options"
|
||||
|
@ -197,7 +198,7 @@ msgstr "Wis andere aanwezige formaten?"
|
|||
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 ""
|
||||
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
|
||||
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"
|
||||
"%(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.)"
|
||||
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
|
||||
msgid "Force Author into Author Sort?"
|
||||
|
@ -219,7 +220,7 @@ msgstr "Forceer auteur naar auteursortering?"
|
|||
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 ""
|
||||
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
|
||||
msgid "Force Title into Title Sort?"
|
||||
|
@ -229,7 +230,7 @@ msgstr "Forceer titel naar titelsortering?"
|
|||
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 ""
|
||||
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
|
||||
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"
|
||||
"Offer to skip downloading if a Series Anthology is found.\n"
|
||||
"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
|
||||
msgid "Reject Without Confirmation?"
|
||||
|
@ -251,7 +252,7 @@ msgid ""
|
|||
"Automatically reject storys with existing Series Anthology books.\n"
|
||||
"Only works if 'Check for existing Series Anthology books' is on.\n"
|
||||
"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
|
||||
msgid "Check for changed Story URL?"
|
||||
|
@ -261,32 +262,32 @@ msgstr "Controleer veranderd verhaal URL?"
|
|||
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 ""
|
||||
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
|
||||
msgid "Search inside ebooks for Story URL?"
|
||||
msgstr ""
|
||||
msgstr "Zoeken in e-boeken naar Story URL?"
|
||||
|
||||
#: config.py:497
|
||||
msgid ""
|
||||
"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."
|
||||
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
|
||||
msgid "Post Processing Options"
|
||||
msgstr ""
|
||||
msgstr "Postverwerkingsopties"
|
||||
|
||||
#: config.py:505
|
||||
msgid "Mark added/updated books when finished?"
|
||||
msgstr ""
|
||||
msgstr "Markeer toegevoegde / bijgewerkte boeken na beëindiging?"
|
||||
|
||||
#: config.py:506
|
||||
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 ""
|
||||
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
|
||||
msgid "Show Marked books when finished?"
|
||||
|
@ -297,7 +298,7 @@ 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 ""
|
||||
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
|
||||
msgid "Smarten Punctuation (EPUB only)"
|
||||
|
@ -307,14 +308,14 @@ msgstr "Slimme interpunctie (enkel EPUB)"
|
|||
msgid ""
|
||||
"Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB "
|
||||
"download and update."
|
||||
msgstr ""
|
||||
msgstr "Voer slimme-interpunctie uit vanuit Calibre's \"Polijst boek\" functie op elke EPUB-download en update."
|
||||
|
||||
#: config.py:521
|
||||
msgid ""
|
||||
"Calculate Word Counts using Calibre internal methods.\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."
|
||||
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
|
||||
msgid "Calculate Word Count:"
|
||||
|
@ -329,7 +330,7 @@ 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 ""
|
||||
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
|
||||
msgid "GUI Options"
|
||||
|
@ -341,27 +342,27 @@ msgstr "URLs overnemen van klembord?"
|
|||
|
||||
#: config.py:548
|
||||
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
|
||||
msgid "Default to Update when books selected?"
|
||||
msgstr ""
|
||||
msgstr "Standaard updaten wanneer boeken zijn geselecteerd?"
|
||||
|
||||
#: config.py:553
|
||||
msgid ""
|
||||
"The top FanFicFare plugin button will start Update if\n"
|
||||
"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
|
||||
msgid "Keep 'Add New from URL(s)' dialog on top?"
|
||||
msgstr ""
|
||||
msgstr "De dialoog 'Nieuw toevoegen van URL(' s) ' bovenaan houden?"
|
||||
|
||||
#: config.py:558
|
||||
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 ""
|
||||
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
|
||||
msgid "Show estimated time left?"
|
||||
|
@ -377,24 +378,24 @@ msgstr "Diverse opties"
|
|||
|
||||
#: config.py:571
|
||||
msgid "Inject calibre Series when none found?"
|
||||
msgstr ""
|
||||
msgstr "Calibre serie toevoegen als er geen gevonden is?"
|
||||
|
||||
#: config.py:572
|
||||
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 ""
|
||||
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
|
||||
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
|
||||
msgid ""
|
||||
"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 "
|
||||
"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
|
||||
msgid "Reject List"
|
||||
|
@ -406,7 +407,7 @@ msgstr "Bewerk afgewezen URL lijst"
|
|||
|
||||
#: config.py:586
|
||||
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
|
||||
msgid "Add Reject URLs"
|
||||
|
@ -414,7 +415,7 @@ msgstr "Voeg afgewezen URL's toe"
|
|||
|
||||
#: config.py:591
|
||||
msgid "Add additional URLs to Reject as text."
|
||||
msgstr ""
|
||||
msgstr "Voeg extra te weigeren URL's toe als tekst."
|
||||
|
||||
#: config.py:595
|
||||
msgid "Edit Reject Reasons List"
|
||||
|
@ -422,19 +423,19 @@ msgstr "Bewerk afwijs-redenen lijst"
|
|||
|
||||
#: config.py:596 config.py:659
|
||||
msgid "Customize the Reasons presented when Rejecting URLs"
|
||||
msgstr ""
|
||||
msgstr "Pas de voorgestelde redenen aan voor het verwerpen van URL's"
|
||||
|
||||
#: config.py:601
|
||||
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
|
||||
msgid "Delete on Reject by Default?"
|
||||
msgstr ""
|
||||
msgstr "Standaard wissen bij weigering?"
|
||||
|
||||
#: config.py:606
|
||||
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
|
||||
msgid "Edit Reject URLs List"
|
||||
|
@ -460,29 +461,29 @@ msgstr "Titel door auteur"
|
|||
msgid ""
|
||||
"Add Reject URLs. Use: <b>http://...,note</b> or <b>http://...,title by "
|
||||
"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
|
||||
msgid ""
|
||||
"One URL per line:\n"
|
||||
"<b>http://...,note</b>\n"
|
||||
"<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
|
||||
msgid "Add this reason to all URLs added:"
|
||||
msgstr ""
|
||||
msgstr "Voeg deze reden toe aan alle toegevoegde URL's:"
|
||||
|
||||
#: config.py:689
|
||||
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 ""
|
||||
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
|
||||
msgid "personal.ini"
|
||||
msgstr ""
|
||||
msgstr "personal.ini"
|
||||
|
||||
#: config.py:703 config.py:807 config.py:808
|
||||
msgid "Edit personal.ini"
|
||||
|
@ -492,27 +493,27 @@ msgstr "Bewerk personal.ini"
|
|||
msgid ""
|
||||
"FanFicFare now includes find, color coding, and error checking for "
|
||||
"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
|
||||
msgid "View \"Safe\" personal.ini"
|
||||
msgstr ""
|
||||
msgstr "Bekijk \"Safe\" personal.ini"
|
||||
|
||||
#: config.py:721 config.py:798
|
||||
msgid ""
|
||||
"View your personal.ini with usernames and passwords removed. For safely "
|
||||
"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
|
||||
msgid "defaults.ini"
|
||||
msgstr ""
|
||||
msgstr "defaults.ini"
|
||||
|
||||
#: config.py:732
|
||||
msgid ""
|
||||
"View all of the plugin's configurable settings\n"
|
||||
"and their default settings."
|
||||
msgstr ""
|
||||
msgstr "Bekijk alle te wijzigen instellingen van de plug-in en hun standaardwaarden."
|
||||
|
||||
#: config.py:733
|
||||
msgid "View Defaults"
|
||||
|
@ -520,24 +521,24 @@ msgstr "Toon standaarden"
|
|||
|
||||
#: config.py:744
|
||||
msgid "Calibre Columns"
|
||||
msgstr ""
|
||||
msgstr "Calibre kolommen"
|
||||
|
||||
#: config.py:751
|
||||
msgid ""
|
||||
"If checked, when updating/overwriting an existing book, FanFicFare will have"
|
||||
" the Calibre Columns available to use in replace_metadata, title_page, "
|
||||
"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
|
||||
msgid "Pass Calibre Columns into FanFicFare on Update/Overwrite"
|
||||
msgstr ""
|
||||
msgstr "Voeg kolommen van Caliber in in FanFicFare bij bijwerken / overschrijven"
|
||||
|
||||
#: config.py:765
|
||||
msgid ""
|
||||
"FanFicFare can pass the Calibre Columns into the download/update "
|
||||
"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
|
||||
msgid "Show Calibre Column Names"
|
||||
|
@ -546,7 +547,7 @@ msgstr "Toon calibre kolomnamen"
|
|||
#: config.py:775
|
||||
msgid ""
|
||||
"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
|
||||
msgid "Plugin Defaults"
|
||||
|
@ -554,79 +555,79 @@ msgstr "Plugin standaarden"
|
|||
|
||||
#: config.py:786
|
||||
msgid "Plugin Defaults (%s) (Read-Only)"
|
||||
msgstr ""
|
||||
msgstr "Plugin standaarden (%s) (alleen-lezen)"
|
||||
|
||||
#: config.py:797
|
||||
msgid "View 'Safe' personal.ini"
|
||||
msgstr ""
|
||||
msgstr "Bekijk 'Veilig' personal.ini"
|
||||
|
||||
#: config.py:831
|
||||
msgid "Calibre Column Entry Names"
|
||||
msgstr ""
|
||||
msgstr "Calibre kolominvoernamen"
|
||||
|
||||
#: config.py:832
|
||||
msgid "Label (entry_name)"
|
||||
msgstr ""
|
||||
msgstr "Label (invoernaam)"
|
||||
|
||||
#: config.py:852
|
||||
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 ""
|
||||
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
|
||||
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
|
||||
msgid ""
|
||||
"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
|
||||
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
|
||||
msgid ""
|
||||
"When enabled, new/updated stories will be automatically added to these "
|
||||
"lists."
|
||||
msgstr ""
|
||||
msgstr "Indien ingeschakeld, worden nieuwe / bijgewerkte verhalen automatisch aan deze lijsten toegevoegd."
|
||||
|
||||
#: config.py:874
|
||||
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
|
||||
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 ""
|
||||
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
|
||||
msgid "\"To Read\" Reading Lists"
|
||||
msgstr ""
|
||||
msgstr "\"Te lezen\" leeslijst"
|
||||
|
||||
#: config.py:891
|
||||
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
|
||||
msgid ""
|
||||
"Menu option to remove from \"To Read\" lists will also add stories back to "
|
||||
"\"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
|
||||
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
|
||||
msgid ""
|
||||
"Menu option to remove from \"To Read\" lists will also remove \"(new)\" "
|
||||
"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
|
||||
msgid ""
|
||||
|
|
|
@ -47,7 +47,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
|
||||
|
||||
# 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.
|
||||
self.story.setMetadata('siteabbrev','efp')
|
||||
|
@ -59,14 +59,14 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
@staticmethod # must be @staticmethod, don't remove it.
|
||||
def getSiteDomain():
|
||||
# The site domain. Does have www here, if it uses it.
|
||||
return 'www.efpfanfic.net'
|
||||
return 'efpfanfic.net'
|
||||
|
||||
@classmethod
|
||||
def getSiteExampleURLs(cls):
|
||||
return "http://"+cls.getSiteDomain()+"/viewstory.php?sid=1234"
|
||||
return "https://"+cls.getSiteDomain()+"/viewstory.php?sid=1234"
|
||||
|
||||
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.
|
||||
def needToLoginCheck(self, data):
|
||||
|
@ -88,7 +88,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
params['cookiecheck'] = '1'
|
||||
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,
|
||||
params['penname']))
|
||||
|
||||
|
@ -137,7 +137,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
# Find authorid and URL from... author url.
|
||||
a = soup.find('a', href=re.compile(r"viewuser.php\?uid=\d+"))
|
||||
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)
|
||||
|
||||
# Find the chapter selector
|
||||
|
@ -149,7 +149,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
else:
|
||||
allOptions = select.findAll('option', {'value' : re.compile(r'viewstory')})
|
||||
for o in allOptions:
|
||||
url = u'http://%s/%s' % ( self.getSiteDomain(),
|
||||
url = u'https://%s/%s' % ( self.getSiteDomain(),
|
||||
o['value'])
|
||||
# just in case there's tags, like <i> in chapter titles.
|
||||
title = stripHTML(o)
|
||||
|
@ -179,7 +179,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
# no storya, but do have authsoup--we're looping on author pages.
|
||||
if authsoup != None:
|
||||
# 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'] )
|
||||
|
||||
# Need author page for most of the metadata.
|
||||
|
@ -268,7 +268,7 @@ class EFPFanFicNet(BaseSiteAdapter):
|
|||
# Find Series name from series URL.
|
||||
a = soup.find('a', href=re.compile(r"viewseries.php\?ssid=\d+&i=1"))
|
||||
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.
|
||||
seriessoup = self.make_soup(self._fetchUrl(series_url))
|
||||
|
|
|
@ -109,8 +109,9 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter):
|
|||
if "Unable to locate story" in data:
|
||||
raise exceptions.StoryDoesNotExist(url)
|
||||
|
||||
# some times "Chapter not found...", sometimes "Chapter text not found..."
|
||||
if "not found. Please check to see you are not using an outdated url." in data:
|
||||
# some times "Chapter not found...", sometimes "Chapter text
|
||||
# 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)
|
||||
|
||||
if self.getConfig('check_next_chapter'):
|
||||
|
|
|
@ -114,6 +114,7 @@ class FicBookNetAdapter(BaseSiteAdapter):
|
|||
logger.debug("Author: (%s)"%self.story.getMetadata('author'))
|
||||
|
||||
# Find the chapters:
|
||||
pubdate = None
|
||||
chapters = soup.find('ul', {'class' : 'table-of-contents'})
|
||||
if chapters != None:
|
||||
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]
|
||||
churl='https://'+self.host+chapter['href']
|
||||
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(self.make_soup(self._fetchUrl(churl)).find('div', {'class' : 'part_added'}).find('span')))
|
||||
if x == len(chapters)-1:
|
||||
|
|
|
@ -133,16 +133,6 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
|
|||
table = soup.find('table',{'class':'storymaininfo'})
|
||||
if table:
|
||||
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)
|
||||
if m:
|
||||
|
@ -150,7 +140,7 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
|
|||
else:
|
||||
self.story.setMetadata('status','In-Progress')
|
||||
|
||||
m = re.match(r".*?Rating: (.+?) Story Reviews.*?",metastr)
|
||||
m = re.match(r".*?Rating: (.+?)Story",metastr)
|
||||
if m:
|
||||
self.story.setMetadata('rating', m.group(1))
|
||||
|
||||
|
@ -164,9 +154,14 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
|
|||
for g in m.group(1).split(','):
|
||||
self.story.addToList('characters',g)
|
||||
|
||||
m = re.match(r".*?Warnings: (.+).*?",metastr)
|
||||
m = re.match(r".*?Pairings: (.+?) +Status",metastr)
|
||||
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':
|
||||
self.story.addToList('warnings',w)
|
||||
|
||||
|
|
|
@ -115,6 +115,25 @@ class TwistingTheHellmouthSiteAdapter(BaseSiteAdapter):
|
|||
else:
|
||||
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):
|
||||
# fetch the chapter. From that we will get almost all the
|
||||
# metadata and chapter list
|
||||
|
@ -143,18 +162,8 @@ class TwistingTheHellmouthSiteAdapter(BaseSiteAdapter):
|
|||
if "<h2>Story Not Found</h2>" in data:
|
||||
raise exceptions.StoryDoesNotExist(url)
|
||||
|
||||
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)
|
||||
## conditionally set sitemaxrating
|
||||
(data,soup) = self.setSiteMaxRating(url,data,soup)
|
||||
|
||||
if "NOTE: This story is rated FR21 which is above your chosen filter level." in data:
|
||||
raise exceptions.AdultCheckRequired(self.url)
|
||||
|
|
|
@ -36,6 +36,7 @@ class WattpadComAdapter(BaseSiteAdapter):
|
|||
def __init__(self, config, url):
|
||||
BaseSiteAdapter.__init__(self, config, url)
|
||||
self.storyId = unicode(self.getStoryId(url))
|
||||
self.story.setMetadata('siteabbrev',self.getSiteAbbrev())
|
||||
self.story.setMetadata('storyId', self.storyId)
|
||||
self._setURL('https://www.wattpad.com/story/%s' % self.storyId)
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ class WWWWebNovelComAdapter(BaseSiteAdapter):
|
|||
self.story.setMetadata('storyId', self.parsedUrl.path.split('/')[2])
|
||||
|
||||
# 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.
|
||||
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(
|
||||
'storyId')))
|
||||
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_Url = url.rstrip('/') + '/' + chap['chapterId']
|
||||
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)
|
||||
chapter_info = json.loads(self._fetchUrl(content_url))['data']['chapterInfo']
|
||||
|
||||
# Check if chapter is marked as VIP (requires an ad to be watched)
|
||||
if chapter_info['isVip']:
|
||||
# Check if chapter is marked as VIP type 1 (requires an ad to be watched)
|
||||
if chapter_info['isVip'] == 1:
|
||||
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)
|
||||
content_token = json.loads(self._fetchUrl(content_token_url))['data']['token']
|
||||
|
|
|
@ -124,6 +124,10 @@ class BaseSiteAdapter(Configurable):
|
|||
|
||||
# Limit chapters to download. Input starts at 1, list starts at 0
|
||||
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:
|
||||
self.chapterFirst=int(first)-1
|
||||
if last:
|
||||
|
|
|
@ -30,7 +30,7 @@ import sys
|
|||
import pickle
|
||||
import cookielib as cl
|
||||
|
||||
version="2.20.0"
|
||||
version="2.23.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.')
|
||||
|
@ -385,6 +385,8 @@ def do_download(arg,
|
|||
|
||||
if options.update and not options.force:
|
||||
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:
|
||||
print '%s already contains %d chapters.' % (output_filename, chaptercount)
|
||||
|
|
|
@ -2536,6 +2536,15 @@ keep_in_order_groupsUrl:true
|
|||
## make entryHTML.
|
||||
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]
|
||||
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
|
||||
## uploaded yet.
|
||||
continue_on_chapter_error:true
|
||||
|
||||
|
||||
|
|
|
@ -65,8 +65,13 @@ def get_urls_from_page(url,configuration=None,normalize=False):
|
|||
data = adapter._fetchUrl(url)
|
||||
adapter.set_adult_cookie()
|
||||
|
||||
# this way it uses User-Agent or other special settings. Only AO3
|
||||
# is doing login.
|
||||
if 'tthfanfic.org' in url and adapter.getConfig("is_adult"):
|
||||
## 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)
|
||||
except UnknownSite:
|
||||
# no adapter with anyurl=True, must be a random site.
|
||||
|
|
|
@ -679,6 +679,15 @@ class Story(Configurable):
|
|||
|
||||
# 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):
|
||||
if self.isValidMetaEntry(key) and self.metadata.has_key(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"):
|
||||
# logger.info("DATE: %s"%key)
|
||||
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"):
|
||||
first = self.chapter_first or "1"
|
||||
last = self.chapter_last or self.getMetadata("numChapters")
|
||||
|
|
2
setup.py
2
setup.py
|
@ -21,7 +21,7 @@ setup(
|
|||
name="FanFicFare",
|
||||
|
||||
# Versions should comply with PEP440.
|
||||
version="2.20.0",
|
||||
version="2.23.0",
|
||||
|
||||
description='A tool for downloading fanfiction to eBook formats',
|
||||
long_description=long_description,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# ffd-retief-hrd fanficfare
|
||||
application: fanficfare
|
||||
version: 2-20-0
|
||||
version: 2-23-0
|
||||
runtime: python27
|
||||
api_version: 1
|
||||
threadsafe: true
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
If you have any problems with this application, please
|
||||
report them in
|
||||
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.
|
||||
</p>
|
||||
<div id='error'>
|
||||
|
|
Loading…
Reference in New Issue