Compare commits

...
32 Commits
Author SHA1 Message Date
Jim Miller f6d65c334f Bump versions. 2016-07-22 12:02:48 -05:00
Jim Miller 2c5371d95e Update translations. 2016-07-22 11:59:42 -05:00
Jim Miller 6f4660763f Save addheaders when setting cookiejar. For ffn referer. 2016-07-17 17:08:33 -05:00
Jim Miller 75f8f72266 Include 'prefix' tags in forumtags in base_xenforoforum. 2016-07-17 16:38:53 -05:00
Jim Miller b1d689ba3e Add n_anthaver and r_anthaver modes to custom_columns_settings for averaging metadata for anthologies before setting in integer and float calibre custom columns. 2016-07-12 14:57:10 -05:00
Jim Miller 39bb6e37f6 Add n_anthaver and r_anthaver modes to custom_columns_settings for averaging metadata for anthologies before setting in integer and float calibre custom columns. 2016-07-12 14:55:51 -05:00
Jim Miller 288f12afed Add n_anthaver and r_anthaver modes to custom_columns_settings for averaging metadata for anthologies before setting in integer and float calibre custom columns. 2016-07-12 14:53:18 -05:00
Jim Miller 2a25aef7ac Update translations. 2016-07-12 14:49:03 -05:00
Jim Miller 085fb47b08 Remove Django from app.yaml--old version going away. 2016-07-09 09:27:46 -05:00
Jim Miller 5fdcbab46a Allow old goto/post chapter URLs in base_xenforoforum. 2016-07-05 23:22:25 -05:00
Jim Miller 2d83fa8f5d Fix for SIYE when author puts story URL in bio. 2016-06-30 10:38:13 -05:00
Jim Miller 4a752e05e1 Change ffnet metadata colletion to allow for chars with (' - ') in them. 2016-06-26 11:34:36 -05:00
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
27 changed files with 2454 additions and 426 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, 5)
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()
+81 -54
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'])
@@ -1941,14 +1958,17 @@ class FanFicFarePlugin(InterfaceAction):
configuration = None
if prefs['allow_custcol_from_ini']:
configuration = get_fff_config(book['url'],options['fileform'])
# meta => custcol[,a|n|r]
# meta => custcol[,a|n|r|n_anthaver,r_anthaver]
# cliches=>\#acolumn,r
for line in configuration.getConfig('custom_columns_settings').splitlines():
if "=>" in line:
(meta,custcol) = map( lambda x: x.strip(), line.split("=>") )
flag='r'
anthaver=False
if "," in custcol:
(custcol,flag) = map( lambda x: x.strip(), custcol.split(",") )
anthaver = 'anthaver' in flag
flag=flag[0] # first char only.
if meta not in book['all_metadata']:
# if double quoted, use as a literal value.
@@ -1970,8 +1990,15 @@ class FanFicFarePlugin(InterfaceAction):
if flag == 'r' or (flag == 'n' and book['added']):
if coldef['datatype'] in ('int','float'): # for favs, etc--site specific metadata.
if 'anthology_meta_list' in book and meta in book['anthology_meta_list']:
# re-split list, strip commas, convert to floats, sum up.
val = sum([ float(x.replace(",","")) for x in val.split(", ") ])
# re-split list, strip commas, convert to floats
items = [ float(x.replace(",","")) for x in val.split(", ") ]
if anthaver:
if items:
val = sum(items) / float(len(items))
else:
val = 0
else:
val = sum(items)
else:
val = unicode(val).replace(",","")
else:
@@ -2044,7 +2071,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 +2084,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 +2109,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 +2132,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 +2150,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 +2516,7 @@ class FanFicFarePlugin(InterfaceAction):
def restore_cursor(self):
QApplication.restoreOverrideCursor()
def split_text_to_urls(urls):
# remove dups while preserving order.
dups=set()
+9 -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
@@ -1029,15 +1008,24 @@ cliches_label:Character Cliches
## 'mode'. 'r' to Replace any existing values, 'a' to Add to existing
## value (use with tag-like columns), and 'n' for setting on New books
## only. (Default is 'r'.)
## Literal strings can be set into custom columns using double quotes.
## Each metadata=>column mapping must be on a separate line and each
## needs to have one space at the start of each line.
## 'r_anthaver' and 'n_anthaver' can be used to indicate the same as
## 'r' and 'n' for normal downloads, but to average the metadata for
## the differents story in an anthology before setting in integer and
## float type custom columns. This can be useful for a averrating
## column, for example. Default is to sum the values of all stories,
## and numChapters and numWords are always summed.
#custom_columns_settings:
# cliches=>#acolumn
# themes=>#bcolumn,a
# timeline=>#ccolumn,n
# "FanFiction"=>#collection
# averrating=>#averrating,r_anthaver
[efiction.esteliel.de]
## Site dedicated to these categories/characters/ships
@@ -1268,27 +1256,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 +1503,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 +1644,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 +2011,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 +2304,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 +2317,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, 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\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:"
+10 -8
View File
@@ -2,17 +2,19 @@
# Copyright (C) YEAR ORGANIZATION
#
# Translators:
# Fitoschido, 2014
# Adolfo Jayme Barrientos, 2014
# dario hereñu <magallania@gmail.com>, 2015
# Enrique Medina <medina9304@gmail.com>, 2016
# 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-07-12 05:10+0000\n"
"Last-Translator: Enrique Medina <medina9304@gmail.com>\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 +467,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"
@@ -479,17 +481,17 @@ msgstr "FanFicFare ahora incluye búsquedas, código de color y comprobación de
#: config.py:693
msgid "View \"Safe\" personal.ini"
msgstr ""
msgstr "Ver personal.ini \"Seguro\""
#: config.py:698 config.py:775
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 ""
@@ -541,7 +543,7 @@ msgstr "Valores predeterminados (%s) (sólo lectura)"
#: config.py:774
msgid "View 'Safe' personal.ini"
msgstr ""
msgstr "Ver personal.ini 'Seguro'"
#: config.py:808
msgid "Calibre Column Entry Names"
+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."
+73 -72
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-07-19 12:05+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"
@@ -83,7 +84,7 @@ msgstr "Starta om calibre nu."
#: config.py:192
msgid "List of Supported Sites"
msgstr "Lista av stöda platser"
msgstr "Lista av stödda platser"
#: config.py:194
msgid "FAQs"
@@ -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,23 +959,23 @@ 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"
msgstr ""
msgstr "Om inte ikryssad, kommer dessa fel inte sparas:%s"
#: config.py:1357 fff_plugin.py:1342 jobs.py:223
msgid "Not Overwriting, web site is not newer."
msgstr ""
msgstr "Skriver inte över, webbsida är inte nyare."
#: config.py:1358 fff_plugin.py:1321 jobs.py:262
msgid "Already contains %d chapters."
msgstr ""
msgstr "Innehåller redan %d kapitel."
#: config.py:1365
msgid "Saved Metadata Column:"
msgstr ""
msgstr "Sparad metadatakolumn:"
#: config.py:1366
msgid ""
@@ -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 ""
@@ -1088,7 +1089,7 @@ msgstr ""
#: config.py:1497
msgid "IMAP Folder Name"
msgstr ""
msgstr "IMAP katalognamn"
#: config.py:1498
msgid ""
@@ -1098,7 +1099,7 @@ msgstr ""
#: config.py:1507
msgid "Mark Emails Read"
msgstr ""
msgstr "Märk lästa epostmeddelanden"
#: config.py:1508
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:"
@@ -1455,15 +1456,15 @@ msgstr ""
#: fff_plugin.py:293
msgid "&Download from URLs"
msgstr ""
msgstr "&Hämta från adresser"
#: fff_plugin.py:295
msgid "Download FanFiction Books from URLs"
msgstr ""
msgstr "Hämta FanFiction Böcker från adresser"
#: fff_plugin.py:298
msgid "&Update Existing FanFiction Books"
msgstr ""
msgstr "&Uppdatera existerande FanFiction böcker"
#: fff_plugin.py:303
msgid "Get Story URLs from &Email"
@@ -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"
@@ -1812,7 +1813,7 @@ msgstr ""
#: fff_plugin.py:1159
msgid "Click '<b>Yes</b>' to Skip."
msgstr ""
msgstr "Tryck '<b>Ja</b>' för att hoppa över."
#: fff_plugin.py:1162
msgid "Story in Series Anthology(%s)."
@@ -1852,15 +1853,15 @@ 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>"
msgstr ""
msgstr "Ny webbadress: <a href=\"%(newurl)s\">%(newurl)s</a>"
#: fff_plugin.py:1276
msgid "Click '<b>Yes</b>' to update/overwrite book with new URL."
msgstr ""
msgstr "Klicka '<b>Ja</b>' för att uppdatera/skriva över bok med ny webbadress."
#: fff_plugin.py:1277
msgid "Click '<b>No</b>' to skip updating/overwriting this book."
@@ -1884,11 +1885,11 @@ msgstr ""
#: fff_plugin.py:1290
msgid "Click '<b>Yes</b>' to a new book with new URL."
msgstr ""
msgstr "Klicka '<b>Ja</b>' till en ny bok med ny webbadress."
#: 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)"
@@ -1920,7 +1921,7 @@ msgstr ""
#: fff_plugin.py:1461 fff_plugin.py:1659 fff_plugin.py:1689
msgid "See log for details."
msgstr ""
msgstr "Se logg för detaljer."
#: fff_plugin.py:1462
msgid "Proceed with updating your library(Error Column, if configured)?"
@@ -1936,11 +1937,11 @@ msgstr ""
#: fff_plugin.py:1477 fff_plugin.py:1714
msgid "FanFicFare log"
msgstr ""
msgstr "FanFicFare logg"
#: fff_plugin.py:1497
msgid "Download %s FanFiction Book(s)"
msgstr ""
msgstr "Hämta %s FanFiction bok/böcker"
#: fff_plugin.py:1504
msgid "Starting %d FanFicFare Downloads"
@@ -1952,7 +1953,7 @@ msgstr "Berättelsedetaljer:"
#: fff_plugin.py:1538
msgid "Error Updating Metadata"
msgstr ""
msgstr "Fel vid uppdatering av metadata"
#: fff_plugin.py:1539
msgid ""
File diff suppressed because it is too large Load Diff
+17 -16
View File
@@ -2,14 +2,15 @@
# Copyright (C) YEAR ORGANIZATION
#
# Translators:
# Andrii <dexteritymaster@gmail.com>, 2016
# Andrii <dexteritymaster@gmail.com>, 2014-2015
# Yuri Chornoivan <yurchor@ukr.net>, 2014
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-26 20:50+0000\n"
"Last-Translator: Andrii <dexteritymaster@gmail.com>\n"
"Language-Team: Ukrainian (http://www.transifex.com/calibre/calibre-plugins/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,55 +31,55 @@ msgstr "Шлях до бібліотеки calibre. Типово буде вик
#: common_utils.py:398
msgid "Keyboard shortcuts"
msgstr ""
msgstr "Клавіатурні гарячі клавіші"
#: common_utils.py:444
msgid "Undefined"
msgstr ""
msgstr "Невизначено"
#: common_utils.py:464
msgid "Prefs Viewer dialog"
msgstr ""
msgstr "Налаштування Вікна Перегляду"
#: common_utils.py:465
msgid "Preferences for: "
msgstr ""
msgstr "Налаштування для:"
#: common_utils.py:497
msgid "Clear"
msgstr ""
msgstr "Очистити"
#: common_utils.py:499
msgid "Clear all settings for this plugin"
msgstr ""
msgstr "Очистити всі налаштування для цього плагіну"
#: common_utils.py:526
msgid ""
"Are you sure you want to clear your settings in this library for this "
"plugin?"
msgstr ""
msgstr "Ви впевнені, що бажаєте очистити ваші налаштування в цій бібліотцеці для даного плагіну?"
#: common_utils.py:527
msgid ""
"Any settings in other libraries or stored in a JSON file in your calibre "
"plugins folder will not be touched."
msgstr ""
msgstr "Будь-які налаштування в інших бібліотеках, або збережені в файлі JSON в папці ваший плагінів не будуть змінені."
#: common_utils.py:528
msgid "You must restart calibre afterwards."
msgstr ""
msgstr "Після цього ви повинні перезавантажити Calibre."
#: common_utils.py:537
msgid "All settings for this plugin in this library have been cleared."
msgstr ""
msgstr "Всі налаштування для цього плагіну в цій бібліотеці були очищені."
#: common_utils.py:538
msgid "Please restart calibre now."
msgstr ""
msgstr "Будь-ласка перезавантажте Calibre."
#: common_utils.py:540
msgid "Restart calibre now"
msgstr ""
msgstr "Перезавантажити Calibre"
#: config.py:192
msgid "List of Supported Sites"
@@ -94,7 +95,7 @@ msgstr "Основні"
#: config.py:220
msgid "Calibre Cover"
msgstr ""
msgstr "Обкладинка Calibre"
#: config.py:228
msgid "Standard Columns"
@@ -106,7 +107,7 @@ msgstr "Нетипові стовпчики"
#: config.py:234
msgid "Email Settings"
msgstr ""
msgstr "Налаштування Пошти"
#: config.py:237
msgid "Other"
@@ -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
+41 -27
View File
@@ -206,6 +206,12 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter):
# b.extract()
metatext = stripHTML(grayspan).replace('Hurt/Comfort','Hurt-Comfort')
#logger.debug("metatext:(%s)"%metatext)
if 'Status: Complete' in metatext:
self.story.setMetadata('status', 'Completed')
else:
self.story.setMetadata('status', 'In-Progress')
metalist = metatext.split(" - ")
#logger.debug("metalist:(%s)"%metalist)
@@ -240,36 +246,44 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter):
self.story.setMetadata('dateUpdated',datetime.fromtimestamp(float(dates[0]['data-xutime'])))
self.story.setMetadata('datePublished',datetime.fromtimestamp(float(dates[-1]['data-xutime'])))
donechars = False
# Meta key titles and the metadata they go into, if any.
metakeys = {
# These are already handled separately.
'Chapters':False,
'Status':False,
'id':False,
'Updated':False,
'Published':False,
'Reviews':'reviews',
'Favs':'favs',
'Follows':'follows',
'Words':'numWords',
}
chars_ships_list=[]
while len(metalist) > 0:
if metalist[0].startswith('Chapters') or metalist[0].startswith('Status') or metalist[0].startswith('id:') or metalist[0].startswith('Updated:') or metalist[0].startswith('Published:'):
pass
elif metalist[0].startswith('Reviews'):
self.story.setMetadata('reviews',metalist[0].split(':')[1].strip())
elif metalist[0].startswith('Favs:'):
self.story.setMetadata('favs',metalist[0].split(':')[1].strip())
elif metalist[0].startswith('Follows:'):
self.story.setMetadata('follows',metalist[0].split(':')[1].strip())
elif metalist[0].startswith('Words'):
self.story.setMetadata('numWords',metalist[0].split(':')[1].strip())
elif not donechars:
# with 'pairing' support, pairings are bracketed w/o comma after
# [Caspian X, Lucy Pevensie] Edmund Pevensie, Peter Pevensie
self.story.extendList('characters',metalist[0].replace('[','').replace(']',',').split(','))
m = metalist.pop(0)
if ':' in m:
key = m.split(':')[0].strip()
if key in metakeys:
if metakeys[key]:
self.story.setMetadata(metakeys[key],m.split(':')[1].strip())
continue
# no ':' or not found in metakeys
chars_ships_list.append(m)
l = metalist[0]
while '[' in l:
self.story.addToList('ships',l[l.index('[')+1:l.index(']')].replace(', ','/'))
l = l[l.index(']')+1:]
donechars = True
metalist=metalist[1:]
if 'Status: Complete' in metatext:
self.story.setMetadata('status', 'Completed')
else:
self.story.setMetadata('status', 'In-Progress')
# all because sometimes chars can have ' - ' in them.
chars_ships_text = (' - ').join(chars_ships_list)
# print("chars_ships_text:%s"%chars_ships_text)
# with 'pairing' support, pairings are bracketed w/o comma after
# [Caspian X, Lucy Pevensie] Edmund Pevensie, Peter Pevensie
self.story.extendList('characters',chars_ships_text.replace('[','').replace(']',',').split(','))
l = chars_ships_text
while '[' in l:
self.story.addToList('ships',l[l.index('[')+1:l.index(']')].replace(', ','/'))
l = l[l.index(']')+1:]
if get_cover:
# Try the larger image first.
cover_url = ""
@@ -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:
@@ -14,7 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
import re
from base_xenforoforum_adapter import BaseXenForoForumAdapter
@@ -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)
+5
View File
@@ -112,6 +112,11 @@ class SiyeCoUkAdapter(BaseSiteAdapter): # XXX
# need(or easier) to pull other metadata from the author's list page.
authsoup = self.make_soup(self._fetchUrl(self.story.getMetadata('authorUrl')))
# remove author profile incase they've put the story URL in their bio.
profile = authsoup.find('div',{'id':'profile'})
if profile: # in case it changes.
profile.extract()
## Title
titlea = authsoup.find('a', href=re.compile(r'viewstory.php\?sid='+self.story.getMetadata('storyId')+"$"))
self.story.setMetadata('title',stripHTML(titlea))
@@ -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']))
+2 -2
View File
@@ -132,9 +132,9 @@ class BaseSiteAdapter(Configurable):
def set_cookiejar(self,cj):
self.cookiejar = cj
saveheaders = self.opener.addheaders
self.opener = u2.build_opener(u2.HTTPCookieProcessor(self.cookiejar),GZipProcessor())
self.opener.addheaders = [('User-Agent', self.getConfig('user_agent')),
('X-Clacks-Overhead','GNU Terry Pratchett')]
self.opener.addheaders = saveheaders
def load_cookiejar(self,filename):
'''
@@ -196,8 +196,8 @@ class BaseXenForoForumAdapter(BaseSiteAdapter):
soup = soup.find('li',{'class':'message'}) # limit first post for date stuff below. ('#' posts above)
if threadmark_chaps or self.getConfig('always_use_forumtags'):
## only use tags if threadmarks for chapters or
for tag in topsoup.findAll('a',{'class':'tag'}):
## only use tags if threadmarks for chapters or always_use_forumtags is on.
for tag in topsoup.findAll('a',{'class':'tag'}) + topsoup.findAll('span',{'class':'prefix'}):
tstr = stripHTML(tag)
if self.getConfig('capitalize_forumtags'):
tstr = tstr.title()
@@ -228,11 +228,18 @@ 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 or 'goto/post' 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)
# http://forums.spacebattles.com/goto/post?id=15222406#post-15222406
url = re.sub(r'/goto/post\?id=([0-9]+)(#post-[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.5",
description='A tool for downloading fanfiction to eBook formats',
long_description=long_description,
+1 -11
View File
@@ -1,6 +1,6 @@
# ffd-retief-hrd fanficfare
application: fanficfare
version: 2-3-02
version: 2-3-05
runtime: python27
api_version: 1
threadsafe: true
@@ -34,13 +34,3 @@ handlers:
- url: /.*
script: main.app
#builtins:
#- datastore_admin: on
libraries:
- name: django
version: "1.2"
- name: PIL
version: "1.1.7"
+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-04a.fanficfare.appspot.com">previous version
</a> is also available for you to use if necessary.
</p>
<div id='error'>
-14
View File
@@ -30,20 +30,6 @@ import datetime
import traceback
from StringIO import StringIO
## Just to shut up the appengine warning about "You are using the
## default Django version (0.96). The default Django version will
## change in an App Engine release in the near future. Please call
## use_library() to explicitly select a Django version. For more
## information see
## http://code.google.com/appengine/docs/python/tools/libraries.html#Django"
## Note that if you are using the SDK App Engine Launcher and hit an SDK
## Console page first, you will get a django version mismatch error when you
## to go hit one of the application pages. Just change a file again, and
## make sure to hit an app page before the SDK page to clear it.
#os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
#from google.appengine.dist import use_library
#use_library('django', '1.2')
from google.appengine.ext import db
from google.appengine.api import taskqueue
from google.appengine.api import users