Compare commits

...
10 Commits
21 changed files with 7162 additions and 2828 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ class FanFicFareBase(InterfaceActionBase):
description = _('UI plugin to download FanFiction stories from various sites.')
supported_platforms = ['windows', 'osx', 'linux']
author = 'Jim Miller'
version = (2, 2, 0)
version = (2, 2, 2)
minimum_calibre_version = (1, 48, 0)
#: This field defines the GUI plugin class that contains all the code
+3
View File
@@ -398,6 +398,9 @@ class AddNewDialog(SizePersistedDialog):
if not self.merge:
self.fileform.setCurrentIndex(self.fileform.findText(self.prefs['fileform']))
else:
# always epub on self.merge (anthology)
self.fileform.setCurrentIndex(self.fileform.findText('epub'))
# add collision options
self.set_collisions()
+43 -14
View File
@@ -85,9 +85,9 @@ authorId_label:Author ID
## show up in Calibre as tags. Also carried into mobi when converted.
extratags_label:Extra Tags
## The version of fanficdownloader
version_label:FFDL Version
version_label:Downloader Version
## Date formats used by FFDL. Published and Update don't have time.
## Date formats used by FanFicFare. Published and Update don't have time.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S
@@ -172,7 +172,7 @@ connect_timeout:60.0
## Note that if metakey == conditionalkey the conditional is ignored.
## You can use \s in the replacement to add explicit spaces. (The config parser
## tends to discard trailing spaces.)
## replace_metadata <entry>_LIST options: FFDL replace_metadata lines
## replace_metadata <entry>_LIST options: FanFicFare replace_metadata lines
## operate on individual list items for list entries. But if you
## want to do a replacement on the joined string for the whole list,
## you can by using <entry>_LIST. Example, if you added
@@ -232,7 +232,7 @@ connect_timeout:60.0
## Make sure to keep at least one space at the start of each line and
## to escape % to %%, if used.
## template => regexp to match => GC Setting to use.
## To use this, make sure you go to the Generate Cover tab in FFDL
## To use this, make sure you go to the Generate Cover tab in FanFicFare
## config and check 'Allow generate_cover_settings from personal.ini
## to override'
#generate_cover_settings:
@@ -306,20 +306,20 @@ anthology_tags:Anthology
## ships_LIST to change the / back to something else if you want.
sort_ships:false
## join_string_<entry> options -- FFDL list entries are comma
## join_string_<entry> options -- FanFicFare list entries are comma
## separated by default. You can use this to change that. For example,
## if you want authors separated with ' & ' instead, use
## join_string_calibre_author:\s&\s. (\s == space)
#join_string_author:,\s
## keep_in_order_<entry> options: FFDL sorts list entries by default
## keep_in_order_<entry> options: FanFicFare sorts list entries by default
## (except for author/authorUrl/authorId). But if you want to use an
## extra entry derived from author, it ends up sorted. For example, if
## you added calibre_author: keep_in_order_calibre_author:true
#keep_in_order_author:true
## User-agent
user_agent:FFDL/2.0
user_agent:FFF/2.X
## Each output format has a section that overrides [defaults]
[html]
@@ -330,7 +330,7 @@ user_agent:FFDL/2.0
## include_images is *not* available in the web service in any format.
#include_images:false
## This switch prevents FFDL from doing any processing on the images.
## This switch prevents FanFicFare from doing any processing on the images.
## Usually they would be converted to jpg, resized and optionally made
## grayscale.
no_image_processing: true
@@ -479,6 +479,22 @@ image_max_size: 580, 725
## space.
#grayscale_images: false
## jpg or png
## -- jpg produces smaller images, and may be supported by more
## readers, but it's older and doesn't allow transparency.
## Transparency removed as if remove_transparency: true
## -- png is newer but does allow transparency, but only in CLI.
## It doesn't work in calibre PI due to limitations of the API.
convert_images_to: jpg
## Remove transparency and fill with background_color if true.
remove_transparency: true
## This switch prevents FanFicFare from doing any processing on the images.
## Usually they would be converted to jpg, resized and optionally made
## grayscale.
#no_image_processing: false
## if the <img> tag doesn't have a div or a p around it, nook gets
## confused and displays it on every page after that under the text
## for the rest of the chapter. I doubt adding a div around the img
@@ -549,7 +565,7 @@ extratags: FanFiction,Testing,HTML
#is_adult:true
## archiveofourown.org stories allow chapters to be added out of
## order. So the newest chapter may not be the last one. FFDL update
## order. So the newest chapter may not be the last one. FanFicFare update
## doesn't like that. If do_update_hook is uncommented and set true,
## the adapter will discard all existing chapters from the newest one
## on when updating to enforce accurate chapters.
@@ -758,7 +774,7 @@ cover_exclusion_regexp:/images/.*?ribbon.gif
## Some adapters collect additional meta information beyond the
## standard ones. They need to be defined in extra_valid_entries to
## tell the rest of the FFDL system about them. They can be used in
## tell the rest of the FanFicFare system about them. They can be used in
## include_subject_tags, titlepage_entries, extra_titlepage_entries,
## logpage_entries, extra_logpage_entries, and include_in_* config
## items. You can also add additional entries here to build up
@@ -1319,6 +1335,19 @@ universe_as_series: true
## cover image. This lets you exclude them.
cover_exclusion_regexp:/css/bir.png
[tgstorytime.com]
## Site dedicated to these categories/characters/ships
extracategories:Transgender
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content.
#is_adult:true
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
[thehexfiles.net]
## Site dedicated to these categories/characters/ships
extracategories:Harry Potter
@@ -1536,7 +1565,7 @@ extra_valid_entries:reviews,favs,follows
## to be romantic pairings.
ships_label:Pairings
## Date formats used by FFDL. Published and Update don't usually have
## Date formats used by FanFicFare. Published and Update don't usually have
## time, but they do now on ffnet.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
@@ -1590,7 +1619,7 @@ cover_exclusion_regexp:(/imageu/|d_60_90\.jpg)
## reducing this sleep.
slow_down_sleep_time:4
## Date formats used by FFDL. Published and Update don't usually have
## Date formats used by FanFicFare. Published and Update don't usually have
## time, but they do now on ffnet.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
@@ -1610,7 +1639,7 @@ dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S
#fail_on_password: false
## fimfiction.net stories allow chapters to be added out of order. So
## the newest chapter may not be the last one. FFDL update doesn't
## the newest chapter may not be the last one. FanFicFare update doesn't
## like that. If do_update_hook is uncommented and set true, the
## adapter will discard all existing chapters from the newest one on
## when updating to enforce accurate chapters.
@@ -1743,7 +1772,7 @@ extraships:Nick Stokes/Greg Sanders
## phoenixsong.net, oddly, can have high rated chapters (login
## required) in the middle of a lower rated story. Use this to force
## FFDL to always login to phoenixsong.net so those stories download
## FanFicFare to always login to phoenixsong.net so those stories download
## correctly. If you have a login, this is recommended.
#force_login:true
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -133,6 +133,7 @@ import adapter_lotrfanfictioncom
import adapter_fhsarchivecom
import adapter_fanfictionjunkiesde
import adapter_devianthearts
import adapter_tgstorytimecom
## This bit of complexity allows adapters to be added by just adding
## importing. It eliminates the long if/else clauses we used to need
@@ -32,21 +32,6 @@ class DeviantHeartsAdapter(BaseEfictionAdapter):
@classmethod
def getDateFormat(self):
return "%m/%d/%y"
# def handleMetadataPair(self, key, value):
# if key == 'Warnings':
# for val in re.split("\s*,\s*", value):
# if value == 'None':
# return
# else:
# # toss numbers only.
# self.story.addToList('warnings', filter(lambda x : not x.isdigit() , val))
# # elif 'Categories' in key:
# # for val in re.split("\s*>\s*", value):
# # self.story.addToList('category', val)
# else:
# super(FHSArchiveComAdapter, self).handleMetadataPair(key, value)
def getClass():
return DeviantHeartsAdapter
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Copyright 2015 FanFicFare team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Software: eFiction
from base_efiction_adapter import BaseEfictionAdapter
class TGStorytimeComAdapter(BaseEfictionAdapter):
@staticmethod
def getSiteDomain():
return 'tgstorytime.com'
@classmethod
def getSiteAbbrev(self):
return 'tgstory'
@classmethod
def getDateFormat(self):
return "%m/%d/%y"
def getClass():
return TGStorytimeComAdapter
@@ -325,6 +325,8 @@ class BaseEfictionAdapter(BaseSiteAdapter):
## Handle warnings and login checks
errorDiv = soup.find("div", "errortext")
if errorDiv is None:
errorDiv = soup.find("div", "errormsg") # sometimes different class.
while errorDiv is not None:
if self.getMessageRegisteredUsersOnly() in errorDiv.prettify():
if not self.triedLoggingIn:
+43 -8
View File
@@ -17,6 +17,7 @@
from optparse import OptionParser
from os.path import expanduser, isfile, join, dirname
from os import access, R_OK
from subprocess import call
import ConfigParser
import getpass
@@ -92,6 +93,10 @@ def main(argv=None, parser=None, passed_defaultsini=None, passed_personalini=Non
parser.add_option('--force',
action='store_true', dest='force',
help='Force overwrite of an existing epub, download and overwrite all chapters.', )
parser.add_option('-i', '--infile',
help='Give a filename to read for URLs (and/or existing EPUB files with -u for updates).',
dest='infile', default=None,
metavar='INFILE')
parser.add_option('-l', '--list',
action='store_true', dest='list',
help='Get list of valid story URLs from page given.', )
@@ -111,7 +116,7 @@ def main(argv=None, parser=None, passed_defaultsini=None, passed_personalini=Non
logger = logging.getLogger('fanficfare')
logger.setLevel(logging.INFO)
if not options.siteslist and len(args) != 1:
if not (options.siteslist or options.infile) and len(args) != 1:
parser.error('incorrect number of arguments')
if options.siteslist:
@@ -124,24 +129,54 @@ def main(argv=None, parser=None, passed_defaultsini=None, passed_personalini=Non
if options.update and options.format != 'epub':
parser.error('-u/--update-epub only works with epub')
# for passing in a file list
if options.infile:
urls=[]
with open(options.infile,"r") as infile:
#print "File exists and is readable"
#fileurls = [line.strip() for line in infile]
for url in infile:
url = url[:url.find('#')].strip()
if len(url) > 0:
#print "URL: (%s)"%url
urls.append(url)
else:
urls = args
for url in urls:
try:
do_download(url,
options,
passed_defaultsini,
passed_personalini)
except Exception, e:
print "URL(%s) Failed: Exception (%s). Run URL individually for more detail."%(url,e)
# make rest a function and loop on it.
def do_download(arg,
options,
passed_defaultsini,
passed_personalini):
# Attempt to update an existing epub.
chaptercount = None
output_filename = None
if options.update:
try:
url, chaptercount = get_dcsource_chaptercount(args[0])
url, chaptercount = get_dcsource_chaptercount(arg)
if not url:
print 'No story URL found in epub to update.'
return
print 'Updating %s, URL: %s' % (args[0], url)
output_filename = args[0]
print 'Updating %s, URL: %s' % (arg, url)
output_filename = arg
except Exception:
# if there's an error reading the update file, maybe it's a URL?
# we'll look for an existing outputfile down below.
url = args[0]
url = arg
else:
url = args[0]
url = arg
try:
configuration = Configuration(adapters.getConfigSectionFor(url), options.format)
except exceptions.UnknownSite, e:
@@ -210,7 +245,7 @@ def main(argv=None, parser=None, passed_defaultsini=None, passed_personalini=Non
configuration.set('overrides', var, val)
if options.list or options.normalize:
retlist = get_urls_from_page(args[0], configuration, normalize=options.normalize)
retlist = get_urls_from_page(arg, configuration, normalize=options.normalize)
print '\n'.join(retlist)
return
+31 -13
View File
@@ -85,9 +85,9 @@ authorId_label:Author ID
## show up in Calibre as tags. Also carried into mobi when converted.
extratags_label:Extra Tags
## The version of fanficdownloader
version_label:FFDL Version
version_label:Downloader Version
## Date formats used by FFDL. Published and Update don't have time.
## Date formats used by FanFicFare. Published and Update don't have time.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S
@@ -205,7 +205,7 @@ connect_timeout:60.0
## Note that if metakey == conditionalkey the conditional is ignored.
## You can use \s in the replacement to add explicit spaces. (The config parser
## tends to discard trailing spaces.)
## replace_metadata <entry>_LIST options: FFDL replace_metadata lines
## replace_metadata <entry>_LIST options: FanFicFare replace_metadata lines
## operate on individual list items for list entries. But if you
## want to do a replacement on the joined string for the whole list,
## you can by using <entry>_LIST. Example, if you added
@@ -312,20 +312,20 @@ chapter_title_add_pattern:${index}. ${title}
## ships_LIST to change the / back to something else if you want.
sort_ships:false
## join_string_<entry> options -- FFDL list entries are comma
## join_string_<entry> options -- FanFicFare list entries are comma
## separated by default. You can use this to change that. For example,
## if you want authors separated with ' & ' instead, use
## join_string_calibre_author:\s&\s. (\s == space)
#join_string_author:,\s
## keep_in_order_<entry> options: FFDL sorts list entries by default
## keep_in_order_<entry> options: FanFicFare sorts list entries by default
## (except for author/authorUrl/authorId). But if you want to use an
## extra entry derived from author, it ends up sorted. For example, if
## you added calibre_author: keep_in_order_calibre_author:true
#keep_in_order_author:true
## User-agent
user_agent:FFDL/2.0
user_agent:FFF/2.X
## Each output format has a section that overrides [defaults]
[html]
@@ -341,7 +341,7 @@ user_agent:FFDL/2.0
#output_filename: books/${author}/${title}/${title}-${siteabbrev}_${authorId}_${storyId}${formatext}
#zip_output: false
## This switch prevents FFDL from doing any processing on the images.
## This switch prevents FanFicFare from doing any processing on the images.
## Usually they would be converted to jpg, resized and optionally made
## grayscale.
no_image_processing: true
@@ -503,6 +503,11 @@ convert_images_to: jpg
## Remove transparency and fill with background_color if true.
remove_transparency: true
## This switch prevents FanFicFare from doing any processing on the images.
## Usually they would be converted to jpg, resized and optionally made
## grayscale.
#no_image_processing: false
## if the <img> tag doesn't have a div or a p around it, nook gets
## confused and displays it on every page after that under the text
## for the rest of the chapter. I doubt adding a div around the img
@@ -573,7 +578,7 @@ extratags: FanFiction,Testing,HTML
#is_adult:true
## archiveofourown.org stories allow chapters to be added out of
## order. So the newest chapter may not be the last one. FFDL update
## order. So the newest chapter may not be the last one. FanFicFare update
## doesn't like that. If do_update_hook is uncommented and set true,
## the adapter will discard all existing chapters from the newest one
## on when updating to enforce accurate chapters.
@@ -782,7 +787,7 @@ cover_exclusion_regexp:/images/.*?ribbon.gif
## Some adapters collect additional meta information beyond the
## standard ones. They need to be defined in extra_valid_entries to
## tell the rest of the FFDL system about them. They can be used in
## tell the rest of the FanFicFare system about them. They can be used in
## include_subject_tags, titlepage_entries, extra_titlepage_entries,
## logpage_entries, extra_logpage_entries, and include_in_* config
## items. You can also add additional entries here to build up
@@ -1325,6 +1330,19 @@ universe_as_series: true
## cover image. This lets you exclude them.
cover_exclusion_regexp:/css/bir.png
[tgstorytime.com]
## Site dedicated to these categories/characters/ships
extracategories:Transgender
## Some sites do not require a login, but do require the user to
## confirm they are adult for adult content.
#is_adult:true
## Virtually all eFiction-based sites allow downloading the whole story in
## bulk using the 'Print' feature. If 'bulk_load' is set to 'true', both
## metadata and chapters can be loaded in one step
bulk_load:true
[thehexfiles.net]
## Site dedicated to these categories/characters/ships
extracategories:Harry Potter
@@ -1533,7 +1551,7 @@ extra_valid_entries:reviews,favs,follows
## to be romantic pairings.
ships_label:Pairings
## Date formats used by FFDL. Published and Update don't usually have
## Date formats used by FanFicFare. Published and Update don't usually have
## time, but they do now on ffnet.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
@@ -1590,7 +1608,7 @@ cover_exclusion_regexp:(/imageu/|d_60_90\.jpg)
## reducing this sleep.
slow_down_sleep_time:4
## Date formats used by FFDL. Published and Update don't usually have
## Date formats used by FanFicFare. Published and Update don't usually have
## time, but they do now on ffnet.
## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior
## Note that ini format requires % to be escaped as %%.
@@ -1610,7 +1628,7 @@ dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S
#fail_on_password: false
## fimfiction.net stories allow chapters to be added out of order. So
## the newest chapter may not be the last one. FFDL update doesn't
## the newest chapter may not be the last one. FanFicFare update doesn't
## like that. If do_update_hook is uncommented and set true, the
## adapter will discard all existing chapters from the newest one on
## when updating to enforce accurate chapters.
@@ -1743,7 +1761,7 @@ extraships:Nick Stokes/Greg Sanders
## phoenixsong.net, oddly, can have high rated chapters (login
## required) in the middle of a lower rated story. Use this to force
## FFDL to always login to phoenixsong.net so those stories download
## FanFicFare to always login to phoenixsong.net so those stories download
## correctly. If you have a login, this is recommended.
#force_login:true
+2 -2
View File
@@ -94,7 +94,7 @@ def get_update_data(inputio,
if getfilecount:
# spin through the manifest--only place there are item tags.
for item in contentdom.getElementsByTagName("item"):
# First, count the 'chapter' files. FFDL uses file0000.xhtml,
# First, count the 'chapter' files. FFF uses file0000.xhtml,
# but can also update epubs downloaded from Twisting the
# Hellmouth, which uses chapter0.html.
if( item.getAttribute("media-type") == "application/xhtml+xml" ):
@@ -175,7 +175,7 @@ def get_story_url_from_html(inputio,_is_good_url=None):
# spin through the manifest--only place there are item tags.
for item in contentdom.getElementsByTagName("item"):
# First, count the 'chapter' files. FFDL uses file0000.xhtml,
# First, count the 'chapter' files. FFF uses file0000.xhtml,
# but can also update epubs downloaded from Twisting the
# Hellmouth, which uses chapter0.html.
#print("---- item:%s"%item)
+1 -1
View File
@@ -73,7 +73,7 @@ class BaseStoryWriter(Configurable):
'formatname':'File Format',
'formatext':'File Extension',
'siteabbrev':'Site Abbrev',
'version':'FFDL Version'
'version':'Downloader Version'
}
self.story.setMetadata('formatname',self.getFormatName())
self.story.setMetadata('formatext',self.getFormatExt())
+2 -2
View File
@@ -25,7 +25,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.2.0.b1",
version="2.2.2",
description='A tool for downloading fanfiction to eBook formats',
long_description=long_description,
@@ -46,7 +46,7 @@ setup(
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 4 - Beta',
'Development Status :: 5 - Production/Stable',
'Environment :: Console',
+1 -1
View File
@@ -1,6 +1,6 @@
# ffd-retief-hrd fanfictiondownloader fanficfare
application: fanficfare
version: 2-2-0a1
version: 2-2-2
runtime: python27
api_version: 1
threadsafe: true
+22 -11
View File
@@ -2,7 +2,7 @@
<html>
<head>
<link href="/css/index.css" rel="stylesheet" type="text/css">
<title>FanFicFare - read Fanfiction from twilighted.net, fanfiction.net, fictionpress.com, fictionalley.org, ficwad.com, potionsandsnitches.net, harrypotterfanfiction.com, mediaminer.org on Kindle, Nook, Sony Reader, iPad, iPhone, Android, Aldiko, Stanza</title>
<title>FanFicFare - read Fanfiction from fanfiction.net, archiveofourown.org, fimfiction.net, fictionpress.com, fictionalley.org, ficwad.com, potionsandsnitches.net, harrypotterfanfiction.com, mediaminer.org and many others on Kindle, Nook, Sony Reader, iPad, iPhone, Android, Aldiko, Stanza, etc</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Place this tag in your head or just before your close body tag -->
@@ -27,28 +27,39 @@
much easier. </p>
</div>
<h3>Changes:</h3>
<h3>New Name and URL</h3>
<p>
This version changes the name of the project from
FanFictionDownLoader(FFDL) to FanFicFare(FFF). Along with
FanFictionDownLoader(FFDL) to FanFicFare. Along with
the name change, there are changes to the internal
structuring of the project code, but not to the functionality.
</p>
<p>
If you had saved configuration (including your
username/password for fic sites) in FFDL, you will need to
copy it over to FFF. Visit
copy it over to FanFicFare. Visit
the <a href="http://fanfictiondownloader.appspot.com/editconfig">FFDL
User Config</a> page, copy your settings and then paste
them on
the <a href="http://fanficfare.appspot.com/editconfig">FFF
the <a href="http://fanficfare.appspot.com/editconfig">FanFicFare
User Config</a> page.
</p>
<!-- ul>
<li>Add devianthearts.com as a Base eFiction site.</li>
<li>Allow https URLs for fictionmania.tv.</li>
<li>Allow storiesofarda.com/chapterAllview.asp?SID=999 urls.</li>
</ul -->
<h3>Changes:</h3>
<ul>
<li>Change the name to FanFicFare.</li>
<li>Fixes for literotica changes.</li>
<li>Fix error in debug output that uses wrong variable.</li>
<li>Change date format for onedirectionfanfiction.com.</li>
<li>Explicit html parse for BS4 when reading in existing epub. For cal1.48.</li>
<li>Fix for PI - eFiction Base adapter Anthology Series string.</li>
<li>Update translations.</li>
<li>Change some menu & gui details to be clearer.</li>
<li>Fix for ffnet's latest change to story/cover image.</li>
<li>Fix problems found during trawl through all sites -- thehookupzone.net and libraryofmoria.com now use eFiction Base.</li>
<li>Remove defunct sites - netraptor.org www.simplyundeniable.com www.wizardtales.net www.checkmated.com stargate-atlantis.org www.henneth-annun.net www.twiwrite.net www.dotmoon.net</li>
<li>Add option to check ffnet auth img vs cover img and not use author images as book covers. Defaults to on, add <b>skip_author_cover:false</b> to <b>[fanfiction.net]</b> section if you like author image covers.</li>
<li>Add site tgstorytime.com as an eFiction Base Adapter.</li>
</ul>
<p>
Questions? Check out our
<a href="https://github.com/JimmXinu/FanFicFare/wiki/FAQs">FAQs</a>.
@@ -127,7 +138,7 @@
<h3>Supported sites:</h3>
<p>
There's a
<a href="https://github.com/JimmXinu/FanFicFare/Supportedsites">Supported
<a href="https://github.com/JimmXinu/FanFicFare/wiki/Supportedsites">Supported
Sites</a> page in our wiki. If you have a site you'd like
to see supported, please check there first.
</p>