Compare commits

...
16 Commits
Author SHA1 Message Date
Jim Miller 25264f5222 Update CLI download zip. 2014-10-06 10:20:17 -05:00
Jim Miller 3a3d9959f7 Bump versions. 2014-10-06 10:17:27 -05:00
Jim Miller 55eb39e8b2 Fixes for lotrfanfiction.com. 2014-10-05 11:16:19 -05:00
Jim Miller 3c441e0533 Update defaults for new sites. 2014-10-03 13:10:22 -05:00
Jim Miller fbb7bb9eaa Add adapter_lotrfanfictioncom(Base eFiction). 2014-10-03 12:45:59 -05:00
Jim Miller f297814da2 Fix for category vs categories - eFiction Base 2014-09-30 10:55:25 -05:00
Jim Miller 39e96b9966 Updated and new adapters from scout78. 2014-09-30 10:55:02 -05:00
Jim Miller d28a06d8b2 Added tag FFDL 2.0.05 for changeset 494acdb9b1ca 2014-09-23 14:15:25 -05:00
Jim Miller cb700b0b7b Update CLI download zip. 2014-09-23 14:15:15 -05:00
Jim Miller 002cefc1af Bump versions, sync .po file line numbers. 2014-09-23 14:13:54 -05:00
Jim Miller fd15ad6f4b Changes for storiesonline.net site update, from davidfor. 2014-09-23 10:04:01 -05:00
Jim Miller 46262ae17b Add 'extratags' to AllMetadata so it's available for custom columns. 2014-09-23 10:03:28 -05:00
Jim Miller c848edf0a3 Fix for squidge.org/peja using a story URL for 'Site Map'. 2014-09-18 22:47:55 -05:00
Jim Miller be34b6718f Fix for trying to get story URLs with no books selected. 2014-09-11 11:47:00 -05:00
Jim Miller 79971745a2 Fix for AO3 story list URLs that already have a '?' in them. 2014-09-11 11:46:44 -05:00
Jim Miller 4819ca95b1 Added tag FFDL 2.0.04 for changeset e968a543cce3 2014-09-09 15:57:14 -05:00
21 changed files with 1004 additions and 433 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# ffd-retief-hrd fanfictiondownloader
application: fanfictiondownloader
version: 2-0-04
version: 2-0-06
runtime: python27
api_version: 1
threadsafe: true
+2 -2
View File
@@ -42,8 +42,8 @@ class FanFictionDownLoaderBase(InterfaceActionBase):
description = _('UI plugin to download FanFiction stories from various sites.')
supported_platforms = ['windows', 'osx', 'linux']
author = 'Jim Miller'
version = (2, 0, 4)
minimum_calibre_version = (1, 13, 0)
version = (2, 0, 6)
minimum_calibre_version = (1, 48, 0)
#: This field defines the GUI plugin class that contains all the code
#: that actually does something. Its format is module_path:class_name
+1 -1
View File
@@ -420,7 +420,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
def list_story_urls(self):
'''Get list of URLs from existing books.'''
if self.gui.current_view().selectionModel().selectedRows() == 0 :
if not self.gui.current_view().selectionModel().selectedRows() :
self.gui.status_bar.show_message(_('No Selected Books to Get URLs From'),
3000)
return
+98 -98
View File
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2014-08-22 12:39+Central Daylight Time\n"
"POT-Creation-Date: 2014-09-09 15:54+Central Daylight Time\n"
"PO-Revision-Date: 2014-09-02 11:38+0000\n"
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/calibre-plugins/language/de/)\n"
@@ -575,7 +575,7 @@ msgstr "Genre"
msgid "Language"
msgstr "Sprache"
#: config.py:928 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:928 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Status"
msgstr "Status"
@@ -603,7 +603,7 @@ msgstr "Beziehungen"
msgid "Published"
msgstr "Veröffentlicht"
#: config.py:935 ffdl_plugin.py:1419 ffdl_plugin.py:1438
#: config.py:935 ffdl_plugin.py:1437 ffdl_plugin.py:1456
msgid "Updated"
msgstr "Aktualisierung"
@@ -644,7 +644,7 @@ msgid "Extra Tags"
msgstr "zusätzliche Schlagworte"
#: config.py:945 config.py:1057 dialogs.py:804 dialogs.py:900
#: ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Title"
msgstr "Titel"
@@ -656,8 +656,8 @@ msgstr "Story URL"
msgid "Description"
msgstr "Beschreibung"
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1142
#: ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1152
#: ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Author"
msgstr "Autor"
@@ -960,7 +960,7 @@ msgid ""
"What sort of update to perform. May set default from plugin configuration."
msgstr "Welche Art von Aktualisierung ausgeführt werden soll. Eine Standardeinstellung kann in den Plugin Konfigurationen festgelegt werden."
#: dialogs.py:804 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: dialogs.py:804 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Comment"
msgstr "Kommentar"
@@ -1217,387 +1217,387 @@ msgstr "Stories für die Aktualisierung werden gesammelt..."
msgid "Update Existing List"
msgstr "Vorhandene Liste aktualisieren"
#: ffdl_plugin.py:744
#: ffdl_plugin.py:745
msgid "Started fetching metadata for %s stories."
msgstr "Hole die Metadaten für %s-Stories."
#: ffdl_plugin.py:750
#: ffdl_plugin.py:751
msgid "No valid story URLs entered."
msgstr "Es wurde keine gültige URL eingegeben."
#: ffdl_plugin.py:775 ffdl_plugin.py:781
#: ffdl_plugin.py:776 ffdl_plugin.py:782
msgid "Reject URL?"
msgstr "URL ablehnen?"
#: ffdl_plugin.py:782 ffdl_plugin.py:800
#: ffdl_plugin.py:783 ffdl_plugin.py:801
msgid "<b>%s</b> is on your Reject URL list:"
msgstr "<b>%s</b> ist auf ihrer URL-Ablehnungsliste:"
#: ffdl_plugin.py:784
#: ffdl_plugin.py:785
msgid "Click '<b>Yes</b>' to Reject."
msgstr "Klicken Sie '<b>Yes</b>' um abzulehnen."
#: ffdl_plugin.py:785 ffdl_plugin.py:881
#: ffdl_plugin.py:786 ffdl_plugin.py:890
msgid "Click '<b>No</b>' to download anyway."
msgstr "Klicken Sie '<b>No</b>' um trotzdem herunterzuladen."
#: ffdl_plugin.py:787
#: ffdl_plugin.py:788
msgid "Story on Reject URLs list (%s)."
msgstr "Die Story ist auf der URL-Ablehnungsliste (%s)."
#: ffdl_plugin.py:790
#: ffdl_plugin.py:791
msgid "Rejected"
msgstr "Abgelehnt"
#: ffdl_plugin.py:793
#: ffdl_plugin.py:794
msgid "Remove Reject URL?"
msgstr "Entferne die abgelehnte URL?"
#: ffdl_plugin.py:799
#: ffdl_plugin.py:800
msgid "Remove URL from Reject List?"
msgstr "Entferne die URL von der Ablehnungsliste?"
#: ffdl_plugin.py:802
#: ffdl_plugin.py:803
msgid "Click '<b>Yes</b>' to remove it from the list,"
msgstr "Klicken Sie '<b>Yes</b>' um es von der Liste zu entfernen,"
#: ffdl_plugin.py:803
#: ffdl_plugin.py:804
msgid "Click '<b>No</b>' to leave it on the list."
msgstr "Klicken Sie '<b>No</b>' um es auf der Liste zu lassen."
#: ffdl_plugin.py:820
#: ffdl_plugin.py:821
msgid "Cannot update non-epub format."
msgstr "Nicht-EPUB-Format kann nicht aktualisiert werden."
#: ffdl_plugin.py:857
#: ffdl_plugin.py:866
msgid "Are You an Adult?"
msgstr "Sind sie volljährig?"
#: ffdl_plugin.py:858
#: ffdl_plugin.py:867
msgid ""
"%s requires that you be an adult. Please confirm you are an adult in your "
"locale:"
msgstr "%s erfordert, dass sie volljährig sind. Bitte bestätigen Sie, dass Sie ein Erwachsener in ihrem Land sind:"
#: ffdl_plugin.py:872
#: ffdl_plugin.py:881
msgid "Skip Story?"
msgstr "Story überspringen?"
#: ffdl_plugin.py:878
#: ffdl_plugin.py:887
msgid "Skip Anthology Story?"
msgstr "Sammelband-Story überspringen?"
#: ffdl_plugin.py:879
#: ffdl_plugin.py:888
msgid ""
"\"<b>%s</b>\" is in series \"<b><a href=\"%s\">%s</a></b>\" that you have an"
" anthology book for."
msgstr "\"<b>%s</b>\" ist in der Serie \"<b><a href=\"%s\">%s</a></b>\" enthalten, die sie in einem Sammelband haben."
#: ffdl_plugin.py:880
#: ffdl_plugin.py:889
msgid "Click '<b>Yes</b>' to Skip."
msgstr "Klicken Sie '<b>Yes</b>' um zu überspringen."
#: ffdl_plugin.py:883
#: ffdl_plugin.py:892
msgid "Story in Series Anthology(%s)."
msgstr "Story in Serien-Sammelband (%s)."
#: ffdl_plugin.py:888
#: ffdl_plugin.py:897
msgid "Skipped"
msgstr "Übersprungen"
#: ffdl_plugin.py:916
#: ffdl_plugin.py:925
msgid "Add"
msgstr "Hinzufügen"
#: ffdl_plugin.py:929
#: ffdl_plugin.py:938
msgid "Meta"
msgstr "Meta"
#: ffdl_plugin.py:962
#: ffdl_plugin.py:971
msgid "Skipping duplicate story."
msgstr "Doppelte Story überspringen."
#: ffdl_plugin.py:965
#: ffdl_plugin.py:974
msgid ""
"More than one identical book by Identifer URL or title/author(s)--can't tell"
" which book to update/overwrite."
msgstr "Mehr als ein identisches Buch mit der gleichen URL oder Titel/Autor(en) - es kann nicht festgestellt werden, welches Buch aktualisiert/überschrieben werden soll."
#: ffdl_plugin.py:976
#: ffdl_plugin.py:985
msgid "Update"
msgstr "Aktualisieren"
#: ffdl_plugin.py:984 ffdl_plugin.py:991
#: ffdl_plugin.py:993 ffdl_plugin.py:1000
msgid "Change Story URL?"
msgstr "Story-URL ändern?"
#: ffdl_plugin.py:992
#: ffdl_plugin.py:1001
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL:"
msgstr "<b>%s</b> von <b>%s</b> ist bereits in ihrer Bibliothek mit einer anderen URL:"
#: ffdl_plugin.py:993
#: ffdl_plugin.py:1002
msgid "In library: <a href=\"%(liburl)s\">%(liburl)s</a>"
msgstr "In der Bibliothek: <a href=\"%(liburl)s\">%(liburl)s</a>"
#: ffdl_plugin.py:994 ffdl_plugin.py:1008
#: ffdl_plugin.py:1003 ffdl_plugin.py:1017
msgid "New URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
msgstr "Neue URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
#: ffdl_plugin.py:995
#: ffdl_plugin.py:1004
msgid "Click '<b>Yes</b>' to update/overwrite book with new URL."
msgstr "Klicken Sie '<b>Yes</b>' um das Buch mit der neuen URL zu aktualisieren/überschreiben."
#: ffdl_plugin.py:996
#: ffdl_plugin.py:1005
msgid "Click '<b>No</b>' to skip updating/overwriting this book."
msgstr "Klicken Sie '<b>No</b>' um das Aktualisieren/Überschreiben dieses Buches abzubrechen."
#: ffdl_plugin.py:998 ffdl_plugin.py:1005
#: ffdl_plugin.py:1007 ffdl_plugin.py:1014
msgid "Download as New Book?"
msgstr "Als neues Buch herunterladen?"
#: ffdl_plugin.py:1006
#: ffdl_plugin.py:1015
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL."
msgstr "<b>%s</b> von <b>%s</b> ist bereits in ihrer Bibliothek mit einer anderen URL:"
#: ffdl_plugin.py:1007
#: ffdl_plugin.py:1016
msgid ""
"You chose not to update the existing book. Do you want to add a new book "
"for this URL?"
msgstr "Sie haben sich entschieden, das vorhandene Buch nicht zu aktualisieren. Wollen Sie ein neues Buch mit diese URL hinzufügen?"
#: ffdl_plugin.py:1009
#: ffdl_plugin.py:1018
msgid "Click '<b>Yes</b>' to a new book with new URL."
msgstr "Klicken Sie '<b>Yes</b>' um eine neues Buch mit dieser neuen URL hinzuzufügen."
#: ffdl_plugin.py:1010
#: ffdl_plugin.py:1019
msgid "Click '<b>No</b>' to skip URL."
msgstr "Klicken Sie '<b>No</b>' um die URL überspringen."
#: ffdl_plugin.py:1016
#: ffdl_plugin.py:1025
msgid "Update declined by user due to differing story URL(%s)"
msgstr "Aktualisierung wurde vom Benutzer abgelehnt aufgrund unterschiedlicher Story-URL (%s)"
#: ffdl_plugin.py:1019
#: ffdl_plugin.py:1028
msgid "Different URL"
msgstr "Andere URL"
#: ffdl_plugin.py:1024
#: ffdl_plugin.py:1033
msgid "Metadata collected."
msgstr "Metadaten gesammelt."
#: ffdl_plugin.py:1040
#: ffdl_plugin.py:1049
msgid "Already contains %d chapters."
msgstr "Enthält bereits %d Kapitel."
#: ffdl_plugin.py:1045 jobs.py:198
#: ffdl_plugin.py:1054 jobs.py:199
msgid ""
"Existing epub contains %d chapters, web site only has %d. Use Overwrite to "
"force update."
msgstr "Das existierende EPUB hat %d Kapitel, die Web-Seite nur %d. Benutzen Sie überschreiben, um eine Aktualisierung zu erzwingen."
#: ffdl_plugin.py:1047
#: ffdl_plugin.py:1056
msgid ""
"FFDL doesn't recognize chapters in existing epub, epub is probably from a "
"different source. Use Overwrite to force update."
msgstr "FFDL kann im existierenden EPUT die Kapitel nicht erkennen, das EPUB ist vermutlich aus einer anderen Quelle. Benutzen Sie überschreiben, um eine Aktualisierung zu erzwingen."
#: ffdl_plugin.py:1059
#: ffdl_plugin.py:1068
msgid "Not Overwriting, web site is not newer."
msgstr "Keine Überschreibung, die Web-Seite ist nicht aktueller."
#: ffdl_plugin.py:1138
#: ffdl_plugin.py:1148
msgid "None of the <b>%d</b> URLs/stories given can be/need to be downloaded."
msgstr "Keine der angegebenen <b>%d</b> URL´s kann/muss heruntergeladen werden."
#: ffdl_plugin.py:1139 ffdl_plugin.py:1302 ffdl_plugin.py:1332
#: ffdl_plugin.py:1149 ffdl_plugin.py:1320 ffdl_plugin.py:1350
msgid "See log for details."
msgstr "Siehe Protokoll."
#: ffdl_plugin.py:1140
#: ffdl_plugin.py:1150
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr "Fortfahren mit der Aktualisierung ihrer Bibliothek (Fehler-Spalte, wenn konfiguriert)?"
#: ffdl_plugin.py:1147 ffdl_plugin.py:1314
#: ffdl_plugin.py:1157 ffdl_plugin.py:1332
msgid "Bad"
msgstr "Ungeeignet"
#: ffdl_plugin.py:1155
#: ffdl_plugin.py:1165
msgid "FFDL download ended"
msgstr "FFDL herunterladen beendet"
#: ffdl_plugin.py:1155 ffdl_plugin.py:1357
#: ffdl_plugin.py:1165 ffdl_plugin.py:1375
msgid "FFDL log"
msgstr "FFDL Protokoll"
#: ffdl_plugin.py:1163
#: ffdl_plugin.py:1181
msgid "Download FanFiction Book"
msgstr "FanFiction-Buch herunterladen"
#: ffdl_plugin.py:1170
#: ffdl_plugin.py:1188
msgid "Starting %d FanFictionDownLoads"
msgstr "%d FanFictionDownLoads starten"
#: ffdl_plugin.py:1200
#: ffdl_plugin.py:1218
msgid "Story Details:"
msgstr "Story-Einzelheiten:"
#: ffdl_plugin.py:1203
#: ffdl_plugin.py:1221
msgid "Error Updating Metadata"
msgstr "Fehler beim Herunterladen der Metadaten"
#: ffdl_plugin.py:1204
#: ffdl_plugin.py:1222
msgid ""
"An error has occurred while FFDL was updating calibre's metadata for <a "
"href='%s'>%s</a>."
msgstr "Während FFDL die Calibre-Metadaten für <a href='%s'>%s</a> aktualisierte, trat ein Fehler auf."
#: ffdl_plugin.py:1205
#: ffdl_plugin.py:1223
msgid "The ebook has been updated, but the metadata has not."
msgstr "Das eBook wurde aktualisiert, aber die Metadaten nicht."
#: ffdl_plugin.py:1257
#: ffdl_plugin.py:1275
msgid "Finished Adding/Updating %d books."
msgstr "Hinzufügen/Aktualisierung von %d Büchern abgeschlossen."
#: ffdl_plugin.py:1265
#: ffdl_plugin.py:1283
msgid "Starting auto conversion of %d books."
msgstr "Starte automatische Konvertierung von %d Büchern."
#: ffdl_plugin.py:1286
#: ffdl_plugin.py:1304
msgid "No Good Stories for Anthology"
msgstr "Ungültige Story für einen Sammelband"
#: ffdl_plugin.py:1287
#: ffdl_plugin.py:1305
msgid ""
"No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr "Ungültige Stories/Aktualisierungen wurden heruntergeladen, Sammelband-Erstellung/Aktualisierung wurde abgebrochen."
#: ffdl_plugin.py:1292 ffdl_plugin.py:1331
#: ffdl_plugin.py:1310 ffdl_plugin.py:1349
msgid "FFDL found <b>%s</b> good and <b>%s</b> bad updates."
msgstr "FFDL hat <b>%s</b> gute und <b>%s</b> ungeeignete Updates gefunden."
#: ffdl_plugin.py:1299
#: ffdl_plugin.py:1317
msgid ""
"Are you sure you want to continue with creating/updating this Anthology?"
msgstr "Sind sie sicher, dass sie fortfahren wollen, diesen Sammelband zu erstellen/aktualisieren?"
#: ffdl_plugin.py:1300
#: ffdl_plugin.py:1318
msgid "Any updates that failed will <b>not</b> be included in the Anthology."
msgstr "Jede Aktualisierung, die fehlgeschlagen ist, wird <b>nicht</b> in den Sammelband eingefügt."
#: ffdl_plugin.py:1301
#: ffdl_plugin.py:1319
msgid "However, if there's an older version, it will still be included."
msgstr "Allerdings, wenn es eine ältere Version gibt, wird es dennoch aufgenommen werden."
#: ffdl_plugin.py:1304
#: ffdl_plugin.py:1322
msgid "Proceed with updating this anthology and your library?"
msgstr "Mit der Aktualiserung dieses Sammelbandes und ihrer Bibliothek fortfahren?"
#: ffdl_plugin.py:1312
#: ffdl_plugin.py:1330
msgid "Good"
msgstr "Geeignet"
#: ffdl_plugin.py:1333
#: ffdl_plugin.py:1351
msgid "Proceed with updating your library?"
msgstr "Mit der Aktualisierung der Bibliothek fortfahren?"
#: ffdl_plugin.py:1357
#: ffdl_plugin.py:1375
msgid "FFDL download complete"
msgstr "FFDL herunterladen abgeschlossen"
#: ffdl_plugin.py:1370
#: ffdl_plugin.py:1388
msgid "Merging %s books."
msgstr "Zusammenführung von %s Büchern."
#: ffdl_plugin.py:1410
#: ffdl_plugin.py:1428
msgid "FFDL Adding/Updating books."
msgstr "FFDL hinzufügen/aktualisieren der Bücher."
#: ffdl_plugin.py:1417
#: ffdl_plugin.py:1435
msgid "Updating calibre for FanFiction stories..."
msgstr "Calibre mit FanFiction-Stories aktualisieren..."
#: ffdl_plugin.py:1418
#: ffdl_plugin.py:1436
msgid "Update calibre for FanFiction stories"
msgstr "Calibre mit FanFiction-Stories aktualisieren."
#: ffdl_plugin.py:1427
#: ffdl_plugin.py:1445
msgid "Adding/Updating %s BAD books."
msgstr "Hinzufügen/aktualisieren %s ungeeigneter Bücher."
#: ffdl_plugin.py:1436
#: ffdl_plugin.py:1454
msgid "Updating calibre for BAD FanFiction stories..."
msgstr "Calibre mit ungeeigneten FanFiction-Stories aktualisieren..."
#: ffdl_plugin.py:1437
#: ffdl_plugin.py:1455
msgid "Update calibre for BAD FanFiction stories"
msgstr "Calibre mit ungeeigneten FanFiction-Stories aktualisieren."
#: ffdl_plugin.py:1463
#: ffdl_plugin.py:1481
msgid "Adding format to book failed for some reason..."
msgstr "Das Hinzufügen eines Formates zum Buch ist aus irgendeinem Grund fehlgeschlagen..."
#: ffdl_plugin.py:1466
#: ffdl_plugin.py:1484
msgid "Error"
msgstr "Fehler"
#: ffdl_plugin.py:1739
#: ffdl_plugin.py:1757
msgid ""
"You configured FanFictionDownLoader to automatically update Reading Lists, "
"but you don't have the %s plugin installed anymore?"
msgstr "Sie haben FFDL konfiguriert, die Leselisten automatisch zu aktualisieren, aber sie haben das %s-Plugin nicht mehr installiert?"
#: ffdl_plugin.py:1751
#: ffdl_plugin.py:1769
msgid ""
"You configured FanFictionDownLoader to automatically update \"To Read\" "
"Reading Lists, but you don't have any lists set?"
msgstr "Sie haben FFDL konfiguriert, um die \"zu lesen\" Leselisten automatisch zu aktualisieren, aber sie haben keinen Listen gesetzt?"
#: ffdl_plugin.py:1761 ffdl_plugin.py:1779
#: ffdl_plugin.py:1779 ffdl_plugin.py:1797
msgid ""
"You configured FanFictionDownLoader to automatically update Reading List "
"'%s', but you don't have a list of that name?"
msgstr "Sie haben FFDL konfiguriert, um die Leseliste '%s' automatisch zu aktualisieren, aber sie haben keine Liste dieses Namens?"
#: ffdl_plugin.py:1767
#: ffdl_plugin.py:1785
msgid ""
"You configured FanFictionDownLoader to automatically update \"Send to "
"Device\" Reading Lists, but you don't have any lists set?"
msgstr "Sie haben FFDL konfiguriert, um die \"ans Gerät senden\"-Leselisten automatisch zu aktualisieren, aber sie haben keinen Listen gesetzt?"
#: ffdl_plugin.py:1888
#: ffdl_plugin.py:1906
msgid "No story URL found."
msgstr "Keine URL wurde gefunden."
#: ffdl_plugin.py:1891
#: ffdl_plugin.py:1909
msgid "Not Found"
msgstr "Nicht gefunden"
#: ffdl_plugin.py:1897
#: ffdl_plugin.py:1915
msgid "URL is not a valid story URL."
msgstr "URL ist keine gültige Story-URL."
#: ffdl_plugin.py:1900
#: ffdl_plugin.py:1918
msgid "Bad URL"
msgstr "Bad URL"
#: ffdl_plugin.py:2036 ffdl_plugin.py:2039
#: ffdl_plugin.py:2054 ffdl_plugin.py:2057
msgid "Anthology containing:"
msgstr "Sammelband enthält:"
#: ffdl_plugin.py:2037
#: ffdl_plugin.py:2055
msgid "%s by %s"
msgstr "%s von %s"
#: ffdl_plugin.py:2059
#: ffdl_plugin.py:2077
msgid " Anthology"
msgstr "Sammelband"
#: ffdl_plugin.py:2096
#: ffdl_plugin.py:2114
msgid "(was set, removed for security)"
msgstr "(wurde eingestellt, aus Sicherheitsgründen entfernt)"
@@ -1617,10 +1617,10 @@ msgstr "Erfolglos:"
msgid "Download started..."
msgstr "Herunterladen gestartet..."
#: jobs.py:192
#: jobs.py:193
msgid "Already contains %d chapters. Reuse as is."
msgstr "Enthält bereits %d Kapitel. Erhalten wie es ist."
#: jobs.py:209
#: jobs.py:210
msgid "Update %s completed, added %s chapters for %s total."
msgstr "Aktualisierung %s abgeschlossen, %s hinzugefügte Kapitel zu insgesamt %s."
+98 -98
View File
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2014-08-22 12:39+Central Daylight Time\n"
"POT-Creation-Date: 2014-09-09 15:54+Central Daylight Time\n"
"PO-Revision-Date: 2014-09-02 09:55+0000\n"
"Last-Translator: Jellby <jellby@yahoo.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/calibre-plugins/language/es/)\n"
@@ -574,7 +574,7 @@ msgstr "Género"
msgid "Language"
msgstr "Idioma"
#: config.py:928 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:928 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Status"
msgstr "Estado"
@@ -602,7 +602,7 @@ msgstr "Relaciones"
msgid "Published"
msgstr "Publicado"
#: config.py:935 ffdl_plugin.py:1419 ffdl_plugin.py:1438
#: config.py:935 ffdl_plugin.py:1437 ffdl_plugin.py:1456
msgid "Updated"
msgstr "Actualizado"
@@ -643,7 +643,7 @@ msgid "Extra Tags"
msgstr "Etiquetas adicionales"
#: config.py:945 config.py:1057 dialogs.py:804 dialogs.py:900
#: ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Title"
msgstr "Título"
@@ -655,8 +655,8 @@ msgstr "URL de la historia"
msgid "Description"
msgstr "Descripción"
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1142
#: ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1152
#: ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Author"
msgstr "Autor"
@@ -959,7 +959,7 @@ msgid ""
"What sort of update to perform. May set default from plugin configuration."
msgstr "Qué tipo de actualización se realizará. Puede definirse el valor predeterminado en la configuración del complemento."
#: dialogs.py:804 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: dialogs.py:804 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Comment"
msgstr "Comentario"
@@ -1216,387 +1216,387 @@ msgstr "Obtener historias para actualizar"
msgid "Update Existing List"
msgstr "Actualizando la lista existente"
#: ffdl_plugin.py:744
#: ffdl_plugin.py:745
msgid "Started fetching metadata for %s stories."
msgstr "Obtención de metadatos iniciada para %s historias."
#: ffdl_plugin.py:750
#: ffdl_plugin.py:751
msgid "No valid story URLs entered."
msgstr "No se ha introducido ningún URL de historia válido."
#: ffdl_plugin.py:775 ffdl_plugin.py:781
#: ffdl_plugin.py:776 ffdl_plugin.py:782
msgid "Reject URL?"
msgstr "¿Rechazar URL?"
#: ffdl_plugin.py:782 ffdl_plugin.py:800
#: ffdl_plugin.py:783 ffdl_plugin.py:801
msgid "<b>%s</b> is on your Reject URL list:"
msgstr "<b>%s</b> está en la lista de rechazos:"
#: ffdl_plugin.py:784
#: ffdl_plugin.py:785
msgid "Click '<b>Yes</b>' to Reject."
msgstr "Pulse en «<b>Sí</b>» para rechazar."
#: ffdl_plugin.py:785 ffdl_plugin.py:881
#: ffdl_plugin.py:786 ffdl_plugin.py:890
msgid "Click '<b>No</b>' to download anyway."
msgstr "Pulse en «<b>No</b>» para descargar de todos modos."
#: ffdl_plugin.py:787
#: ffdl_plugin.py:788
msgid "Story on Reject URLs list (%s)."
msgstr "Historia en la lista de rechazos (%s)."
#: ffdl_plugin.py:790
#: ffdl_plugin.py:791
msgid "Rejected"
msgstr "Rechazado"
#: ffdl_plugin.py:793
#: ffdl_plugin.py:794
msgid "Remove Reject URL?"
msgstr "¿Eliminar URL rechazado?"
#: ffdl_plugin.py:799
#: ffdl_plugin.py:800
msgid "Remove URL from Reject List?"
msgstr "¿Eliminar URL de la lista de rechazos?"
#: ffdl_plugin.py:802
#: ffdl_plugin.py:803
msgid "Click '<b>Yes</b>' to remove it from the list,"
msgstr "Pulse en «<b>Sí</b>» para eliminarlo de la lista."
#: ffdl_plugin.py:803
#: ffdl_plugin.py:804
msgid "Click '<b>No</b>' to leave it on the list."
msgstr "Pulse en «<b>No</b>» para dejarlo en la lista."
#: ffdl_plugin.py:820
#: ffdl_plugin.py:821
msgid "Cannot update non-epub format."
msgstr "No se puede actualizar un formato que no sea EPUB."
#: ffdl_plugin.py:857
#: ffdl_plugin.py:866
msgid "Are You an Adult?"
msgstr "¿Es usted adulto?"
#: ffdl_plugin.py:858
#: ffdl_plugin.py:867
msgid ""
"%s requires that you be an adult. Please confirm you are an adult in your "
"locale:"
msgstr "%s requiere que usted sea adulto. Por favor confirme que es usted adulto en su jurisdicción:"
#: ffdl_plugin.py:872
#: ffdl_plugin.py:881
msgid "Skip Story?"
msgstr "¿Omitir historia?"
#: ffdl_plugin.py:878
#: ffdl_plugin.py:887
msgid "Skip Anthology Story?"
msgstr "¿Omitir historia de antología?"
#: ffdl_plugin.py:879
#: ffdl_plugin.py:888
msgid ""
"\"<b>%s</b>\" is in series \"<b><a href=\"%s\">%s</a></b>\" that you have an"
" anthology book for."
msgstr "«<b>%s</b>» está en la serie «<b><a href=\"%s\">%s</a></b>», para la que tiene una antología."
#: ffdl_plugin.py:880
#: ffdl_plugin.py:889
msgid "Click '<b>Yes</b>' to Skip."
msgstr "Pulse en «<b>Sí</b>» para omitir."
#: ffdl_plugin.py:883
#: ffdl_plugin.py:892
msgid "Story in Series Anthology(%s)."
msgstr "Historia en antología de serie (%s)."
#: ffdl_plugin.py:888
#: ffdl_plugin.py:897
msgid "Skipped"
msgstr "Omitida"
#: ffdl_plugin.py:916
#: ffdl_plugin.py:925
msgid "Add"
msgstr "Añadir"
#: ffdl_plugin.py:929
#: ffdl_plugin.py:938
msgid "Meta"
msgstr "Meta"
#: ffdl_plugin.py:962
#: ffdl_plugin.py:971
msgid "Skipping duplicate story."
msgstr "Omitiendo historia duplicada."
#: ffdl_plugin.py:965
#: ffdl_plugin.py:974
msgid ""
"More than one identical book by Identifer URL or title/author(s)--can't tell"
" which book to update/overwrite."
msgstr "Hay más de un libro idéntico según el URL identificador o el título y autor(es). No se puede saberse cuál hay que actualizar o reemplazar."
#: ffdl_plugin.py:976
#: ffdl_plugin.py:985
msgid "Update"
msgstr "Actualizar"
#: ffdl_plugin.py:984 ffdl_plugin.py:991
#: ffdl_plugin.py:993 ffdl_plugin.py:1000
msgid "Change Story URL?"
msgstr "¿Cambiar el URL de historia?"
#: ffdl_plugin.py:992
#: ffdl_plugin.py:1001
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL:"
msgstr "<b>%s</b> por <b>%s</b> ya está en la biblioteca con un URL de origen diferente:"
#: ffdl_plugin.py:993
#: ffdl_plugin.py:1002
msgid "In library: <a href=\"%(liburl)s\">%(liburl)s</a>"
msgstr "En la biblioteca: <a href=\"%(liburl)s\">%(liburl)s</a>"
#: ffdl_plugin.py:994 ffdl_plugin.py:1008
#: ffdl_plugin.py:1003 ffdl_plugin.py:1017
msgid "New URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
msgstr "Nuevo URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
#: ffdl_plugin.py:995
#: ffdl_plugin.py:1004
msgid "Click '<b>Yes</b>' to update/overwrite book with new URL."
msgstr "Pulse en «<b>Sí</b>» para actualizar o reemplazar el libro con el URL nuevo."
#: ffdl_plugin.py:996
#: ffdl_plugin.py:1005
msgid "Click '<b>No</b>' to skip updating/overwriting this book."
msgstr "Pulse en «<b>No</b>» para omitir la actualización o reemplazo de este libro."
#: ffdl_plugin.py:998 ffdl_plugin.py:1005
#: ffdl_plugin.py:1007 ffdl_plugin.py:1014
msgid "Download as New Book?"
msgstr "¿Descargar como un libro nuevo?"
#: ffdl_plugin.py:1006
#: ffdl_plugin.py:1015
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL."
msgstr "<b>%s</b> por <b>%s</b> ya está en la biblioteca con un URL de origen diferente."
#: ffdl_plugin.py:1007
#: ffdl_plugin.py:1016
msgid ""
"You chose not to update the existing book. Do you want to add a new book "
"for this URL?"
msgstr "Ha elegido no actualizar el libro existente. ¿Quiere añadir un nuevo libro con este URL?"
#: ffdl_plugin.py:1009
#: ffdl_plugin.py:1018
msgid "Click '<b>Yes</b>' to a new book with new URL."
msgstr "Pulse en «<b>Sí</b>» para añadir un nuevo libro con el nuevo URL."
#: ffdl_plugin.py:1010
#: ffdl_plugin.py:1019
msgid "Click '<b>No</b>' to skip URL."
msgstr "Pulse en «<b>No</b>» para omitir el URL."
#: ffdl_plugin.py:1016
#: ffdl_plugin.py:1025
msgid "Update declined by user due to differing story URL(%s)"
msgstr "Actualización anulada por el usuario debido a un conflicto de URL de historia (%s)"
#: ffdl_plugin.py:1019
#: ffdl_plugin.py:1028
msgid "Different URL"
msgstr "URL diferente"
#: ffdl_plugin.py:1024
#: ffdl_plugin.py:1033
msgid "Metadata collected."
msgstr "Metadatos recopilados."
#: ffdl_plugin.py:1040
#: ffdl_plugin.py:1049
msgid "Already contains %d chapters."
msgstr "Ya contiene %d capítulos."
#: ffdl_plugin.py:1045 jobs.py:198
#: ffdl_plugin.py:1054 jobs.py:199
msgid ""
"Existing epub contains %d chapters, web site only has %d. Use Overwrite to "
"force update."
msgstr "El epub existente contiene %d capítulos, el sitio web sólo tiene %d. Use Reemplazar para forzar la actualización."
#: ffdl_plugin.py:1047
#: ffdl_plugin.py:1056
msgid ""
"FFDL doesn't recognize chapters in existing epub, epub is probably from a "
"different source. Use Overwrite to force update."
msgstr "FFDL no encuentra capítulos en el epub existente, probablemente procede de un origen distinto. Use Reemplazar para forzar la actualización."
#: ffdl_plugin.py:1059
#: ffdl_plugin.py:1068
msgid "Not Overwriting, web site is not newer."
msgstr "No se reemplaza, el sitio web no es más reciente."
#: ffdl_plugin.py:1138
#: ffdl_plugin.py:1148
msgid "None of the <b>%d</b> URLs/stories given can be/need to be downloaded."
msgstr "Ninguna de las <b>%d</b> historias o URL dados pueden o necesitan descargarse."
#: ffdl_plugin.py:1139 ffdl_plugin.py:1302 ffdl_plugin.py:1332
#: ffdl_plugin.py:1149 ffdl_plugin.py:1320 ffdl_plugin.py:1350
msgid "See log for details."
msgstr "Vea el registro para más detalles."
#: ffdl_plugin.py:1140
#: ffdl_plugin.py:1150
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr "¿Continuar actualizando la biblioteca (columna de error, si está configurada)?"
#: ffdl_plugin.py:1147 ffdl_plugin.py:1314
#: ffdl_plugin.py:1157 ffdl_plugin.py:1332
msgid "Bad"
msgstr "Incorrecta"
#: ffdl_plugin.py:1155
#: ffdl_plugin.py:1165
msgid "FFDL download ended"
msgstr "Descarga de FFDL finalizada"
#: ffdl_plugin.py:1155 ffdl_plugin.py:1357
#: ffdl_plugin.py:1165 ffdl_plugin.py:1375
msgid "FFDL log"
msgstr "Registro de FFDL"
#: ffdl_plugin.py:1163
#: ffdl_plugin.py:1181
msgid "Download FanFiction Book"
msgstr "Descargar libro de «fanfiction»"
#: ffdl_plugin.py:1170
#: ffdl_plugin.py:1188
msgid "Starting %d FanFictionDownLoads"
msgstr "Iniciando %d descargas de FanFictionDownLoader"
#: ffdl_plugin.py:1200
#: ffdl_plugin.py:1218
msgid "Story Details:"
msgstr "Detalles de la historia:"
#: ffdl_plugin.py:1203
#: ffdl_plugin.py:1221
msgid "Error Updating Metadata"
msgstr "Error actualizando metadatos"
#: ffdl_plugin.py:1204
#: ffdl_plugin.py:1222
msgid ""
"An error has occurred while FFDL was updating calibre's metadata for <a "
"href='%s'>%s</a>."
msgstr "Ha ocurrido un error mientras FFDL actualizaba la base de datos de calibre para "
#: ffdl_plugin.py:1205
#: ffdl_plugin.py:1223
msgid "The ebook has been updated, but the metadata has not."
msgstr "El libro ha sido actualizado, pero no los metadatos."
#: ffdl_plugin.py:1257
#: ffdl_plugin.py:1275
msgid "Finished Adding/Updating %d books."
msgstr "Finalizada la adición o actualización de %d libros."
#: ffdl_plugin.py:1265
#: ffdl_plugin.py:1283
msgid "Starting auto conversion of %d books."
msgstr "Iniciando la conversión automática de %d libros."
#: ffdl_plugin.py:1286
#: ffdl_plugin.py:1304
msgid "No Good Stories for Anthology"
msgstr "No hay historias válidas para la antología"
#: ffdl_plugin.py:1287
#: ffdl_plugin.py:1305
msgid ""
"No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr "No se han descargado historias o actualizaciones válidas, la creación o actualización de la antología se cancela."
#: ffdl_plugin.py:1292 ffdl_plugin.py:1331
#: ffdl_plugin.py:1310 ffdl_plugin.py:1349
msgid "FFDL found <b>%s</b> good and <b>%s</b> bad updates."
msgstr "FFDL ha encontrado <b>%s</b> actualizaciones válidas y <b>%s</b> incorrectas."
#: ffdl_plugin.py:1299
#: ffdl_plugin.py:1317
msgid ""
"Are you sure you want to continue with creating/updating this Anthology?"
msgstr "¿Está seguro de querer continuar creando o actualizando la antología?"
#: ffdl_plugin.py:1300
#: ffdl_plugin.py:1318
msgid "Any updates that failed will <b>not</b> be included in the Anthology."
msgstr "Las actualizaciones fallidas <b>no</b> se incluirán en la antología."
#: ffdl_plugin.py:1301
#: ffdl_plugin.py:1319
msgid "However, if there's an older version, it will still be included."
msgstr "Sin embargo, si hay una versión más antigua, se incluirá."
#: ffdl_plugin.py:1304
#: ffdl_plugin.py:1322
msgid "Proceed with updating this anthology and your library?"
msgstr "¿Continuar actualizando esta antología y la biblioteca?"
#: ffdl_plugin.py:1312
#: ffdl_plugin.py:1330
msgid "Good"
msgstr "Válida"
#: ffdl_plugin.py:1333
#: ffdl_plugin.py:1351
msgid "Proceed with updating your library?"
msgstr "¿Continuar actualizando la biblioteca?"
#: ffdl_plugin.py:1357
#: ffdl_plugin.py:1375
msgid "FFDL download complete"
msgstr "Descarga de FFDL completa"
#: ffdl_plugin.py:1370
#: ffdl_plugin.py:1388
msgid "Merging %s books."
msgstr "Combinando %s libros."
#: ffdl_plugin.py:1410
#: ffdl_plugin.py:1428
msgid "FFDL Adding/Updating books."
msgstr "FFDL está añadiendo o actualizando libros."
#: ffdl_plugin.py:1417
#: ffdl_plugin.py:1435
msgid "Updating calibre for FanFiction stories..."
msgstr "Actualizando calibre para las historias de «fanfiction»..."
#: ffdl_plugin.py:1418
#: ffdl_plugin.py:1436
msgid "Update calibre for FanFiction stories"
msgstr "Actualizar calibre para las historias de «fanfiction»"
#: ffdl_plugin.py:1427
#: ffdl_plugin.py:1445
msgid "Adding/Updating %s BAD books."
msgstr "Añadiendo o actualizando %s libros INCORRECTOS."
#: ffdl_plugin.py:1436
#: ffdl_plugin.py:1454
msgid "Updating calibre for BAD FanFiction stories..."
msgstr "Actualizando calibre para las historias de «fanfiction» INCORRECTAS..."
#: ffdl_plugin.py:1437
#: ffdl_plugin.py:1455
msgid "Update calibre for BAD FanFiction stories"
msgstr "Actualizar calibre para las historias de «fanfiction» INCORRECTAS"
#: ffdl_plugin.py:1463
#: ffdl_plugin.py:1481
msgid "Adding format to book failed for some reason..."
msgstr "Hubo un fallo al añadir un formato al libro por algún motivo..."
#: ffdl_plugin.py:1466
#: ffdl_plugin.py:1484
msgid "Error"
msgstr "Error"
#: ffdl_plugin.py:1739
#: ffdl_plugin.py:1757
msgid ""
"You configured FanFictionDownLoader to automatically update Reading Lists, "
"but you don't have the %s plugin installed anymore?"
msgstr "Ha configurado FanFictionDownLoader para actualizar automáticamente las listas de lectura, pero ya no tiene instalado el complemento %s"
#: ffdl_plugin.py:1751
#: ffdl_plugin.py:1769
msgid ""
"You configured FanFictionDownLoader to automatically update \"To Read\" "
"Reading Lists, but you don't have any lists set?"
msgstr "Ha configurado FanFictionDownLoader para actualizar automáticamente las listas «Para leer», pero no tiene ninguna lista configurada."
#: ffdl_plugin.py:1761 ffdl_plugin.py:1779
#: ffdl_plugin.py:1779 ffdl_plugin.py:1797
msgid ""
"You configured FanFictionDownLoader to automatically update Reading List "
"'%s', but you don't have a list of that name?"
msgstr "Ha configurado FanFictionDownLoader para actualizar automáticamente las listas «%s», pero no tiene ninguna lista con ese nombre."
#: ffdl_plugin.py:1767
#: ffdl_plugin.py:1785
msgid ""
"You configured FanFictionDownLoader to automatically update \"Send to "
"Device\" Reading Lists, but you don't have any lists set?"
msgstr "Ha configurado FanFictionDownLoader para actualizar automáticamente las listas de «Enviar a dispositivo», pero no tiene ninguna lista configurada."
#: ffdl_plugin.py:1888
#: ffdl_plugin.py:1906
msgid "No story URL found."
msgstr "No se ha encontrado ningún URL de historia."
#: ffdl_plugin.py:1891
#: ffdl_plugin.py:1909
msgid "Not Found"
msgstr "No se ha encontrado"
#: ffdl_plugin.py:1897
#: ffdl_plugin.py:1915
msgid "URL is not a valid story URL."
msgstr "El URL no es un URL de historia válido."
#: ffdl_plugin.py:1900
#: ffdl_plugin.py:1918
msgid "Bad URL"
msgstr "El URL es incorrecto"
#: ffdl_plugin.py:2036 ffdl_plugin.py:2039
#: ffdl_plugin.py:2054 ffdl_plugin.py:2057
msgid "Anthology containing:"
msgstr "La antología contiene:"
#: ffdl_plugin.py:2037
#: ffdl_plugin.py:2055
msgid "%s by %s"
msgstr "%s por %s"
#: ffdl_plugin.py:2059
#: ffdl_plugin.py:2077
msgid " Anthology"
msgstr "Antología"
#: ffdl_plugin.py:2096
#: ffdl_plugin.py:2114
msgid "(was set, removed for security)"
msgstr "(estaba activado, eliminado por seguridad)"
@@ -1616,10 +1616,10 @@ msgstr "Sin éxito:"
msgid "Download started..."
msgstr "Descarga comenzada..."
#: jobs.py:192
#: jobs.py:193
msgid "Already contains %d chapters. Reuse as is."
msgstr "Ya contiene %d capítulos. Volver a usar tal cual."
#: jobs.py:209
#: jobs.py:210
msgid "Update %s completed, added %s chapters for %s total."
msgstr "Completada la actualización de %s, se añadieron %s capítulos para un total de %s."
+98 -98
View File
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2014-08-22 12:39+Central Daylight Time\n"
"POT-Creation-Date: 2014-09-09 15:54+Central Daylight Time\n"
"PO-Revision-Date: 2014-09-04 12:30+0000\n"
"Last-Translator: Ptitprince <leporello1791@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/calibre-plugins/language/fr/)\n"
@@ -573,7 +573,7 @@ msgstr "Genre"
msgid "Language"
msgstr "Langue"
#: config.py:928 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:928 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Status"
msgstr "Statut"
@@ -601,7 +601,7 @@ msgstr "Relations"
msgid "Published"
msgstr "Publié"
#: config.py:935 ffdl_plugin.py:1419 ffdl_plugin.py:1438
#: config.py:935 ffdl_plugin.py:1437 ffdl_plugin.py:1456
msgid "Updated"
msgstr "Mis à jour"
@@ -642,7 +642,7 @@ msgid "Extra Tags"
msgstr "Etiquettes additionnelles"
#: config.py:945 config.py:1057 dialogs.py:804 dialogs.py:900
#: ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Title"
msgstr "Titre"
@@ -654,8 +654,8 @@ msgstr "URL du récit"
msgid "Description"
msgstr "Description"
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1142
#: ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1152
#: ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Author"
msgstr "Auteur"
@@ -958,7 +958,7 @@ msgid ""
"What sort of update to perform. May set default from plugin configuration."
msgstr "Quel type de mise à jour à effectuer. Peut être réglé par défaut dans la configuration du greffon."
#: dialogs.py:804 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: dialogs.py:804 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Comment"
msgstr "Commentaire"
@@ -1215,387 +1215,387 @@ msgstr "Prend des récits pour la mise à jour"
msgid "Update Existing List"
msgstr "Mettre à jour la liste existante"
#: ffdl_plugin.py:744
#: ffdl_plugin.py:745
msgid "Started fetching metadata for %s stories."
msgstr "A démarrré la recherche des métadonnées pour les récits %s."
#: ffdl_plugin.py:750
#: ffdl_plugin.py:751
msgid "No valid story URLs entered."
msgstr "Pas d'URLs de récit valides entrées."
#: ffdl_plugin.py:775 ffdl_plugin.py:781
#: ffdl_plugin.py:776 ffdl_plugin.py:782
msgid "Reject URL?"
msgstr "Rejeter l'URL ?"
#: ffdl_plugin.py:782 ffdl_plugin.py:800
#: ffdl_plugin.py:783 ffdl_plugin.py:801
msgid "<b>%s</b> is on your Reject URL list:"
msgstr "<b>%s</b> est sur votre liste d'URL Rejetées :"
#: ffdl_plugin.py:784
#: ffdl_plugin.py:785
msgid "Click '<b>Yes</b>' to Reject."
msgstr "Cliquer '<b>Oui</b>' pour rejeter."
#: ffdl_plugin.py:785 ffdl_plugin.py:881
#: ffdl_plugin.py:786 ffdl_plugin.py:890
msgid "Click '<b>No</b>' to download anyway."
msgstr "Cliquer '<b>Non</b>' pour télécharger quand même."
#: ffdl_plugin.py:787
#: ffdl_plugin.py:788
msgid "Story on Reject URLs list (%s)."
msgstr "Récit sur la liste des URLs rejetées (%s)"
#: ffdl_plugin.py:790
#: ffdl_plugin.py:791
msgid "Rejected"
msgstr "Rejeté"
#: ffdl_plugin.py:793
#: ffdl_plugin.py:794
msgid "Remove Reject URL?"
msgstr "Retirer l'URL rejetée ?"
#: ffdl_plugin.py:799
#: ffdl_plugin.py:800
msgid "Remove URL from Reject List?"
msgstr "Retirer l'URL de la Liste de Rejets ?"
#: ffdl_plugin.py:802
#: ffdl_plugin.py:803
msgid "Click '<b>Yes</b>' to remove it from the list,"
msgstr "Cliquer '<b>Oui</b>' pour retirer de la liste,"
#: ffdl_plugin.py:803
#: ffdl_plugin.py:804
msgid "Click '<b>No</b>' to leave it on the list."
msgstr "Cliquer '<b>Non</b>' pour laisser dans la liste."
#: ffdl_plugin.py:820
#: ffdl_plugin.py:821
msgid "Cannot update non-epub format."
msgstr "Ne peut mettre à jour un format non-ePub."
#: ffdl_plugin.py:857
#: ffdl_plugin.py:866
msgid "Are You an Adult?"
msgstr "Êtes-vous un adulte ?"
#: ffdl_plugin.py:858
#: ffdl_plugin.py:867
msgid ""
"%s requires that you be an adult. Please confirm you are an adult in your "
"locale:"
msgstr "%s requiert que vous soyez un adulte, Veuillez confirmer que vous êtes un adulte dans votre situation :"
#: ffdl_plugin.py:872
#: ffdl_plugin.py:881
msgid "Skip Story?"
msgstr "Ignorer le récit ?"
#: ffdl_plugin.py:878
#: ffdl_plugin.py:887
msgid "Skip Anthology Story?"
msgstr "Ignorer le récit d'Anthologie ?"
#: ffdl_plugin.py:879
#: ffdl_plugin.py:888
msgid ""
"\"<b>%s</b>\" is in series \"<b><a href=\"%s\">%s</a></b>\" that you have an"
" anthology book for."
msgstr "\"<b>%s</b>\" est dans la série \"<b><a href=\"%s\">%s</a></b>\" dont vous avez un livre d'anthologie."
#: ffdl_plugin.py:880
#: ffdl_plugin.py:889
msgid "Click '<b>Yes</b>' to Skip."
msgstr "Cliquer '<b>Oui</b>' pour ignorer."
#: ffdl_plugin.py:883
#: ffdl_plugin.py:892
msgid "Story in Series Anthology(%s)."
msgstr "Récit dans la série Anthologie(%s)."
#: ffdl_plugin.py:888
#: ffdl_plugin.py:897
msgid "Skipped"
msgstr "Ignoré"
#: ffdl_plugin.py:916
#: ffdl_plugin.py:925
msgid "Add"
msgstr "Ajouter"
#: ffdl_plugin.py:929
#: ffdl_plugin.py:938
msgid "Meta"
msgstr "Meta"
#: ffdl_plugin.py:962
#: ffdl_plugin.py:971
msgid "Skipping duplicate story."
msgstr "Ignore les récits en doublons."
#: ffdl_plugin.py:965
#: ffdl_plugin.py:974
msgid ""
"More than one identical book by Identifer URL or title/author(s)--can't tell"
" which book to update/overwrite."
msgstr "Plus d'un livre identique par Identifiant URL ou titre/auteur(s)--ne peut pas dire quel livre mettre à jour/écraser."
#: ffdl_plugin.py:976
#: ffdl_plugin.py:985
msgid "Update"
msgstr "Mettre à jour"
#: ffdl_plugin.py:984 ffdl_plugin.py:991
#: ffdl_plugin.py:993 ffdl_plugin.py:1000
msgid "Change Story URL?"
msgstr "Changer l'URL de Récit ?"
#: ffdl_plugin.py:992
#: ffdl_plugin.py:1001
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL:"
msgstr "<b>%s</b> par <b>%s</b> est déjà dans votre bibliothèque avec une source URL différente :"
#: ffdl_plugin.py:993
#: ffdl_plugin.py:1002
msgid "In library: <a href=\"%(liburl)s\">%(liburl)s</a>"
msgstr "Dans la bibliothèque : <a href=\"%(liburl)s\">%(liburl)s</a>"
#: ffdl_plugin.py:994 ffdl_plugin.py:1008
#: ffdl_plugin.py:1003 ffdl_plugin.py:1017
msgid "New URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
msgstr "Nouvelle URL : <a href=\"%(newurl)s\">%(newurl)s</a>"
#: ffdl_plugin.py:995
#: ffdl_plugin.py:1004
msgid "Click '<b>Yes</b>' to update/overwrite book with new URL."
msgstr "Cliquer '<b>Oui</b>' pour mettre à jour/écraser le livre avec la nouvelle URL."
#: ffdl_plugin.py:996
#: ffdl_plugin.py:1005
msgid "Click '<b>No</b>' to skip updating/overwriting this book."
msgstr "Cliquer '<b>Non</b>' pour ignorer la mise à jour/l'écrasement de ce livre."
#: ffdl_plugin.py:998 ffdl_plugin.py:1005
#: ffdl_plugin.py:1007 ffdl_plugin.py:1014
msgid "Download as New Book?"
msgstr "Télécharger comme un Nouveau Livre ?"
#: ffdl_plugin.py:1006
#: ffdl_plugin.py:1015
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL."
msgstr "<b>%s</b> par <b>%s</b> est déjà dans votre bibliothèque avec une source URL différente."
#: ffdl_plugin.py:1007
#: ffdl_plugin.py:1016
msgid ""
"You chose not to update the existing book. Do you want to add a new book "
"for this URL?"
msgstr "Vous choisissez de ne pas mettre à jour le livre existant. Voulez-vous ajouter un nouveau livre pour cette URL ?"
#: ffdl_plugin.py:1009
#: ffdl_plugin.py:1018
msgid "Click '<b>Yes</b>' to a new book with new URL."
msgstr "Cliquer '<b>Oui</b>' pour un nouveau livre avec une nouvelle URL."
#: ffdl_plugin.py:1010
#: ffdl_plugin.py:1019
msgid "Click '<b>No</b>' to skip URL."
msgstr "Cliquer '<b>Non</b>' pour ignorer l'URL."
#: ffdl_plugin.py:1016
#: ffdl_plugin.py:1025
msgid "Update declined by user due to differing story URL(%s)"
msgstr "Mise à jour déclinée par l'utilisateur en raison d'une URL(%s) de récit différente"
#: ffdl_plugin.py:1019
#: ffdl_plugin.py:1028
msgid "Different URL"
msgstr "URL différente"
#: ffdl_plugin.py:1024
#: ffdl_plugin.py:1033
msgid "Metadata collected."
msgstr "Métadonnées collectées"
#: ffdl_plugin.py:1040
#: ffdl_plugin.py:1049
msgid "Already contains %d chapters."
msgstr "Contient déjà des chapitres %d."
#: ffdl_plugin.py:1045 jobs.py:198
#: ffdl_plugin.py:1054 jobs.py:199
msgid ""
"Existing epub contains %d chapters, web site only has %d. Use Overwrite to "
"force update."
msgstr "L'ePub existant contient des chapitres %d, le site web a seulement %d. Utiliser Ecraser pour forcer la mise à jour."
#: ffdl_plugin.py:1047
#: ffdl_plugin.py:1056
msgid ""
"FFDL doesn't recognize chapters in existing epub, epub is probably from a "
"different source. Use Overwrite to force update."
msgstr "FFDL ne reconnait pas les chapitres dans l'ePub existant, l'ePub est probablement d'une source différente. Utiliser Ecraser pour forcer la mise à jour."
#: ffdl_plugin.py:1059
#: ffdl_plugin.py:1068
msgid "Not Overwriting, web site is not newer."
msgstr "Ne pas écraser, le site web n'est pas plus récent."
#: ffdl_plugin.py:1138
#: ffdl_plugin.py:1148
msgid "None of the <b>%d</b> URLs/stories given can be/need to be downloaded."
msgstr "Aucun des URLs/récits <b>%d</b> donnés ne peut être/n'a besoin d'être téléchargé."
#: ffdl_plugin.py:1139 ffdl_plugin.py:1302 ffdl_plugin.py:1332
#: ffdl_plugin.py:1149 ffdl_plugin.py:1320 ffdl_plugin.py:1350
msgid "See log for details."
msgstr "Voir le journal pour les détails."
#: ffdl_plugin.py:1140
#: ffdl_plugin.py:1150
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr "Procéder à la mise à jour de votre bibliothèque (Erreur de Colonne, si configuré) ?"
#: ffdl_plugin.py:1147 ffdl_plugin.py:1314
#: ffdl_plugin.py:1157 ffdl_plugin.py:1332
msgid "Bad"
msgstr "Mauvais(e)"
#: ffdl_plugin.py:1155
#: ffdl_plugin.py:1165
msgid "FFDL download ended"
msgstr "Téléchargement FFDL effectué"
#: ffdl_plugin.py:1155 ffdl_plugin.py:1357
#: ffdl_plugin.py:1165 ffdl_plugin.py:1375
msgid "FFDL log"
msgstr "Journal de FFDL"
#: ffdl_plugin.py:1163
#: ffdl_plugin.py:1181
msgid "Download FanFiction Book"
msgstr "Télécharger des livres FanFiction"
#: ffdl_plugin.py:1170
#: ffdl_plugin.py:1188
msgid "Starting %d FanFictionDownLoads"
msgstr "Démarrage FanFictionDownloads %d"
#: ffdl_plugin.py:1200
#: ffdl_plugin.py:1218
msgid "Story Details:"
msgstr "Détails du récit : "
#: ffdl_plugin.py:1203
#: ffdl_plugin.py:1221
msgid "Error Updating Metadata"
msgstr "Erreur de mise à jour des Métadonnées"
#: ffdl_plugin.py:1204
#: ffdl_plugin.py:1222
msgid ""
"An error has occurred while FFDL was updating calibre's metadata for <a "
"href='%s'>%s</a>."
msgstr "Une erreur s'est produite pendant que FFDL était occupé à mettre à jour les métadonnes de calibre pour <a href='%s'>%s</a>."
#: ffdl_plugin.py:1205
#: ffdl_plugin.py:1223
msgid "The ebook has been updated, but the metadata has not."
msgstr "Le livre a été mis à jour, mais les métadonnées ne l'ont pas été."
#: ffdl_plugin.py:1257
#: ffdl_plugin.py:1275
msgid "Finished Adding/Updating %d books."
msgstr "Ajout/mise à jour des livres %d terminé."
#: ffdl_plugin.py:1265
#: ffdl_plugin.py:1283
msgid "Starting auto conversion of %d books."
msgstr "Démarre l'auto conversion des livres %d."
#: ffdl_plugin.py:1286
#: ffdl_plugin.py:1304
msgid "No Good Stories for Anthology"
msgstr "Pas de bons récits pour l'Anthologie"
#: ffdl_plugin.py:1287
#: ffdl_plugin.py:1305
msgid ""
"No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr "Aucun bon récit/mise à jour n'a été téléchargé, la création/mise à jour de l'Anthologie a été abandonnée."
#: ffdl_plugin.py:1292 ffdl_plugin.py:1331
#: ffdl_plugin.py:1310 ffdl_plugin.py:1349
msgid "FFDL found <b>%s</b> good and <b>%s</b> bad updates."
msgstr "FFDL trouve la mise à jour <b>%s</b> bonne et <b>%s</b> mauvaise"
#: ffdl_plugin.py:1299
#: ffdl_plugin.py:1317
msgid ""
"Are you sure you want to continue with creating/updating this Anthology?"
msgstr "Etes-vous certain(e) de vouloir continuer avec la création/mise à jour de cette Anthologie ?"
#: ffdl_plugin.py:1300
#: ffdl_plugin.py:1318
msgid "Any updates that failed will <b>not</b> be included in the Anthology."
msgstr "Toute mise à jour qui échoue ne sera <b>pas</b> incluse dans l'Anthologie"
#: ffdl_plugin.py:1301
#: ffdl_plugin.py:1319
msgid "However, if there's an older version, it will still be included."
msgstr "Cependant, s'il y a une version plus ancienne, celle-ci sera quand même incluse."
#: ffdl_plugin.py:1304
#: ffdl_plugin.py:1322
msgid "Proceed with updating this anthology and your library?"
msgstr "Procéder à la mise à jour de cette anthologie et de votre librairie ?"
#: ffdl_plugin.py:1312
#: ffdl_plugin.py:1330
msgid "Good"
msgstr "Bon"
#: ffdl_plugin.py:1333
#: ffdl_plugin.py:1351
msgid "Proceed with updating your library?"
msgstr "Procéder à la mise à jour de votre bibliothèque ?"
#: ffdl_plugin.py:1357
#: ffdl_plugin.py:1375
msgid "FFDL download complete"
msgstr "Téléchargement FFDL effectué"
#: ffdl_plugin.py:1370
#: ffdl_plugin.py:1388
msgid "Merging %s books."
msgstr "Fusionnement des livres %s."
#: ffdl_plugin.py:1410
#: ffdl_plugin.py:1428
msgid "FFDL Adding/Updating books."
msgstr "FFDL ajoute/met à jour des livres."
#: ffdl_plugin.py:1417
#: ffdl_plugin.py:1435
msgid "Updating calibre for FanFiction stories..."
msgstr "Met à jour calibre depuis des récits FanFiction..."
#: ffdl_plugin.py:1418
#: ffdl_plugin.py:1436
msgid "Update calibre for FanFiction stories"
msgstr "Mettre à jour calibre depuis des récits FanFiction"
#: ffdl_plugin.py:1427
#: ffdl_plugin.py:1445
msgid "Adding/Updating %s BAD books."
msgstr "Ajoute/met à jour %s de MAUVAIS livres"
#: ffdl_plugin.py:1436
#: ffdl_plugin.py:1454
msgid "Updating calibre for BAD FanFiction stories..."
msgstr "Met à jour calibre depuis de MAUVAIS récits Fanfiction..."
#: ffdl_plugin.py:1437
#: ffdl_plugin.py:1455
msgid "Update calibre for BAD FanFiction stories"
msgstr "Mettre à jour calibre depuis de MAUVAIS récits FanFiction"
#: ffdl_plugin.py:1463
#: ffdl_plugin.py:1481
msgid "Adding format to book failed for some reason..."
msgstr "Le format ajouté au livre a échoué pour une raison quelconque..."
#: ffdl_plugin.py:1466
#: ffdl_plugin.py:1484
msgid "Error"
msgstr "Erreur"
#: ffdl_plugin.py:1739
#: ffdl_plugin.py:1757
msgid ""
"You configured FanFictionDownLoader to automatically update Reading Lists, "
"but you don't have the %s plugin installed anymore?"
msgstr "Vous avec configuré FanFictionDownloader pour mettre à jour automatiquent les Listes de Lecture, mais vous n'avez pas le greffon %s installé ?"
#: ffdl_plugin.py:1751
#: ffdl_plugin.py:1769
msgid ""
"You configured FanFictionDownLoader to automatically update \"To Read\" "
"Reading Lists, but you don't have any lists set?"
msgstr "Vous avec configuré FanFictionDownloader pour mettre à jour automatiquent les Listes de Lecture \"A lire\", mais vous n'avez paramétré aucunes listes ?"
#: ffdl_plugin.py:1761 ffdl_plugin.py:1779
#: ffdl_plugin.py:1779 ffdl_plugin.py:1797
msgid ""
"You configured FanFictionDownLoader to automatically update Reading List "
"'%s', but you don't have a list of that name?"
msgstr "Vous avec configuré FanFictionDownloader pour mettre à jour automatiquent la Liste de Lecture '%s', mais vous n'avez pas de liste à ce nom ?"
#: ffdl_plugin.py:1767
#: ffdl_plugin.py:1785
msgid ""
"You configured FanFictionDownLoader to automatically update \"Send to "
"Device\" Reading Lists, but you don't have any lists set?"
msgstr "Vous avec configuré FanFictionDownloader pour mette à jour automatiquement les Listes de Lecture \"Envoyé vers le dispositif\", mais vous n'avez paramétré aucune liste ?"
#: ffdl_plugin.py:1888
#: ffdl_plugin.py:1906
msgid "No story URL found."
msgstr "Pas d'URL de récit trouvée."
#: ffdl_plugin.py:1891
#: ffdl_plugin.py:1909
msgid "Not Found"
msgstr "Non trouvé(e)"
#: ffdl_plugin.py:1897
#: ffdl_plugin.py:1915
msgid "URL is not a valid story URL."
msgstr "L'URL n'est pas une URL de récit valide."
#: ffdl_plugin.py:1900
#: ffdl_plugin.py:1918
msgid "Bad URL"
msgstr "Mauvaise URL"
#: ffdl_plugin.py:2036 ffdl_plugin.py:2039
#: ffdl_plugin.py:2054 ffdl_plugin.py:2057
msgid "Anthology containing:"
msgstr "Anthologie contenant : "
#: ffdl_plugin.py:2037
#: ffdl_plugin.py:2055
msgid "%s by %s"
msgstr "%s par %s"
#: ffdl_plugin.py:2059
#: ffdl_plugin.py:2077
msgid " Anthology"
msgstr "Anthologie"
#: ffdl_plugin.py:2096
#: ffdl_plugin.py:2114
msgid "(was set, removed for security)"
msgstr "(a été paramétré, retiré par sécurité)"
@@ -1615,10 +1615,10 @@ msgstr "Échoué :"
msgid "Download started..."
msgstr "Téléchargement démarré..."
#: jobs.py:192
#: jobs.py:193
msgid "Already contains %d chapters. Reuse as is."
msgstr "Contient déjà des chapitres %d. Réutilisez tel quel."
#: jobs.py:209
#: jobs.py:210
msgid "Update %s completed, added %s chapters for %s total."
msgstr "Mise à jour %s terminée, ajouté %s chapitres pour %s au total."
+98 -98
View File
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2014-08-22 12:39+Central Daylight Time\n"
"POT-Creation-Date: 2014-09-09 15:54+Central Daylight Time\n"
"PO-Revision-Date: 2014-09-03 19:20+0000\n"
"Last-Translator: Paulo_Neto <layoutbr@lexxa.com.br>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/calibre-plugins/language/pt_BR/)\n"
@@ -573,7 +573,7 @@ msgstr "Gênero"
msgid "Language"
msgstr "Idioma"
#: config.py:928 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:928 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Status"
msgstr "Estado"
@@ -601,7 +601,7 @@ msgstr "Relacionamentos"
msgid "Published"
msgstr "Publicado"
#: config.py:935 ffdl_plugin.py:1419 ffdl_plugin.py:1438
#: config.py:935 ffdl_plugin.py:1437 ffdl_plugin.py:1456
msgid "Updated"
msgstr "Atualizado"
@@ -642,7 +642,7 @@ msgid "Extra Tags"
msgstr "Etiquetas Extras"
#: config.py:945 config.py:1057 dialogs.py:804 dialogs.py:900
#: ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Title"
msgstr "Título"
@@ -654,8 +654,8 @@ msgstr "URL da História"
msgid "Description"
msgstr "Descrição"
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1142
#: ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: config.py:948 dialogs.py:804 dialogs.py:900 ffdl_plugin.py:1152
#: ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Author"
msgstr "Autor"
@@ -958,7 +958,7 @@ msgid ""
"What sort of update to perform. May set default from plugin configuration."
msgstr "Que tipo de atualização executar. Pode-se definir o padrão da configuração do plugin."
#: dialogs.py:804 ffdl_plugin.py:1142 ffdl_plugin.py:1306 ffdl_plugin.py:1336
#: dialogs.py:804 ffdl_plugin.py:1152 ffdl_plugin.py:1324 ffdl_plugin.py:1354
msgid "Comment"
msgstr "Comentários"
@@ -1215,387 +1215,387 @@ msgstr "Obter histórias para atualização"
msgid "Update Existing List"
msgstr "Atualizar lista existente"
#: ffdl_plugin.py:744
#: ffdl_plugin.py:745
msgid "Started fetching metadata for %s stories."
msgstr "Começou a busca de metadados para %s histórias."
#: ffdl_plugin.py:750
#: ffdl_plugin.py:751
msgid "No valid story URLs entered."
msgstr "Nenhuma história válida nas URLs inseridas."
#: ffdl_plugin.py:775 ffdl_plugin.py:781
#: ffdl_plugin.py:776 ffdl_plugin.py:782
msgid "Reject URL?"
msgstr "Rejeitar URL?"
#: ffdl_plugin.py:782 ffdl_plugin.py:800
#: ffdl_plugin.py:783 ffdl_plugin.py:801
msgid "<b>%s</b> is on your Reject URL list:"
msgstr "<b>%s</b> está em sua lista de URLs rejeitadas:"
#: ffdl_plugin.py:784
#: ffdl_plugin.py:785
msgid "Click '<b>Yes</b>' to Reject."
msgstr "Clique em '<b>Sim</b>' para rejeitar."
#: ffdl_plugin.py:785 ffdl_plugin.py:881
#: ffdl_plugin.py:786 ffdl_plugin.py:890
msgid "Click '<b>No</b>' to download anyway."
msgstr "Clique em '<b>Não</b>' para transferir de qualquer maneira."
#: ffdl_plugin.py:787
#: ffdl_plugin.py:788
msgid "Story on Reject URLs list (%s)."
msgstr "História na lista de URLs rejeitadas (%s)."
#: ffdl_plugin.py:790
#: ffdl_plugin.py:791
msgid "Rejected"
msgstr "Rejeitado"
#: ffdl_plugin.py:793
#: ffdl_plugin.py:794
msgid "Remove Reject URL?"
msgstr "Remover URL rejeitada?"
#: ffdl_plugin.py:799
#: ffdl_plugin.py:800
msgid "Remove URL from Reject List?"
msgstr "Remover URL da lista de rejeição?"
#: ffdl_plugin.py:802
#: ffdl_plugin.py:803
msgid "Click '<b>Yes</b>' to remove it from the list,"
msgstr "Clique em '<b>Sim</b>' para removê-la da lista."
#: ffdl_plugin.py:803
#: ffdl_plugin.py:804
msgid "Click '<b>No</b>' to leave it on the list."
msgstr "Clique em '<b>Não</b>' para mantê-la na lista."
#: ffdl_plugin.py:820
#: ffdl_plugin.py:821
msgid "Cannot update non-epub format."
msgstr "Não é possível atualizar formatos que não sejam epub."
#: ffdl_plugin.py:857
#: ffdl_plugin.py:866
msgid "Are You an Adult?"
msgstr "Você é adulto?"
#: ffdl_plugin.py:858
#: ffdl_plugin.py:867
msgid ""
"%s requires that you be an adult. Please confirm you are an adult in your "
"locale:"
msgstr "%s requer que você seja um adulto. Confirme que você é um adulto em sua localidade:"
#: ffdl_plugin.py:872
#: ffdl_plugin.py:881
msgid "Skip Story?"
msgstr "Ignorar história?"
#: ffdl_plugin.py:878
#: ffdl_plugin.py:887
msgid "Skip Anthology Story?"
msgstr "Ignorar antologia da história?"
#: ffdl_plugin.py:879
#: ffdl_plugin.py:888
msgid ""
"\"<b>%s</b>\" is in series \"<b><a href=\"%s\">%s</a></b>\" that you have an"
" anthology book for."
msgstr "\"<b>%s</b>\" está na série \"<b><a href=\"%s\">%s</a></b>\" que você tem um livro de antologia."
#: ffdl_plugin.py:880
#: ffdl_plugin.py:889
msgid "Click '<b>Yes</b>' to Skip."
msgstr "Clique em '<b>Sim</b>' para ignorar."
#: ffdl_plugin.py:883
#: ffdl_plugin.py:892
msgid "Story in Series Anthology(%s)."
msgstr "História na série de antologia (%s)."
#: ffdl_plugin.py:888
#: ffdl_plugin.py:897
msgid "Skipped"
msgstr "Ignorado"
#: ffdl_plugin.py:916
#: ffdl_plugin.py:925
msgid "Add"
msgstr "Adicionar"
#: ffdl_plugin.py:929
#: ffdl_plugin.py:938
msgid "Meta"
msgstr "Meta"
#: ffdl_plugin.py:962
#: ffdl_plugin.py:971
msgid "Skipping duplicate story."
msgstr "Ignorando história duplicada."
#: ffdl_plugin.py:965
#: ffdl_plugin.py:974
msgid ""
"More than one identical book by Identifer URL or title/author(s)--can't tell"
" which book to update/overwrite."
msgstr "Mais do que um livro idêntico por identificador de URL ou título/autor(es)--não pode dizer qual livro atualizar/substituir."
#: ffdl_plugin.py:976
#: ffdl_plugin.py:985
msgid "Update"
msgstr "Atualizar"
#: ffdl_plugin.py:984 ffdl_plugin.py:991
#: ffdl_plugin.py:993 ffdl_plugin.py:1000
msgid "Change Story URL?"
msgstr "Alterar URL de história?"
#: ffdl_plugin.py:992
#: ffdl_plugin.py:1001
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL:"
msgstr "<b>%s</b> por <b>%s</b> já está na sua biblioteca com uma URL de origem diferente:"
#: ffdl_plugin.py:993
#: ffdl_plugin.py:1002
msgid "In library: <a href=\"%(liburl)s\">%(liburl)s</a>"
msgstr "Na biblioteca: <a href=\"%(liburl)s\">%(liburl)s</a>"
#: ffdl_plugin.py:994 ffdl_plugin.py:1008
#: ffdl_plugin.py:1003 ffdl_plugin.py:1017
msgid "New URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
msgstr "Nova URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
#: ffdl_plugin.py:995
#: ffdl_plugin.py:1004
msgid "Click '<b>Yes</b>' to update/overwrite book with new URL."
msgstr "Clique em '<b>Sim</b>' para atualizar/substituir livro com a nova URL."
#: ffdl_plugin.py:996
#: ffdl_plugin.py:1005
msgid "Click '<b>No</b>' to skip updating/overwriting this book."
msgstr "Clique em '<b>Não</b>' para ignorar a atualização/substituição desse livro."
#: ffdl_plugin.py:998 ffdl_plugin.py:1005
#: ffdl_plugin.py:1007 ffdl_plugin.py:1014
msgid "Download as New Book?"
msgstr "Transferir como novo livro?"
#: ffdl_plugin.py:1006
#: ffdl_plugin.py:1015
msgid ""
"<b>%s</b> by <b>%s</b> is already in your library with a different source "
"URL."
msgstr "<b>%s</b> por <b>%s</b> já está na sua biblioteca com uma URL de origem diferente."
#: ffdl_plugin.py:1007
#: ffdl_plugin.py:1016
msgid ""
"You chose not to update the existing book. Do you want to add a new book "
"for this URL?"
msgstr "Você optou por não atualizar o livro existente. Você deseja adicionar um novo livro para esta URL?"
#: ffdl_plugin.py:1009
#: ffdl_plugin.py:1018
msgid "Click '<b>Yes</b>' to a new book with new URL."
msgstr "Clique em '<b>Sim</b>' para um novo livro com nova URL."
#: ffdl_plugin.py:1010
#: ffdl_plugin.py:1019
msgid "Click '<b>No</b>' to skip URL."
msgstr "Clique em '<b>Não</b>' para ignorar a URL."
#: ffdl_plugin.py:1016
#: ffdl_plugin.py:1025
msgid "Update declined by user due to differing story URL(%s)"
msgstr "Atualização recusada pelo usuário devido à diferentes URL(%s) de história"
#: ffdl_plugin.py:1019
#: ffdl_plugin.py:1028
msgid "Different URL"
msgstr "URL Diferente"
#: ffdl_plugin.py:1024
#: ffdl_plugin.py:1033
msgid "Metadata collected."
msgstr "Metadados recolhidos."
#: ffdl_plugin.py:1040
#: ffdl_plugin.py:1049
msgid "Already contains %d chapters."
msgstr "Já contém %s capítulos."
#: ffdl_plugin.py:1045 jobs.py:198
#: ffdl_plugin.py:1054 jobs.py:199
msgid ""
"Existing epub contains %d chapters, web site only has %d. Use Overwrite to "
"force update."
msgstr "O epub existente contém %d capítulos, o site tem apenas %d. Use Substituir para forçar uma atualização."
#: ffdl_plugin.py:1047
#: ffdl_plugin.py:1056
msgid ""
"FFDL doesn't recognize chapters in existing epub, epub is probably from a "
"different source. Use Overwrite to force update."
msgstr "O FFDL não reconhece capítulos em epub existente, o epub é, provavelmente, de uma fonte diferente. Use Substituir para forçar uma atualização."
#: ffdl_plugin.py:1059
#: ffdl_plugin.py:1068
msgid "Not Overwriting, web site is not newer."
msgstr "Nenhuma substituição, o site não é mais novo."
#: ffdl_plugin.py:1138
#: ffdl_plugin.py:1148
msgid "None of the <b>%d</b> URLs/stories given can be/need to be downloaded."
msgstr "Nenhuma das <b>%d</b> URLs/histórias fornecidas podem ser/precisam ser transferidas."
#: ffdl_plugin.py:1139 ffdl_plugin.py:1302 ffdl_plugin.py:1332
#: ffdl_plugin.py:1149 ffdl_plugin.py:1320 ffdl_plugin.py:1350
msgid "See log for details."
msgstr "Veja o registro para detalhes."
#: ffdl_plugin.py:1140
#: ffdl_plugin.py:1150
msgid "Proceed with updating your library(Error Column, if configured)?"
msgstr "Prosseguir com a atualização sua biblioteca (Coluna de erro, se configurado)?"
#: ffdl_plugin.py:1147 ffdl_plugin.py:1314
#: ffdl_plugin.py:1157 ffdl_plugin.py:1332
msgid "Bad"
msgstr "Ruim"
#: ffdl_plugin.py:1155
#: ffdl_plugin.py:1165
msgid "FFDL download ended"
msgstr "O FFDL finalizou a transferência"
#: ffdl_plugin.py:1155 ffdl_plugin.py:1357
#: ffdl_plugin.py:1165 ffdl_plugin.py:1375
msgid "FFDL log"
msgstr "Registro do FFDL"
#: ffdl_plugin.py:1163
#: ffdl_plugin.py:1181
msgid "Download FanFiction Book"
msgstr "Transferir Livro de Ficção"
#: ffdl_plugin.py:1170
#: ffdl_plugin.py:1188
msgid "Starting %d FanFictionDownLoads"
msgstr "Começando %d FanFictionDownLoads"
#: ffdl_plugin.py:1200
#: ffdl_plugin.py:1218
msgid "Story Details:"
msgstr "Detalhes da história:"
#: ffdl_plugin.py:1203
#: ffdl_plugin.py:1221
msgid "Error Updating Metadata"
msgstr "Erro ao atualizar metadados"
#: ffdl_plugin.py:1204
#: ffdl_plugin.py:1222
msgid ""
"An error has occurred while FFDL was updating calibre's metadata for <a "
"href='%s'>%s</a>."
msgstr "Ocorreu um erro enquanto o FFDL estava atualizando os metadados do calibre de <a href='%s'>%s</a>."
#: ffdl_plugin.py:1205
#: ffdl_plugin.py:1223
msgid "The ebook has been updated, but the metadata has not."
msgstr "O ebook foi atualizado, mas os metadados não."
#: ffdl_plugin.py:1257
#: ffdl_plugin.py:1275
msgid "Finished Adding/Updating %d books."
msgstr "O adicionamento/atualização de %s livros está concluído."
#: ffdl_plugin.py:1265
#: ffdl_plugin.py:1283
msgid "Starting auto conversion of %d books."
msgstr "Começando a conversão automática de %s livros."
#: ffdl_plugin.py:1286
#: ffdl_plugin.py:1304
msgid "No Good Stories for Anthology"
msgstr "Nenhuma BOA história para antologia"
#: ffdl_plugin.py:1287
#: ffdl_plugin.py:1305
msgid ""
"No good stories/updates where downloaded, Anthology creation/update aborted."
msgstr "Não há boas histórias/atualizações de onde transferir, a criação/atualização de antologia foi abortada."
#: ffdl_plugin.py:1292 ffdl_plugin.py:1331
#: ffdl_plugin.py:1310 ffdl_plugin.py:1349
msgid "FFDL found <b>%s</b> good and <b>%s</b> bad updates."
msgstr "O FFDL encontrou <b>%s</b> atualizações boas e <b>%s</b> ruins."
#: ffdl_plugin.py:1299
#: ffdl_plugin.py:1317
msgid ""
"Are you sure you want to continue with creating/updating this Anthology?"
msgstr "Você deseja realmente continuar com a criação/atualização desta antologia?"
#: ffdl_plugin.py:1300
#: ffdl_plugin.py:1318
msgid "Any updates that failed will <b>not</b> be included in the Anthology."
msgstr "Todas as atualizações que falharam <b>não</b> vão ser incluídas na antologia."
#: ffdl_plugin.py:1301
#: ffdl_plugin.py:1319
msgid "However, if there's an older version, it will still be included."
msgstr "No entanto, se houver uma versão mais antiga, ela será incluída."
#: ffdl_plugin.py:1304
#: ffdl_plugin.py:1322
msgid "Proceed with updating this anthology and your library?"
msgstr "Prosseguir com a atualização desta antologia e sua biblioteca?"
#: ffdl_plugin.py:1312
#: ffdl_plugin.py:1330
msgid "Good"
msgstr "BOA"
#: ffdl_plugin.py:1333
#: ffdl_plugin.py:1351
msgid "Proceed with updating your library?"
msgstr "Prosseguir com a atualização de sua biblioteca?"
#: ffdl_plugin.py:1357
#: ffdl_plugin.py:1375
msgid "FFDL download complete"
msgstr "Transferência concluída do FFDL"
#: ffdl_plugin.py:1370
#: ffdl_plugin.py:1388
msgid "Merging %s books."
msgstr "Mesclando %s livros."
#: ffdl_plugin.py:1410
#: ffdl_plugin.py:1428
msgid "FFDL Adding/Updating books."
msgstr "Adicionar/atualizar livros do FFDL."
#: ffdl_plugin.py:1417
#: ffdl_plugin.py:1435
msgid "Updating calibre for FanFiction stories..."
msgstr "Atualizando o calibre de histórias de ficção..."
#: ffdl_plugin.py:1418
#: ffdl_plugin.py:1436
msgid "Update calibre for FanFiction stories"
msgstr "Atualizar o calibre de histórias de ficção"
#: ffdl_plugin.py:1427
#: ffdl_plugin.py:1445
msgid "Adding/Updating %s BAD books."
msgstr "Adicionando/atualizando %s livros RUINS."
#: ffdl_plugin.py:1436
#: ffdl_plugin.py:1454
msgid "Updating calibre for BAD FanFiction stories..."
msgstr "Atualizando o calibre de histórias RUINS de ficção..."
#: ffdl_plugin.py:1437
#: ffdl_plugin.py:1455
msgid "Update calibre for BAD FanFiction stories"
msgstr "Atualizar o calibre de histórias RUINS de ficção"
#: ffdl_plugin.py:1463
#: ffdl_plugin.py:1481
msgid "Adding format to book failed for some reason..."
msgstr "Falha ao adicionar formato por algum motivo..."
#: ffdl_plugin.py:1466
#: ffdl_plugin.py:1484
msgid "Error"
msgstr "Erro"
#: ffdl_plugin.py:1739
#: ffdl_plugin.py:1757
msgid ""
"You configured FanFictionDownLoader to automatically update Reading Lists, "
"but you don't have the %s plugin installed anymore?"
msgstr "Você configurou o FanFictionDownLoader para atualizar automaticamente listas de leitura, mas você não tem mais o plugin %s instalado?"
#: ffdl_plugin.py:1751
#: ffdl_plugin.py:1769
msgid ""
"You configured FanFictionDownLoader to automatically update \"To Read\" "
"Reading Lists, but you don't have any lists set?"
msgstr "Você configurou o FanFictionDownLoader para atualizar automaticamente listas de leitura \"Para Ler\", mas você não tem nenhuma lista definida?"
#: ffdl_plugin.py:1761 ffdl_plugin.py:1779
#: ffdl_plugin.py:1779 ffdl_plugin.py:1797
msgid ""
"You configured FanFictionDownLoader to automatically update Reading List "
"'%s', but you don't have a list of that name?"
msgstr "Você configurou o FanFictionDownLoader para atualizar automaticamente a Lista de Leitura '%s', mas você não tem uma lista com esse nome?"
#: ffdl_plugin.py:1767
#: ffdl_plugin.py:1785
msgid ""
"You configured FanFictionDownLoader to automatically update \"Send to "
"Device\" Reading Lists, but you don't have any lists set?"
msgstr "Você configurou o FanFictionDownLoader para atualizar automaticamente listas de leitura \"Enviar para Dispositivo\", mas você não tem nenhuma lista definida?"
#: ffdl_plugin.py:1888
#: ffdl_plugin.py:1906
msgid "No story URL found."
msgstr "Nenhuma URL de história encontrada."
#: ffdl_plugin.py:1891
#: ffdl_plugin.py:1909
msgid "Not Found"
msgstr "Não encontrado"
#: ffdl_plugin.py:1897
#: ffdl_plugin.py:1915
msgid "URL is not a valid story URL."
msgstr "A URL não é uma URL válida de história."
#: ffdl_plugin.py:1900
#: ffdl_plugin.py:1918
msgid "Bad URL"
msgstr "URL ruim:"
#: ffdl_plugin.py:2036 ffdl_plugin.py:2039
#: ffdl_plugin.py:2054 ffdl_plugin.py:2057
msgid "Anthology containing:"
msgstr "Antologia contendo:"
#: ffdl_plugin.py:2037
#: ffdl_plugin.py:2055
msgid "%s by %s"
msgstr "%s por %s"
#: ffdl_plugin.py:2059
#: ffdl_plugin.py:2077
msgid " Anthology"
msgstr "Antologia"
#: ffdl_plugin.py:2096
#: ffdl_plugin.py:2114
msgid "(was set, removed for security)"
msgstr "(foi definido, removido para segurança)"
@@ -1615,10 +1615,10 @@ msgstr "Mal sucedido:"
msgid "Download started..."
msgstr "Transferência iniciada..."
#: jobs.py:192
#: jobs.py:193
msgid "Already contains %d chapters. Reuse as is."
msgstr "Já contém %s capítulos. Reutilizar como está."
#: jobs.py:209
#: jobs.py:210
msgid "Update %s completed, added %s chapters for %s total."
msgstr "Atualização %s concluída, adicionados %s capítulos de um total de %s."
+62
View File
@@ -712,6 +712,20 @@ extracategories:Castle
## cover image. This lets you exclude them.
cover_exclusion_regexp:/images/.*?ribbon.gif
[csi-forensics.com]
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
extra_valid_entries: readings
readings_label: Readings
[dark-solace.org]
## Site dedicated to these categories/characters/ships
## Some sites require login (or login for some rated stories) The
@@ -1031,6 +1045,18 @@ extra_valid_entries:eroticatags
eroticatags_label:Erotica Tags
extra_titlepage_entries: eroticatags
[lotrfanfiction.com]
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
extra_valid_entries: readings
readings_label: Readings
## Site dedicated to these categories/characters/ships
extracategories:Lord of the Rings
[lumos.sycophanthex.com]
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content. In commandline version,
@@ -1153,6 +1179,24 @@ extracategories:My Little Pony: Friendship is Magic
## Site dedicated to these categories/characters/ships
extracategories:The Pretender
[samandjack.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
## commandline version, this should go in your personal.ini, not
## defaults.ini.
#username:YourName
#password:yourpassword
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Site dedicated to these categories/characters/ships
extracategories:Stargate: SG-1
extracharacters:Sam,Jack
extraships:Sam/Jack
[samdean.archive.nu]
## Site dedicated to these categories/characters/ships
extracategories:Supernatural
@@ -1181,6 +1225,24 @@ extracategories:Harry Potter
## this should go in your personal.ini, not defaults.ini.
#is_adult:true
[sheppardweir.com]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
## commandline version, this should go in your personal.ini, not
## defaults.ini.
#username:YourName
#password:yourpassword
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Site dedicated to these categories/characters/ships
extracategories:Stargate: Atlantis
extracharacters:John Sheppard,Elizabeth Weir
extraships:John Sheppard/Elizabeth Weir
[spikeluver.com]
## Extra metadata that this adapter knows about. See [dramione.org]
## for examples of how to use them.
Binary file not shown.
+3 -1
View File
@@ -135,7 +135,9 @@ import adapter_tolkienfanfiction
import adapter_themaplebookshelf
import adapter_fannation
import adapter_sheppardweircom
import adapter_samandjacknet
import adapter_csiforensicscom
import adapter_lotrfanfictioncom
## This bit of complexity allows adapters to be added by just adding
## importing. It eliminates the long if/else clauses we used to need
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Copyright 2014 Fanficdownloader team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Software: eFiction
import re
from base_efiction_adapter import BaseEfictionAdapter
class CSIForensicsComAdapter(BaseEfictionAdapter):
@staticmethod
def getSiteDomain():
return 'csi-forensics.com'
@classmethod
def getPathToArchive(self):
return ''
@classmethod
def getSiteAbbrev(self):
return 'csiforensics'
@classmethod
def getDateFormat(self):
return "%d %b %Y"
def handleMetadataPair(self, key, value):
if key == 'Warnings':
for val in re.split("\s*,\s*", value):
if value == 'None':
return
else:
self.story.addToList('warnings', val)
elif 'Categories' in key:
for val in re.split("\s*>\s*", value):
self.story.addToList('category', val)
else:
super(CSIForensicsComAdapter, self).handleMetadataPair(key, value)
def getClass():
return CSIForensicsComAdapter
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Copyright 2014 Fanficdownloader team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Software: eFiction
from base_efiction_adapter import BaseEfictionAdapter
class TheLOTRFanFictionSiteAdapter(BaseEfictionAdapter):
@staticmethod
def getSiteDomain():
return 'lotrfanfiction.com'
@classmethod
def getSiteAbbrev(seluuf):
return 'lotrff'
@classmethod
def getDateFormat(self):
return "%d/%m/%y"
def getClass():
return TheLOTRFanFictionSiteAdapter
@@ -0,0 +1,342 @@
# -*- coding: utf-8 -*-
# Copyright 2011 Fanficdownloader team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import time
import logging
logger = logging.getLogger(__name__)
import re
import urllib2
from .. import BeautifulSoup as bs
from ..htmlcleanup import stripHTML
from .. import exceptions as exceptions
from base_adapter import BaseSiteAdapter, makeDate
# By virtue of being recent and requiring both is_adult and user/pass,
# adapter_fanficcastletvnet.py is the best choice for learning to
# write adapters--especially for sites that use the eFiction system.
# Most sites that have ".../viewstory.php?sid=123" in the story URL
# are eFiction.
# For non-eFiction sites, it can be considerably more complex, but
# this is still a good starting point.
# In general an 'adapter' needs to do these five things:
# - 'Register' correctly with the downloader
# - Site Login (if needed)
# - 'Are you adult?' check (if needed--some do one, some the other, some both)
# - Grab the chapter list
# - Grab the story meta-data (some (non-eFiction) adapters have to get it from the author page)
# - Grab the chapter texts
# Search for XXX comments--that's where things are most likely to need changing.
# This function is called by the downloader in all adapter_*.py files
# in this dir to register the adapter class. So it needs to be
# updated to reflect the class below it. That, plus getSiteDomain()
# take care of 'Registering'.
def getClass():
return SamAndJackNetAdapter # XXX
# Class name has to be unique. Our convention is camel case the
# sitename with Adapter at the end. www is skipped.
class SamAndJackNetAdapter(BaseSiteAdapter): # XXX
def __init__(self, config, url):
BaseSiteAdapter.__init__(self, config, url)
self.decode = ["Windows-1252",
"utf8"] # 1252 is a superset of iso-8859-1.
# Most sites that claim to be
# iso-8859-1 (and some that claim to be
# utf8) are really windows-1252.
self.username = "NoneGiven" # if left empty, site doesn't return any message at all.
self.password = ""
self.is_adult=False
# get storyId from url--url validation guarantees query is only sid=1234
self.story.setMetadata('storyId',self.parsedUrl.query.split('=',)[1])
# normalized story URL.
# XXX Most sites don't have the /fanfic part. Replace all to remove it usually.
self._setURL('http://' + self.getSiteDomain() + '/fanfics/viewstory.php?sid='+self.story.getMetadata('storyId'))
# Each adapter needs to have a unique site abbreviation.
self.story.setMetadata('siteabbrev','sjn') # XXX
# The date format will vary from site to site.
# http://docs.python.org/library/datetime.html#strftime-strptime-behavior
self.dateformat = "%b %d, %Y" # XXX
@staticmethod # must be @staticmethod, don't remove it.
def getSiteDomain():
# The site domain. Does have www here, if it uses it.
return 'samandjack.net' # XXX
@classmethod
def getSiteExampleURLs(self):
return "http://"+self.getSiteDomain()+"/fanfics/viewstory.php?sid=1234"
def getSiteURLPattern(self):
return re.escape("http://"+self.getSiteDomain()+"/fanfics/viewstory.php?sid=")+r"\d+$"
## Login seems to be reasonably standard across eFiction sites.
def needToLoginCheck(self, data):
if 'Registered Users Only' in data \
or 'There is no such account on our website' in data \
or "That password doesn't match the one in our database" in data:
return True
else:
return False
def performLogin(self, url):
params = {}
if self.password:
params['penname'] = self.username
params['password'] = self.password
else:
params['penname'] = self.getConfig("username")
params['password'] = self.getConfig("password")
params['cookiecheck'] = '1'
params['submit'] = 'Submit'
loginUrl = 'http://' + self.getSiteDomain() + '/fanfics/user.php?action=login'
logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl,
params['penname']))
d = self._fetchUrl(loginUrl, params)
if "Member Account" not in d : #Member Account
logger.info("Failed to login to URL %s as %s" % (loginUrl,
params['penname']))
raise exceptions.FailedToLogin(url,params['penname'])
return False
else:
return True
## Getting the chapter list and the meta data, plus 'is adult' checking.
def extractChapterUrlsAndMetadata(self):
if self.is_adult or self.getConfig("is_adult"):
# Weirdly, different sites use different warning numbers.
# If the title search below fails, there's a good chance
# you need a different number. print data at that point
# and see what the 'click here to continue' url says.
# Furthermore, there's a couple sites now with more than
# one warning level for different ratings. And they're
# fussy about it. midnightwhispers has three: 10, 3 & 5.
# we'll try 5 first.
addurl = "&ageconsent=ok&warning=5" # XXX
else:
addurl=""
# index=1 makes sure we see the story chapter index. Some
# sites skip that for one-chapter stories.
url = self.url+'&index=1'+addurl
logger.debug("URL: "+url)
try:
data = self._fetchUrl(url)
except urllib2.HTTPError, e:
if e.code == 404:
raise exceptions.StoryDoesNotExist(self.url)
else:
raise e
# The actual text that is used to announce you need to be an
# adult varies from site to site. Again, print data before
# the title search to troubleshoot.
# Since the warning text can change by warning level, let's
# look for the warning pass url. nfacommunity uses
# &amp;warning= -- actually, so do other sites. Must be an
# eFiction book.
# viewstory.php?sid=1882&amp;warning=4
# viewstory.php?sid=1654&amp;ageconsent=ok&amp;warning=5
#print data
#m = re.search(r"'viewstory.php\?sid=1882(&amp;warning=4)'",data)
m = re.search(r"'viewstory.php\?sid=\d+((?:&amp;ageconsent=ok)?&amp;warning=\d+)'",data)
if m != None:
if self.is_adult or self.getConfig("is_adult"):
# We tried the default and still got a warning, so
# let's pull the warning number from the 'continue'
# link and reload data.
addurl = m.group(1)
# correct stupid &amp; error in url.
addurl = addurl.replace("&amp;","&")
url = self.url+'&index=1'+addurl
logger.debug("URL 2nd try: "+url)
try:
data = self._fetchUrl(url)
except urllib2.HTTPError, e:
if e.code == 404:
raise exceptions.StoryDoesNotExist(self.url)
else:
raise e
else:
raise exceptions.AdultCheckRequired(self.url)
if "Access denied. This story has not been validated by the adminstrators of this site." in data:
raise exceptions.FailedToDownload(self.getSiteDomain() +" says: Access denied. This story has not been validated by the adminstrators of this site.")
# use BeautifulSoup HTML parser to make everything easier to find.
soup = bs.BeautifulSoup(data)
# print data
# Now go hunting for all the meta data and the chapter list.
pagetitle = soup.find('div',{'id':'pagetitle'})
## Title
a = pagetitle.find('a', href=re.compile(r'viewstory.php\?sid='+self.story.getMetadata('storyId')+"$"))
self.story.setMetadata('title',stripHTML(a))
# Find authorid and URL from... author url.
# (fetch multiple authors)
alist = soup.findAll('a', href=re.compile(r"viewuser.php\?uid=\d+"))
for a in alist:
self.story.addToList('authorId',a['href'].split('=')[1])
self.story.addToList('authorUrl','http://'+self.host+'/fanfics/'+a['href'])
self.story.addToList('author',a.string)
# Reviews
reviewdata = soup.find('div', {'id' : 'sort'})
a = reviewdata.findAll('a', href=re.compile(r'reviews.php\?type=ST&(amp;)?item='+self.story.getMetadata('storyId')+"$"))[1] # second one.
self.story.setMetadata('reviews',stripHTML(a))
# Find the chapters:
for chapter in soup.findAll('a', href=re.compile(r'viewstory.php\?sid='+self.story.getMetadata('storyId')+"&chapter=\d+$")):
# just in case there's tags, like <i> in chapter titles.
self.chapterUrls.append((stripHTML(chapter),'http://'+self.host+'/fanfics/'+chapter['href']+addurl))
self.story.setMetadata('numChapters',len(self.chapterUrls))
# eFiction sites don't help us out a lot with their meta data
# formating, so it's a little ugly.
# utility method
def defaultGetattr(d,k):
try:
return d[k]
except:
return ""
# <span class="label">Rated:</span> NC-17<br /> etc
labels = soup.findAll('span',{'class':'label'})
for labelspan in labels:
value = labelspan.nextSibling
label = labelspan.string
if 'Summary' in label:
self.setDescription(url,value)
if 'Rated' in label:
self.story.setMetadata('rating', value)
if 'Word count' in label:
self.story.setMetadata('numWords', value)
if 'Categories' in label:
cats = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=categories'))
catstext = [cat.string for cat in cats]
for cat in catstext:
self.story.addToList('category',cat.string)
if 'Characters' in label:
chars = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=characters'))
charstext = [char.string for char in chars]
for char in charstext:
self.story.addToList('characters',char.string)
## Not all sites use Genre, but there's no harm to
## leaving it in. Check to make sure the type_id number
## is correct, though--it's site specific.
if 'Genre' in label:
genres = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=class&type_id=1')) # XXX
genrestext = [genre.string for genre in genres]
self.genre = ', '.join(genrestext)
for genre in genrestext:
self.story.addToList('genre',genre.string)
## Not all sites use Warnings, but there's no harm to
## leaving it in. Check to make sure the type_id number
## is correct, though--it's site specific.
if 'Warnings' in label:
warnings = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=class&type_id=2')) # XXX
warningstext = [warning.string for warning in warnings]
self.warning = ', '.join(warningstext)
for warning in warningstext:
self.story.addToList('warnings',warning.string)
if 'Completed' in label:
if 'Yes' in value:
self.story.setMetadata('status', 'Completed')
else:
self.story.setMetadata('status', 'In-Progress')
if 'Published' in label:
value=value.replace(' | ','')
self.story.setMetadata('datePublished', makeDate(stripHTML(value), self.dateformat))
if 'Updated' in label:
# there's a stray [ at the end.
#value = value[0:-1]
self.story.setMetadata('dateUpdated', makeDate(stripHTML(value), self.dateformat))
try:
# Find Series name from series URL.
a = soup.find('a', href=re.compile(r"viewseries.php\?seriesid=\d+"))
series_name = a.string
series_url = 'http://'+self.host+'/fanfics/'+a['href']
# use BeautifulSoup HTML parser to make everything easier to find.
seriessoup = bs.BeautifulSoup(self._fetchUrl(series_url))
storyas = seriessoup.findAll('a', href=re.compile(r'^viewstory.php\?sid=\d+$'))
i=1
for a in storyas:
if a['href'] == ('viewstory.php?sid='+self.story.getMetadata('storyId')):
self.setSeries(series_name, i)
self.story.setMetadata('seriesUrl',series_url)
break
i+=1
except:
# I find it hard to care if the series parsing fails
pass
# grab the text for an individual chapter.
def getChapterText(self, url):
logger.debug('Getting chapter text from: %s' % url)
soup = bs.BeautifulStoneSoup(self._fetchUrl(url),
selfClosingTags=('br','hr')) # otherwise soup eats the br/hr tags.
div = soup.find('div', {'id' : 'story'})
if None == div:
raise exceptions.FailedToDownload("Error downloading Chapter: %s! Missing required element!" % url)
return self.utf8FromSoup(url,div)
@@ -91,8 +91,8 @@ class SheppardWeirComAdapter(BaseSiteAdapter): # XXX
return 'sheppardweir.com' # XXX
@classmethod
def getSiteExampleURLs(cls):
return "http://"+cls.getSiteDomain()+"/fanfics/viewstory.php?sid=1234"
def getSiteExampleURLs(self):
return "http://"+self.getSiteDomain()+"/fanfics/viewstory.php?sid=1234"
def getSiteURLPattern(self):
return re.escape("http://"+self.getSiteDomain()+"/fanfics/viewstory.php?sid=")+r"\d+$"
@@ -183,15 +183,18 @@ class SheppardWeirComAdapter(BaseSiteAdapter): # XXX
self.story.setMetadata('title',stripHTML(a))
# Find authorid and URL from... author url.
a = pagetitle.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+'/fanfics/'+a['href'])
self.story.setMetadata('author',a.string)
# (fetch multiple authors)
alist = soup.findAll('a', href=re.compile(r"viewuser.php\?uid=\d+"))
for a in alist:
self.story.addToList('authorId',a['href'].split('=')[1])
self.story.addToList('authorUrl','http://'+self.host+'/fanfics/'+a['href'])
self.story.addToList('author',a.string)
## Reviews
a = pagetitle.find('a', href=re.compile(r'reviews.php?type=ST&item='+self.story.getMetadata('storyId')+"$"))
self.story.setMetadata('reviews',stripHTML(a))
#self.story.setMetadata('reviews', value)
# Reviews
reviewdata = soup.find('div', {'id' : 'sort'})
a = reviewdata.findAll('a', href=re.compile(r'reviews.php\?type=ST&(amp;)?item='+self.story.getMetadata('storyId')+"$"))[1] # second one.
self.story.setMetadata('reviews',stripHTML(a))
# Find the chapters:
@@ -87,7 +87,8 @@ class SquidgeOrgPejaAdapter(BaseSiteAdapter):
return "https://"+cls.getSiteDomain()+"/peja/cgi-bin/viewstory.php?sid=1234"
def getSiteURLPattern(self):
return r"https?"+re.escape("://"+self.getSiteDomain()+"/")+r"~?"+re.escape("peja/cgi-bin/viewstory.php?sid=")+r"\d+$"
# but not https://www.squidge.org/peja/cgi-bin/viewstory.php?sid=47746 -- that's the 'Site Map' negative look aead
return r"https?"+re.escape("://"+self.getSiteDomain()+"/")+r"~?"+re.escape("peja/cgi-bin/viewstory.php?sid=")+r"(?!47746)\d+$"
## Getting the chapter list and the meta data, plus 'is adult' checking.
def extractChapterUrlsAndMetadata(self):
@@ -219,7 +220,9 @@ class SquidgeOrgPejaAdapter(BaseSiteAdapter):
self.setSeries(series_name, i)
self.story.setMetadata('seriesUrl',series_url)
break
i+=1
# don't count the 'site map' story. See the url pattern method.
if '47746' not in a['href']:
i+=1
except:
# I find it hard to care if the series parsing fails
@@ -187,11 +187,11 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
# in lieu of word count.
self.story.setMetadata('size', lc2.findNext('td', {'class' : 'num'}).text)
lc4 = lc2.findNext('td', {'class' : 'lc4'})
lc4 = lc2.findNext('td', {'class' : 'lc4'})
desc = lc4.contents[0]
try:
a = lc4.find('a', href=re.compile(r"/library/show_series.php\?id=\d+"))
a = lc4.find('a', href=re.compile(r"/series/\d+/.*"))
if a:
# if there's a number after the series name, series_contents is a two element list:
# [<a href="...">Title</a>, u' (2)']
@@ -209,8 +209,9 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
self.setSeries(series_name, i)
desc = lc4.contents[2]
# Check if series is in a universe
universes_soup = bs.BeautifulSoup(self._fetchUrl(self.story.getMetadata('authorUrl') + "&type=uni"))
# logger.debug("Universe page=", universes_soup)
universe_url = self.story.getMetadata('authorUrl') + "&type=uni"
universes_soup = bs.BeautifulSoup(self._fetchUrl(universe_url) )
logger.debug("Universe url='{0}'".format(universe_url))
if universes_soup:
universes = universes_soup.findAll('div', {'class' : 'ser-box'})
logger.debug("Number of Universes: %d" % len(universes))
@@ -223,28 +224,31 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
universe_name = universe.find('div', {'class' : 'ser-name'}).text.partition(' ')[2]
logger.debug("universe_name='%s'" % universe_name)
# If there is link to the story, we have the right universe
story_a = universe.find('a', {'href' : '/s/'+self.story.getMetadata('storyId')})
story_a = universe.find('a', href=re.compile('/s/'+self.story.getMetadata('storyId')))
if story_a:
logger.debug("Story is in a series that is in a universe! The universe is '%s'" % universe_name)
self.story.setMetadata("universe", universe_name)
self.story.setMetadata('universeUrl','http://'+self.host+ '/library/universe.php?id=' + universe_id)
break
else:
logger.debug("No universe page")
except:
pass
try:
a = lc4.find('a', href=re.compile(r"/library/universe.php\?id=\d+"))
a = lc4.find('a', href=re.compile(r"/universe/\d+/.*"))
logger.debug("Looking for universe - a='{0}'".format(a))
if a:
self.story.setMetadata("universe",stripHTML(a))
desc = lc4.contents[2]
# Assumed only one universe, but it does have a URL--use universeHTML
universe_name = stripHTML(a)
universeUrl = 'http://'+self.host+a['href']
logger.debug("Retrieving Universe - about to get page")
logger.debug("Retrieving Universe - about to get page - universeUrl='{0}".format(universeUrl))
universe_soup = bs.BeautifulSoup(self._fetchUrl(universeUrl))
logger.debug("Retrieving Universe - have page")
if universe_soup:
logger.debug("Retrieving Universe - looking for name")
universe_name = universe_soup.find('span', {'id' : 'ptitle'}).text.partition(' &mdash;')[0]
universe_name = universe_soup.find('h1', {'id' : 'ptitle'}).text.partition(' &mdash;')[0]
logger.debug("Universes name: '{0}'".format(universe_name))
self.story.setMetadata('universeUrl',universeUrl)
@@ -253,6 +257,8 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
if self.getConfig("universe_as_series"):
self.setSeries(universe_name, 0)
self.story.setMetadata('seriesUrl',universeUrl)
else:
logger.debug("Do not have a universe")
except:
pass
@@ -97,7 +97,7 @@ class BaseEfictionAdapter(BaseSiteAdapter):
In many cases, it's '/archive' or '/fanfiction'
"""
return "/"
return ""
@classmethod
def getViewStoryPhpName(cls):
@@ -281,7 +281,7 @@ class BaseEfictionAdapter(BaseSiteAdapter):
self.story.addToList('characters', val)
elif 'Categories' in key:
for val in re.split("\s*,\s*", value):
self.story.addToList('categories', val)
self.story.addToList('category', val)
elif 'Challenges' in key:
for val in re.split("\s*,\s*", value):
# TODO this should be an official field I guess
@@ -389,7 +389,7 @@ class BaseEfictionAdapter(BaseSiteAdapter):
## strip whitespace
key = key.strip()
valueStr = valueStr.strip()
valueStr = stripHTML(valueStr)
self.handleMetadataPair(key, valueStr)
+4 -1
View File
@@ -43,7 +43,10 @@ def get_urls_from_page(url,configuration=None,normalize=False):
if 'archiveofourown.org' in url:
if adapter.getConfig("username"):
if adapter.getConfig("is_adult"):
addurl = "?view_adult=true"
if '?' in url:
addurl = "&view_adult=true"
else:
addurl = "?view_adult=true"
else:
addurl=""
# just to get an authenticity_token.
+2
View File
@@ -552,6 +552,8 @@ class Story(Configurable):
self.setMetadata('authorHTML',linkhtml%('author',self.getMetadata('authorUrl', removeallentities, doreplacements),
self.getMetadata('author', removeallentities, doreplacements)))
self.extendList("extratags",self.getConfigList("extratags"))
if self.getMetadataRaw('seriesUrl'):
self.setMetadata('seriesHTML',linkhtml%('series',self.getMetadata('seriesUrl', removeallentities, doreplacements),
self.getMetadata('series', removeallentities, doreplacements)))
+6 -10
View File
@@ -60,17 +60,13 @@
</p>
<p>
<ul>
<li>New site bdsm-geschichten.net, thanks John Doe.</li>
<li>New site: sheppardweir.com, thanks scout78.</li>
<li>New eFiction base adapter courtesy of John Doe. This should make it easier for new developers to add eFiction type sites. But it doesn't support all type of metadata.</li>
<li>New site using eFiction base adapter: fannation.shades-of-moonlight.com, thanks John Doe.</li>
<li>New site using eFiction base adapter: themaplebookshelf.com, thanks John Doe.</li>
<li>Fix numChapters in adapter_literotica.py.</li>
<li>Fixes for nhamagicalworldsus changes.</li>
<li>Fix for changes to fanfiktion.de.</li>
<li>Fix to clear existing data when re-downloading a story again. Occasionally caused problems.
<li>New Site: lotrfanfiction.com</li>
<li>New Site: csi-forensics.com, thanks scout78.</li>
<li>New Site: samandjack.net, thanks scout78.</li>
<li>Fixes for sheppardweir.com, thanks scout78.</li>
<li>Known issue: Password protected FimFiction.net stories aren't working. FimF changed API access.</li>
<li>Known issue: Specific metadata 'eroticatags' for literotica.com doesn't work on all stories.</li>
<li>Known issue: Metadata collection is not as complete for 'Base eFiction' adapters.</li>
</ul>
</p>
<p>
@@ -81,7 +77,7 @@
If you have any problems with this application, please
report them in
the <a href="http://groups.google.com/group/fanfic-downloader">FanFictionDownLoader Google Group</a>. The
<a href="http://2-0-03.fanfictiondownloader.appspot.com">Previous Version</a> is also available for you to use if necessary.
<a href="http://2-0-05.fanfictiondownloader.appspot.com">Previous Version</a> is also available for you to use if necessary.
</p>
<div id='error'>
{{ error_message }}
+62 -2
View File
@@ -688,6 +688,20 @@ extracategories:Castle
## cover image. This lets you exclude them.
cover_exclusion_regexp:/images/.*?ribbon.gif
[csi-forensics.com]
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
extra_valid_entries: readings
readings_label: Readings
[dark-solace.org]
## Site dedicated to these categories/characters/ships
## Some sites require login (or login for some rated stories) The
@@ -896,7 +910,6 @@ extra_titlepage_entries: readings,romance
readings_label: Readings
romance_label: Romance
[ficwad.com]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
@@ -1026,6 +1039,18 @@ extra_valid_entries:eroticatags
eroticatags_label:Erotica Tags
extra_titlepage_entries: eroticatags
[lotrfanfiction.com]
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
extra_valid_entries: readings
readings_label: Readings
## Site dedicated to these categories/characters/ships
extracategories:Lord of the Rings
[lumos.sycophanthex.com]
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content. In commandline version,
@@ -1148,6 +1173,24 @@ extracategories:My Little Pony: Friendship is Magic
## Site dedicated to these categories/characters/ships
extracategories:The Pretender
[samandjack.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
## commandline version, this should go in your personal.ini, not
## defaults.ini.
#username:YourName
#password:yourpassword
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Site dedicated to these categories/characters/ships
extracategories:Stargate: SG-1
extracharacters:Sam,Jack
extraships:Sam/Jack
[samdean.archive.nu]
## Site dedicated to these categories/characters/ships
extracategories:Supernatural
@@ -1176,6 +1219,24 @@ extracategories:Harry Potter
## this should go in your personal.ini, not defaults.ini.
#is_adult:true
[sheppardweir.com]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
## commandline version, this should go in your personal.ini, not
## defaults.ini.
#username:YourName
#password:yourpassword
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
## Site dedicated to these categories/characters/ships
extracategories:Stargate: Atlantis
extracharacters:John Sheppard,Elizabeth Weir
extraships:John Sheppard/Elizabeth Weir
[spikeluver.com]
## Extra metadata that this adapter knows about. See [dramione.org]
## for examples of how to use them.
@@ -1341,7 +1402,6 @@ readings_label:Readings
cover_exclusion_regexp:art/.*Awards.jpg
[voracity2.e-fic.com]
## Extra metadata that this adapter knows about. See [dramione.org]
## for examples of how to use them.