Compare commits

...
20 Commits
Author SHA1 Message Date
Jim Miller f1d9760aa9 Bump versions. 2016-06-23 17:08:47 -05:00
Jim Miller b11bdd82db Update translations 2016-06-23 17:07:12 -05:00
Jim Miller 6e5de8060e Update translations. 2016-06-22 23:52:19 -05:00
Jim Miller 2c1b9456bf Fix for previously failedtoload img tags causing lookup sleeps. 2016-06-21 11:23:57 -05:00
Jim Miller 60439cc658 Fix for older harrypotterfanfictioncom stories lacking reviewjs.js. 2016-06-21 11:23:20 -05:00
Jim Miller fb95e1e168 Change adapter_fictionmaniatv to set status Completed instead of Complete (no d). 2016-06-16 17:25:46 -05:00
Jim Miller 0d490d2e50 Update translations. 2016-06-15 23:29:41 -05:00
Jim Miller 838510c011 Update translations. 2016-06-15 23:28:50 -05:00
Jim Miller 954ad00ca6 Update StoriesOnlineNet/FineStoriesCom login URL. 2016-06-15 23:25:58 -05:00
Jim Miller ee462d3742 Different detect StoryDoesNotExist string for ficwad.com. 2016-06-10 09:54:45 -05:00
Jim Miller 56401e6dfa Allow old showpost.php chapter URLs in base_xenforoforum. 2016-06-10 09:52:02 -05:00
Jim Miller 6070accbf5 Update (& Fix) Translations. 2016-05-31 19:36:07 -05:00
Jim Miller eebb1ee8d0 Bump versions. 2016-05-23 13:47:11 -05:00
Jim Miller bda307ed3d Update translations. 2016-05-23 13:44:21 -05:00
Jim Miller 6b0c519f99 Make 'Go back to fix errors?' dialog scroll error list for smaller dialog size. 2016-05-22 15:55:00 -05:00
Jim Miller 6533ee0187 Remove defaults.ini sections for removed sites. 2016-05-21 16:45:16 -05:00
Jim Miller 3cc3b32012 Merge pull request #121 from cryzed/master
Fix for #120 
(ProceedQuestion got an unexpected keyword argument 'log_viewer_unique_name')
2016-05-21 10:11:58 -05:00
cryzed 315536a75b Fix for #120 2016-05-21 16:45:05 +02:00
Jim Miller 1c4250c0c1 Add merged tags to anthology epubs. 2016-05-19 09:27:19 -05:00
Jim Miller 6f7e700cd2 Fix for adapter_ashwindersycophanthexcom login. 2016-05-19 09:13:18 -05:00
21 changed files with 2341 additions and 331 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ class FanFicFareBase(InterfaceActionBase):
description = _('UI plugin to download FanFiction stories from various sites.')
supported_platforms = ['windows', 'osx', 'linux']
author = 'Jim Miller'
version = (2, 3, 2)
version = (2, 3, 4)
minimum_calibre_version = (1, 48, 0)
#: This field defines the GUI plugin class that contains all the code
+21 -12
View File
@@ -21,19 +21,19 @@ from datetime import datetime
try:
from PyQt5 import QtWidgets as QtGui
from PyQt5 import QtCore
from PyQt5.Qt import (QDialog, QTableWidget, QVBoxLayout, QHBoxLayout, QGridLayout,
QPushButton, QFont, QLabel, QCheckBox, QIcon, QLineEdit,
QComboBox, QProgressDialog, QTimer, QDialogButtonBox,
QPixmap, Qt, QAbstractItemView, QTextEdit, pyqtSignal,
QGroupBox, QFrame, QTextBrowser, QSize, QAction)
from PyQt5.Qt import (QDialog, QWidget, QTableWidget, QVBoxLayout, QHBoxLayout,
QGridLayout, QPushButton, QFont, QLabel, QCheckBox, QIcon,
QLineEdit, QComboBox, QProgressDialog, QTimer, QDialogButtonBox,
QScrollArea, QPixmap, Qt, QAbstractItemView, QTextEdit,
pyqtSignal, QGroupBox, QFrame, QTextBrowser, QSize, QAction)
except ImportError as e:
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.Qt import (QDialog, QTableWidget, QVBoxLayout, QHBoxLayout, QGridLayout,
QPushButton, QFont, QLabel, QCheckBox, QIcon, QLineEdit,
QComboBox, QProgressDialog, QTimer, QDialogButtonBox,
QPixmap, Qt, QAbstractItemView, QTextEdit, pyqtSignal,
QGroupBox, QFrame, QTextBrowser, QSize, QAction)
from PyQt4.Qt import (QDialog, QWidget, QTableWidget, QVBoxLayout, QHBoxLayout,
QGridLayout, QPushButton, QFont, QLabel, QCheckBox, QIcon,
QLineEdit, QComboBox, QProgressDialog, QTimer, QDialogButtonBox,
QScrollArea, QPixmap, Qt, QAbstractItemView, QTextEdit,
pyqtSignal, QGroupBox, QFrame, QTextBrowser, QSize, QAction)
try:
from calibre.gui2 import QVariant
@@ -1450,6 +1450,15 @@ class ViewLog(SizePersistedDialog):
self.lineno = None
scrollable = QScrollArea()
scrollcontent = QWidget()
scrollable.setWidget(scrollcontent)
scrollable.setWidgetResizable(True)
self.l.addWidget(scrollable)
self.sl = QVBoxLayout()
scrollcontent.setLayout(self.sl)
## error = (lineno, msg)
for (lineno, error_msg) in errors:
# print('adding label for error:%s: %s'%(lineno, error_msg))
@@ -1460,7 +1469,7 @@ class ViewLog(SizePersistedDialog):
label.setStyleSheet("QLabel { margin-left: 2em; color : blue; } QLabel:hover { color: red; }");
label.setToolTip(_('Click to go to line %s')%lineno)
label.mouseReleaseEvent = partial(self.label_clicked, lineno=lineno)
self.l.addWidget(label)
self.sl.addWidget(label)
# html='<p>'+'</p><p>'.join([ '(lineno: %s) %s'%e for e in errors ])+'</p>'
@@ -1470,7 +1479,7 @@ class ViewLog(SizePersistedDialog):
# self.tb.setHtml(html)
# l.addWidget(self.tb)
self.l.insertStretch(-1)
self.sl.insertStretch(-1)
horz = QHBoxLayout()
+68 -51
View File
@@ -73,7 +73,7 @@ except:
from calibre.library.field_metadata import FieldMetadata
field_metadata = FieldMetadata()
from calibre_plugins.fanficfare_plugin.common_utils import (
set_plugin_icon_resources, get_icon, create_menu_action_unique,
get_library_uuid)
@@ -497,11 +497,11 @@ class FanFicFarePlugin(InterfaceAction):
},"\n".join(url_list))
else:
self.gui.status_bar.show_message(_('Finished Fetching Story URLs from Email.'),3000)
else:
if url_list:
self.add_dialog("\n".join(url_list),merge=False)
else:
else:
msg = _('No Valid Story URLs Found in Unread Emails.')
if reject_list:
msg = msg + '<p>'+(_('(%d Story URLs Skipped, on Rejected URL List)')%len(reject_list))+'</p>'
@@ -509,7 +509,7 @@ class FanFicFarePlugin(InterfaceAction):
msg,
show=True,
show_copy_button=False)
def get_urls_from_page_menu(self,anthology=False):
urltxt = ""
@@ -534,7 +534,7 @@ class FanFicFarePlugin(InterfaceAction):
self.gui.status_bar.show_message(_('Finished Fetching Story URLs from Page.'),3000)
self.restore_cursor()
if url_list:
self.add_dialog("\n".join(url_list),merge=d.anthology,anthology_url=url)
else:
@@ -606,7 +606,7 @@ class FanFicFarePlugin(InterfaceAction):
self.gui.status_bar.show_message(_('Can only UnNew books in library'),
3000)
return
if not self.gui.current_view().selectionModel().selectedRows() :
self.gui.status_bar.show_message(_('No Selected Books to Get URLs From'),
3000)
@@ -632,7 +632,7 @@ class FanFicFarePlugin(InterfaceAction):
suffix='.epub',
dir=tdir)
db.copy_format_to(book['calibre_id'],'EPUB',tmp,index_is_id=True)
unnewtmp = PersistentTemporaryFile(prefix='unnew-%s-'%book['calibre_id'],
suffix='.epub',
dir=tdir)
@@ -656,7 +656,7 @@ class FanFicFarePlugin(InterfaceAction):
if fmt.lower() != 'epub' and db.has_format(book['calibre_id'],fmt,index_is_id=True):
logger.debug("autoconvert remove f:"+fmt)
db.remove_format(book['calibre_id'], fmt, index_is_id=True)#, notify=False
def get_unnew_books_finish(self, book_list, tdir=None):
remove_dir(tdir)
if prefs['autoconvert']:
@@ -787,7 +787,7 @@ class FanFicFarePlugin(InterfaceAction):
self.busy_cursor()
self.gui.status_bar.show_message(_('Fetching Story URLs for Series...'))
# get list from identifiers:url/uri if present, but only if
# it's *not* a valid story URL.
mergeurl = self.get_story_url(db,book_id)
@@ -798,7 +798,7 @@ class FanFicFarePlugin(InterfaceAction):
self.gui.status_bar.show_message(_('Finished Fetching Story URLs for Series.'),3000)
self.restore_cursor()
#print("urlmapfile:%s"%urlmapfile)
# AddNewDialog collects URLs, format and presents buttons.
@@ -958,7 +958,7 @@ class FanFicFarePlugin(InterfaceAction):
init_label=_("Fetching metadata for stories...")
win_title=_("Downloading metadata for stories")
status_prefix=_("Fetched metadata for")
self.gui.status_bar.show_message(status_bar, 3000)
LoopProgressDialog(self.gui,
books,
@@ -1072,7 +1072,7 @@ class FanFicFarePlugin(InterfaceAction):
## Getting metadata from configured column.
custom_columns = self.gui.library_view.model().custom_columns
if ( collision in (CALIBREONLYSAVECOL) and
prefs['savemetacol'] != '' and
prefs['savemetacol'] != '' and
prefs['savemetacol'] in custom_columns ):
savedmeta_book_id = book['calibre_id']
@@ -1081,13 +1081,13 @@ class FanFicFarePlugin(InterfaceAction):
identicalbooks = self.do_id_search(url)
if len(identicalbooks) == 1:
savedmeta_book_id = identicalbooks.pop()
if savedmeta_book_id:
label = custom_columns[prefs['savemetacol']]['label']
savedmetadata = db.get_custom(savedmeta_book_id, label=label, index_is_id=True)
else:
savedmetadata = None
if savedmetadata:
# sets flag inside story so getStoryMetadataOnly won't hit server.
adapter.setStoryMetadata(savedmetadata)
@@ -1123,19 +1123,19 @@ class FanFicFarePlugin(InterfaceAction):
if userpass.status:
adapter.username = userpass.user.text()
adapter.password = userpass.passwd.text()
except exceptions.AdultCheckRequired:
if question_dialog(self.gui, _('Are You an Adult?'), '<p>'+
_("%s requires that you be an adult. Please confirm you are an adult in your locale:")%url,
show_copy_button=False):
adapter.is_adult=True
# let other exceptions percolate up.
story = adapter.getStoryMetadataOnly(get_cover=False)
book['title'] = story.getMetadata('title')
book['author'] = [story.getMetadata('author')]
book['url'] = story.getMetadata('storyUrl')
## Check reject list. Redundant with below for when story
## URL changes, but also kept here to avoid network hit in
## most common case where given url is story url.
@@ -1167,7 +1167,7 @@ class FanFicFarePlugin(InterfaceAction):
book['icon']='rotate-right.png'
book['status'] = _('Skipped')
return
################################################################################################################################################33
book['is_adult'] = adapter.is_adult
@@ -1176,7 +1176,7 @@ class FanFicFarePlugin(InterfaceAction):
book['icon'] = 'plus.png'
book['status'] = _('Add')
if not bgmeta:
# set PI version instead of default.
if 'version' in options:
@@ -1187,7 +1187,7 @@ class FanFicFarePlugin(InterfaceAction):
if prefs['savemetacol'] != '':
# get metadata to save in configured column.
book['savemetacol'] = story.dump_html_metadata()
book['title'] = story.getMetadata("title", removeallentities=True)
book['author_sort'] = book['author'] = story.getList("author", removeallentities=True)
book['publisher'] = story.getMetadata("site")
@@ -1198,7 +1198,7 @@ class FanFicFarePlugin(InterfaceAction):
else:
book['comments']=''
book['series'] = story.getMetadata("series", removeallentities=True)
if story.getMetadataRaw('datePublished'):
book['pubdate'] = story.getMetadataRaw('datePublished').replace(tzinfo=local_tz)
if story.getMetadataRaw('dateUpdated'):
@@ -1207,7 +1207,7 @@ class FanFicFarePlugin(InterfaceAction):
book['timestamp'] = story.getMetadataRaw('dateCreated').replace(tzinfo=local_tz)
else:
book['timestamp'] = None # need *something* there for calibre.
if not merge:# skip all the collision code when d/ling for merging.
if collision in (CALIBREONLY, CALIBREONLYSAVECOL):
book['icon'] = 'metadata.png'
@@ -1334,7 +1334,7 @@ class FanFicFarePlugin(InterfaceAction):
# check make sure incoming is newer.
lastupdated=story.getMetadataRaw('dateUpdated')
logger.debug("OVERWRITE site updated: %s"%lastupdated)
# updated doesn't have time (or is midnight), use dates only.
# updated does have time, use full timestamps.
if (lastupdated.time() == time.min and fileupdated.date() > lastupdated.date()) or \
@@ -1377,19 +1377,19 @@ class FanFicFarePlugin(InterfaceAction):
if not label and k in field_metadata:
label=field_metadata[k]['name']
key='calibre_std_'+k
# if k == 'user_categories':
# value=u', '.join(mi.get(k))
# label=_('User Categories')
if label: # only if it has a human readable name.
if value is None or not book['calibre_id']:
## if existing book, populate existing calibre column
## values in metadata, else '' to hide.
value=''
value=''
book['calibre_columns'][key]={'val':value,'label':label}
#logger.debug("%s(%s): %s"%(label,key,value))
# custom columns
for k, column in self.gui.library_view.model().custom_columns.iteritems():
if k != prefs['savemetacol']:
@@ -1405,7 +1405,7 @@ class FanFicFarePlugin(InterfaceAction):
value=''
book['calibre_columns'][key]={'val':value,'label':label}
# logger.debug("%s(%s): %s"%(label,key,value))
# if still 'good', make a temp file to write the output to.
# For HTML format users, make the filename inside the zip something reasonable.
# For crazy long titles/authors, limit it to 200chars.
@@ -1472,11 +1472,20 @@ class FanFicFarePlugin(InterfaceAction):
htmllog = htmllog + '</table></body></html>'
payload = ([], book_list, options)
self.gui.proceed_question(self.update_error_column,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download ended'), msg,
show_copy_button=False,
log_viewer_unique_name="FanFicFare log viewer")
# log_viewer_unique_name implemented here: https://github.com/kovidgoyal/calibre/compare/v2.56.0...v2.57.0
if calibre_version >= (2, 57, 0):
self.gui.proceed_question(self.update_error_column,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download ended'), msg,
show_copy_button=False,
log_viewer_unique_name="FanFicFare log viewer")
else:
self.gui.proceed_question(self.update_error_column,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download ended'), msg,
show_copy_button=False)
return
cookiejarfile = PersistentTemporaryFile(suffix='.cookiejar',
@@ -1710,11 +1719,18 @@ class FanFicFarePlugin(InterfaceAction):
do_update_func = self.do_download_list_update
self.gui.proceed_question(do_update_func,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download complete'), msg,
show_copy_button=False,
log_viewer_unique_name="FanFicFare log viewer")
# log_viewer_unique_name implemented here: https://github.com/kovidgoyal/calibre/compare/v2.56.0...v2.57.0
if calibre_version >= (2, 57, 0):
self.gui.proceed_question(do_update_func,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download complete'), msg,
show_copy_button=False,
log_viewer_unique_name="FanFicFare log viewer")
else:
self.gui.proceed_question(do_update_func,
payload, htmllog,
_('FanFicFare log'), _('FanFicFare download complete'), msg,
show_copy_button=False)
def do_download_merge_update(self, payload):
@@ -1752,6 +1768,7 @@ class FanFicFarePlugin(InterfaceAction):
self.get_epubmerge_plugin().do_merge(tmp.name,
[ x['outfile'] for x in good_list ],
tags=mergebook['tags'],
titleopt=mergebook['title'],
keepmetadatafiles=True,
source=mergebook['url'])
@@ -2044,7 +2061,7 @@ class FanFicFarePlugin(InterfaceAction):
prefs['gencalcover'] == SAVE_YES ## yes, always
or (prefs['gencalcover'] == SAVE_YES_UNLESS_IMG ## yes, unless image.
and book['all_metadata']['cover_image'] not in ('specific','first','default')) ):
cover_generated = False # flag for polish below.
# Yes, should do gencov. Which?
if prefs['calibre_gen_cover'] and HAS_CALGC:
@@ -2057,19 +2074,19 @@ class FanFicFarePlugin(InterfaceAction):
cover_generated = True
elif prefs['plugin_gen_cover'] and 'Generate Cover' in self.gui.iactions:
# plugin, if available.
#logger.debug("Do Generate Cover added:%s gcnewonly:%s"%(book['added'],prefs['gcnewonly']))
# force a refresh if generating cover so complex composite
# custom columns are current and correct
db.refresh_ids([book_id])
gc_plugin = self.gui.iactions['Generate Cover']
setting_name = None
if prefs['allow_gc_from_ini']:
if not configuration: # might already have it from allow_custcol_from_ini
configuration = get_fff_config(book['url'],options['fileform'])
# template => regexp to match => GC Setting to use.
# generate_cover_settings:
# ${category} => Buffy:? the Vampire Slayer => Buffy
@@ -2082,21 +2099,21 @@ class FanFicFarePlugin(InterfaceAction):
if re.search(regexp,value):
setting_name = setting
break
if setting_name:
logger.debug("Generate Cover Setting from generate_cover_settings(%s)"%setting_name)
if setting_name not in gc_plugin.get_saved_setting_names():
logger.info("GC Name %s not found, discarding! (check personal.ini for typos)"%setting_name)
setting_name = None
if not setting_name and book['all_metadata']['site'] in prefs['gc_site_settings']:
setting_name = prefs['gc_site_settings'][book['all_metadata']['site']]
logger.debug("Generate Cover Setting from site(%s)"%setting_name)
if not setting_name and 'Default' in prefs['gc_site_settings']:
setting_name = prefs['gc_site_settings']['Default']
logger.debug("Generate Cover Setting from Default(%s)"%setting_name)
if setting_name:
logger.debug("Running Generate Cover with settings %s."%setting_name)
## fetch updated mi object from
@@ -2105,14 +2122,14 @@ class FanFicFarePlugin(InterfaceAction):
realmi = db.get_metadata(book_id, index_is_id=True)
gc_plugin.generate_cover_for_book(realmi,saved_setting_name=setting_name)
cover_generated = True
if cover_generated and prefs['gc_polish_cover'] and \
options['fileform'] == "epub":
# set cover inside epub from calibre's polish feature
from calibre.ebooks.oeb.polish.main import polish, ALL_OPTS
from calibre.utils.logging import Log
from collections import namedtuple
# Couldn't find a better way to get the cover path.
cover_path = os.path.join(db.library_path,
db.path(book_id, index_is_id=True),
@@ -2123,7 +2140,7 @@ class FanFicFarePlugin(InterfaceAction):
opts.update(data)
O = namedtuple('Options', ' '.join(ALL_OPTS.iterkeys()))
opts = O(**opts)
log = Log(level=Log.DEBUG)
outfile = db.format_abspath(book_id,
formmapping[options['fileform']],
@@ -2489,7 +2506,7 @@ class FanFicFarePlugin(InterfaceAction):
def restore_cursor(self):
QApplication.restoreOverrideCursor()
def split_text_to_urls(urls):
# remove dups while preserving order.
dups=set()
-88
View File
@@ -847,18 +847,6 @@ extracategories:The Sentinel
## this should go in your personal.ini, not defaults.ini.
#is_adult:true
[bdsm-geschichten.net]
## Some sites do not require a login, but do 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
## This site offers no index page so we can either guess the chapter URLs
## by dec/incrementing numbers ('guess') or walk all the chapters in the metadata
## parsing state ('parse'). Since guessing can lead to errors for non-standard
## story URLs, the default is to parse
#find_chapters:guess
[bloodshedverse.com]
## website encoding(s) In theory, each website reports the character
## encoding they use for each page. In practice, some sites report it
@@ -904,15 +892,6 @@ strip_text_links:true
## Site dedicated to these categories/characters/ships
extracategories:Blood Ties
[buffynfaith.net]
## Site dedicated to these categories/characters/ships
extracategories:Buffy: The Vampire Slayer
## 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
[fanfic.castletv.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
@@ -1268,27 +1247,6 @@ cover_exclusion_regexp:/css/bir.png
[forums.sufficientvelocity.com]
## see [base_xenforoforum]
[grangerenchanted.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:Harry Potter
extracharacters:Hermione Granger
## Extra metadata that this adapter knows about. See [dramione.org]
## for examples of how to use them.
extra_valid_entries:read,reviews
[hlfiction.net]
## Site dedicated to these categories/characters/ships
extracategories:Highlander
@@ -1536,22 +1494,6 @@ extracategories:Supernatural
extracharacters:Sam,Dean
extraships:Sam/Dean
[scarhead.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:Harry Potter
[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
@@ -1693,15 +1635,6 @@ readings_label: Readings
## personal.ini, not defaults.ini.
#is_adult:true
[tokra.fandomnet.com]
## Some sites do not require a login, but do 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
[tolkienfanfiction.com]
## Site dedicated to these categories/characters/ships
extracategories:Lord of the Rings
@@ -2069,11 +2002,6 @@ cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
## Site dedicated to these categories/characters/ships
extracategories:NCIS
[www.nickngreg.nl]
## Site dedicated to these categories/characters/ships
extracategories:CSI
extraships:Nick Stokes/Greg Sanders
[www.phoenixsong.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
@@ -2367,20 +2295,6 @@ extracategories:Andromeda
## Site dedicated to these categories/characters/ships
extracategories:Artemis Fowl
[www.therabidreader.com]
## Some sites do not require a login, but do 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
## 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
[www.naiceanilme.net]
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content. In commandline version,
@@ -2394,8 +2308,6 @@ extracategories:Artemis Fowl
#username:YourName
#password:yourpassword
[overrides]
## It may sometimes be useful to override all of the specific format,
## site and site:format sections in your private configuration. For
+5 -4
View File
@@ -4,6 +4,7 @@
# Translators:
# Ettore Atalan <atalanttore@googlemail.com>, 2014-2015
# ILB, 2014-2016
# jumo none, 2016
# Sebastian Keller <Haggard@gmx.de>, 2015
# Simon_Schuette <simonschuette@arcor.de>, 2014-2016
# Simon S, 2015
@@ -13,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2016-04-28 16:06+Central Daylight Time\n"
"PO-Revision-Date: 2016-04-16 14:33+0000\n"
"Last-Translator: ILB\n"
"PO-Revision-Date: 2016-06-22 21:43+0000\n"
"Last-Translator: jumo none\n"
"Language-Team: German (http://www.transifex.com/calibre/calibre-plugins/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -962,7 +963,7 @@ msgstr "Wenn eine Aktualisierung oder Überschreibung einer existierenden Story
#: config.py:1354
msgid "Save All Errors"
msgstr ""
msgstr "Speicher alle Fehler"
#: config.py:1355
msgid "If unchecked, these errors will not be saved:%s"
@@ -2116,7 +2117,7 @@ msgstr "FanFiction-Geschichten herunterladen"
#: jobs.py:91
msgid "%d of %d stories finished downloading"
msgstr ""
msgstr "%d von %d der Geschichten sind fertig runtergeladen"
#: jobs.py:103
msgid "Download Results:"
+7 -6
View File
@@ -2,17 +2,18 @@
# Copyright (C) YEAR ORGANIZATION
#
# Translators:
# Fitoschido, 2014
# Adolfo Jayme-Barrientos, 2014
# dario hereñu <magallania@gmail.com>, 2015
# Jellby <jellby@yahoo.com>, 2014-2016
# Antonio Mireles <antonio@mirelesindependent.com>, 2016
# juanda097 <juanda097@openmailbox.org>, 2016
# JimmXinu <retiefjimm@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2016-04-28 16:06+Central Daylight Time\n"
"PO-Revision-Date: 2016-04-13 22:04+0000\n"
"Last-Translator: Antonio Mireles <antonio@mirelesindependent.com>\n"
"PO-Revision-Date: 2016-05-31 03:04+0000\n"
"Last-Translator: juanda097 <juanda097@openmailbox.org>\n"
"Language-Team: Spanish (http://www.transifex.com/calibre/calibre-plugins/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -465,7 +466,7 @@ msgstr "Estas configuraciones proporcionan un control más fino sobre qué metad
#: config.py:673
msgid "personal.ini"
msgstr ""
msgstr "personal.ini"
#: config.py:680 config.py:784 config.py:785
msgid "Edit personal.ini"
@@ -485,11 +486,11 @@ msgstr ""
msgid ""
"View your personal.ini with usernames and passwords removed. For safely "
"sharing your personal.ini settings with others."
msgstr ""
msgstr "Ver sus personal.ini con nombres de usuario y contraseñas eliminadas. Para compartir de forma segura la configuración personal.ini con otros."
#: config.py:704
msgid "defaults.ini"
msgstr ""
msgstr "defaults.ini"
#: config.py:709
msgid ""
+4 -3
View File
@@ -4,6 +4,7 @@
# Translators:
# Xotes <alois.glibert@gmail.com>, 2015
# Franck, 2015
# J M <JimmXinuTwo@xinu.nu>, 2016
# Ptit Prince <leporello1791@gmail.com>, 2014-2016
# Piconcely Yoann <yoanncoolazz@gmail.com>, 2015
# sengian <sengian1@gmail.com>, 2016
@@ -13,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2016-04-28 16:06+Central Daylight Time\n"
"PO-Revision-Date: 2016-04-17 07:52+0000\n"
"Last-Translator: sengian <sengian1@gmail.com>\n"
"PO-Revision-Date: 2016-06-01 00:19+0000\n"
"Last-Translator: J M <JimmXinuTwo@xinu.nu>\n"
"Language-Team: French (http://www.transifex.com/calibre/calibre-plugins/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -208,7 +209,7 @@ msgid ""
"%(cmplt)s and %(inprog)s tags will be still be updated, if known.\n"
"%(lul)s tags will be updated if %(lus)s in %(is)s.\n"
"(If Tags is set to 'New Only' in the Standard Columns tab, this has no effect.)"
msgstr "Les étiquettes existantes seront gardées et toutes les nouvelles étiquettes ajoutées.\nLes étiquettes %(cmplt)s et %(inprog) seront quand même mise à jour, si connues.\nLes étiquettes %(lul)s seront mises à jour si %(lus)s dans %(is)s.\n(Si les étiquettes sont définies à 'Nouveau uniquement\" dans l'onglet colonnes standards, ceci n'a pas d'effet.)"
msgstr "Les étiquettes existantes seront gardées et toutes les nouvelles étiquettes ajoutées.\nLes étiquettes %(cmplt)s et %(inprog)s seront quand même mise à jour, si connues.\nLes étiquettes %(lul)s seront mises à jour si %(lus)s dans %(is)s.\n(Si les étiquettes sont définies à 'Nouveau uniquement\" dans l'onglet colonnes standards, ceci n'a pas d'effet.)"
#: config.py:458
msgid "Force Author into Author Sort?"
+14 -13
View File
@@ -2,6 +2,7 @@
# Copyright (C) YEAR ORGANIZATION
#
# Translators:
# Alex, 2016
# Nathan Follens, 2015
# Rodolfo_Jadon, 2014-2015
# Volluta <volluta@tutanota.com>, 2015
@@ -10,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2016-04-28 16:06+Central Daylight Time\n"
"PO-Revision-Date: 2016-03-29 09:06+0000\n"
"Last-Translator: Kovid Goyal <kovid@kovidgoyal.net>\n"
"PO-Revision-Date: 2016-06-23 02:16+0000\n"
"Last-Translator: Alex\n"
"Language-Team: Dutch (http://www.transifex.com/calibre/calibre-plugins/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -959,7 +960,7 @@ msgstr ""
#: config.py:1354
msgid "Save All Errors"
msgstr ""
msgstr "Sla alle fouten op"
#: config.py:1355
msgid "If unchecked, these errors will not be saved:%s"
@@ -1099,7 +1100,7 @@ msgstr ""
#: config.py:1507
msgid "Mark Emails Read"
msgstr ""
msgstr "Markeer emails gelezen"
#: config.py:1508
msgid ""
@@ -1336,7 +1337,7 @@ msgstr ""
#: dialogs.py:848
msgid "Background Metadata?"
msgstr ""
msgstr "Achtergrond metadata?"
#: dialogs.py:849
msgid ""
@@ -1368,11 +1369,11 @@ msgstr ""
#: dialogs.py:1054
msgid "Are you sure you want to remove this URL from the list?"
msgstr ""
msgstr "Weet u zeker dat u deze URL van de lijst wilt verwijderen?"
#: dialogs.py:1056
msgid "Are you sure you want to remove the %d selected URLs from the list?"
msgstr ""
msgstr "Weet u zeker dat u de %d geselecteerde URLs van de lijst wilt verwijderen?"
#: dialogs.py:1074
msgid "List of Books to Reject"
@@ -1386,7 +1387,7 @@ msgstr ""
#: dialogs.py:1101
msgid "Remove selected URLs from the list"
msgstr ""
msgstr "Verwijder geselecteerde URLs van de lijst"
#: dialogs.py:1116 dialogs.py:1120
msgid "This will be added to whatever note you've set for each URL above."
@@ -1456,7 +1457,7 @@ msgstr "FanFiction-verhalen downloaden van verschillende websites"
#: fff_plugin.py:293
msgid "&Download from URLs"
msgstr ""
msgstr "&Download van URLs"
#: fff_plugin.py:295
msgid "Download FanFiction Books from URLs"
@@ -1785,7 +1786,7 @@ msgstr ""
#: fff_plugin.py:1053
msgid "Cannot update non-epub format."
msgstr ""
msgstr "Kan "
#: fff_plugin.py:1128
msgid "Are You an Adult?"
@@ -2041,7 +2042,7 @@ msgstr ""
#: fff_plugin.py:1820
msgid "Adding format to book failed for some reason..."
msgstr ""
msgstr "Het toevoegen "
#: fff_plugin.py:1823 jobs.py:321
msgid "Error"
@@ -2117,7 +2118,7 @@ msgstr ""
#: jobs.py:103
msgid "Download Results:"
msgstr ""
msgstr "Downloadresultaten:"
#: jobs.py:105
msgid "Successful:"
@@ -2133,7 +2134,7 @@ msgstr "Download gestart..."
#: jobs.py:230
msgid "Download %s completed, %s chapters."
msgstr ""
msgstr "Download %s voltooid, %s hoofdstukken."
#: jobs.py:255
msgid "Already contains %d chapters. Reuse as is."
+55 -54
View File
@@ -3,13 +3,14 @@
#
# Translators:
# Henrik Mattsson-Mårn <h@reglage.net>, 2016
# J M <JimmXinuTwo@xinu.nu>, 2016
# Jonatan Nyberg <jonatan@autistici.org>, 2016
# Merarom <merarom@yahoo.es>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: calibre-plugins\n"
"POT-Creation-Date: 2016-04-28 16:06+Central Daylight Time\n"
"PO-Revision-Date: 2016-04-22 09:32+0000\n"
"PO-Revision-Date: 2016-06-12 18:44+0000\n"
"Last-Translator: Jonatan Nyberg <jonatan@autistici.org>\n"
"Language-Team: Swedish (http://www.transifex.com/calibre/calibre-plugins/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -47,7 +48,7 @@ msgstr "Inställningar för:"
#: common_utils.py:497
msgid "Clear"
msgstr "Ta bort"
msgstr "Rensa"
#: common_utils.py:499
msgid "Clear all settings for this plugin"
@@ -153,7 +154,7 @@ msgid ""
"(title, author, URL, tags, custom columns, etc) from the web site. <br "
"/>This sets whether that will default to on or off. <br />Columns set to "
"'New Only' in the column tabs will only be set for new books."
msgstr ""
msgstr "Vid varje hämtning, erbjuder FanFicFare en möjlighet att uppdatera calibres metadata (titel, författare, URL, taggar, anpassade kolumner, osv.) från webbsidan. <br />Detta ställer in det som standard till på eller av. <br />Kolumner satt till \"Endast ny\" i kolumnflikarna kommer endast att ställas in för nya böcker."
#: config.py:432
msgid "Default Update EPUB Cover when Updating EPUB?"
@@ -164,7 +165,7 @@ msgid ""
"On each download, FanFicFare offers an option to update the book cover image"
" <i>inside</i> the EPUB from the web site when the EPUB is updated.<br "
"/>This sets whether that will default to on or off."
msgstr ""
msgstr "Vid varje hämtning, erbjuder FanFicFare en möjlighet att uppdatera bokomslagesbilden <i>i</ i> EPUB:en från webbsidan när EPUB uppdateras. <br />Detta ställer in det som standard till på eller av."
#: config.py:437
msgid "Default Background Metadata?"
@@ -192,7 +193,7 @@ msgstr "Ta bort andra format som finns?"
msgid ""
"Check this to automatically delete all other ebook formats when updating an existing book.\n"
"Handy if you have both a Nook(epub) and Kindle(mobi), for example."
msgstr ""
msgstr "Kryssa i det här för att automatiskt ta bort alla andra e-bokformat när du uppdaterar en befintlig bok.\nPraktiskt om du har både en Nook (EPUB) och Kindle (MOBI), till exempel."
#: config.py:453
msgid "Keep Existing Tags when Updating Metadata?"
@@ -208,7 +209,7 @@ msgstr ""
#: config.py:458
msgid "Force Author into Author Sort?"
msgstr ""
msgstr "Tvingar författare in i författarsortering?"
#: config.py:459
msgid ""
@@ -260,11 +261,11 @@ msgstr ""
#: config.py:483
msgid "Post Processing Options"
msgstr ""
msgstr "Efterbehandlings alternativ"
#: config.py:487
msgid "Mark added/updated books when finished?"
msgstr ""
msgstr "Markera tillagda/uppdaterade böcker när det är klart?"
#: config.py:488
msgid ""
@@ -275,7 +276,7 @@ msgstr ""
#: config.py:492
msgid "Show Marked books when finished?"
msgstr ""
msgstr "Visa markerade böcker när det är klart?"
#: config.py:493
msgid ""
@@ -303,11 +304,11 @@ msgstr ""
#: config.py:507
msgid "Calculate Word Count:"
msgstr ""
msgstr "Beräkna antalet ord:"
#: config.py:520
msgid "Automatically Convert new/update books?"
msgstr ""
msgstr "Konvertera automatiskt nya/uppdaterade böcker?"
#: config.py:521
msgid ""
@@ -322,7 +323,7 @@ msgstr "GUI-alternativ"
#: config.py:529
msgid "Take URLs from Clipboard?"
msgstr ""
msgstr "Ta webbadresser från urklipp?"
#: config.py:530
msgid "Prefill URLs from valid URLs in Clipboard when Adding New."
@@ -330,7 +331,7 @@ msgstr ""
#: config.py:534
msgid "Default to Update when books selected?"
msgstr ""
msgstr "Standard att uppdatera när böcker väljs?"
#: config.py:535
msgid ""
@@ -340,7 +341,7 @@ msgstr ""
#: config.py:539
msgid "Keep 'Add New from URL(s)' dialog on top?"
msgstr ""
msgstr "Håll 'Lägg till ny från URL'-dialog överst?"
#: config.py:540
msgid ""
@@ -350,19 +351,19 @@ msgstr ""
#: config.py:544
msgid "Show estimated time left?"
msgstr ""
msgstr "Visa beräknad tid som återstår?"
#: config.py:545
msgid "When a Progress Bar is shown, show a rough estimate of the time left."
msgstr ""
msgstr "När en förloppsmätare visas, visa en grov uppskattning av den tid som återstår."
#: config.py:549
msgid "Misc Options"
msgstr ""
msgstr "Tillbehör och övriga alternativ"
#: config.py:553
msgid "Inject calibre Series when none found?"
msgstr ""
msgstr "Inför calibre serier när ingen finns?"
#: config.py:554
msgid ""
@@ -383,7 +384,7 @@ msgstr ""
#: config.py:563
msgid "Reject List"
msgstr ""
msgstr "Avvisa lista"
#: config.py:567
msgid "Edit Reject URL List"
@@ -463,7 +464,7 @@ msgstr ""
#: config.py:673
msgid "personal.ini"
msgstr ""
msgstr "personal.ini"
#: config.py:680 config.py:784 config.py:785
msgid "Edit personal.ini"
@@ -477,7 +478,7 @@ msgstr ""
#: config.py:693
msgid "View \"Safe\" personal.ini"
msgstr ""
msgstr "Visa \"säker\" personal.ini"
#: config.py:698 config.py:775
msgid ""
@@ -487,7 +488,7 @@ msgstr ""
#: config.py:704
msgid "defaults.ini"
msgstr ""
msgstr "defaults.ini"
#: config.py:709
msgid ""
@@ -501,7 +502,7 @@ msgstr "Visa standardvärden"
#: config.py:721
msgid "Calibre Columns"
msgstr ""
msgstr "calibre-kolumner"
#: config.py:728
msgid ""
@@ -522,7 +523,7 @@ msgstr ""
#: config.py:743
msgid "Show Calibre Column Names"
msgstr ""
msgstr "Visa calibre-kolumn namn"
#: config.py:752
msgid ""
@@ -531,15 +532,15 @@ msgstr ""
#: config.py:762
msgid "Plugin Defaults"
msgstr ""
msgstr "Tilläggets standardinställningar"
#: config.py:763
msgid "Plugin Defaults (%s) (Read-Only)"
msgstr ""
msgstr "plugin standardinställningar (%s) (skrivskyddad)"
#: config.py:774
msgid "View 'Safe' personal.ini"
msgstr ""
msgstr "Visa 'säker' personal.ini"
#: config.py:808
msgid "Calibre Column Entry Names"
@@ -637,15 +638,15 @@ msgstr ""
#: config.py:937
msgid "Generate Calibre Cover:"
msgstr ""
msgstr "Generera calibre omslag:"
#: config.py:964
msgid "Plugin %(gc)s"
msgstr ""
msgstr "Tillägg %(gc)s"
#: config.py:965
msgid "Use plugin to create covers. Additional settings are below."
msgstr ""
msgstr "Använd tillägg för att skapa omslag. Ytterligare inställningar finns nedan."
#: config.py:972
msgid "Calibre Generate Cover"
@@ -660,7 +661,7 @@ msgstr ""
#: config.py:987
msgid "Generate Covers Only for New Books"
msgstr ""
msgstr "Skapa omslag endast för nya böcker"
#: config.py:988
msgid ""
@@ -681,7 +682,7 @@ msgstr ""
#: config.py:1001
msgid "%(gc)s(Plugin) Settings"
msgstr ""
msgstr "%(gc)s(Plugin) Inställningar"
#: config.py:1009
msgid ""
@@ -731,7 +732,7 @@ msgstr ""
#: config.py:1108
msgid "Which column and algorithm to use are configured in %(cp)s."
msgstr ""
msgstr "Vilken kolumn och algoritm att använda är konfigurerade i%(cp)s."
#: config.py:1118
msgid ""
@@ -803,11 +804,11 @@ msgstr "Status"
#: config.py:1239
msgid "Status:%(cmplt)s"
msgstr "Status:%(cmplt)"
msgstr "Status:%(cmplt)s"
#: config.py:1240
msgid "Status:%(inprog)s"
msgstr ""
msgstr "Status:%(inprog)s"
#: config.py:1241 config.py:1403
msgid "Series"
@@ -911,7 +912,7 @@ msgstr ""
#: config.py:1303
msgid "Update this %s column(%s) with..."
msgstr ""
msgstr "Uppdatera denna %s kolumn(%s) med..."
#: config.py:1313
msgid "Values that aren't valid for this enumeration column will be ignored."
@@ -944,7 +945,7 @@ msgstr ""
#: config.py:1335
msgid "Special column:"
msgstr ""
msgstr "Special kolumn:"
#: config.py:1340
msgid "Update/Overwrite Error Column:"
@@ -958,7 +959,7 @@ msgstr ""
#: config.py:1354
msgid "Save All Errors"
msgstr ""
msgstr "Spara alla fel"
#: config.py:1355
msgid "If unchecked, these errors will not be saved:%s"
@@ -1050,7 +1051,7 @@ msgstr ""
#: config.py:1460
msgid "IMAP Server Name"
msgstr ""
msgstr "IMAP-servernamn"
#: config.py:1461
msgid "Name of IMAP server--must allow IMAP4 with SSL. Eg: imap.gmail.com"
@@ -1058,7 +1059,7 @@ msgstr ""
#: config.py:1470
msgid "IMAP User Name"
msgstr ""
msgstr "IMAP-användarnamn"
#: config.py:1471
msgid ""
@@ -1068,7 +1069,7 @@ msgstr ""
#: config.py:1480
msgid "IMAP User Password"
msgstr ""
msgstr "IMAP-användarlösenord"
#: config.py:1481
msgid ""
@@ -1142,7 +1143,7 @@ msgstr "Visa nedladdningsalternativ"
#: dialogs.py:264 dialogs.py:810
msgid "Output &Format:"
msgstr ""
msgstr "Utdata &format:"
#: dialogs.py:272 dialogs.py:818
msgid ""
@@ -1151,7 +1152,7 @@ msgstr "Välj utdataformat att skapa. Kan fastställa standard från plugin konf
#: dialogs.py:300 dialogs.py:838
msgid "Update Calibre &Metadata?"
msgstr ""
msgstr "Uppdatera calibre &metadata?"
#: dialogs.py:301 dialogs.py:839
msgid ""
@@ -1212,7 +1213,7 @@ msgstr ""
#: dialogs.py:505
msgid "For Individual Books"
msgstr ""
msgstr "För individuella böcker"
#: dialogs.py:506
msgid "Get URLs and go to dialog for individual story downloads."
@@ -1270,7 +1271,7 @@ msgstr ""
#: dialogs.py:590 dialogs.py:614 fff_plugin.py:960
msgid "Fetched metadata for"
msgstr ""
msgstr "Hämtade metadata för"
#: dialogs.py:643
msgid " - %s estimated until done"
@@ -1359,7 +1360,7 @@ msgstr "Är du säker du vill ta bort valda %d böcker från listan?"
#: dialogs.py:1006
msgid "Note"
msgstr ""
msgstr "Anteckning"
#: dialogs.py:1045
msgid "Select or Edit Reject Note."
@@ -1375,7 +1376,7 @@ msgstr ""
#: dialogs.py:1074
msgid "List of Books to Reject"
msgstr ""
msgstr "Lista över böcker att avvisa"
#: dialogs.py:1087
msgid ""
@@ -1423,7 +1424,7 @@ msgstr ""
#: dialogs.py:1335
msgid "Go back to fix errors?"
msgstr ""
msgstr "Gå tillbaka för att åtgärda fel?"
#: dialogs.py:1447
msgid "Click an error below to return to Editing directly on that line:"
@@ -1511,7 +1512,7 @@ msgstr ""
#: fff_plugin.py:338
msgid "Add to \"Send to Device\" Lists"
msgstr ""
msgstr "Lägg till \"Skicka till enhet\"-listor"
#: fff_plugin.py:340
msgid "Mark Unread: Add to \"To Read\" Lists"
@@ -1527,15 +1528,15 @@ msgstr ""
#: fff_plugin.py:367
msgid "Reject Selected Books"
msgstr ""
msgstr "Avvisa markerade böcker"
#: fff_plugin.py:375
msgid "&Configure FanFicFare"
msgstr ""
msgstr "&Anpassa FanFicFare"
#: fff_plugin.py:378
msgid "Configure FanFicFare"
msgstr ""
msgstr "Anpassa FanFicFare"
#: fff_plugin.py:433
msgid "Cannot Update Reading Lists from Device View"
@@ -1852,7 +1853,7 @@ msgstr ""
#: fff_plugin.py:1274
msgid "In library: <a href=\"%(liburl)s\">%(liburl)s</a>"
msgstr ""
msgstr "I bibliotek: <a href=\"%(liburl)s\">%(liburl)s</a>"
#: fff_plugin.py:1275 fff_plugin.py:1289
msgid "New URL: <a href=\"%(newurl)s\">%(newurl)s</a>"
@@ -1888,7 +1889,7 @@ msgstr ""
#: fff_plugin.py:1291
msgid "Click '<b>No</b>' to skip URL."
msgstr ""
msgstr "Klicka '<b>Nej</b>' för att hoppa över URL."
#: fff_plugin.py:1297
msgid "Update declined by user due to differing story URL(%s)"
File diff suppressed because it is too large Load Diff
@@ -77,7 +77,8 @@ class AshwinderSycophantHexComAdapter(BaseSiteAdapter):
## Login seems to be reasonably standard across eFiction sites.
def needToLoginCheck(self, data):
if 'This story contains adult content and/or themes.' in data \
or "That password doesn't match the one in our database" in data:
or "That password doesn't match the one in our database" in data \
or "Member Login" in data:
return True
else:
return False
@@ -117,7 +117,7 @@ class FictionManiaTVAdapter(BaseSiteAdapter):
self.story.setMetadata('rating', value)
elif key == 'Complete':
self.story.setMetadata('status', 'Complete' if value == 'Complete' else 'In-Progress')
self.story.setMetadata('status', 'Completed' if value == 'Complete' else 'In-Progress')
elif key == 'Categories':
for element in cells[1]('a'):
+1 -1
View File
@@ -93,7 +93,7 @@ class FicwadComSiteAdapter(BaseSiteAdapter):
try:
data = self._fetchUrl(url)
# non-existent/removed story urls get thrown to the front page.
if "<h2>Welcome to FicWad</h2>" in data:
if "<h4>Featured Story</h4>" in data:
raise exceptions.StoryDoesNotExist(self.url)
soup = self.make_soup(data)
except urllib2.HTTPError, e:
@@ -188,9 +188,13 @@ class HarryPotterFanFictionComSiteAdapter(BaseSiteAdapter):
data = self._fetchUrl(url)
# remove everything after here--the site's chapters break the
# BS4 parser.
data = data[:data.index('<script type="text/javascript" src="reviewjs.js">')]
try:
# remove everything after here--the site's chapters break
# the BS4 parser.
data = data[:data.index('<script type="text/javascript" src="reviewjs.js">')]
except:
# some older stories don't have the code at the end that breaks things.
pass
soup = self.make_soup(data)
@@ -97,7 +97,7 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
params['page'] = 'http://'+self.getSiteDomain()+'/'
params['submit'] = 'Login'
loginUrl = 'https://' + self.getSiteDomain() + '/login.php'
loginUrl = 'https://' + self.getSiteDomain() + '/sol-secure/login.php'
logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl,
params['theusername']))
@@ -228,11 +228,15 @@ class BaseXenForoForumAdapter(BaseSiteAdapter):
if ( url.startswith(self.getURLPrefix()) or
url.startswith('http://'+self.getSiteDomain()) or
url.startswith('https://'+self.getSiteDomain()) ) and ('/posts/' in url or '/threads/' in url):
url.startswith('https://'+self.getSiteDomain()) ) and \
( '/posts/' in url or '/threads/' in url or 'showpost.php' in url):
# brute force way to deal with SB's http->https change when hardcoded http urls.
url = url.replace('http://'+self.getSiteDomain(),self.getURLPrefix())
# http://forums.spacebattles.com/showpost.php?p=4755532&postcount=9
url = re.sub(r'showpost\.php\?p=([0-9]+)(&postcount=[0-9]+)?',r'/posts/\1/',url)
url = re.sub(r'(^[\'"]+|[\'"]+$)','',url) # strip leading or trailing '" from incorrect quoting.
url = re.sub(r'like$','',url) # strip 'like' if incorrect 'like' link instead of proper post URL.
-88
View File
@@ -853,18 +853,6 @@ extracategories:The Sentinel
## this should go in your personal.ini, not defaults.ini.
#is_adult:true
[bdsm-geschichten.net]
## Some sites do not require a login, but do 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
## This site offers no index page so we can either guess the chapter URLs
## by dec/incrementing numbers ('guess') or walk all the chapters in the metadata
## parsing state ('parse'). Since guessing can lead to errors for non-standard
## story URLs, the default is to parse
#find_chapters:guess
[bloodshedverse.com]
## website encoding(s) In theory, each website reports the character
## encoding they use for each page. In practice, some sites report it
@@ -910,15 +898,6 @@ strip_text_links:true
## Site dedicated to these categories/characters/ships
extracategories:Blood Ties
[buffynfaith.net]
## Site dedicated to these categories/characters/ships
extracategories:Buffy: The Vampire Slayer
## 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
[fanfic.castletv.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
@@ -1256,27 +1235,6 @@ cover_exclusion_regexp:/css/bir.png
[forums.sufficientvelocity.com]
## see [base_xenforoforum]
[grangerenchanted.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:Harry Potter
extracharacters:Hermione Granger
## Extra metadata that this adapter knows about. See [dramione.org]
## for examples of how to use them.
extra_valid_entries:read,reviews
[hlfiction.net]
## Site dedicated to these categories/characters/ships
extracategories:Highlander
@@ -1524,22 +1482,6 @@ extracategories:Supernatural
extracharacters:Sam,Dean
extraships:Sam/Dean
[scarhead.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:Harry Potter
[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
@@ -1681,15 +1623,6 @@ readings_label: Readings
## personal.ini, not defaults.ini.
#is_adult:true
[tokra.fandomnet.com]
## Some sites do not require a login, but do 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
[tolkienfanfiction.com]
## Site dedicated to these categories/characters/ships
extracategories:Lord of the Rings
@@ -2051,11 +1984,6 @@ cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
## Site dedicated to these categories/characters/ships
extracategories:NCIS
[www.nickngreg.nl]
## Site dedicated to these categories/characters/ships
extracategories:CSI
extraships:Nick Stokes/Greg Sanders
[www.phoenixsong.net]
## Some sites require login (or login for some rated stories) The
## program can prompt you, or you can save it in config. In
@@ -2349,20 +2277,6 @@ extracategories:Andromeda
## Site dedicated to these categories/characters/ships
extracategories:Artemis Fowl
[www.therabidreader.com]
## Some sites do not require a login, but do 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
## 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
[www.naiceanilme.net]
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content. In commandline version,
@@ -2376,8 +2290,6 @@ extracategories:Artemis Fowl
#username:YourName
#password:yourpassword
[overrides]
## It may sometimes be useful to override all of the specific format,
## site and site:format sections in your private configuration. For
+3
View File
@@ -1069,6 +1069,9 @@ class Story(Configurable):
if imgurl not in self.imgurls:
try:
if imgurl == 'failedtoload':
raise Exception("Previously failed to load")
parsedUrl = urlparse.urlparse(imgurl)
if self.getConfig('no_image_processing'):
(data,ext,mime) = no_convert_image(imgurl,
+1 -1
View File
@@ -23,7 +23,7 @@ setup(
# Versions should comply with PEP440. For a discussion on single-sourcing
# the version across setup.py and the project code, see
# https://packaging.python.org/en/latest/single_source_version.html
version="2.3.2",
version="2.3.4",
description='A tool for downloading fanfiction to eBook formats',
long_description=long_description,
+1 -1
View File
@@ -1,6 +1,6 @@
# ffd-retief-hrd fanficfare
application: fanficfare
version: 2-3-02
version: 2-3-04
runtime: python27
api_version: 1
threadsafe: true
+1 -1
View File
@@ -35,7 +35,7 @@
If you have any problems with this application, please
report them in
the <a href="http://groups.google.com/group/fanfic-downloader">FanFicFare Google Group</a>. The
<a href="http://2-3-01.fanficfare.appspot.com">previous version
<a href="http://2-3-03.fanficfare.appspot.com">previous version
</a> is also available for you to use if necessary.
</p>
<div id='error'>