Merge pull request #2 from JimmXinu/main

Sync with main project
This commit is contained in:
VTecheira 2025-09-18 17:32:45 +02:00 committed by GitHub
commit 8a6e627bbb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 167 additions and 48 deletions

View file

@ -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.

View file

@ -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 &

View file

@ -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 = ""

View file

@ -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.

View file

@ -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,6 +278,18 @@ class BaseSiteAdapter(Requestable):
try:
if not data:
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)
@ -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("&","&amp;").replace(">","&gt;").replace("<","&lt;")))
title = title+self.getConfig("chapter_title_error_mark","(CHAPTER ERROR)")
</div>"""%(url,url,traceback.format_exc().replace("&","&amp;").replace(">","&gt;").replace("<","&lt;")),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

View file

@ -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')

View file

@ -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,19 +176,24 @@ 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)
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
@ -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]

View file

@ -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'

View file

@ -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',

View file

@ -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 &

View file

@ -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: