mirror of
https://github.com/JimmXinu/FanFicFare.git
synced 2025-12-06 08:52:55 +01:00
commit
8a6e627bbb
11 changed files with 167 additions and 48 deletions
|
|
@ -33,7 +33,7 @@ except NameError:
|
|||
from calibre.customize import InterfaceActionBase
|
||||
|
||||
# pulled out from FanFicFareBase for saving in prefs.py
|
||||
__version__ = (4, 48, 1)
|
||||
__version__ = (4, 48, 7)
|
||||
|
||||
## Apparently the name for this class doesn't matter--it was still
|
||||
## 'demo' for the first few versions.
|
||||
|
|
|
|||
|
|
@ -673,6 +673,15 @@ browser_cache_age_limit:4.0
|
|||
## an error message in the ebook for that chapter.
|
||||
continue_on_chapter_error:false
|
||||
|
||||
## When continue_on_chapter_error:true, after
|
||||
## continue_on_chapter_error_try_limit chapters have failed, continue
|
||||
## processing, but stop trying to download chapters. Mark all such
|
||||
## chapters with chapter_title_error_mark, but chapter text will
|
||||
## explain that no download attempt was made because
|
||||
## continue_on_chapter_error_try_limit was exceeded. Set to -1 for
|
||||
## infinite chapter errors.
|
||||
continue_on_chapter_error_try_limit:5
|
||||
|
||||
## Append this to chapter titles that errored. Only used with
|
||||
## continue_on_chapter_error:true
|
||||
## Set empty to not mark failed chapters.
|
||||
|
|
@ -1634,7 +1643,8 @@ extra_titlepage_entries:eroticatags,disclaimer
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -1649,6 +1659,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -1666,9 +1677,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## AO3 doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -2583,7 +2598,8 @@ extracategories:Buffy the Vampire Slayer
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -2598,6 +2614,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -2615,9 +2632,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -2884,7 +2905,8 @@ cover_exclusion_regexp:/css/bir.png
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -2899,6 +2921,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -2916,9 +2939,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -3257,7 +3284,8 @@ extracategories:Star Trek
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -3272,6 +3300,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -3289,9 +3318,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -3523,7 +3556,8 @@ keep_style_attr: false
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -3538,6 +3572,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -3555,9 +3590,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ class LiteroticaSiteAdapter(BaseSiteAdapter):
|
|||
#logger.debug(data)
|
||||
## looking for /series/se URL to indicate this is a
|
||||
## chapter.
|
||||
if not soup.select_one('div.page__aside') and not soup.select_one('div.sidebar'):
|
||||
if not soup.select_one('div.page__aside') and not soup.select_one('div.sidebar') and not soup.select_one('div[class^="_sidebar_"]'):
|
||||
raise exceptions.FailedToDownload("Missing Story Info block, Beta turned off?")
|
||||
|
||||
storyseriestag = soup.select_one('a.bn_av')
|
||||
|
|
@ -385,6 +385,8 @@ class LiteroticaSiteAdapter(BaseSiteAdapter):
|
|||
pages = page_soup.select_one('div._pagination_h0sum_1')
|
||||
if not pages:
|
||||
pages = page_soup.select_one('div.clearfix.panel._pagination_1400x_1')
|
||||
if not pages:
|
||||
pages = page_soup.select_one('div[class^="panel clearfix _pagination_"]')
|
||||
# logger.debug(pages)
|
||||
|
||||
fullhtml = ""
|
||||
|
|
|
|||
|
|
@ -366,7 +366,7 @@ Some more longer description. "I suck at summaries!" "Better than it sounds!"
|
|||
<br />
|
||||
</div>
|
||||
'''
|
||||
elif self.story.getMetadata('storyId') == '667' and "chapter=2" in url:
|
||||
elif self.story.getMetadata('storyId') == '667' and ("chapter=2" in url or "chapter=3" in url or "chapter=4" in url):
|
||||
raise exceptions.FailedToDownload("Error downloading Chapter: %s!" % url)
|
||||
elif self.getSiteDomain() not in url:
|
||||
## for chapter_urls setting.
|
||||
|
|
|
|||
|
|
@ -230,6 +230,21 @@ class BaseSiteAdapter(Requestable):
|
|||
percent = 0.0
|
||||
per_step = 1.0/self.story.getChapterCount()
|
||||
# logger.debug("self.story.getChapterCount():%s per_step:%s"%(self.story.getChapterCount(),per_step))
|
||||
continue_on_chapter_error_try_limit = 5
|
||||
try:
|
||||
continue_on_chapter_error_try_limit = int(self.getConfig('continue_on_chapter_error_try_limit',
|
||||
continue_on_chapter_error_try_limit))
|
||||
except:
|
||||
logger.warning('Parsing continue_on_chapter_error_try_limit:%s failed, using %s'%(
|
||||
self.getConfig('continue_on_chapter_error_try_limit'),
|
||||
continue_on_chapter_error_try_limit))
|
||||
|
||||
def do_error_chapter(txt,title):
|
||||
data = self.make_soup(txt)
|
||||
title = title+self.getConfig("chapter_title_error_mark","(CHAPTER ERROR)")
|
||||
url="chapter url removed due to failure"
|
||||
return data, title, url
|
||||
|
||||
for index, chap in enumerate(self.chapterUrls):
|
||||
title = chap['title']
|
||||
url = chap['url']
|
||||
|
|
@ -263,9 +278,21 @@ class BaseSiteAdapter(Requestable):
|
|||
|
||||
try:
|
||||
if not data:
|
||||
data = self.getChapterTextNum(url,index)
|
||||
# if had to fetch and has existing chapters
|
||||
newchap = bool(self.oldchapters or self.oldchaptersmap)
|
||||
if( self.getConfig('continue_on_chapter_error') and
|
||||
continue_on_chapter_error_try_limit > 0 and # for -1 == infinite
|
||||
self.story.chapter_error_count >= continue_on_chapter_error_try_limit ):
|
||||
data, title, url = do_error_chapter("""<div>
|
||||
<p><b>Error</b></p>
|
||||
<p>FanFicFare didn't try to download this chapter, due to earlier chapter errors.</p><p>
|
||||
Because <b>continue_on_chapter_error:true</b> is set, processing continued, but because
|
||||
<b>continue_on_chapter_error_try_limit</b>(%s) has been exceeded, this chapter did not
|
||||
try to download.</p>
|
||||
<p>Chapter URL:<br><a href="%s">%s</a></p>
|
||||
</div>"""%(continue_on_chapter_error_try_limit,url,url),title)
|
||||
else:
|
||||
data = self.getChapterTextNum(url,index)
|
||||
# if had to fetch and has existing chapters
|
||||
newchap = bool(self.oldchapters or self.oldchaptersmap)
|
||||
|
||||
if index == 0 and self.getConfig('always_reload_first_chapter'):
|
||||
data = self.getChapterTextNum(url,index)
|
||||
|
|
@ -275,17 +302,15 @@ class BaseSiteAdapter(Requestable):
|
|||
newchap = False
|
||||
except Exception as e:
|
||||
if self.getConfig('continue_on_chapter_error',False):
|
||||
data = self.make_soup("""<div>
|
||||
data, title, url = do_error_chapter("""<div>
|
||||
<p><b>Error</b></p>
|
||||
<p>FanFicFare failed to download this chapter. Because
|
||||
<b>continue_on_chapter_error</b> is set to <b>true</b>, the download continued.</p>
|
||||
<p>Chapter URL:<br><a href="%s">%s</a></p>
|
||||
<p>Error:<br><pre>%s</pre></p>
|
||||
</div>"""%(url,url,traceback.format_exc().replace("&","&").replace(">",">").replace("<","<")))
|
||||
title = title+self.getConfig("chapter_title_error_mark","(CHAPTER ERROR)")
|
||||
</div>"""%(url,url,traceback.format_exc().replace("&","&").replace(">",">").replace("<","<")),title)
|
||||
logger.info("continue_on_chapter_error: (%s) %s"%(url,e))
|
||||
logger.debug(traceback.format_exc())
|
||||
url="chapter url removed due to failure"
|
||||
self.story.chapter_error_count += 1
|
||||
else:
|
||||
raise
|
||||
|
|
|
|||
|
|
@ -349,6 +349,7 @@ class BaseOTWAdapter(BaseSiteAdapter):
|
|||
collections = a.find_all('a')
|
||||
for collection in collections:
|
||||
self.story.addToList('collections',collection.string)
|
||||
self.story.addToList('collectionsUrl','https://'+self.host+collection['href'])
|
||||
|
||||
stats = metasoup.find('dl',{'class':'stats'})
|
||||
dt = stats.find_all('dt')
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ class SimpleCacheException(BrowserCacheException):
|
|||
SIMPLE_EOF = struct.Struct('<QLLLL') # magic_number, flags, crc32, stream_size, padding
|
||||
SIMPLE_EOF_SIZE = SIMPLE_EOF.size
|
||||
FLAG_HAS_SHA256 = 2
|
||||
ENTRY_MAGIC_NUMBER = 0xfcfb6d1ba7725c30
|
||||
EOF_MAGIC_NUMBER = 0xf4fa6f45970d41d8
|
||||
ENTRY_MAGIC_NUMBER = 0xfcfb6d1ba7725c30 # 305c 72a7 1b6d fbfc
|
||||
EOF_MAGIC_NUMBER = 0xf4fa6f45970d41d8 # d841 0d97 456f faf4
|
||||
THE_REAL_INDEX_MAGIC_NUMBER = 0x656e74657220796f
|
||||
|
||||
class SimpleCache(BaseChromiumCache):
|
||||
|
|
@ -163,6 +163,12 @@ def _validate_entry_file(path):
|
|||
def _read_entry_file(path,entry_file):
|
||||
"""Validate that a file is a cache entry file, return the URL (key) if valid"""
|
||||
# read from path into SimpleFileHeader, use key_length field to determine size of key, return key as byte string
|
||||
key = _read_entry_file_key(entry_file)
|
||||
if _key_hash(key) != os.path.basename(path).split('_')[0]:
|
||||
return None # key in file does not match the hash, something is wrong
|
||||
return key.decode('utf-8')
|
||||
|
||||
def _read_entry_file_key(entry_file):
|
||||
shformat = struct.Struct('<QLLLL')
|
||||
shformat_size = shformat.size
|
||||
data = entry_file.read(shformat_size)
|
||||
|
|
@ -170,23 +176,28 @@ def _read_entry_file(path,entry_file):
|
|||
if magic != ENTRY_MAGIC_NUMBER:
|
||||
return None # path is not a cache entry file, wrong magic number
|
||||
key = entry_file.read(key_length)
|
||||
if _key_hash(key) != os.path.basename(path).split('_')[0]:
|
||||
return None # key in file does not match the hash, something is wrong
|
||||
return key.decode('utf-8')
|
||||
|
||||
return key
|
||||
|
||||
def _skip_to_start_of_stream(entry_file):
|
||||
"""Assuming reader is at end of a stream back up to beginning of stream, returning size of data in stream"""
|
||||
entry_file.seek(-SIMPLE_EOF_SIZE, os.SEEK_CUR)
|
||||
start_eof_header = entry_file.tell()
|
||||
data = entry_file.read(SIMPLE_EOF_SIZE)
|
||||
(magic, flags, crc32, stream_size, padding) = SIMPLE_EOF.unpack(data)
|
||||
# logger.debug((magic, flags, crc32, stream_size, padding))
|
||||
if magic != EOF_MAGIC_NUMBER:
|
||||
raise SimpleCacheException("Supposed cache entry file did not end with EOF header with correct magic "
|
||||
"number: '%s'" % entry_file.name)
|
||||
seek_back = stream_size + SIMPLE_EOF_SIZE
|
||||
if flags & FLAG_HAS_SHA256:
|
||||
seek_back += 32
|
||||
entry_file.seek(-seek_back, os.SEEK_CUR)
|
||||
if stream_size == 0:
|
||||
logger.debug(">>>Stream size == 0")
|
||||
entry_file.seek(0, os.SEEK_SET)
|
||||
_read_entry_file_key(entry_file)
|
||||
stream_size = start_eof_header - entry_file.tell()
|
||||
else:
|
||||
seek_back = stream_size + SIMPLE_EOF_SIZE
|
||||
if flags & FLAG_HAS_SHA256:
|
||||
seek_back += 32
|
||||
entry_file.seek(-seek_back, os.SEEK_CUR)
|
||||
return stream_size
|
||||
|
||||
|
||||
|
|
@ -199,8 +210,8 @@ def _get_data_from_entry_file(path):
|
|||
def _read_data_from_entry(entry_file):
|
||||
""" Read the contents portion (stream 1 data) from the instance's cache entry. Return a byte string """
|
||||
entry_file.seek(0, os.SEEK_END)
|
||||
_skip_to_start_of_stream(entry_file)
|
||||
stream_size = _skip_to_start_of_stream(entry_file)
|
||||
_skip_to_start_of_stream(entry_file) # skip to start of LAST stream
|
||||
stream_size = _skip_to_start_of_stream(entry_file) # to start of FIRST stream
|
||||
ret = entry_file.read(stream_size)
|
||||
return ret
|
||||
|
||||
|
|
@ -233,8 +244,9 @@ def _read_meta_headers(entry_file):
|
|||
# uint32 info_size, uint32 flags, uint32 extra_flags, uint64 request_time, uint64 response_time, uint64 orig_response_time, uint32 header_size
|
||||
PRE_META_HEADER = struct.Struct('<LLL')
|
||||
predata = entry_file.read(PRE_META_HEADER.size)
|
||||
logger.debug(predata)
|
||||
logger.debug(PRE_META_HEADER.unpack(predata))
|
||||
# logger.debug("predata:")
|
||||
# logger.debug(predata)
|
||||
# logger.debug(PRE_META_HEADER.unpack(predata))
|
||||
extra_flags = PRE_META_HEADER.unpack(predata)[2]
|
||||
RESPONSE_EXTRA_INFO_HAS_ORIGINAL_RESPONSE_TIME = 1 << 2
|
||||
if ((extra_flags & RESPONSE_EXTRA_INFO_HAS_ORIGINAL_RESPONSE_TIME) != 0):
|
||||
|
|
@ -245,8 +257,8 @@ def _read_meta_headers(entry_file):
|
|||
META_HEADER = struct.Struct('<QQL')
|
||||
|
||||
data = entry_file.read(META_HEADER.size)
|
||||
logger.debug(data)
|
||||
logger.debug(META_HEADER.unpack(data))
|
||||
# logger.debug(data)
|
||||
# logger.debug(META_HEADER.unpack(data))
|
||||
(request_time, response_time) = META_HEADER.unpack(data)[:2]
|
||||
# not using original_response_time at this time.
|
||||
header_size = META_HEADER.unpack(data)[-1]
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import string
|
|||
import os, sys, platform
|
||||
|
||||
|
||||
version="4.48.1"
|
||||
version="4.48.7"
|
||||
os.environ['CURRENT_VERSION_ID']=version
|
||||
|
||||
global_cache = 'global_cache'
|
||||
|
|
|
|||
|
|
@ -568,6 +568,7 @@ def get_valid_keywords():
|
|||
'capitalize_forumtags',
|
||||
'continue_on_chapter_error',
|
||||
'chapter_title_error_mark',
|
||||
'continue_on_chapter_error_try_limit',
|
||||
'minimum_threadmarks',
|
||||
'first_post_title',
|
||||
'always_include_first_post',
|
||||
|
|
|
|||
|
|
@ -631,6 +631,15 @@ browser_cache_age_limit:4.0
|
|||
## an error message in the ebook for that chapter.
|
||||
continue_on_chapter_error:false
|
||||
|
||||
## When continue_on_chapter_error:true, after
|
||||
## continue_on_chapter_error_try_limit chapters have failed, continue
|
||||
## processing, but stop trying to download chapters. Mark all such
|
||||
## chapters with chapter_title_error_mark, but chapter text will
|
||||
## explain that no download attempt was made because
|
||||
## continue_on_chapter_error_try_limit was exceeded. Set to -1 for
|
||||
## infinite chapter errors.
|
||||
continue_on_chapter_error_try_limit:5
|
||||
|
||||
## Append this to chapter titles that errored. Only used with
|
||||
## continue_on_chapter_error:true
|
||||
## Set empty to not mark failed chapters.
|
||||
|
|
@ -1627,7 +1636,8 @@ extra_titlepage_entries:eroticatags,disclaimer
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -1642,6 +1652,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -1659,9 +1670,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## AO3 doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -2576,7 +2591,8 @@ extracategories:Buffy the Vampire Slayer
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -2591,6 +2607,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -2608,9 +2625,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -2877,7 +2898,8 @@ cover_exclusion_regexp:/css/bir.png
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -2892,6 +2914,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -2909,9 +2932,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -3250,7 +3277,8 @@ extracategories:Star Trek
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -3265,6 +3293,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -3282,9 +3311,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
@ -3516,7 +3549,8 @@ keep_style_attr: false
|
|||
## series04,series04Url etc.
|
||||
extra_valid_entries:fandoms, freeformtags, freefromtags,
|
||||
ao3categories, comments, chapterslashtotal, chapterstotal, kudos,
|
||||
hits, bookmarks, collections, byline, bookmarked, bookmarktags,
|
||||
hits, bookmarks, collections, collectionsUrl, collectionsHTML,
|
||||
byline, bookmarked, bookmarktags,
|
||||
bookmarksummary, bookmarkprivate, bookmarkrec, subscribed,
|
||||
markedforlater, restricted, series00, series01, series02, series03,
|
||||
series00Url, series01Url, series02Url, series03Url, series00HTML,
|
||||
|
|
@ -3531,6 +3565,7 @@ chapterstotal_label:Total Chapters
|
|||
kudos_label:Kudos
|
||||
hits_label:Hits
|
||||
collections_label:Collections
|
||||
collectionsHTML_label:Collections
|
||||
## Count of bookmarks on story by all users
|
||||
bookmarks_label:Bookmarks
|
||||
## Tags & Summary from *your* bookmark on the story. Only collected
|
||||
|
|
@ -3548,9 +3583,13 @@ series01HTML_label:Additional Series
|
|||
series02HTML_label:Additional Series
|
||||
series03HTML_label:Additional Series
|
||||
|
||||
## have to keep in order for name and URL to line up.
|
||||
keep_in_order_collections:true
|
||||
keep_in_order_collectionsUrl:true
|
||||
|
||||
## Assume entryUrl, apply to "<a class='%slink' href='%s'>%s</a>" to
|
||||
## make entryHTML.
|
||||
make_linkhtml_entries:series00,series01,series02,series03
|
||||
make_linkhtml_entries:series00,series01,series02,series03,collections
|
||||
|
||||
## OTW doesn't have anything it calls 'genre'. The adapter used to be
|
||||
## hardcoded to include the site specific metadata freeformtags &
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ name = "FanFicFare" # Required
|
|||
#
|
||||
# For a discussion on single-sourcing the version, see
|
||||
# https://packaging.python.org/guides/single-sourcing-package-version/
|
||||
version = "4.48.1"
|
||||
version = "4.48.7"
|
||||
|
||||
# This is a one-line description or tagline of what your project does. This
|
||||
# corresponds to the "Summary" metadata field:
|
||||
|
|
|
|||
Loading…
Reference in a new issue