diff --git a/.gitignore b/.gitignore
index 4ae04fdb..9ed88b9b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@ cleanup.sh
FanFictionDownLoader.zip
*.epub
*Thumbs.db
+FanFicFare.zip
+output
diff --git a/calibre-plugin/__init__.py b/calibre-plugin/__init__.py
index 7f063e4c..f8308550 100644
--- a/calibre-plugin/__init__.py
+++ b/calibre-plugin/__init__.py
@@ -12,7 +12,7 @@ if sys.version_info >= (2, 7):
import logging
logger = logging.getLogger(__name__)
loghandler=logging.StreamHandler()
- loghandler.setFormatter(logging.Formatter("FFDL:%(levelname)s:%(filename)s(%(lineno)d):%(message)s"))
+ loghandler.setFormatter(logging.Formatter("FFF:%(levelname)s:%(filename)s(%(lineno)d):%(message)s"))
logger.addHandler(loghandler)
loghandler.setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG)
@@ -28,7 +28,7 @@ from calibre.customize import InterfaceActionBase
## Apparently the name for this class doesn't matter--it was still
## 'demo' for the first few versions.
-class FanFictionDownLoaderBase(InterfaceActionBase):
+class FanFicFareBase(InterfaceActionBase):
'''
This class is a simple wrapper that provides information about the
actual plugin class. The actual interface plugin class is called
@@ -38,7 +38,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase):
The reason for having two classes is that it allows the command line
calibre utilities to run without needing to load the GUI libraries.
'''
- name = 'FanFictionDownLoader'
+ name = 'FanFicFare'
description = _('UI plugin to download FanFiction stories from various sites.')
supported_platforms = ['windows', 'osx', 'linux']
author = 'Jim Miller'
@@ -48,7 +48,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase):
#: This field defines the GUI plugin class that contains all the code
#: that actually does something. Its format is module_path:class_name
#: The specified class must be defined in the specified module.
- actual_plugin = 'calibre_plugins.fanfictiondownloader_plugin.ffdl_plugin:FanFictionDownLoaderPlugin'
+ actual_plugin = 'calibre_plugins.fanficfare_plugin.ffdl_plugin:FanFicFarePlugin'
def is_customizable(self):
'''
@@ -79,7 +79,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase):
# top of the module as importing the config class will also cause the
# GUI libraries to be loaded, which we do not want when using calibre
# from the command line
- from calibre_plugins.fanfictiondownloader_plugin.config import ConfigWidget
+ from calibre_plugins.fanficfare_plugin.config import ConfigWidget
return ConfigWidget(self.actual_plugin_)
def save_settings(self, config_widget):
@@ -107,8 +107,8 @@ class FanFictionDownLoaderBase(InterfaceActionBase):
# CLI--it would load everytime anyway.
from StringIO import StringIO
from calibre.library import db
- from calibre_plugins.fanfictiondownloader_plugin.downloader import main as ffdl_main
- from calibre_plugins.fanfictiondownloader_plugin.prefs import PrefsFacade
+ from calibre_plugins.fanficfare_plugin.downloader import main as ffdl_main
+ from calibre_plugins.fanficfare_plugin.prefs import PrefsFacade
from calibre.utils.config import prefs as calibre_prefs
from optparse import OptionParser
diff --git a/calibre-plugin/common_utils.py b/calibre-plugin/common_utils.py
index 73ac823c..2210bdb7 100644
--- a/calibre-plugin/common_utils.py
+++ b/calibre-plugin/common_utils.py
@@ -118,7 +118,7 @@ def create_menu_item(ia, parent_menu, menu_text, image=None, tooltip=None,
if len(shortcut) == 0:
shortcut = ()
else:
- shortcut = _(shortcut)
+ shortcut = shortcut
ac = ia.create_action(spec=(menu_text, None, tooltip, shortcut),
attr=menu_text)
if image:
@@ -155,7 +155,7 @@ def create_menu_action_unique(ia, parent_menu, menu_text, image=None, tooltip=No
if len(shortcut) == 0:
shortcut = None
else:
- shortcut = _(shortcut)
+ shortcut = shortcut
if shortcut_name is None:
shortcut_name = menu_text.replace('&','')
@@ -393,9 +393,9 @@ class KeyboardConfigDialog(SizePersistedDialog):
This dialog is used to allow editing of keyboard shortcuts.
'''
def __init__(self, gui, group_name):
- SizePersistedDialog.__init__(self, gui, 'Keyboard shortcut dialog')
+ SizePersistedDialog.__init__(self, gui, 'FanFicFare plugin:Keyboard shortcut dialog')
self.gui = gui
- self.setWindowTitle('Keyboard shortcuts')
+ self.setWindowTitle(_('Keyboard shortcuts'))
layout = QVBoxLayout(self)
self.setLayout(layout)
@@ -461,8 +461,8 @@ class DateDelegate(QStyledItemDelegate):
class PrefsViewerDialog(SizePersistedDialog):
def __init__(self, gui, namespace):
- SizePersistedDialog.__init__(self, gui, 'Prefs Viewer dialog')
- self.setWindowTitle('Preferences for: '+namespace)
+ SizePersistedDialog.__init__(self, gui, _('Prefs Viewer dialog'))
+ self.setWindowTitle(_('Preferences for: ')+namespace)
self.gui = gui
self.db = gui.current_db
@@ -494,9 +494,9 @@ class PrefsViewerDialog(SizePersistedDialog):
button_box = QDialogButtonBox(QDialogButtonBox.Ok)
button_box.accepted.connect(self.accept)
- self.clear_button = button_box.addButton('Clear', QDialogButtonBox.ResetRole)
+ self.clear_button = button_box.addButton(_('Clear'), QDialogButtonBox.ResetRole)
self.clear_button.setIcon(get_icon('trash.png'))
- self.clear_button.setToolTip('Clear all settings for this plugin')
+ self.clear_button.setToolTip(_('Clear all settings for this plugin'))
self.clear_button.clicked.connect(self._clear_settings)
layout.addWidget(button_box)
@@ -523,10 +523,9 @@ class PrefsViewerDialog(SizePersistedDialog):
def _clear_settings(self):
from calibre.gui2.dialogs.confirm_delete import confirm
- message = '
Are you sure you want to clear your settings in this library for this plugin?
' \
- 'Any settings in other libraries or stored in a JSON file in your calibre plugins ' \
- 'folder will not be touched.
' \
- 'You must restart calibre afterwards.
'
+ message = '' + _('Are you sure you want to clear your settings in this library for this plugin?') + '
' \
+ + '' + _('Any settings in other libraries or stored in a JSON file in your calibre plugins folder will not be touched.') + '
' \
+ + '' + _('You must restart calibre afterwards.') + '
'
if not confirm(message, self.namespace+'_clear_settings', self):
return
ns_prefix = self._get_ns_prefix()
@@ -535,8 +534,8 @@ class PrefsViewerDialog(SizePersistedDialog):
del self.db.prefs[k]
self._populate_settings()
d = info_dialog(self, 'Settings deleted',
- 'All settings for this plugin in this library have been cleared.
'
- 'Please restart calibre now.
',
+ '' + _('All settings for this plugin in this library have been cleared.') + '
' \
+ + '' + _('Please restart calibre now.') + '
',
show_copy_button=False)
b = d.bb.addButton(_('Restart calibre now'), d.bb.AcceptRole)
b.setIcon(QIcon(I('lt.png')))
diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py
index 3ee1579d..e3face41 100644
--- a/calibre-plugin/config.py
+++ b/calibre-plugin/config.py
@@ -70,18 +70,18 @@ no_trans = { 'pini':'personal.ini',
'p':'password',
}
-from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs, PREFS_NAMESPACE
-from calibre_plugins.fanfictiondownloader_plugin.dialogs \
+from calibre_plugins.fanficfare_plugin.prefs import prefs, PREFS_NAMESPACE
+from calibre_plugins.fanficfare_plugin.dialogs \
import (UPDATE, UPDATEALWAYS, collision_order, save_collisions, RejectListDialog,
EditTextDialog, IniTextDialog, RejectUrlEntry)
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.adapters \
+from calibre_plugins.fanficfare_plugin.fff_internals.adapters \
import getConfigSections
-from calibre_plugins.fanfictiondownloader_plugin.common_utils \
+from calibre_plugins.fanficfare_plugin.common_utils \
import ( KeyboardConfigDialog, PrefsViewerDialog )
-from calibre_plugins.fanfictiondownloader_plugin.ffdl_util \
+from calibre_plugins.fanficfare_plugin.ffdl_util \
import (test_config)
from calibre.gui2.complete2 import EditWithComplete #MultiCompleteLineEdit
@@ -358,7 +358,7 @@ class BasicTab(QWidget):
self.l = QVBoxLayout()
groupbox.setLayout(self.l)
- tooltip = _("On each download, FFDL offers an option to select the output format. This sets what that option will default to.")
+ tooltip = _("On each download, FFF offers an option to select the output format. This sets what that option will default to.")
horz = QHBoxLayout()
label = QLabel(_('Default Output &Format:'))
label.setToolTip(tooltip)
@@ -375,7 +375,7 @@ class BasicTab(QWidget):
horz.addWidget(self.fileform)
self.l.addLayout(horz)
- tooltip = _("On each download, FFDL offers an option of what happens if that story already exists. This sets what that option will default to.")
+ tooltip = _("On each download, FFF offers an option of what happens if that story already exists. This sets what that option will default to.")
horz = QHBoxLayout()
label = QLabel(_('Default If Story Already Exists?'))
label.setToolTip(tooltip)
@@ -392,12 +392,12 @@ class BasicTab(QWidget):
self.l.addLayout(horz)
self.updatemeta = QCheckBox(_('Default Update Calibre &Metadata?'),self)
- self.updatemeta.setToolTip(_("On each download, FFDL offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site. This sets whether that will default to on or off. Columns set to 'New Only' in the column tabs will only be set for new books."))
+ self.updatemeta.setToolTip(_("On each download, FFF offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site. This sets whether that will default to on or off. Columns set to 'New Only' in the column tabs will only be set for new books."))
self.updatemeta.setChecked(prefs['updatemeta'])
self.l.addWidget(self.updatemeta)
self.updateepubcover = QCheckBox(_('Default Update EPUB Cover when Updating EPUB?'),self)
- self.updateepubcover.setToolTip(_("On each download, FFDL offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated. This sets whether that will default to on or off."))
+ self.updateepubcover.setToolTip(_("On each download, FFF offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated. This sets whether that will default to on or off."))
self.updateepubcover.setChecked(prefs['updateepubcover'])
self.l.addWidget(self.updateepubcover)
@@ -501,7 +501,7 @@ class BasicTab(QWidget):
self.l.addWidget(self.includeimages)
self.injectseries = QCheckBox(_("Inject calibre Series when none found?"),self)
- self.injectseries.setToolTip(_("If no series is found, inject the calibre series (if there is one) so it appears on the FFDL title page(not cover)."))
+ self.injectseries.setToolTip(_("If no series is found, inject the calibre series (if there is one) so it appears on the FFF title page(not cover)."))
self.injectseries.setChecked(prefs['injectseries'])
self.l.addWidget(self.injectseries)
@@ -510,7 +510,7 @@ class BasicTab(QWidget):
groupbox.setLayout(self.l)
self.rejectlist = QPushButton(_('Edit Reject URL List'), self)
- self.rejectlist.setToolTip(_("Edit list of URLs FFDL will automatically Reject."))
+ self.rejectlist.setToolTip(_("Edit list of URLs FFF will automatically Reject."))
self.rejectlist.clicked.connect(self.show_rejectlist)
self.l.addWidget(self.rejectlist)
@@ -610,7 +610,7 @@ class PersonalIniTab(QWidget):
self.l.addWidget(label)
# self.l.addSpacing(5)
- label = QLabel(_("New: ")+" "+_("FFDL now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors."))
+ label = QLabel(_("New: ")+" "+_("FFF now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors."))
label.setWordWrap(True)
self.l.addWidget(label)
@@ -639,7 +639,7 @@ class PersonalIniTab(QWidget):
self.defaults.clicked.connect(self.show_defaults)
self.l.addWidget(self.defaults)
- label = QLabel(_("Changes will only be saved if you click 'OK' to leave Customize FFDL."))
+ label = QLabel(_("Changes will only be saved if you click 'OK' to leave Customize FFF."))
label.setWordWrap(True)
self.l.addWidget(label)
@@ -744,7 +744,7 @@ class GenerateCoverTab(QWidget):
except KeyError:
gc_settings= []
- label = QLabel(_('The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFDL can run GC on new downloads and metadata updates. Pick a GC setting by site or Default.')%no_trans)
+ label = QLabel(_('The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFF can run GC on new downloads and metadata updates. Pick a GC setting by site or Default.')%no_trans)
label.setWordWrap(True)
self.l.addWidget(label)
self.l.addSpacing(5)
@@ -839,12 +839,12 @@ class CountPagesTab(QWidget):
horz = QHBoxLayout()
self.wordcount = QCheckBox('Word Count',self)
- self.wordcount.setToolTip(tooltip+"\n"+_('Will overwrite word count from FFDL metadata if set to update the same custom column.'))
+ self.wordcount.setToolTip(tooltip+"\n"+_('Will overwrite word count from FFF metadata if set to update the same custom column.'))
self.wordcount.setChecked('WordCount' in prefs['countpagesstats'])
horz.addWidget(self.wordcount)
- self.wordcountmissing = QCheckBox('Only if Word Count is Missing in FFDL Metadata',self)
- self.wordcountmissing.setToolTip(_("Only run Count Page's Word Count if checked and FFDL metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice."))
+ self.wordcountmissing = QCheckBox('Only if Word Count is Missing in FFF Metadata',self)
+ self.wordcountmissing.setToolTip(_("Only run Count Page's Word Count if checked and FFF metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice."))
self.wordcountmissing.setChecked(prefs['wordcountmissing'])
self.wordcountmissing.setEnabled(self.wordcount.isChecked())
horz.addWidget(self.wordcountmissing)
@@ -984,7 +984,7 @@ titleLabels = {
'formatname':_('File Format'),
'formatext':_('File Extension'),
'siteabbrev':_('Site Abbrev'),
- 'version':_('FFDL Version')
+ 'version':_('FFF Version')
}
class CustomColumnsTab(QWidget):
@@ -1102,7 +1102,7 @@ class StandardColumnsTab(QWidget):
self.l = QVBoxLayout()
self.setLayout(self.l)
- label = QLabel(_("The standard calibre metadata columns are listed below. You may choose whether FFDL will fill each column automatically on updates or only for new books."))
+ label = QLabel(_("The standard calibre metadata columns are listed below. You may choose whether FFF will fill each column automatically on updates or only for new books."))
label.setWordWrap(True)
self.l.addWidget(label)
self.l.addSpacing(5)
@@ -1137,7 +1137,7 @@ class ImapTab(QWidget):
self.setLayout(self.l)
row=0
- label = QLabel(_('These settings will allow FFDL to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below.'))
+ label = QLabel(_('These settings will allow FFF to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below.'))
label.setWordWrap(True)
self.l.addWidget(label,row,0,1,-1)
row+=1
@@ -1163,7 +1163,7 @@ class ImapTab(QWidget):
row+=1
label = QLabel(_('IMAP User Password'))
- tooltip = _("IMAP password. If left empty, FFDL will ask you for your password when you use the feature.")
+ tooltip = _("IMAP password. If left empty, FFF will ask you for your password when you use the feature.")
label.setToolTip(tooltip)
self.l.addWidget(label,row,0)
self.imappass = QLineEdit(self)
@@ -1174,7 +1174,7 @@ class ImapTab(QWidget):
row+=1
self.imapsessionpass = QCheckBox(_('Remember Password for Session (when not saved above)'),self)
- self.imapsessionpass.setToolTip(_('If checked, and no password is entered above, FFDL will remember your password until you close calibre or change Libraries.'))
+ self.imapsessionpass.setToolTip(_('If checked, and no password is entered above, FFF will remember your password until you close calibre or change Libraries.'))
self.imapsessionpass.setChecked(prefs['imapsessionpass'])
self.l.addWidget(self.imapsessionpass,row,0,1,-1)
row+=1
@@ -1196,7 +1196,7 @@ class ImapTab(QWidget):
row+=1
label = QLabel(_("It's safest if you create a separate email account that you use only "
- "for your story update notices. FFDL and calibre cannot guarantee that "
+ "for your story update notices. FFF and calibre cannot guarantee that "
"malicious code cannot get your email password once you've entered it. "
" Use this feature at your own risk. "))
label.setWordWrap(True)
diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py
index 639b0b34..43d5ee98 100644
--- a/calibre-plugin/dialogs.py
+++ b/calibre-plugin/dialogs.py
@@ -60,14 +60,14 @@ try:
except NameError:
pass # load_translations() added in calibre 1.9
-from calibre_plugins.fanfictiondownloader_plugin.common_utils \
+from calibre_plugins.fanficfare_plugin.common_utils \
import (ReadOnlyTableWidgetItem, ReadOnlyTextIconWidgetItem, SizePersistedDialog,
ImageTitleLayout, get_icon)
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.geturls import get_urls_from_html, get_urls_from_text
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.adapters import getNormalStoryURL
+from calibre_plugins.fanficfare_plugin.fff_internals.geturls import get_urls_from_html, get_urls_from_text
+from calibre_plugins.fanficfare_plugin.fff_internals.adapters import getNormalStoryURL
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.configurable \
+from calibre_plugins.fanficfare_plugin.fff_internals.configurable \
import (get_valid_sections, get_valid_entries,
get_valid_keywords, get_valid_entry_keywords)
@@ -243,7 +243,7 @@ class AddNewDialog(SizePersistedDialog):
self.l = QVBoxLayout()
self.setLayout(self.l)
- self.setWindowTitle(_('FanFictionDownLoader'))
+ self.setWindowTitle('FanFicFare')
self.setWindowIcon(icon)
self.toplabel=QLabel("Toplabel")
@@ -588,7 +588,7 @@ class LoopProgressDialog(QProgressDialog):
self.start_time = datetime.now()
# can't import at file load.
- from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs
+ from calibre_plugins.fanficfare_plugin.prefs import prefs
self.show_est_time = prefs['show_est_time']
## self.do_loop does QTimer.singleShot on self.do_loop also.
@@ -686,7 +686,7 @@ class AboutDialog(QDialog):
self.label = QLabel(text)
self.label.setOpenExternalLinks(True)
self.label.setWordWrap(True)
- self.setWindowTitle(_('About FanFictionDownLoader'))
+ self.setWindowTitle(_('About FanFicFare'))
self.setWindowIcon(icon)
self.l.addWidget(self.logo, 0, 0)
self.l.addWidget(self.label, 0, 1)
@@ -1026,7 +1026,7 @@ class RejectListDialog(SizePersistedDialog):
layout = QVBoxLayout(self)
self.setLayout(layout)
title_layout = ImageTitleLayout(self, icon, header,
- ' '+_('FFDL will remember these URLs and display the note and offer to reject them if you try to download them again later.'))
+ ' '+_('FFF will remember these URLs and display the note and offer to reject them if you try to download them again later.'))
layout.addLayout(title_layout)
rejects_layout = QHBoxLayout()
layout.addLayout(rejects_layout)
diff --git a/calibre-plugin/ffdl_plugin.py b/calibre-plugin/ffdl_plugin.py
index 48c60225..4b46c990 100644
--- a/calibre-plugin/ffdl_plugin.py
+++ b/calibre-plugin/ffdl_plugin.py
@@ -48,17 +48,17 @@ try:
except NameError:
pass # load_translations() added in calibre 1.9
-from calibre_plugins.fanfictiondownloader_plugin.common_utils import (set_plugin_icon_resources, get_icon,
- create_menu_action_unique, get_library_uuid)
+from calibre_plugins.fanficfare_plugin.common_utils import (set_plugin_icon_resources, get_icon,
+ create_menu_action_unique, get_library_uuid)
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, exceptions
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.epubutils import get_dcsource, get_dcsource_chaptercount, get_story_url_from_html
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.geturls import get_urls_from_page, get_urls_from_html, get_urls_from_text, get_urls_from_imap
+from calibre_plugins.fanficfare_plugin.fff_internals import adapters, exceptions
+from calibre_plugins.fanficfare_plugin.fff_internals.epubutils import get_dcsource, get_dcsource_chaptercount, get_story_url_from_html
+from calibre_plugins.fanficfare_plugin.fff_internals.geturls import get_urls_from_page, get_urls_from_html, get_urls_from_text, get_urls_from_imap
-from calibre_plugins.fanfictiondownloader_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config, get_ffdl_personalini)
-from calibre_plugins.fanfictiondownloader_plugin.config import (permitted_values, rejecturllist)
-from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs
-from calibre_plugins.fanfictiondownloader_plugin.dialogs import (
+from calibre_plugins.fanficfare_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config, get_ffdl_personalini)
+from calibre_plugins.fanficfare_plugin.config import (permitted_values, rejecturllist)
+from calibre_plugins.fanficfare_plugin.prefs import prefs
+from calibre_plugins.fanficfare_plugin.dialogs import (
AddNewDialog, UpdateExistingDialog,
LoopProgressDialog, UserPassDialog, AboutDialog, CollectURLDialog, RejectListDialog, EmailPassDialog,
OVERWRITE, OVERWRITEALWAYS, UPDATE, UPDATEALWAYS, ADDNEW, SKIP, CALIBREONLY,
@@ -76,9 +76,9 @@ formmapping = {
PLUGIN_ICONS = ['images/icon.png']
-class FanFictionDownLoaderPlugin(InterfaceAction):
+class FanFicFarePlugin(InterfaceAction):
- name = 'FanFictionDownLoader'
+ name = 'FanFicFare'
# Declare the main action associated with this plugin
# The keyboard shortcut can be None if you dont want to use a keyboard
@@ -86,7 +86,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
# keyboard shortcuts, so try to use an unusual/unused shortcut.
# (text, icon_path, tooltip, keyboard shortcut)
# icon_path isn't in the zip--icon loaded below.
- action_spec = (_('FanFictionDownLoader'), None,
+ action_spec = (_('FanFicFare'), None,
_('Download FanFiction stories from various web sites'), ())
# None for keyboard shortcut doesn't allow shortcut. () does, there just isn't one yet
@@ -117,7 +117,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
# are not found in the zip file will result in null QIcons.
icon = get_icon('images/icon.png')
- self.qaction.setText(_('FanFictionDL'))
+ self.qaction.setText(_('FanFicFare'))
# The qaction is automatically created from the action_spec defined
# above
@@ -237,7 +237,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
def rebuild_menus(self):
with self.menus_lock:
- #self.qaction.setText("FFDL")
+ #self.qaction.setText("FFF")
do_user_config = self.interface_action_base_plugin.do_user_config
self.menu.clear()
@@ -332,17 +332,18 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
self.menu.addSeparator()
self.config_action = self.create_menu_item_ex(self.menu, _('&Configure Plugin'),
image= 'config.png',
- unique_name='Configure FanFictionDownLoader',
- shortcut_name=_('Configure FanFictionDownLoader'),
+ unique_name='Configure FanFicFare',
+ shortcut_name=_('Configure FanFicFare'),
triggered=partial(do_user_config,parent=self.gui))
self.about_action = self.create_menu_item_ex(self.menu, _('About Plugin'),
image= 'images/icon.png',
- unique_name='About FanFictionDownLoader',
- shortcut_name=_('About FanFictionDownLoader'),
+ unique_name='About FanFicFare',
+ shortcut_name=_('About FanFicFare'),
triggered=self.about)
self.gui.keyboard.finalize()
+
def about(self):
# Get the about text from a file inside the plugin zip file
@@ -399,7 +400,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
def get_urls_from_imap_menu(self):
if not prefs['imapserver'] or not prefs['imapuser'] or not prefs['imapfolder']:
- s=_('FFDL Email Settings are not configured.')
+ s=_('FFF Email Settings are not configured.')
info_dialog(self.gui, s, s, show=True, show_copy_button=False)
return
@@ -569,7 +570,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
self.gui.iactions['Remove Books'].do_library_delete(d.get_reject_list_ids())
else:
- message=""+_("Rejecting FFDL URLs: None of the books selected have FanFiction URLs.")+"
"+_("Proceed to Remove?")+"
"
+ message=""+_("Rejecting FFF URLs: None of the books selected have FanFiction URLs.")+"
"+_("Proceed to Remove?")+"
"
if confirm(message,'fanfictiondownloader_reject_non_fanfiction', self.gui):
self.gui.iactions['Remove Books'].delete_books()
@@ -627,7 +628,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
if not filenames or len(filenames) != len (url_list):
info_dialog(self.gui, _("Cannot Update Anthology"),
- ""+_("Cannot Update Anthology")+"
"+_("Book isn't an FFDL Anthology or contains book(s) without valid FFDL URLs."),
+ "
"+_("Cannot Update Anthology")+"
"+_("Book isn't an FFF Anthology or contains book(s) without valid FFF URLs."),
show=True,
show_copy_button=False)
remove_dir(tdir)
@@ -1100,7 +1101,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
elif chaptercount > urlchaptercount:
raise NotGoingToDownload(_("Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update.") % (chaptercount,urlchaptercount),'dialog_error.png')
elif chaptercount == 0:
- raise NotGoingToDownload(_("FFDL doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update."),'dialog_error.png')
+ raise NotGoingToDownload(_("FFF doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update."),'dialog_error.png')
if collision == OVERWRITE and \
db.has_format(book_id,formmapping[fileform],index_is_id=True):
@@ -1209,7 +1210,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
payload = ([], book_list, options)
self.gui.proceed_question(self.update_error_column,
payload, htmllog,
- _('FFDL log'), _('FFDL download ended'), msg,
+ _('FFF log'), _('FFF download ended'), msg,
show_copy_button=False)
return
@@ -1227,7 +1228,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
func = 'arbitrary_n'
cpus = self.gui.job_manager.server.pool_size
- args = ['calibre_plugins.fanfictiondownloader_plugin.jobs', 'do_download_worker',
+ args = ['calibre_plugins.fanficfare_plugin.jobs', 'do_download_worker',
(book_list, options, cpus)]
desc = _('Download FanFiction Book')
job = self.gui.job_manager.run_job(
@@ -1270,7 +1271,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
logger.error("Error Updating Metadata:\n%s"%det_msg)
error_dialog(self.gui,
_("Error Updating Metadata"),
- "
"+_("An error has occurred while FFDL was updating calibre's metadata for %s .")%(book['url'],book['title'])+"
"+
+ ""+_("An error has occurred while FFF was updating calibre's metadata for %s .")%(book['url'],book['title'])+"
"+
_("The ebook has been updated, but the metadata has not."),
det_msg=det_msg,
show=True)
@@ -1380,7 +1381,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
show_copy_button=False)
return
- msg = ''+_('FFDL found %s good and %s bad updates.')%(len(good_list),len(bad_list))+'
'
+ msg = ''+_('FFF found %s good and %s bad updates.')%(len(good_list),len(bad_list))+'
'
if len(bad_list) > 0:
msg = msg + '''
%s
@@ -1419,7 +1420,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
%s
%s
%s
'''%(
- _('FFDL found %s good and %s bad updates.')%(len(good_list),len(bad_list)),
+ _('FFF found %s good and %s bad updates.')%(len(good_list),len(bad_list)),
_('See log for details.'),
_('Proceed with updating your library?')
)
@@ -1445,7 +1446,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
self.gui.proceed_question(do_update_func,
payload, htmllog,
- _('FFDL log'), _('FFDL download complete'), msg,
+ _('FFF log'), _('FFF download complete'), msg,
show_copy_button=False)
def do_download_merge_update(self, payload):
@@ -1498,7 +1499,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
good_list = sorted(good_list,key=lambda x : x['listorder'])
bad_list = sorted(bad_list,key=lambda x : x['listorder'])
- self.gui.status_bar.show_message(_('FFDL Adding/Updating books.'))
+ self.gui.status_bar.show_message(_('FFF Adding/Updating books.'))
if good_list or prefs['mark'] or (bad_list and prefs['errorcol'] != '' and prefs['errorcol'] in self.gui.library_view.model().custom_columns):
LoopProgressDialog(self.gui,
@@ -1839,7 +1840,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
rl_plugin = self.gui.iactions['Reading List']
except:
if prefs['addtolists'] or prefs['addtoreadlists']:
- message=""+_("You configured FanFictionDownLoader to automatically update Reading Lists, but you don't have the %s plugin installed anymore?")%'Reading List'+"
"
+ message=""+_("You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?")%'Reading List'+"
"
confirm(message,'fanfictiondownloader_no_reading_list_plugin', self.gui)
return
@@ -1851,7 +1852,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
lists = self.get_clean_reading_lists(prefs['read_lists'])
if len(lists) < 1 :
- message=""+_("You configured FanFictionDownLoader to automatically update \"To Read\" Reading Lists, but you don't have any lists set?")+"
"
+ message=""+_("You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?")+"
"
confirm(message,'fanfictiondownloader_no_read_lists', self.gui)
for l in lists:
if l in rl_plugin.get_list_names():
@@ -1861,13 +1862,13 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
display_warnings=False)
else:
if l != '':
- message=""+_("You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?")%l+"
"
+ message=""+_("You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?")%l+"
"
confirm(message,'fanfictiondownloader_no_reading_list_%s'%l, self.gui)
if prefs['addtolists'] and (add or (prefs['addtolistsonread'] and prefs['addtoreadlists']) ):
lists = self.get_clean_reading_lists(prefs['send_lists'])
if len(lists) < 1 :
- message=""+_("You configured FanFictionDownLoader to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?")+"
"
+ message=""+_("You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?")+"
"
confirm(message,'fanfictiondownloader_no_send_lists', self.gui)
for l in lists:
@@ -1879,7 +1880,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):
display_warnings=False)
else:
if l != '':
- message=""+_("You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?")%l+"
"
+ message=""+_("You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?")%l+"
"
confirm(message,'fanfictiondownloader_no_reading_list_%s'%l, self.gui)
def make_mi_from_book(self,book):
diff --git a/calibre-plugin/ffdl_util.py b/calibre-plugin/ffdl_util.py
index b36055cb..2fbbac8b 100644
--- a/calibre-plugin/ffdl_util.py
+++ b/calibre-plugin/ffdl_util.py
@@ -13,9 +13,9 @@ from ConfigParser import ParsingError
import logging
logger = logging.getLogger(__name__)
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, exceptions
-from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.configurable import Configuration
-from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs
+from calibre_plugins.fanficfare_plugin.fff_internals import adapters, exceptions
+from calibre_plugins.fanficfare_plugin.fff_internals.configurable import Configuration
+from calibre_plugins.fanficfare_plugin.prefs import prefs
def get_ffdl_personalini():
if prefs['includeimages']:
diff --git a/calibre-plugin/images/icon.png b/calibre-plugin/images/icon.png
index e9715307..f71d750a 100644
Binary files a/calibre-plugin/images/icon.png and b/calibre-plugin/images/icon.png differ
diff --git a/calibre-plugin/images/icon2.xcf b/calibre-plugin/images/icon2.xcf
new file mode 100644
index 00000000..d8fa5cb4
Binary files /dev/null and b/calibre-plugin/images/icon2.xcf differ
diff --git a/calibre-plugin/images/old icon.png b/calibre-plugin/images/old icon.png
new file mode 100644
index 00000000..e9715307
Binary files /dev/null and b/calibre-plugin/images/old icon.png differ
diff --git a/calibre-plugin/jobs.py b/calibre-plugin/jobs.py
index 917539a5..e2ef3436 100644
--- a/calibre-plugin/jobs.py
+++ b/calibre-plugin/jobs.py
@@ -42,7 +42,7 @@ def do_download_worker(book_list, options,
logger.info("%s"%book['url'])
if book['good']:
total += 1
- args = ['calibre_plugins.fanfictiondownloader_plugin.jobs',
+ args = ['calibre_plugins.fanficfare_plugin.jobs',
'do_download_for_worker',
(book,options)]
job = ParallelJob('arbitrary_n',
@@ -95,16 +95,16 @@ def do_download_for_worker(book,options,notification=lambda x,y:x):
Child job, to download story when run as a worker job
'''
- from calibre_plugins.fanfictiondownloader_plugin import FanFictionDownLoaderBase
- ffdlbase = FanFictionDownLoaderBase(options['plugin_path'])
+ from calibre_plugins.fanficfare_plugin import FanFicFareBase
+ ffdlbase = FanFicFareBase(options['plugin_path'])
with ffdlbase:
- from calibre_plugins.fanfictiondownloader_plugin.dialogs import (NotGoingToDownload,
+ from calibre_plugins.fanficfare_plugin.dialogs import (NotGoingToDownload,
OVERWRITE, OVERWRITEALWAYS, UPDATE, UPDATEALWAYS, ADDNEW, SKIP, CALIBREONLY)
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, writers, exceptions
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.epubutils import get_update_data
+ from calibre_plugins.fanficfare_plugin.fff_internals import adapters, writers, exceptions
+ from calibre_plugins.fanficfare_plugin.fff_internals.epubutils import get_update_data
- from calibre_plugins.fanfictiondownloader_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config)
+ from calibre_plugins.fanficfare_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config)
try:
book['comment'] = _('Download started...')
diff --git a/plugin-defaults.ini b/calibre-plugin/plugin-defaults.ini
similarity index 97%
rename from plugin-defaults.ini
rename to calibre-plugin/plugin-defaults.ini
index 4cb63eae..f6bd44f6 100644
--- a/plugin-defaults.ini
+++ b/calibre-plugin/plugin-defaults.ini
@@ -1,2003 +1,2003 @@
-# Copyright 2013 Fanficdownloader 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.
-#
-
-[defaults]
-
-## [defaults] section applies to all formats and sites but may be
-## overridden at several levels. Example:
-
-## [defaults]
-## titlepage_entries: category,genre, status
-## [www.whofic.com]
-## # overrides defaults.
-## titlepage_entries: category,genre, status,dateUpdated,rating
-## [epub]
-## # overrides defaults & site section
-## titlepage_entries: category,genre, status,datePublished,dateUpdated,dateCreated
-## [www.whofic.com:epub]
-## # overrides defaults, site section & format section
-## titlepage_entries: category,genre, status,datePublished
-## [overrides]
-## # overrides all other sections
-## titlepage_entries: category
-
-## Some sites also require the user to confirm they are adult for
-## adult content. Uncomment by removing '#' in front of is_adult.
-#is_adult:true
-
-## All available titlepage_entries and the label used for them:
-## _label:
-## Labels may be customized.
-title_label:Title
-storyUrl_label:Story URL
-description_label:Summary
-author_label:Author
-authorUrl_label:Author URL
-## epub, txt, html
-formatname_label:File Format
-## .epub, .txt, .html
-formatext_label:File Extension
-## Category and Genre have overlap, depending on the site.
-## Sometimes Harry Potter is a category and Fantasy a genre. (fanfiction.net)
-## Sometimes Fantasy is category *and* a genre (fictionpress.com)
-## Sometimes there are multiple categories and/or genres.
-category_label:Category
-genre_label:Genre
-language_label:Language
-characters_label:Characters
-ships_label:Relationships
-series_label:Series
-seriesUrl_label:Series URL
-## seriesHTML is series as a link to seriesUrl.
-seriesHTML_label:Series
-## Completed/In-Progress
-status_label:Status
-## Dates story first published, last updated, and downloaded(last with time).
-datePublished_label:Published
-dateUpdated_label:Updated
-dateCreated_label:Packaged
-## Rating depends on the site. Some use K,T,M,etc, and some PG,R,NC-17
-rating_label:Rating
-## Also depends on the site.
-warnings_label:Warnings
-numChapters_label:Chapters
-numWords_label:Words
-## www.fanfiction.net, fictionalley.com, etc.
-site_label:Publisher
-## ffnet, fpcom, etc.
-siteabbrev_label:Site Abbrev
-## The site's unique story/author identifier. Usually a number.
-storyId_label:Story ID
-authorId_label:Author ID
-## Primarily to put specific values in dc:subject tags for epub. Will
-## show up in Calibre as tags. Also carried into mobi when converted.
-extratags_label:Extra Tags
-## The version of fanficdownloader
-version_label:FFDL Version
-
-## Date formats used by FFDL. 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
-datePublished_format:%%Y-%%m-%%d
-dateUpdated_format:%%Y-%%m-%%d
-
-## items to include in the title page
-## Empty metadata entries will *not* appear, even if in the list.
-## You can include extra text or HTML that will be included as-is in
-## the title page. Eg: titlepage_entries: ..., ,summary, ,...
-## All current formats already include title and author.
-titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,numWords,site,description
-
-## Try to collect series name and number of this story in series.
-## Some sites (ab)use 'series' for reading lists and personal
-## collections. This lets us turn it on and off by site without
-## keeping a lengthy titlepage_entries per site and prevents it
-## updating in the plugin.
-collect_series: true
-
-## include title page as first page.
-include_titlepage: true
-
-## include a TOC page before the story text
-include_tocpage: true
-
-## website encoding(s) In theory, each website reports the character
-## encoding they use for each page. In practice, some sites report it
-## incorrectly. Each adapter has a default list, usually "utf8,
-## Windows-1252" or "Windows-1252, utf8", but this will let you
-## explicitly set the encoding and order if you need to. The special
-## value 'auto' will call chardet and use the encoding it reports if
-## it has +90% confidence. 'auto' is not reliable.
-#website_encodings: auto, utf8, Windows-1252
-
-## entries to make epub subjects and calibre tags
-## lastupdate creates two tags: "Last Update Year/Month: %Y/%m" and "Last Update: %Y/%m/%d"
-include_subject_tags: extratags, genre, category, characters, ships, status
-
-## extra tags (comma separated) to include, primarily for epub.
-extratags: FanFiction
-
-## extra categories, genres, characters, ships and warnings can be
-## configured. Used primarily for sites that are dedicated to a genre
-## or 'ship and so don't included it for every story.
-#extracategories:
-#extragenres:
-#extracharacters:
-#extraships:
-#extrawarnings:
-
-## Add this to genre if there's more than one category.
-#add_genre_when_multi_category: Crossover
-
-## default_value_(entry) can be used to set the value for a metadata
-## entry when no value has been found on the site. For example, some
-## sites doesn't have a status metadatum. If uncommented, this will
-## use 'Unknown' for status when no status is found.
-#default_value_status:Unknown
-## Can also be used for other metadata values
-#default_value_category:FanFiction
-
-## number of seconds to sleep between calls to the story site. May by
-## useful if pulling large numbers of stories or if the site is slow.
-#slow_down_sleep_time:0.5
-
-## How long to wait for each HTTP connection to finish. Longer times
-## are better for sites that are slow to respond. Shorter times
-## prevent excessive wait when your network or the site is down.
-connect_timeout:60.0
-
-## Use regular expressions to find and replace (or remove) metadata.
-## For example, you could change Sci-Fi=>SF, remove *-Centered tags,
-## etc. See http://docs.python.org/library/re.html (look for re.sub)
-## for regexp details.
-## Make sure to keep at least one space at the start of each line and
-## to escape % to %%, if used.
-## Two, three or five part lines. Two part effect everything.
-## Three part effect only those key(s) lists.
-## *Five* part lines. Effect only when trailing conditional key=>regexp matches
-## metakey[,metakey]=>pattern=>replacement[&&conditionalkey=>regexp]
-## 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 _LIST options: FFDL 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 _LIST. Example, if you added
-## calibre_author: calibre_author_LIST=>^(.{,100}).*$=>\1
-#replace_metadata:
-# genre,category=>Sci-Fi=>SF
-# Puella Magi Madoka Magica.* => Madoka
-# Comedy=>Humor
-# Crossover: (.*)=>\1
-# title=>(.*)Great(.*)=>\1Moderate\2
-# .*-Centered=>
-# characters=>Sam W\.=>Sam Witwicky&&category=>Transformers
-# characters=>Sam W\.=>Sam Winchester&&category=>Supernatural
-
-## Include/Exclude metadata
-##
-## You can use the include/exclude metadata features to either limit
-## the values of particular metadata lists to specific values or to
-## exclude specific values. Further, you can conditionally apply each
-## line depending on other metadata, use exact strings or regular
-## expressions(regex) to match values, and negate matches.
-##
-## The settings are:
-## include_metadata_pre
-## exclude_metadata_pre
-## include_metadata_post
-## exclude_metadata_post
-##
-## The form of each line is:
-## metakey[,metakey]==exactvalue
-## metakey[,metakey]=~regex
-## metakey[,metakey]==exactvalue&&conditionalkey==exactcondvalue
-## metakey[,metakey]=~regex&&conditionalkey==exactcondvalue
-## metakey[,metakey]==exactvalue&&conditionalkey=~condregex
-##
-## This is fairly complicated, so it's documented on its own wiki
-## page:
-## https://code.google.com/p/fanficdownloader/wiki/InExcludeMetadataFeature
-
-## Some readers don't show horizontal rule ( ) tags correctly.
-## This replaces them all with a centered '* * *'. (Note centering
-## doesn't work on some devices either.)
-#replace_hr: false
-
-## Some sites/authors/stories use br tags instead of p tags for
-## paragraphs. This feature uses some heuristics to find and replace
-## br paragraphs with p tags while preserving scene breaks.
-#replace_br_with_p: false
-
-## If you have the Generate Cover plugin installed, you can use the
-## generate_cover_settings parameter to intelligently decide which GC
-## setting to run. There are three parts 1) a template of which
-## metadata part(s) to look at, 2) a regular expression to match the
-## template, and 3) the name of the GC setting to use, which must
-## match exactly. Use this parameter in [defaults], or by site eg,
-## [ficwad.com]
-## 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
-## config and check 'Allow generate_cover_settings from personal.ini
-## to override'
-#generate_cover_settings:
-# ${category} => Buffy:? [tT]he Vampire Slayer => BuffyCover
-# ${category} => Star Trek => StarTrekCover
-
-## If set false, the summary will have all html stripped.
-## Both this and include_images must be true to get images in the
-## summary.
-keep_summary_html:true
-
-## If set true, any style attributes on tags in the story HTML will be
-## kept. Useful for keeping extra colors & formatting from original.
-#keep_style_attr: false
-
-## If set true, any title attributes on tags in the story HTML will be
-## kept. Some sites(AO3) use Foreign language
-#keep_title_attr: false
-
-## Don't like the numbers at the start of chapter titles on some
-## sites? You can use strip_chapter_numbers to strip them off. Just
-## want to make them all look the same? Strip them off, then add them
-## back on with add_chapter_numbers:true. Only want them added back
-## on for Table of Contents(toc)? Use add_chapter_numbers:toconly.
-## (toconly doesn't work on mobi output.) Don't like the way it
-## strips numbers or adds them back? See chapter_title_strip_pattern
-## and chapter_title_add_pattern.
-strip_chapter_numbers:false
-
-## add_chapter_numbers can be true, false or toconly
-## (Note number is not added when there's only one chapter.)
-add_chapter_numbers:false
-
-## (Two versions of chapter_title_strip_pattern are shown below. You
-## should only have one uncommented.)
-## This version will remove the leading number from:
-## "1." => ""
-## "1. The Beginning" => "The Beginning"
-## "1: Start" => "Start"
-## "2, Chapter the second" => "Chapter the second"
-## etc
-chapter_title_strip_pattern:^[0-9]+[\.: -]+
-
-## This version will strip all of the above *plus* remove 'Chapter 1':
-## "Chapter 1" => ""
-## "1. Chapter 1" => ""
-## "1. Chapter 1, Bob's First Clue" => "Bob's First Clue"
-## "Chapter 2 - Pirates Place" => "Pirates Place"
-## etc
-#chapter_title_strip_pattern:^([0-9]+[\.: -]+)?(Chapter *[0-9]+[\.:, -]*)?
-
-## Uses a python template substitution. The ${index} is the 'chapter'
-## number and ${title} is the chapter title, after applying
-## chapter_title_strip_pattern. Those are the only variables available.
-## "The Beginning" => "1. The Beginning"
-chapter_title_add_pattern:${index}. ${title}
-
-## Uses a python template substitution. The ${title} is the default
-## title of a new anthology, in the case of a series, or
-## the first book title otherwise. This is only applied to new
-## anthologies.
-anthology_title_pattern:${title} Anthology
-
-## Add tag(s) for anthology (series) books. Set to empty to not add
-## any anthology tags.
-anthology_tags:Anthology
-
-## Reorder ships so b/a and c/b/a become a/b and a/b/c. Only separates
-## on '/', so use replace_metadata to change separator first if
-## needed. Something like: ships=>[ ]*(/|&|&)[ ]*=>/ You can use
-## ships_LIST to change the / back to something else if you want.
-sort_ships:false
-
-## join_string_ options -- FFDL 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_ options: FFDL 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
-
-## Each output format has a section that overrides [defaults]
-[html]
-
-## include images from img tags in the body and summary of
-## stories. Images will be converted to jpg for size if possible.
-## include_images is *only* available in epub and html output formats.
-## 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.
-## Usually they would be converted to jpg, resized and optionally made
-## grayscale.
-no_image_processing: true
-
-## output background color--only used by html and epub (and ignored in
-## epub by many readers). Included below in output_css--will be
-## ignored if not in output_css.
-background_color: ffffff
-
-## Allow customization of CSS. Make sure to keep at least one space
-## at the start of each line and to escape % to %%. Also need
-## background_color to be in the same section, if included in CSS.
-output_css:
- body { background-color: #%(background_color)s; }
- .CI {
- text-align:center;
- margin-top:0px;
- margin-bottom:0px;
- padding:0px;
- }
- .center {text-align: center;}
- .cover {text-align: center;}
- .full {width: 100%%; }
- .quarter {width: 25%%; }
- .smcap {font-variant: small-caps;}
- .u {text-decoration: underline;}
- .bold {font-weight: bold;}
-
-[txt]
-## Add URLs since there aren't links.
-titlepage_entries: series,seriesUrl,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,numWords,site,storyUrl, authorUrl, description
-
-## Width to word wrap text output. 0 indicates no wrapping.
-wrap_width: 78
-
-## use \r\n for line endings, the windows convention. text output only.
-windows_eol: true
-
-[epub]
-
-## epub carries the TOC in metadata.
-## mobi generated from epub by calibre will have a TOC at the end.
-include_tocpage: false
-
-## include a Update Log page before the story text. If 'true', the
-## log will be updated each time the epub is and all the metadata
-## fields that have changed since the last update (typically
-## dateUpdated,numChapters,numWords at a minimum) will be shown.
-## Great for tracking when chapters came out and when the description,
-## etc changed.
-## Plugin will now preserve the log page when the epub is overwritten,
-## too.
-include_logpage: false
-## If set to 'smart', logpage will only be included if the story is
-## status:In-Progress or already had a logpage. That way you don't
-## end up with Completed stories that have just one logpage entry.
-#include_logpage: smart
-
-## items to include in the log page Empty metadata entries, or those
-## that haven't changed since the last update, will *not* appear, even
-## if in the list. You can include extra text or HTML that will be
-## included as-is in each log entry. Eg: logpage_entries: ..., ,
-## summary, ,...
-logpage_entries: dateCreated,datePublished,dateUpdated,numChapters,numWords,status,series,title,author,description,category,genre,rating,warnings
-
-## epub->mobi conversions typically don't like tables.
-titlepage_use_table: false
-
-## When using tables, make these span both columns.
-wide_titlepage_entries: description, storyUrl, authorUrl, seriesUrl
-
-## output background color--only used by html and epub (and ignored in
-## epub by many readers). Included below in output_css--will be
-## ignored if not in output_css.
-background_color: ffffff
-
-## Allow customization of CSS. Make sure to keep at least one space
-## at the start of each line and to escape % to %%. Also need
-## background_color to be in the same section, if included in CSS.
-## 'adobe-hyphenate: none;' prevents hyphenation on newer Nooks
-## STR(wG) (1.2.1+ for sure)
-output_css:
- body { background-color: #%(background_color)s;
- text-align: justify;
- margin: 2%%;
- adobe-hyphenate: none; }
- pre { font-size: x-small; }
- sml { font-size: small; }
- h1 { text-align: center; }
- h2 { text-align: center; }
- h3 { text-align: center; }
- h4 { text-align: center; }
- h5 { text-align: center; }
- h6 { text-align: center; }
- .CI {
- text-align:center;
- margin-top:0px;
- margin-bottom:0px;
- padding:0px;
- }
- .center {text-align: center;}
- .cover {text-align: center;}
- .full {width: 100%%; }
- .quarter {width: 25%%; }
- .smcap {font-variant: small-caps;}
- .u {text-decoration: underline;}
- .bold {font-weight: bold;}
-
-## include images from img tags in the body and summary of
-## stories. Images will be converted to jpg for size if possible.
-## include_images is *only* available in epub and html output format.
-#include_images:false
-
-## If set, the first image found will be made the cover image. If
-## keep_summary_html is true, any images in summary will be before any
-## in chapters.
-#make_firstimage_cover: false
-
-## If set, the epub will never have a cover, even include_images is on
-## and the site has specific cover images.
-#never_make_cover: false
-
-## If set, and there isn't already a cover image from the adapter or
-## from make_firstimage_cover, this image will be made the cover.
-## It can be either a 'file:' or 'http:' url.
-## Note that if you enable make_firstimage_cover in [epub], but want
-## to use default_cover_image for a specific site, use the site:format
-## section, for example: [ficwad.com:epub]
-## default_cover_image is a python string Template string with
-## ${title}, ${author} etc, same as titlepage_entries. Unless
-## allow_unsafe_filename is true, invalid filename chars will be
-## removed from metadata fields
-#default_cover_image:file:///C:/Users/username/Desktop/nook/images/icon.png
-#default_cover_image:file:///C:/Users/username/Desktop/nook/images/${title}/icon.png
-#default_cover_image:http://www.somesite.com/someimage.gif
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-#cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
-
-## Resize images down to width, height, preserving aspect ratio.
-## Nook size, with margin.
-image_max_size: 580, 725
-
-## Change image to grayscale, if graphics library allows, to save
-## space.
-#grayscale_images: false
-
-## if the 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
-## will break any other readers, but in case it does, the fix can be
-## turned off. This setting is not used if replace_br_with_p is
-## true--replace_br_with_p also fixes the problem.
-nook_img_fix:true
-
-[mobi]
-## mobi TOC cannot be turned off right now.
-#include_tocpage: true
-
-## Each site has a section that overrides [defaults].
-## test1.com specifically is not a real story site. Instead,
-## it is a fake site for testing configuration and output. It uses
-## URLs like: http://test1.com?sid=12345
-[test1.com]
-extratags: FanFiction,Testing
-# extracategories:Fafner
-# extragenres:Romance,Fluff
-# extracharacters:Reginald Smythe-Smythe,Mokona,Harry P.
-# extraships:Smythe-Smythe/Mokona
-# extrawarnings:Extreme Bogosity
-
-# extra_valid_entries:metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
-
-# include_in_compositeJ:dateCreated
-# include_in_compositeK:metaC,listX,compositeL,compositeJ,compositeK,listZ
-# include_in_compositeL:ships,metaA,listZ,datePublished,dateUpdated,
-
-# extra_titlepage_entries: metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
-# extra_logpage_entries: metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
-# extra_subject_tags: metaA,metaB,metaC
-
-# replace_metadata:
-# compositeL=>Val=>VALUE
-# series,extratags=>Test=>Plan
-# Puella Magi Madoka Magica.* => Madoka
-# Comedy=>Humor
-# Crossover: (.*)=>\1
-# (.*)Great(.*)=>\1Moderate\2
-# .*-Centered=>
-# characters=>Harry P\.=>Harry Potter
-
-
-## If necessary, you can define [:] sections to
-## customize the formats differently for the same site. Overrides
-## defaults, format and site.
-[test1.com:txt]
-extratags: FanFiction,Testing,Text
-
-[test1.com:html]
-extratags: FanFiction,Testing,HTML
-
-[archive.skyehawke.com]
-
-[archiveofourown.org]
-## 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
-
-## archiveofourown.org stories allow chapters to be added out of
-## order. So the newest chapter may not be the last one. FFDL 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.
-#do_update_hook:false
-
-## AO3 adapter defines a few extra metadata entries.
-## If there's ever more than 4 series, add series04,series04Url etc.
-extra_valid_entries:fandoms,freeformtags,freefromtags,ao3categories,comments,kudos,hits,bookmarks,collections,series00,series01,series02,series03,series00Url,series01Url,series02Url,series03Url
-fandoms_label:Fandoms
-freeformtags_label:Freeform Tags
-freefromtags_label:Freeform Tags
-ao3categories_label:AO3 Categories
-comments_label:Comments
-kudos_label:Kudos
-hits_label:Hits
-collections_label:Collections
-bookmarks_label:Bookmarks
-
-## freeformtags was previously typo'ed as freefromtags. This way,
-## freefromtags will still work for people who've used it.
-include_in_freefromtags:freeformtags
-
-## adds to titlepage_entries instead of replacing it.
-#extra_titlepage_entries: fandoms,freeformtags,ao3categories,comments,kudos,hits,bookmarks,series00,series01,series02,series03,series00Url,series01Url,series02Url,series03Url
-
-## adds to include_subject_tags instead of replacing it.
-#extra_subject_tags:fandoms,freeformtags,ao3categories
-
-## AO3 chapters can include several different types of notes. We've
-## traditional included them all in the chapter text, but this allows
-## you to customize which you include. Copy this parameter to your
-## personal.ini and list the ones you don't want.
-#exclude_notes:authorheadnotes,chaptersummary,chapterheadnotes,chapterfootnotes,authorfootnotes
-
-## AO3 is blocking people more aggressively. If you download fewer
-## stories less often you can likely get by with reducing this sleep.
-slow_down_sleep_time:2
-
-[ashwinder.sycophanthex.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extracharacters:Severus Snape,Hermione Granger
-extraships:Severus Snape/Hermione Granger
-
-[asr3.slashzone.org]
-## Site dedicated to these categories/characters/ships
-extracategories:The Sentinel
-
-## 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
-
-[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
-## incorrectly. Each adapter has a default list, usually "utf8,
-## Windows-1252" or "Windows-1252, utf8", but this will let you
-## explicitly set the encoding and order if you need to. The special
-## value 'auto' will call chardet and use the encoding it reports if
-## it has +90% confidence. 'auto' is not reliable.
-website_encodings:Windows-1252,ISO-8859-1,auto
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:warnings,reviews
-reviews_label:Reviews
-
-## Site dedicated to these categories/characters/ships
-extracharacters:Spike,Buffy
-extracategories:Buffy the Vampire Slayer
-
-## Strips links found in the story text
-## Specific to bloodshedverse.com
-strip_text_links:true
-
-[bloodties-fans.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: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
-## 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:Castle
-
-[chaos.sycophanthex.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 include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-cover_exclusion_regexp:/images/.*?ribbon.gif
-
-[csi-forensics.com]
-## 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
-
-extra_valid_entries: readings
-readings_label: Readings
-
-[dark-solace.org]
-## Site dedicated to these categories/characters/ships
-## 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
-
-extracategories:Buffy: The Vampire Slayer
-extracharacters:Buffy, Spike
-extraships:Spike/Buffy
-
-[devianthearts.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
-
-## 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
-
-[dramione.org]
-## 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:Draco Malfoy,Hermione Granger
-extraships:Draco Malfoy/Hermione Granger
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-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
-## 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
-## composite metadata entries. dramione.org, for example, adds
-## 'cliches' and then defines as the composite of hermiones,dracos in
-## include_in_cliches.
-extra_valid_entries:themes,hermiones,dracos,timeline,cliches,read,reviews
-include_in_cliches:hermiones,dracos
-
-## For another example, you could, by uncommenting this line, include
-## themes in with genre metadata.
-#include_in_genre:genre, themes
-
-## You can give each new valid entry a specific label for use on
-## titlepage and logpage. If not defined, it will simply be the
-themes_label:Themes
-hermiones_label:Hermiones
-dracos_label:Dracos
-timeline_label:Timeline
-cliches_label:Character Cliches
-
-## extra_titlepage_entries (and extra_logpage_entries) *add* to
-## titlepage_entries (and logpage_entries) so you can add site
-## specific entries to titlepage/logpage without having to copy the
-## entire titlepage_entries line. (But if you want them higher than
-## the end, you will need to copy titlepage_entries.)
-#extra_titlepage_entries: themes,timeline,cliches
-#extra_logpage_entries: themes,timeline,cliches
-#extra_subject_tags: themes,timeline,cliches
-
-## (Plugin Only) - You can also populate calibre custom columns with
-## the site specific metadata using custom_columns_settings (but only
-## if 'Allow custom_columns_settings from personal.ini' is checked in
-## the plugin GUI config.) There are three parts, the entry name,
-## then the label of the calibre custom column, then (optionally) a
-## '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.
-
-#custom_columns_settings:
-# cliches=>#acolumn
-# themes=>#bcolumn,a
-# timeline=>#ccolumn,n
-# "FanFiction"=>#collection
-
-[efiction.esteliel.de]
-## Site dedicated to these categories/characters/ships
-extracategories:Lord of the Rings
-
-[erosnsappho.sycophanthex.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:Harry Potter
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-cover_exclusion_regexp:/images/.*?ribbon.gif
-
-[fanfiction.csodaidok.hu]
-## website encoding(s) In theory, each website reports the character
-## encoding they use for each page. In practice, some sites report it
-## incorrectly. Each adapter has a default list, usually "utf8,
-## Windows-1252" or "Windows-1252, utf8", but this will let you
-## explicitly set the encoding and order if you need to. The special
-## value 'auto' will call chardet and use the encoding it reports if
-## it has +90% confidence. 'auto' is not reliable.
-website_encodings:ISO-8859-2,auto
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:reviews,challenge
-reviews_label:Reviews
-challenge_label:Challenge
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[fanfic.hu]
-## website encoding(s) In theory, each website reports the character
-## encoding they use for each page. In practice, some sites report it
-## incorrectly. Each adapter has a default list, usually "utf8,
-## Windows-1252" or "Windows-1252, utf8", but this will let you
-## explicitly set the encoding and order if you need to. The special
-## value 'auto' will call chardet and use the encoding it reports if
-## it has +90% confidence. 'auto' is not reliable.
-website_encodings:ISO-8859-1,auto
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[fanfiction.mugglenet.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[fanfic.potterheadsanonymous.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[fanfiction.portkey.org]
-## 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:Harry Potter
-extraships:Harry Potter/Hermione Granger
-
-[fanfiction.tenhawkpresents.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
-
-[fannation.shades-of-moonlight.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
-
-## 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
-
-extra_valid_entries: readings,romance
-extra_titlepage_entries: readings,romance
-readings_label: Readings
-romance_label: Romance
-
-[fhsarchive.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
-
-[ficwad.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
-
-[fictionmania.tv]
-## website encoding(s) In theory, each website reports the character
-## encoding they use for each page. In practice, some sites report it
-## incorrectly. Each adapter has a default list, usually "utf8,
-## Windows-1252" or "Windows-1252, utf8", but this will let you
-## explicitly set the encoding and order if you need to. The special
-## value 'auto' will call chardet and use the encoding it reports if
-## it has +90% confidence. 'auto' is not reliable.
-website_encodings:ISO-8859-1,auto
-
-## items to include in the log page Empty metadata entries, or those
-## that haven't changed since the last update, will *not* appear, even
-## if in the list. You can include extra text or HTML that will be
-## included as-is in each log entry. Eg: logpage_entries: ..., ,
-## summary, ,...
-## Don't include numChapters since all stories are a single "chapter", there's
-## no way to reliably find the next chapter
-logpage_entries: dateCreated,datePublished,dateUpdated,numChapters,numWords,status,series,title,author,description,category,genre,rating,warnings
-
-## items to include in the title page
-## Empty metadata entries will *not* appear, even if in the list.
-## You can include extra text or HTML that will be included as-is in
-## the title page. Eg: titlepage_entries: ..., ,summary, ,...
-## All current formats already include title and author.
-## Don't include numChapters since all stories are a single "chapter", there's
-## no way to reliably find the next chapter
-titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numWords,site,description
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:fileName,fileSize,oldName,newName,keyWords,mainCharactersAge,readings
-
-## Turns all space characters into " " HTML entities to forcefully preserve
-## formatting with spaces. Enabling this will blow up the filesize quite a bit
-## and is probably not a good idea, unless you absolutely need the story
-## formatting.
-## Specific to fictionmania.tv
-non_breaking_spaces:false
-
-[fictionpad.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
-
-extra_valid_entries:followers,comments,views,likes,dislikes
-#extra_titlepage_entries:followers,comments,views,likes,dislikes
-
-followers_label:Followers
-comments_label:Comments
-views_label:Views
-likes_label:Likes
-dislikes_label:Dislikes
-
-[finestories.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
-
-[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
-
-[imagine.e-fic.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
-
-[indeath.net]
-## Site dedicated to these categories/characters/ships
-extracategories:In Death
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-cover_exclusion_regexp:/public/style_emoticons/.*
-
-[ksarchive.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Star Trek
-extracharacters:Kirk,Spock
-extraships:Kirk/Spock
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:universe,crossoverfandom
-universe_label:Universe
-crossoverfandom_label:Crossover Fandom
-extra_titlepage_entries:universe,crossoverfandom
-
-[literotica.com]
-extra_valid_entries:eroticatags
-eroticatags_label:Erotica Tags
-extra_titlepage_entries: eroticatags
-
-[lotrfanfiction.com]
-## 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
-
-extra_valid_entries: readings
-readings_label: Readings
-
-## Site dedicated to these categories/characters/ships
-extracategories:Lord of the Rings
-
-[lumos.sycophanthex.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:Harry Potter
-
-[merlinfic.dtwins.co.uk]
-## 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:Merlin
-
-[national-library.net]
-## Site dedicated to these categories/characters/ships
-extracategories:West Wing
-
-[ncisfic.com]
-## Site dedicated to these categories/characters/ships
-extracategories:NCIS
-
-[netraptor.org]
-
-[nfacommunity.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:NCIS
-
-[nha.magical-worlds.us]
-## Site dedicated to these categories/characters/ships
-extracategories:Buffy: The Vampire Slayer
-extracharacters:Willow
-
-[nocturnal-light.net]
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:readings,reviews
-readings_label:Readings
-reviews_label:Reviews
-
-## Site dedicated to these categories/characters/ships
-extracharacters:Spike,Buffy
-extracategories:Buffy the Vampire Slayer
-
-[occlumency.sycophanthex.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extracharacters:Severus Snape
-
-[onedirectionfanfiction.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:One Direction
-
-[pommedesang.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:Anita Blake Vampire Hunter
-
-[ponyfictionarchive.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:My Little Pony: Friendship is Magic
-
-[pretendercentre.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:The Pretender
-
-[samandjack.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:Stargate: SG-1
-extracharacters:Sam,Jack
-extraships:Sam/Jack
-
-[samdean.archive.nu]
-## Site dedicated to these categories/characters/ships
-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
-
-[sg1-heliopolis.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
-
-[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
-## 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:Stargate: Atlantis
-extracharacters:John Sheppard,Elizabeth Weir
-extraships:John Sheppard/Elizabeth Weir
-
-[spikeluver.com]
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:warnings,reviews
-reviews_label:Reviews
-
-## Site dedicated to these categories/characters/ships
-extracharacters:Spike,Buffy
-extracategories:Buffy the Vampire Slayer
-
-[stargate-atlantis.org]
-## Site dedicated to these categories/characters/ships
-extracategories:Stargate: Atlantis
-
-[storiesonline.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.
-## storiesonline.net has started requiring login by email rather than
-## pen name.
-#username:youremail@yourdomain.dom
-#password:yourpassword
-
-## Clear FanFiction from defaults, site is original fiction.
-extratags:
-
-extra_valid_entries:size,universe,universeUrl,universeHTML,sitetags,notice,codes,score
-#extra_titlepage_entries:size,universeHTML,sitetags,notice,score
-include_in_codes:sitetags
-
-## adds to include_subject_tags instead of replacing it.
-#extra_subject_tags:sitetags
-
-size_label:Size
-universe_label:Universe
-universeUrl_label:Universe URL
-universeHTML_label:Universe
-sitetags_label:Site Tags
-notice_label:Notice
-score_label:Score
-
-## Assume entryUrl, apply to "%s " to
-## make entryHTML.
-make_linkhtml_entries:universe
-
-## storiesonline.net stories can be in a series or a universe, but not
-## both. By default, universe will be populated in 'series' with
-## index=0
-universe_as_series: true
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-cover_exclusion_regexp:/css/bir.png
-
-[thehexfiles.net]
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extracharacters:Draco Malfoy,Harry Potter
-extraships:Harry Potter/Draco Malfoy
-
-[thehookupzone.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:Criminal Minds
-
-[themaplebookshelf.com]
-## 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
-
-## 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
-
-extra_valid_entries: readings,challenge
-extra_titlepage_entries: readings,challenge
-challenge_label: Challenge
-readings_label: Readings
-
-[themasque.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
-
-[thequidditchpitch.org]
-## 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
-
-[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
-
-[trekiverse.org]
-## 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:Star Trek
-
-extra_valid_entries:readings,awards
-extra_titlepage_entries:readings,awards
-awards_label:Awards
-readings_label:Readings
-
-cover_exclusion_regexp:art/.*Awards.jpg
-
-[voracity2.e-fic.com]
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:reviews,readings
-reviews_label:Reviews
-readings_label:Readings
-
-[www.adastrafanfic.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:Star Trek
-
-[www.dracoandginny.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:Draco Malfoy,Ginny Weasley
-extraships:Draco Malfoy/Ginny Weasley
-
-[www.thealphagate.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Stargate: SG-1
-
-[www.checkmated.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.destinysgateway.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
-
-[www.dokuga.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:InuYasha
-extracharacters:Sesshoumaru,Kagome
-extraships:Sesshoumaru/Kagome
-
-[www.dotmoon.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
-
-[www.efpfanfic.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
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:notes,context,type
-notes_label:Notes
-context_label:Context
-type_label:Type of Couple
-
-[www.fanfiction.net]
-user_agent:
-## fanfiction.net's 'cover' images are really just tiny thumbnails.
-## Set this to true to never use them.
-#never_make_cover: false
-
-## fanfiction.net shows the user's
-cover_exclusion_regexp:(/imageu/|d_60_90\.jpg)
-
-## fanfiction.net is blocking people more aggressively. If you
-## download fewer stories less often you can likely get by with
-## reducing this sleep.
-slow_down_sleep_time:4
-
-## ffnet is sensitive to too many hits. Users are sensitive to long
-## waits during the initial metadata collection in the foreground.
-## When used, these settings will speed up metadata downloads in the
-## foreground linearly.
-tweak_fg_sleep:true
-min_fg_sleep:1.0
-max_fg_sleep:4.0
-max_fg_sleep_at_downloads: 10
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:reviews,favs,follows
-
-## ffnet uses 'Pairings', not 'Relationship', stating they don't have
-## to be romantic pairings.
-ships_label:Pairings
-
-## Date formats used by FFDL. 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 %%.
-#dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S
-datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S
-dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S
-
-## ffnet used to have a tendency to send out update notices in email
-## before all their servers were showing the update on the first
-## chapter. It generates another server request and doesn't seem to
-## be needed lately, so now default it to off.
-check_next_chapter:false
-
-[www.fanfiktion.de]
-## 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.ficbook.net]
-
-[www.fictionalley.org]
-## 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:Harry Potter
-
-## fictionalley.org doesn't have a status metadatum. If uncommented,
-## this will be used for status.
-#default_value_status:Unknown
-
-[www.fictionpress.com]
-user_agent:
-## Clear FanFiction from defaults, fictionpress.com is original fiction.
-extratags:
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:reviews,favs,follows
-
-[www.fimfiction.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
-
-## fimfiction.net stories can be locked requiring individual
-## passwords. If fail_on_password is set, the downloader will fail
-## when a password is required rather than prompting every time.
-#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
-## 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.
-#do_update_hook:false
-
-## fimfiction.net is reported to misinterprete some BBCode with
-## blockquotes incorrectly. This fixes those instances and defaults
-## to on, but can be switched off if it is found to cause problems.
-fix_fimf_blockquotes:true
-
-## Site dedicated to these categories/characters/ships
-extracategories:My Little Pony: Friendship is Magic
-
-## Extra metadata that this adapter knows about. See [dramione.org]
-## for examples of how to use them.
-extra_valid_entries:likes,dislikes,views,total_views,short_description,groups,groupsUrl,groupsHTML,prequel,prequelUrl,prequelHTML,sequels,sequelsUrl,sequelsHTML,comment_count,coverSource,coverSourceUrl,coverSourceHTML
-likes_label:Likes
-dislikes_label:Dislikes
-views_label:Highest Single Chapter Views
-total_views_label:Total Views
-short_description_label:Short Summary
-groups_label:Groups
-groupsUrl_label:Groups URLs
-groupsHTML_label:Groups
-prequel_label:Prequel
-prequelUrl_label:Prequel URL
-prequelHTML_label:Prequel
-sequels_label:Sequels
-sequelsUrl_label:Sequel URLs
-sequelsHTML_label:Sequels
-comment_count_label:Comment Count
-coverSource_label:Cover Source
-coverSourceUrl_label:Cover Source URL
-coverSourceHTML_label:Cover Source
-
-keep_in_order_sequels:true
-keep_in_order_sequelsUrl:true
-keep_in_order_groups:true
-keep_in_order_groupsUrl:true
-
-## Assume entryUrl, apply to "%s " to
-## make entryHTML.
-make_linkhtml_entries:prequel,sequels,groups,coverSource
-
-[www.harrypotterfanfiction.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:Harry Potter
-
-[www.henneth-annun.net]
-## Site dedicated to these categories/characters/ships
-extracategories:The Hobbit
-
-[www.hpfandom.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.hpfanficarchive.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.ik-eternal.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:InuYasha
-extracharacters:InuYasha,Kagome
-extraships:InuYasha/Kagome
-
-[www.libraryofmoria.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:Lord of the Rings
-
-[www.mediaminer.org]
-
-[www.midnightwhispers.ca]
-## 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:Queer as Folk
-
-## some sites include images that we don't ever want becoming the
-## cover image. This lets you exclude them.
-cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
-
-[www.ncisfiction.net]
-## Site dedicated to these categories/characters/ships
-extracategories:NCIS
-
-[www.nickandgreg.net]
-## 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
-## commandline version, this should go in your personal.ini, not
-## defaults.ini.
-#username:YourName
-#password:yourpassword
-
-## 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
-## correctly. If you have a login, this is recommended.
-#force_login:true
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extraships:Harry Potter/Ginny Weasley
-
-[www.potionsandsnitches.org]
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.potterfics.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.psychfic.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Psych
-
-## 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
-
-[www.qaf-fic.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:Queer as Folk
-
-[www.restrictedsection.org]
-## 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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extragenres:Erotica
-
-[www.scarvesandcoffee.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Glee
-extracharacters:Kurt Hummel,Blaine Anderson
-
-[www.simplyundeniable.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-
-[www.sinful-desire.org]
-## 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:Supernatural
-
-[www.siye.co.uk]
-## Site dedicated to these categories/characters/ships
-extracategories:Harry Potter
-extracharacters:Harry Potter,Ginny Weasley
-extraships:Harry Potter/Ginny Weasley
-
-[www.squidge.org/peja]
-## www.squidge.org/peja calls it Fandom
-category_label:Fandom
-
-## Remove numWords -- www.squidge.org/peja word counts are inaccurate
-titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,site,description
-
-[www.squidge.org/peja:txt]
-## Add URLs since there aren't links and remove numWords --
-## www.squidge.org/peja word counts are inaccurate
-titlepage_entries: series,seriesUrl,category,genre,language,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,site,storyUrl, authorUrl, description
-
-[www.storiesofarda.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:Lord of the Rings
-
-[www.thepetulantpoetess.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
-
-[www.twcslibrary.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
-
-## twcslibrary.net (ab)uses series as personal reading lists.
-collect_series: false
-
-[www.tthfanfic.org]
-## 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
-
-## tth is a little unusual--it doesn't require user/pass, but the site
-## keeps track of which chapters you've read and won't send another
-## update until it thinks you're up to date. This way, on download,
-## it thinks you're up to date.
-#username:YourName
-#password:yourpassword
-
-[www.twilightarchives.com]
-## Site dedicated to these categories/characters/ships
-extracategories:Twilight
-
-[www.twilighted.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Twilight
-
-## twilighted.net (ab)uses series as personal reading lists.
-collect_series: false
-
-[www.twiwrite.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
-
-## Site dedicated to these categories/characters/ships
-extracategories:Twilight
-
-## twiwrite.net (ab)uses series as personal reading lists.
-collect_series: false
-
-[www.walkingtheplank.org]
-## 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:Harry Potter
-extracharacters:Severus Snape,Harry Potter
-extraships:Severus Snape/Harry Potter
-
-[www.whofic.com]
-
-[www.wizardtales.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
-
-[www.wolverineandrogue.com]
-## Site dedicated to these categories/characters/ships
-extracategories:X-Men Movie
-extracharacters:Wolverine,Rogue
-
-[www.wraithbait.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: Atlantis
-
-extra_valid_entries:reviews
-reviews_label:Reviews
-
-[overrides]
-## It may sometimes be useful to override all of the specific format,
-## site and site:format sections in your private configuration. For
-## example, this extratags param here would override all of the
-## extratags params in all other sections. Only commandline options
-## beat overrides.
-#extratags:fanficdownloader
-
-
-[teststory:defaults]
-valid_entries:title,author_list,authorId_list,authorUrl_list,storyUrl,
- datePublished,dateUpdated,numWords,status,language,series,seriesUrl,
- rating,category_list,genre_list,warnings_list,characters_list,ships_list,
- description,site,extratags
-
-# {{storyId}} is a special case--it's the only one that works.
-title:Test Story Title {{storyId}}
-author_list:Test Author aa
-authorId_list:1
-authorUrl_list:http://test1.com?authid=1
-storyUrl:http://test1.com?sid={{storyId}}
-datePublished:1975-03-15
-dateUpdated:1975-04-15
-numWords:123,456
-status:In-Progress
-language:English
-
-chaptertitles:Prologue
-
-## Add additional sections with different numbers to get different
-## parameters for different story urls.
-## test1.com?sid=1000
-[teststory:1000]
-# note the leading commas when doing add_to_ with valid_entries and *_list
-add_to_valid_entries:,favs
-title:Testing New Feature {{storyId}}
-author_list:Bob Smith
-authorId_list:45
-authorUrl_list:http://test1.com?authid=45
-datePublished:2013-03-15
-dateUpdated:2013-04-15
-numWords:1456
-favs:56
-series:The Great Test [4]
-seriesUrl:http://test1.com?seriesid=1
-rating:Tweenie
-category_list:Harry Potter,Furbie,Crossover,Puella Magi Madoka Magica/魔法少女まどか★マギカ,Magical Girl Lyrical Nanoha
-genre_list:Fantasy,Comedy,Sci-Fi,Noir
-warnings_list:Swearing,Violence
-characters_list:Bob Smith,George Johnson,Fred Smythe
-
-chaptertitles:Prologue,Chapter 1\, Xenos on Cinnabar,Chapter 2\, Sinmay on Kintikin,3. Chapter 3
+# Copyright 2013 Fanficdownloader 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.
+#
+
+[defaults]
+
+## [defaults] section applies to all formats and sites but may be
+## overridden at several levels. Example:
+
+## [defaults]
+## titlepage_entries: category,genre, status
+## [www.whofic.com]
+## # overrides defaults.
+## titlepage_entries: category,genre, status,dateUpdated,rating
+## [epub]
+## # overrides defaults & site section
+## titlepage_entries: category,genre, status,datePublished,dateUpdated,dateCreated
+## [www.whofic.com:epub]
+## # overrides defaults, site section & format section
+## titlepage_entries: category,genre, status,datePublished
+## [overrides]
+## # overrides all other sections
+## titlepage_entries: category
+
+## Some sites also require the user to confirm they are adult for
+## adult content. Uncomment by removing '#' in front of is_adult.
+#is_adult:true
+
+## All available titlepage_entries and the label used for them:
+## _label:
+## Labels may be customized.
+title_label:Title
+storyUrl_label:Story URL
+description_label:Summary
+author_label:Author
+authorUrl_label:Author URL
+## epub, txt, html
+formatname_label:File Format
+## .epub, .txt, .html
+formatext_label:File Extension
+## Category and Genre have overlap, depending on the site.
+## Sometimes Harry Potter is a category and Fantasy a genre. (fanfiction.net)
+## Sometimes Fantasy is category *and* a genre (fictionpress.com)
+## Sometimes there are multiple categories and/or genres.
+category_label:Category
+genre_label:Genre
+language_label:Language
+characters_label:Characters
+ships_label:Relationships
+series_label:Series
+seriesUrl_label:Series URL
+## seriesHTML is series as a link to seriesUrl.
+seriesHTML_label:Series
+## Completed/In-Progress
+status_label:Status
+## Dates story first published, last updated, and downloaded(last with time).
+datePublished_label:Published
+dateUpdated_label:Updated
+dateCreated_label:Packaged
+## Rating depends on the site. Some use K,T,M,etc, and some PG,R,NC-17
+rating_label:Rating
+## Also depends on the site.
+warnings_label:Warnings
+numChapters_label:Chapters
+numWords_label:Words
+## www.fanfiction.net, fictionalley.com, etc.
+site_label:Publisher
+## ffnet, fpcom, etc.
+siteabbrev_label:Site Abbrev
+## The site's unique story/author identifier. Usually a number.
+storyId_label:Story ID
+authorId_label:Author ID
+## Primarily to put specific values in dc:subject tags for epub. Will
+## show up in Calibre as tags. Also carried into mobi when converted.
+extratags_label:Extra Tags
+## The version of fanficdownloader
+version_label:FFDL Version
+
+## Date formats used by FFDL. 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
+datePublished_format:%%Y-%%m-%%d
+dateUpdated_format:%%Y-%%m-%%d
+
+## items to include in the title page
+## Empty metadata entries will *not* appear, even if in the list.
+## You can include extra text or HTML that will be included as-is in
+## the title page. Eg: titlepage_entries: ..., ,summary, ,...
+## All current formats already include title and author.
+titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,numWords,site,description
+
+## Try to collect series name and number of this story in series.
+## Some sites (ab)use 'series' for reading lists and personal
+## collections. This lets us turn it on and off by site without
+## keeping a lengthy titlepage_entries per site and prevents it
+## updating in the plugin.
+collect_series: true
+
+## include title page as first page.
+include_titlepage: true
+
+## include a TOC page before the story text
+include_tocpage: true
+
+## website encoding(s) In theory, each website reports the character
+## encoding they use for each page. In practice, some sites report it
+## incorrectly. Each adapter has a default list, usually "utf8,
+## Windows-1252" or "Windows-1252, utf8", but this will let you
+## explicitly set the encoding and order if you need to. The special
+## value 'auto' will call chardet and use the encoding it reports if
+## it has +90% confidence. 'auto' is not reliable.
+#website_encodings: auto, utf8, Windows-1252
+
+## entries to make epub subjects and calibre tags
+## lastupdate creates two tags: "Last Update Year/Month: %Y/%m" and "Last Update: %Y/%m/%d"
+include_subject_tags: extratags, genre, category, characters, ships, status
+
+## extra tags (comma separated) to include, primarily for epub.
+extratags: FanFiction
+
+## extra categories, genres, characters, ships and warnings can be
+## configured. Used primarily for sites that are dedicated to a genre
+## or 'ship and so don't included it for every story.
+#extracategories:
+#extragenres:
+#extracharacters:
+#extraships:
+#extrawarnings:
+
+## Add this to genre if there's more than one category.
+#add_genre_when_multi_category: Crossover
+
+## default_value_(entry) can be used to set the value for a metadata
+## entry when no value has been found on the site. For example, some
+## sites doesn't have a status metadatum. If uncommented, this will
+## use 'Unknown' for status when no status is found.
+#default_value_status:Unknown
+## Can also be used for other metadata values
+#default_value_category:FanFiction
+
+## number of seconds to sleep between calls to the story site. May by
+## useful if pulling large numbers of stories or if the site is slow.
+#slow_down_sleep_time:0.5
+
+## How long to wait for each HTTP connection to finish. Longer times
+## are better for sites that are slow to respond. Shorter times
+## prevent excessive wait when your network or the site is down.
+connect_timeout:60.0
+
+## Use regular expressions to find and replace (or remove) metadata.
+## For example, you could change Sci-Fi=>SF, remove *-Centered tags,
+## etc. See http://docs.python.org/library/re.html (look for re.sub)
+## for regexp details.
+## Make sure to keep at least one space at the start of each line and
+## to escape % to %%, if used.
+## Two, three or five part lines. Two part effect everything.
+## Three part effect only those key(s) lists.
+## *Five* part lines. Effect only when trailing conditional key=>regexp matches
+## metakey[,metakey]=>pattern=>replacement[&&conditionalkey=>regexp]
+## 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 _LIST options: FFDL 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 _LIST. Example, if you added
+## calibre_author: calibre_author_LIST=>^(.{,100}).*$=>\1
+#replace_metadata:
+# genre,category=>Sci-Fi=>SF
+# Puella Magi Madoka Magica.* => Madoka
+# Comedy=>Humor
+# Crossover: (.*)=>\1
+# title=>(.*)Great(.*)=>\1Moderate\2
+# .*-Centered=>
+# characters=>Sam W\.=>Sam Witwicky&&category=>Transformers
+# characters=>Sam W\.=>Sam Winchester&&category=>Supernatural
+
+## Include/Exclude metadata
+##
+## You can use the include/exclude metadata features to either limit
+## the values of particular metadata lists to specific values or to
+## exclude specific values. Further, you can conditionally apply each
+## line depending on other metadata, use exact strings or regular
+## expressions(regex) to match values, and negate matches.
+##
+## The settings are:
+## include_metadata_pre
+## exclude_metadata_pre
+## include_metadata_post
+## exclude_metadata_post
+##
+## The form of each line is:
+## metakey[,metakey]==exactvalue
+## metakey[,metakey]=~regex
+## metakey[,metakey]==exactvalue&&conditionalkey==exactcondvalue
+## metakey[,metakey]=~regex&&conditionalkey==exactcondvalue
+## metakey[,metakey]==exactvalue&&conditionalkey=~condregex
+##
+## This is fairly complicated, so it's documented on its own wiki
+## page:
+## https://code.google.com/p/fanficdownloader/wiki/InExcludeMetadataFeature
+
+## Some readers don't show horizontal rule ( ) tags correctly.
+## This replaces them all with a centered '* * *'. (Note centering
+## doesn't work on some devices either.)
+#replace_hr: false
+
+## Some sites/authors/stories use br tags instead of p tags for
+## paragraphs. This feature uses some heuristics to find and replace
+## br paragraphs with p tags while preserving scene breaks.
+#replace_br_with_p: false
+
+## If you have the Generate Cover plugin installed, you can use the
+## generate_cover_settings parameter to intelligently decide which GC
+## setting to run. There are three parts 1) a template of which
+## metadata part(s) to look at, 2) a regular expression to match the
+## template, and 3) the name of the GC setting to use, which must
+## match exactly. Use this parameter in [defaults], or by site eg,
+## [ficwad.com]
+## 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
+## config and check 'Allow generate_cover_settings from personal.ini
+## to override'
+#generate_cover_settings:
+# ${category} => Buffy:? [tT]he Vampire Slayer => BuffyCover
+# ${category} => Star Trek => StarTrekCover
+
+## If set false, the summary will have all html stripped.
+## Both this and include_images must be true to get images in the
+## summary.
+keep_summary_html:true
+
+## If set true, any style attributes on tags in the story HTML will be
+## kept. Useful for keeping extra colors & formatting from original.
+#keep_style_attr: false
+
+## If set true, any title attributes on tags in the story HTML will be
+## kept. Some sites(AO3) use Foreign language
+#keep_title_attr: false
+
+## Don't like the numbers at the start of chapter titles on some
+## sites? You can use strip_chapter_numbers to strip them off. Just
+## want to make them all look the same? Strip them off, then add them
+## back on with add_chapter_numbers:true. Only want them added back
+## on for Table of Contents(toc)? Use add_chapter_numbers:toconly.
+## (toconly doesn't work on mobi output.) Don't like the way it
+## strips numbers or adds them back? See chapter_title_strip_pattern
+## and chapter_title_add_pattern.
+strip_chapter_numbers:false
+
+## add_chapter_numbers can be true, false or toconly
+## (Note number is not added when there's only one chapter.)
+add_chapter_numbers:false
+
+## (Two versions of chapter_title_strip_pattern are shown below. You
+## should only have one uncommented.)
+## This version will remove the leading number from:
+## "1." => ""
+## "1. The Beginning" => "The Beginning"
+## "1: Start" => "Start"
+## "2, Chapter the second" => "Chapter the second"
+## etc
+chapter_title_strip_pattern:^[0-9]+[\.: -]+
+
+## This version will strip all of the above *plus* remove 'Chapter 1':
+## "Chapter 1" => ""
+## "1. Chapter 1" => ""
+## "1. Chapter 1, Bob's First Clue" => "Bob's First Clue"
+## "Chapter 2 - Pirates Place" => "Pirates Place"
+## etc
+#chapter_title_strip_pattern:^([0-9]+[\.: -]+)?(Chapter *[0-9]+[\.:, -]*)?
+
+## Uses a python template substitution. The ${index} is the 'chapter'
+## number and ${title} is the chapter title, after applying
+## chapter_title_strip_pattern. Those are the only variables available.
+## "The Beginning" => "1. The Beginning"
+chapter_title_add_pattern:${index}. ${title}
+
+## Uses a python template substitution. The ${title} is the default
+## title of a new anthology, in the case of a series, or
+## the first book title otherwise. This is only applied to new
+## anthologies.
+anthology_title_pattern:${title} Anthology
+
+## Add tag(s) for anthology (series) books. Set to empty to not add
+## any anthology tags.
+anthology_tags:Anthology
+
+## Reorder ships so b/a and c/b/a become a/b and a/b/c. Only separates
+## on '/', so use replace_metadata to change separator first if
+## needed. Something like: ships=>[ ]*(/|&|&)[ ]*=>/ You can use
+## ships_LIST to change the / back to something else if you want.
+sort_ships:false
+
+## join_string_ options -- FFDL 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_ options: FFDL 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
+
+## Each output format has a section that overrides [defaults]
+[html]
+
+## include images from img tags in the body and summary of
+## stories. Images will be converted to jpg for size if possible.
+## include_images is *only* available in epub and html output formats.
+## 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.
+## Usually they would be converted to jpg, resized and optionally made
+## grayscale.
+no_image_processing: true
+
+## output background color--only used by html and epub (and ignored in
+## epub by many readers). Included below in output_css--will be
+## ignored if not in output_css.
+background_color: ffffff
+
+## Allow customization of CSS. Make sure to keep at least one space
+## at the start of each line and to escape % to %%. Also need
+## background_color to be in the same section, if included in CSS.
+output_css:
+ body { background-color: #%(background_color)s; }
+ .CI {
+ text-align:center;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding:0px;
+ }
+ .center {text-align: center;}
+ .cover {text-align: center;}
+ .full {width: 100%%; }
+ .quarter {width: 25%%; }
+ .smcap {font-variant: small-caps;}
+ .u {text-decoration: underline;}
+ .bold {font-weight: bold;}
+
+[txt]
+## Add URLs since there aren't links.
+titlepage_entries: series,seriesUrl,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,numWords,site,storyUrl, authorUrl, description
+
+## Width to word wrap text output. 0 indicates no wrapping.
+wrap_width: 78
+
+## use \r\n for line endings, the windows convention. text output only.
+windows_eol: true
+
+[epub]
+
+## epub carries the TOC in metadata.
+## mobi generated from epub by calibre will have a TOC at the end.
+include_tocpage: false
+
+## include a Update Log page before the story text. If 'true', the
+## log will be updated each time the epub is and all the metadata
+## fields that have changed since the last update (typically
+## dateUpdated,numChapters,numWords at a minimum) will be shown.
+## Great for tracking when chapters came out and when the description,
+## etc changed.
+## Plugin will now preserve the log page when the epub is overwritten,
+## too.
+include_logpage: false
+## If set to 'smart', logpage will only be included if the story is
+## status:In-Progress or already had a logpage. That way you don't
+## end up with Completed stories that have just one logpage entry.
+#include_logpage: smart
+
+## items to include in the log page Empty metadata entries, or those
+## that haven't changed since the last update, will *not* appear, even
+## if in the list. You can include extra text or HTML that will be
+## included as-is in each log entry. Eg: logpage_entries: ..., ,
+## summary, ,...
+logpage_entries: dateCreated,datePublished,dateUpdated,numChapters,numWords,status,series,title,author,description,category,genre,rating,warnings
+
+## epub->mobi conversions typically don't like tables.
+titlepage_use_table: false
+
+## When using tables, make these span both columns.
+wide_titlepage_entries: description, storyUrl, authorUrl, seriesUrl
+
+## output background color--only used by html and epub (and ignored in
+## epub by many readers). Included below in output_css--will be
+## ignored if not in output_css.
+background_color: ffffff
+
+## Allow customization of CSS. Make sure to keep at least one space
+## at the start of each line and to escape % to %%. Also need
+## background_color to be in the same section, if included in CSS.
+## 'adobe-hyphenate: none;' prevents hyphenation on newer Nooks
+## STR(wG) (1.2.1+ for sure)
+output_css:
+ body { background-color: #%(background_color)s;
+ text-align: justify;
+ margin: 2%%;
+ adobe-hyphenate: none; }
+ pre { font-size: x-small; }
+ sml { font-size: small; }
+ h1 { text-align: center; }
+ h2 { text-align: center; }
+ h3 { text-align: center; }
+ h4 { text-align: center; }
+ h5 { text-align: center; }
+ h6 { text-align: center; }
+ .CI {
+ text-align:center;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding:0px;
+ }
+ .center {text-align: center;}
+ .cover {text-align: center;}
+ .full {width: 100%%; }
+ .quarter {width: 25%%; }
+ .smcap {font-variant: small-caps;}
+ .u {text-decoration: underline;}
+ .bold {font-weight: bold;}
+
+## include images from img tags in the body and summary of
+## stories. Images will be converted to jpg for size if possible.
+## include_images is *only* available in epub and html output format.
+#include_images:false
+
+## If set, the first image found will be made the cover image. If
+## keep_summary_html is true, any images in summary will be before any
+## in chapters.
+#make_firstimage_cover: false
+
+## If set, the epub will never have a cover, even include_images is on
+## and the site has specific cover images.
+#never_make_cover: false
+
+## If set, and there isn't already a cover image from the adapter or
+## from make_firstimage_cover, this image will be made the cover.
+## It can be either a 'file:' or 'http:' url.
+## Note that if you enable make_firstimage_cover in [epub], but want
+## to use default_cover_image for a specific site, use the site:format
+## section, for example: [ficwad.com:epub]
+## default_cover_image is a python string Template string with
+## ${title}, ${author} etc, same as titlepage_entries. Unless
+## allow_unsafe_filename is true, invalid filename chars will be
+## removed from metadata fields
+#default_cover_image:file:///C:/Users/username/Desktop/nook/images/icon.png
+#default_cover_image:file:///C:/Users/username/Desktop/nook/images/${title}/icon.png
+#default_cover_image:http://www.somesite.com/someimage.gif
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+#cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
+
+## Resize images down to width, height, preserving aspect ratio.
+## Nook size, with margin.
+image_max_size: 580, 725
+
+## Change image to grayscale, if graphics library allows, to save
+## space.
+#grayscale_images: false
+
+## if the 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
+## will break any other readers, but in case it does, the fix can be
+## turned off. This setting is not used if replace_br_with_p is
+## true--replace_br_with_p also fixes the problem.
+nook_img_fix:true
+
+[mobi]
+## mobi TOC cannot be turned off right now.
+#include_tocpage: true
+
+## Each site has a section that overrides [defaults].
+## test1.com specifically is not a real story site. Instead,
+## it is a fake site for testing configuration and output. It uses
+## URLs like: http://test1.com?sid=12345
+[test1.com]
+extratags: FanFiction,Testing
+# extracategories:Fafner
+# extragenres:Romance,Fluff
+# extracharacters:Reginald Smythe-Smythe,Mokona,Harry P.
+# extraships:Smythe-Smythe/Mokona
+# extrawarnings:Extreme Bogosity
+
+# extra_valid_entries:metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
+
+# include_in_compositeJ:dateCreated
+# include_in_compositeK:metaC,listX,compositeL,compositeJ,compositeK,listZ
+# include_in_compositeL:ships,metaA,listZ,datePublished,dateUpdated,
+
+# extra_titlepage_entries: metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
+# extra_logpage_entries: metaA,metaB,metaC,listX,listY,listZ,compositeJ,compositeK,compositeL
+# extra_subject_tags: metaA,metaB,metaC
+
+# replace_metadata:
+# compositeL=>Val=>VALUE
+# series,extratags=>Test=>Plan
+# Puella Magi Madoka Magica.* => Madoka
+# Comedy=>Humor
+# Crossover: (.*)=>\1
+# (.*)Great(.*)=>\1Moderate\2
+# .*-Centered=>
+# characters=>Harry P\.=>Harry Potter
+
+
+## If necessary, you can define [:] sections to
+## customize the formats differently for the same site. Overrides
+## defaults, format and site.
+[test1.com:txt]
+extratags: FanFiction,Testing,Text
+
+[test1.com:html]
+extratags: FanFiction,Testing,HTML
+
+[archive.skyehawke.com]
+
+[archiveofourown.org]
+## 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
+
+## archiveofourown.org stories allow chapters to be added out of
+## order. So the newest chapter may not be the last one. FFDL 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.
+#do_update_hook:false
+
+## AO3 adapter defines a few extra metadata entries.
+## If there's ever more than 4 series, add series04,series04Url etc.
+extra_valid_entries:fandoms,freeformtags,freefromtags,ao3categories,comments,kudos,hits,bookmarks,collections,series00,series01,series02,series03,series00Url,series01Url,series02Url,series03Url
+fandoms_label:Fandoms
+freeformtags_label:Freeform Tags
+freefromtags_label:Freeform Tags
+ao3categories_label:AO3 Categories
+comments_label:Comments
+kudos_label:Kudos
+hits_label:Hits
+collections_label:Collections
+bookmarks_label:Bookmarks
+
+## freeformtags was previously typo'ed as freefromtags. This way,
+## freefromtags will still work for people who've used it.
+include_in_freefromtags:freeformtags
+
+## adds to titlepage_entries instead of replacing it.
+#extra_titlepage_entries: fandoms,freeformtags,ao3categories,comments,kudos,hits,bookmarks,series00,series01,series02,series03,series00Url,series01Url,series02Url,series03Url
+
+## adds to include_subject_tags instead of replacing it.
+#extra_subject_tags:fandoms,freeformtags,ao3categories
+
+## AO3 chapters can include several different types of notes. We've
+## traditional included them all in the chapter text, but this allows
+## you to customize which you include. Copy this parameter to your
+## personal.ini and list the ones you don't want.
+#exclude_notes:authorheadnotes,chaptersummary,chapterheadnotes,chapterfootnotes,authorfootnotes
+
+## AO3 is blocking people more aggressively. If you download fewer
+## stories less often you can likely get by with reducing this sleep.
+slow_down_sleep_time:2
+
+[ashwinder.sycophanthex.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extracharacters:Severus Snape,Hermione Granger
+extraships:Severus Snape/Hermione Granger
+
+[asr3.slashzone.org]
+## Site dedicated to these categories/characters/ships
+extracategories:The Sentinel
+
+## 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
+
+[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
+## incorrectly. Each adapter has a default list, usually "utf8,
+## Windows-1252" or "Windows-1252, utf8", but this will let you
+## explicitly set the encoding and order if you need to. The special
+## value 'auto' will call chardet and use the encoding it reports if
+## it has +90% confidence. 'auto' is not reliable.
+website_encodings:Windows-1252,ISO-8859-1,auto
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:warnings,reviews
+reviews_label:Reviews
+
+## Site dedicated to these categories/characters/ships
+extracharacters:Spike,Buffy
+extracategories:Buffy the Vampire Slayer
+
+## Strips links found in the story text
+## Specific to bloodshedverse.com
+strip_text_links:true
+
+[bloodties-fans.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: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
+## 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:Castle
+
+[chaos.sycophanthex.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 include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+cover_exclusion_regexp:/images/.*?ribbon.gif
+
+[csi-forensics.com]
+## 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
+
+extra_valid_entries: readings
+readings_label: Readings
+
+[dark-solace.org]
+## Site dedicated to these categories/characters/ships
+## 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
+
+extracategories:Buffy: The Vampire Slayer
+extracharacters:Buffy, Spike
+extraships:Spike/Buffy
+
+[devianthearts.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
+
+## 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
+
+[dramione.org]
+## 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:Draco Malfoy,Hermione Granger
+extraships:Draco Malfoy/Hermione Granger
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+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
+## 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
+## composite metadata entries. dramione.org, for example, adds
+## 'cliches' and then defines as the composite of hermiones,dracos in
+## include_in_cliches.
+extra_valid_entries:themes,hermiones,dracos,timeline,cliches,read,reviews
+include_in_cliches:hermiones,dracos
+
+## For another example, you could, by uncommenting this line, include
+## themes in with genre metadata.
+#include_in_genre:genre, themes
+
+## You can give each new valid entry a specific label for use on
+## titlepage and logpage. If not defined, it will simply be the
+themes_label:Themes
+hermiones_label:Hermiones
+dracos_label:Dracos
+timeline_label:Timeline
+cliches_label:Character Cliches
+
+## extra_titlepage_entries (and extra_logpage_entries) *add* to
+## titlepage_entries (and logpage_entries) so you can add site
+## specific entries to titlepage/logpage without having to copy the
+## entire titlepage_entries line. (But if you want them higher than
+## the end, you will need to copy titlepage_entries.)
+#extra_titlepage_entries: themes,timeline,cliches
+#extra_logpage_entries: themes,timeline,cliches
+#extra_subject_tags: themes,timeline,cliches
+
+## (Plugin Only) - You can also populate calibre custom columns with
+## the site specific metadata using custom_columns_settings (but only
+## if 'Allow custom_columns_settings from personal.ini' is checked in
+## the plugin GUI config.) There are three parts, the entry name,
+## then the label of the calibre custom column, then (optionally) a
+## '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.
+
+#custom_columns_settings:
+# cliches=>#acolumn
+# themes=>#bcolumn,a
+# timeline=>#ccolumn,n
+# "FanFiction"=>#collection
+
+[efiction.esteliel.de]
+## Site dedicated to these categories/characters/ships
+extracategories:Lord of the Rings
+
+[erosnsappho.sycophanthex.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:Harry Potter
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+cover_exclusion_regexp:/images/.*?ribbon.gif
+
+[fanfiction.csodaidok.hu]
+## website encoding(s) In theory, each website reports the character
+## encoding they use for each page. In practice, some sites report it
+## incorrectly. Each adapter has a default list, usually "utf8,
+## Windows-1252" or "Windows-1252, utf8", but this will let you
+## explicitly set the encoding and order if you need to. The special
+## value 'auto' will call chardet and use the encoding it reports if
+## it has +90% confidence. 'auto' is not reliable.
+website_encodings:ISO-8859-2,auto
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:reviews,challenge
+reviews_label:Reviews
+challenge_label:Challenge
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[fanfic.hu]
+## website encoding(s) In theory, each website reports the character
+## encoding they use for each page. In practice, some sites report it
+## incorrectly. Each adapter has a default list, usually "utf8,
+## Windows-1252" or "Windows-1252, utf8", but this will let you
+## explicitly set the encoding and order if you need to. The special
+## value 'auto' will call chardet and use the encoding it reports if
+## it has +90% confidence. 'auto' is not reliable.
+website_encodings:ISO-8859-1,auto
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[fanfiction.mugglenet.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[fanfic.potterheadsanonymous.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[fanfiction.portkey.org]
+## 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:Harry Potter
+extraships:Harry Potter/Hermione Granger
+
+[fanfiction.tenhawkpresents.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
+
+[fannation.shades-of-moonlight.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
+
+## 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
+
+extra_valid_entries: readings,romance
+extra_titlepage_entries: readings,romance
+readings_label: Readings
+romance_label: Romance
+
+[fhsarchive.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
+
+[ficwad.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
+
+[fictionmania.tv]
+## website encoding(s) In theory, each website reports the character
+## encoding they use for each page. In practice, some sites report it
+## incorrectly. Each adapter has a default list, usually "utf8,
+## Windows-1252" or "Windows-1252, utf8", but this will let you
+## explicitly set the encoding and order if you need to. The special
+## value 'auto' will call chardet and use the encoding it reports if
+## it has +90% confidence. 'auto' is not reliable.
+website_encodings:ISO-8859-1,auto
+
+## items to include in the log page Empty metadata entries, or those
+## that haven't changed since the last update, will *not* appear, even
+## if in the list. You can include extra text or HTML that will be
+## included as-is in each log entry. Eg: logpage_entries: ..., ,
+## summary, ,...
+## Don't include numChapters since all stories are a single "chapter", there's
+## no way to reliably find the next chapter
+logpage_entries: dateCreated,datePublished,dateUpdated,numChapters,numWords,status,series,title,author,description,category,genre,rating,warnings
+
+## items to include in the title page
+## Empty metadata entries will *not* appear, even if in the list.
+## You can include extra text or HTML that will be included as-is in
+## the title page. Eg: titlepage_entries: ..., ,summary, ,...
+## All current formats already include title and author.
+## Don't include numChapters since all stories are a single "chapter", there's
+## no way to reliably find the next chapter
+titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numWords,site,description
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:fileName,fileSize,oldName,newName,keyWords,mainCharactersAge,readings
+
+## Turns all space characters into " " HTML entities to forcefully preserve
+## formatting with spaces. Enabling this will blow up the filesize quite a bit
+## and is probably not a good idea, unless you absolutely need the story
+## formatting.
+## Specific to fictionmania.tv
+non_breaking_spaces:false
+
+[fictionpad.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
+
+extra_valid_entries:followers,comments,views,likes,dislikes
+#extra_titlepage_entries:followers,comments,views,likes,dislikes
+
+followers_label:Followers
+comments_label:Comments
+views_label:Views
+likes_label:Likes
+dislikes_label:Dislikes
+
+[finestories.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
+
+[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
+
+[imagine.e-fic.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
+
+[indeath.net]
+## Site dedicated to these categories/characters/ships
+extracategories:In Death
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+cover_exclusion_regexp:/public/style_emoticons/.*
+
+[ksarchive.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Star Trek
+extracharacters:Kirk,Spock
+extraships:Kirk/Spock
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:universe,crossoverfandom
+universe_label:Universe
+crossoverfandom_label:Crossover Fandom
+extra_titlepage_entries:universe,crossoverfandom
+
+[literotica.com]
+extra_valid_entries:eroticatags
+eroticatags_label:Erotica Tags
+extra_titlepage_entries: eroticatags
+
+[lotrfanfiction.com]
+## 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
+
+extra_valid_entries: readings
+readings_label: Readings
+
+## Site dedicated to these categories/characters/ships
+extracategories:Lord of the Rings
+
+[lumos.sycophanthex.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:Harry Potter
+
+[merlinfic.dtwins.co.uk]
+## 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:Merlin
+
+[national-library.net]
+## Site dedicated to these categories/characters/ships
+extracategories:West Wing
+
+[ncisfic.com]
+## Site dedicated to these categories/characters/ships
+extracategories:NCIS
+
+[netraptor.org]
+
+[nfacommunity.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:NCIS
+
+[nha.magical-worlds.us]
+## Site dedicated to these categories/characters/ships
+extracategories:Buffy: The Vampire Slayer
+extracharacters:Willow
+
+[nocturnal-light.net]
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:readings,reviews
+readings_label:Readings
+reviews_label:Reviews
+
+## Site dedicated to these categories/characters/ships
+extracharacters:Spike,Buffy
+extracategories:Buffy the Vampire Slayer
+
+[occlumency.sycophanthex.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extracharacters:Severus Snape
+
+[onedirectionfanfiction.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:One Direction
+
+[pommedesang.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:Anita Blake Vampire Hunter
+
+[ponyfictionarchive.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:My Little Pony: Friendship is Magic
+
+[pretendercentre.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:The Pretender
+
+[samandjack.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:Stargate: SG-1
+extracharacters:Sam,Jack
+extraships:Sam/Jack
+
+[samdean.archive.nu]
+## Site dedicated to these categories/characters/ships
+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
+
+[sg1-heliopolis.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
+
+[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
+## 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:Stargate: Atlantis
+extracharacters:John Sheppard,Elizabeth Weir
+extraships:John Sheppard/Elizabeth Weir
+
+[spikeluver.com]
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:warnings,reviews
+reviews_label:Reviews
+
+## Site dedicated to these categories/characters/ships
+extracharacters:Spike,Buffy
+extracategories:Buffy the Vampire Slayer
+
+[stargate-atlantis.org]
+## Site dedicated to these categories/characters/ships
+extracategories:Stargate: Atlantis
+
+[storiesonline.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.
+## storiesonline.net has started requiring login by email rather than
+## pen name.
+#username:youremail@yourdomain.dom
+#password:yourpassword
+
+## Clear FanFiction from defaults, site is original fiction.
+extratags:
+
+extra_valid_entries:size,universe,universeUrl,universeHTML,sitetags,notice,codes,score
+#extra_titlepage_entries:size,universeHTML,sitetags,notice,score
+include_in_codes:sitetags
+
+## adds to include_subject_tags instead of replacing it.
+#extra_subject_tags:sitetags
+
+size_label:Size
+universe_label:Universe
+universeUrl_label:Universe URL
+universeHTML_label:Universe
+sitetags_label:Site Tags
+notice_label:Notice
+score_label:Score
+
+## Assume entryUrl, apply to "%s " to
+## make entryHTML.
+make_linkhtml_entries:universe
+
+## storiesonline.net stories can be in a series or a universe, but not
+## both. By default, universe will be populated in 'series' with
+## index=0
+universe_as_series: true
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+cover_exclusion_regexp:/css/bir.png
+
+[thehexfiles.net]
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extracharacters:Draco Malfoy,Harry Potter
+extraships:Harry Potter/Draco Malfoy
+
+[thehookupzone.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:Criminal Minds
+
+[themaplebookshelf.com]
+## 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
+
+## 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
+
+extra_valid_entries: readings,challenge
+extra_titlepage_entries: readings,challenge
+challenge_label: Challenge
+readings_label: Readings
+
+[themasque.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
+
+[thequidditchpitch.org]
+## 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
+
+[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
+
+[trekiverse.org]
+## 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:Star Trek
+
+extra_valid_entries:readings,awards
+extra_titlepage_entries:readings,awards
+awards_label:Awards
+readings_label:Readings
+
+cover_exclusion_regexp:art/.*Awards.jpg
+
+[voracity2.e-fic.com]
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:reviews,readings
+reviews_label:Reviews
+readings_label:Readings
+
+[www.adastrafanfic.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:Star Trek
+
+[www.dracoandginny.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:Draco Malfoy,Ginny Weasley
+extraships:Draco Malfoy/Ginny Weasley
+
+[www.thealphagate.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Stargate: SG-1
+
+[www.checkmated.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.destinysgateway.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
+
+[www.dokuga.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:InuYasha
+extracharacters:Sesshoumaru,Kagome
+extraships:Sesshoumaru/Kagome
+
+[www.dotmoon.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
+
+[www.efpfanfic.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
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:notes,context,type
+notes_label:Notes
+context_label:Context
+type_label:Type of Couple
+
+[www.fanfiction.net]
+user_agent:
+## fanfiction.net's 'cover' images are really just tiny thumbnails.
+## Set this to true to never use them.
+#never_make_cover: false
+
+## fanfiction.net shows the user's
+cover_exclusion_regexp:(/imageu/|d_60_90\.jpg)
+
+## fanfiction.net is blocking people more aggressively. If you
+## download fewer stories less often you can likely get by with
+## reducing this sleep.
+slow_down_sleep_time:4
+
+## ffnet is sensitive to too many hits. Users are sensitive to long
+## waits during the initial metadata collection in the foreground.
+## When used, these settings will speed up metadata downloads in the
+## foreground linearly.
+tweak_fg_sleep:true
+min_fg_sleep:1.0
+max_fg_sleep:4.0
+max_fg_sleep_at_downloads: 10
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:reviews,favs,follows
+
+## ffnet uses 'Pairings', not 'Relationship', stating they don't have
+## to be romantic pairings.
+ships_label:Pairings
+
+## Date formats used by FFDL. 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 %%.
+#dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S
+datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S
+dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S
+
+## ffnet used to have a tendency to send out update notices in email
+## before all their servers were showing the update on the first
+## chapter. It generates another server request and doesn't seem to
+## be needed lately, so now default it to off.
+check_next_chapter:false
+
+[www.fanfiktion.de]
+## 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.ficbook.net]
+
+[www.fictionalley.org]
+## 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:Harry Potter
+
+## fictionalley.org doesn't have a status metadatum. If uncommented,
+## this will be used for status.
+#default_value_status:Unknown
+
+[www.fictionpress.com]
+user_agent:
+## Clear FanFiction from defaults, fictionpress.com is original fiction.
+extratags:
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:reviews,favs,follows
+
+[www.fimfiction.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
+
+## fimfiction.net stories can be locked requiring individual
+## passwords. If fail_on_password is set, the downloader will fail
+## when a password is required rather than prompting every time.
+#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
+## 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.
+#do_update_hook:false
+
+## fimfiction.net is reported to misinterprete some BBCode with
+## blockquotes incorrectly. This fixes those instances and defaults
+## to on, but can be switched off if it is found to cause problems.
+fix_fimf_blockquotes:true
+
+## Site dedicated to these categories/characters/ships
+extracategories:My Little Pony: Friendship is Magic
+
+## Extra metadata that this adapter knows about. See [dramione.org]
+## for examples of how to use them.
+extra_valid_entries:likes,dislikes,views,total_views,short_description,groups,groupsUrl,groupsHTML,prequel,prequelUrl,prequelHTML,sequels,sequelsUrl,sequelsHTML,comment_count,coverSource,coverSourceUrl,coverSourceHTML
+likes_label:Likes
+dislikes_label:Dislikes
+views_label:Highest Single Chapter Views
+total_views_label:Total Views
+short_description_label:Short Summary
+groups_label:Groups
+groupsUrl_label:Groups URLs
+groupsHTML_label:Groups
+prequel_label:Prequel
+prequelUrl_label:Prequel URL
+prequelHTML_label:Prequel
+sequels_label:Sequels
+sequelsUrl_label:Sequel URLs
+sequelsHTML_label:Sequels
+comment_count_label:Comment Count
+coverSource_label:Cover Source
+coverSourceUrl_label:Cover Source URL
+coverSourceHTML_label:Cover Source
+
+keep_in_order_sequels:true
+keep_in_order_sequelsUrl:true
+keep_in_order_groups:true
+keep_in_order_groupsUrl:true
+
+## Assume entryUrl, apply to "%s " to
+## make entryHTML.
+make_linkhtml_entries:prequel,sequels,groups,coverSource
+
+[www.harrypotterfanfiction.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:Harry Potter
+
+[www.henneth-annun.net]
+## Site dedicated to these categories/characters/ships
+extracategories:The Hobbit
+
+[www.hpfandom.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.hpfanficarchive.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.ik-eternal.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:InuYasha
+extracharacters:InuYasha,Kagome
+extraships:InuYasha/Kagome
+
+[www.libraryofmoria.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:Lord of the Rings
+
+[www.mediaminer.org]
+
+[www.midnightwhispers.ca]
+## 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:Queer as Folk
+
+## some sites include images that we don't ever want becoming the
+## cover image. This lets you exclude them.
+cover_exclusion_regexp:/stories/999/images/.*?_trophy.png
+
+[www.ncisfiction.net]
+## Site dedicated to these categories/characters/ships
+extracategories:NCIS
+
+[www.nickandgreg.net]
+## 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
+## commandline version, this should go in your personal.ini, not
+## defaults.ini.
+#username:YourName
+#password:yourpassword
+
+## 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
+## correctly. If you have a login, this is recommended.
+#force_login:true
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extraships:Harry Potter/Ginny Weasley
+
+[www.potionsandsnitches.org]
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.potterfics.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.psychfic.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Psych
+
+## 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
+
+[www.qaf-fic.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:Queer as Folk
+
+[www.restrictedsection.org]
+## 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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extragenres:Erotica
+
+[www.scarvesandcoffee.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Glee
+extracharacters:Kurt Hummel,Blaine Anderson
+
+[www.simplyundeniable.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+
+[www.sinful-desire.org]
+## 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:Supernatural
+
+[www.siye.co.uk]
+## Site dedicated to these categories/characters/ships
+extracategories:Harry Potter
+extracharacters:Harry Potter,Ginny Weasley
+extraships:Harry Potter/Ginny Weasley
+
+[www.squidge.org/peja]
+## www.squidge.org/peja calls it Fandom
+category_label:Fandom
+
+## Remove numWords -- www.squidge.org/peja word counts are inaccurate
+titlepage_entries: seriesHTML,category,genre,language,characters,ships,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,site,description
+
+[www.squidge.org/peja:txt]
+## Add URLs since there aren't links and remove numWords --
+## www.squidge.org/peja word counts are inaccurate
+titlepage_entries: series,seriesUrl,category,genre,language,status,datePublished,dateUpdated,dateCreated,rating,warnings,numChapters,site,storyUrl, authorUrl, description
+
+[www.storiesofarda.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:Lord of the Rings
+
+[www.thepetulantpoetess.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
+
+[www.twcslibrary.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
+
+## twcslibrary.net (ab)uses series as personal reading lists.
+collect_series: false
+
+[www.tthfanfic.org]
+## 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
+
+## tth is a little unusual--it doesn't require user/pass, but the site
+## keeps track of which chapters you've read and won't send another
+## update until it thinks you're up to date. This way, on download,
+## it thinks you're up to date.
+#username:YourName
+#password:yourpassword
+
+[www.twilightarchives.com]
+## Site dedicated to these categories/characters/ships
+extracategories:Twilight
+
+[www.twilighted.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Twilight
+
+## twilighted.net (ab)uses series as personal reading lists.
+collect_series: false
+
+[www.twiwrite.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
+
+## Site dedicated to these categories/characters/ships
+extracategories:Twilight
+
+## twiwrite.net (ab)uses series as personal reading lists.
+collect_series: false
+
+[www.walkingtheplank.org]
+## 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:Harry Potter
+extracharacters:Severus Snape,Harry Potter
+extraships:Severus Snape/Harry Potter
+
+[www.whofic.com]
+
+[www.wizardtales.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
+
+[www.wolverineandrogue.com]
+## Site dedicated to these categories/characters/ships
+extracategories:X-Men Movie
+extracharacters:Wolverine,Rogue
+
+[www.wraithbait.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: Atlantis
+
+extra_valid_entries:reviews
+reviews_label:Reviews
+
+[overrides]
+## It may sometimes be useful to override all of the specific format,
+## site and site:format sections in your private configuration. For
+## example, this extratags param here would override all of the
+## extratags params in all other sections. Only commandline options
+## beat overrides.
+#extratags:fanficdownloader
+
+
+[teststory:defaults]
+valid_entries:title,author_list,authorId_list,authorUrl_list,storyUrl,
+ datePublished,dateUpdated,numWords,status,language,series,seriesUrl,
+ rating,category_list,genre_list,warnings_list,characters_list,ships_list,
+ description,site,extratags
+
+# {{storyId}} is a special case--it's the only one that works.
+title:Test Story Title {{storyId}}
+author_list:Test Author aa
+authorId_list:1
+authorUrl_list:http://test1.com?authid=1
+storyUrl:http://test1.com?sid={{storyId}}
+datePublished:1975-03-15
+dateUpdated:1975-04-15
+numWords:123,456
+status:In-Progress
+language:English
+
+chaptertitles:Prologue
+
+## Add additional sections with different numbers to get different
+## parameters for different story urls.
+## test1.com?sid=1000
+[teststory:1000]
+# note the leading commas when doing add_to_ with valid_entries and *_list
+add_to_valid_entries:,favs
+title:Testing New Feature {{storyId}}
+author_list:Bob Smith
+authorId_list:45
+authorUrl_list:http://test1.com?authid=45
+datePublished:2013-03-15
+dateUpdated:2013-04-15
+numWords:1456
+favs:56
+series:The Great Test [4]
+seriesUrl:http://test1.com?seriesid=1
+rating:Tweenie
+category_list:Harry Potter,Furbie,Crossover,Puella Magi Madoka Magica/魔法少女まどか★マギカ,Magical Girl Lyrical Nanoha
+genre_list:Fantasy,Comedy,Sci-Fi,Noir
+warnings_list:Swearing,Violence
+characters_list:Bob Smith,George Johnson,Fred Smythe
+
+chaptertitles:Prologue,Chapter 1\, Xenos on Cinnabar,Chapter 2\, Sinmay on Kintikin,3. Chapter 3
diff --git a/plugin-example.ini b/calibre-plugin/plugin-example.ini
similarity index 96%
rename from plugin-example.ini
rename to calibre-plugin/plugin-example.ini
index 43dc7841..4f1b4dd6 100644
--- a/plugin-example.ini
+++ b/calibre-plugin/plugin-example.ini
@@ -1,122 +1,122 @@
-## This is an example of what your personal configuration might look
-## like. Uncomment options by removing the '#' in front of them.
-
-[defaults]
-## [defaults] section applies to all formats and sites but may be
-## overridden at several levels. Example:
-
-## [defaults]
-## titlepage_entries: category,genre, status
-## [www.whofic.com]
-## # overrides defaults.
-## titlepage_entries: category,genre, status,dateUpdated,rating
-## [epub]
-## # overrides defaults & site section
-## titlepage_entries: category,genre, status,datePublished,dateUpdated,dateCreated
-## [www.whofic.com:epub]
-## # overrides defaults, site section & format section
-## titlepage_entries: category,genre, status,datePublished
-## [overrides]
-## # overrides all other sections
-## titlepage_entries: category
-
-## Some sites also require the user to confirm they are adult for
-## adult content. Uncomment by removing '#' in front of is_adult.
-#is_adult:true
-
-## Don't like the numbers at the start of chapter titles on some
-## sites? You can use strip_chapter_numbers to strip them off. Just
-## want to make them all look the same? Strip them off, then add them
-## back on with add_chapter_numbers. Don't like the way it strips
-## numbers or adds them back? See chapter_title_strip_pattern and
-## chapter_title_add_pattern.
-#strip_chapter_numbers:true
-#add_chapter_numbers:true
-
-## Add this to genre if there's more than one category.
-#add_genre_when_multi_category: Crossover
-
-[epub]
-## include images from img tags in the body and summary of stories.
-## Images will be converted to jpg for size if possible. Images work
-## in epub format only. To get mobi or other format with images,
-## download as epub and use Calibre to convert.
-#include_images:true
-
-## If not set, the summary will have all html stripped for safety.
-## Both this and include_images must be true to get images in the
-## summary.
-#keep_summary_html:true
-
-## If set, the first image found will be made the cover image. If
-## keep_summary_html is true, any images in summary will be before any
-## in chapters.
-#make_firstimage_cover:true
-
-## Resize images down to width, height, preserving aspect ratio.
-## Nook size, with margin.
-#image_max_size: 580, 725
-
-## Change image to grayscale, if graphics library allows, to save
-## space.
-#grayscale_images: false
-
-
-## Most common, I expect will be using this to save username/passwords
-## for different sites. Here are a few examples. See defaults.ini
-## for the full list.
-
-[www.twilighted.net]
-#username:YourPenname
-#password:YourPassword
-## default is false
-#collect_series: true
-
-[ficwad.com]
-#username:YourUsername
-#password:YourPassword
-
-[www.twiwrite.net]
-#username:YourName
-#password:yourpassword
-## default is false
-#collect_series: true
-
-[www.adastrafanfic.com]
-## Some sites do not require a login, but do require the user to
-## confirm they are adult for adult content.
-#is_adult:true
-
-[www.twcslibrary.net]
-#username:YourName
-#password:yourpassword
-#is_adult:true
-## default is false
-#collect_series: true
-
-[www.fictionalley.org]
-#is_adult:true
-
-[www.harrypotterfanfiction.com]
-#is_adult:true
-
-[www.fimfiction.net]
-#is_adult:true
-#fail_on_password: false
-
-[www.tthfanfic.org]
-#is_adult:true
-## tth is a little unusual--it doesn't require user/pass, but the site
-## keeps track of which chapters you've read and won't send another
-## update until it thinks you're up to date. This way, on download,
-## it thinks you're up to date.
-#username:YourName
-#password:yourpassword
-
-
-## This section will override anything in the system defaults or other
-## sections here.
-[overrides]
-## default varies by site. Set true here to force all sites to
-## collect series.
-#collect_series: true
+## This is an example of what your personal configuration might look
+## like. Uncomment options by removing the '#' in front of them.
+
+[defaults]
+## [defaults] section applies to all formats and sites but may be
+## overridden at several levels. Example:
+
+## [defaults]
+## titlepage_entries: category,genre, status
+## [www.whofic.com]
+## # overrides defaults.
+## titlepage_entries: category,genre, status,dateUpdated,rating
+## [epub]
+## # overrides defaults & site section
+## titlepage_entries: category,genre, status,datePublished,dateUpdated,dateCreated
+## [www.whofic.com:epub]
+## # overrides defaults, site section & format section
+## titlepage_entries: category,genre, status,datePublished
+## [overrides]
+## # overrides all other sections
+## titlepage_entries: category
+
+## Some sites also require the user to confirm they are adult for
+## adult content. Uncomment by removing '#' in front of is_adult.
+#is_adult:true
+
+## Don't like the numbers at the start of chapter titles on some
+## sites? You can use strip_chapter_numbers to strip them off. Just
+## want to make them all look the same? Strip them off, then add them
+## back on with add_chapter_numbers. Don't like the way it strips
+## numbers or adds them back? See chapter_title_strip_pattern and
+## chapter_title_add_pattern.
+#strip_chapter_numbers:true
+#add_chapter_numbers:true
+
+## Add this to genre if there's more than one category.
+#add_genre_when_multi_category: Crossover
+
+[epub]
+## include images from img tags in the body and summary of stories.
+## Images will be converted to jpg for size if possible. Images work
+## in epub format only. To get mobi or other format with images,
+## download as epub and use Calibre to convert.
+#include_images:true
+
+## If not set, the summary will have all html stripped for safety.
+## Both this and include_images must be true to get images in the
+## summary.
+#keep_summary_html:true
+
+## If set, the first image found will be made the cover image. If
+## keep_summary_html is true, any images in summary will be before any
+## in chapters.
+#make_firstimage_cover:true
+
+## Resize images down to width, height, preserving aspect ratio.
+## Nook size, with margin.
+#image_max_size: 580, 725
+
+## Change image to grayscale, if graphics library allows, to save
+## space.
+#grayscale_images: false
+
+
+## Most common, I expect will be using this to save username/passwords
+## for different sites. Here are a few examples. See defaults.ini
+## for the full list.
+
+[www.twilighted.net]
+#username:YourPenname
+#password:YourPassword
+## default is false
+#collect_series: true
+
+[ficwad.com]
+#username:YourUsername
+#password:YourPassword
+
+[www.twiwrite.net]
+#username:YourName
+#password:yourpassword
+## default is false
+#collect_series: true
+
+[www.adastrafanfic.com]
+## Some sites do not require a login, but do require the user to
+## confirm they are adult for adult content.
+#is_adult:true
+
+[www.twcslibrary.net]
+#username:YourName
+#password:yourpassword
+#is_adult:true
+## default is false
+#collect_series: true
+
+[www.fictionalley.org]
+#is_adult:true
+
+[www.harrypotterfanfiction.com]
+#is_adult:true
+
+[www.fimfiction.net]
+#is_adult:true
+#fail_on_password: false
+
+[www.tthfanfic.org]
+#is_adult:true
+## tth is a little unusual--it doesn't require user/pass, but the site
+## keeps track of which chapters you've read and won't send another
+## update until it thinks you're up to date. This way, on download,
+## it thinks you're up to date.
+#username:YourName
+#password:yourpassword
+
+
+## This section will override anything in the system defaults or other
+## sections here.
+[overrides]
+## default varies by site. Set true here to force all sites to
+## collect series.
+#collect_series: true
diff --git a/calibre-plugin/plugin-import-name-fanfictiondownloader_plugin.txt b/calibre-plugin/plugin-import-name-fanficfare_plugin.txt
similarity index 100%
rename from calibre-plugin/plugin-import-name-fanfictiondownloader_plugin.txt
rename to calibre-plugin/plugin-import-name-fanficfare_plugin.txt
diff --git a/calibre-plugin/prefs.py b/calibre-plugin/prefs.py
index ebe2175f..0cc988b1 100644
--- a/calibre-plugin/prefs.py
+++ b/calibre-plugin/prefs.py
@@ -12,8 +12,8 @@ import copy
from calibre.utils.config import JSONConfig
from calibre.gui2.ui import get_gui
-from calibre_plugins.fanfictiondownloader_plugin.dialogs import OVERWRITE
-from calibre_plugins.fanfictiondownloader_plugin.common_utils import get_library_uuid
+from calibre_plugins.fanficfare_plugin.dialogs import OVERWRITE
+from calibre_plugins.fanficfare_plugin.common_utils import get_library_uuid
PREFS_NAMESPACE = 'FanFictionDownLoaderPlugin'
PREFS_KEY_SETTINGS = 'settings'
diff --git a/calibre-plugin/translations/messages.pot b/calibre-plugin/translations/messages.pot
index 5818b969..96478091 100644
--- a/calibre-plugin/translations/messages.pot
+++ b/calibre-plugin/translations/messages.pot
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2015-02-15 09:23+Central Standard Time\n"
+"POT-Creation-Date: 2015-04-05 14:57+Central Daylight Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -23,6 +23,54 @@ msgstr ""
msgid "Path to the calibre library. Default is to use the path stored in the settings."
msgstr ""
+#: common_utils.py:398
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: common_utils.py:444
+msgid "Undefined"
+msgstr ""
+
+#: common_utils.py:464
+msgid "Prefs Viewer dialog"
+msgstr ""
+
+#: common_utils.py:465
+msgid "Preferences for: "
+msgstr ""
+
+#: common_utils.py:497
+msgid "Clear"
+msgstr ""
+
+#: common_utils.py:499
+msgid "Clear all settings for this plugin"
+msgstr ""
+
+#: common_utils.py:526
+msgid "Are you sure you want to clear your settings in this library for this plugin?"
+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 ""
+
+#: common_utils.py:528
+msgid "You must restart calibre afterwards."
+msgstr ""
+
+#: common_utils.py:537
+msgid "All settings for this plugin in this library have been cleared."
+msgstr ""
+
+#: common_utils.py:538
+msgid "Please restart calibre now."
+msgstr ""
+
+#: common_utils.py:540
+msgid "Restart calibre now"
+msgstr ""
+
#: config.py:179
msgid "FAQs"
msgstr ""
@@ -362,7 +410,7 @@ msgstr ""
msgid "FFDL now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors."
msgstr ""
-#: config.py:632 config.py:664 config.py:665 config.py:666
+#: config.py:632 config.py:663 config.py:664
msgid "Edit personal.ini"
msgstr ""
@@ -388,413 +436,407 @@ msgstr ""
msgid "Plugin Defaults (%s) (Read-Only)"
msgstr ""
-#: config.py:655
-msgid ""
-"These are all of the plugin's configurable options\n"
-"and their default settings."
-msgstr ""
-
-#: config.py:689
+#: config.py:687
msgid "These settings provide integration with the %(rl)s Plugin. %(rl)s can automatically send to devices and change custom columns. You have to create and configure the lists in %(rl)s to be useful."
msgstr ""
-#: config.py:694
+#: config.py:692
msgid "Add new/updated stories to \"Send to Device\" Reading List(s)."
msgstr ""
-#: config.py:695
+#: config.py:693
msgid "Automatically add new/updated stories to these lists in the %(rl)s plugin."
msgstr ""
-#: config.py:700
+#: config.py:698
msgid "\"Send to Device\" Reading Lists"
msgstr ""
-#: config.py:701 config.py:704 config.py:717 config.py:720
+#: config.py:699 config.py:702 config.py:715 config.py:718
msgid "When enabled, new/updated stories will be automatically added to these lists."
msgstr ""
-#: config.py:710
+#: config.py:708
msgid "Add new/updated stories to \"To Read\" Reading List(s)."
msgstr ""
-#: config.py:711
+#: config.py:709
msgid ""
"Automatically add new/updated stories to these lists in the %(rl)s plugin.\n"
"Also offers menu option to remove stories from the \"To Read\" lists."
msgstr ""
-#: config.py:716
+#: config.py:714
msgid "\"To Read\" Reading Lists"
msgstr ""
-#: config.py:726
+#: config.py:724
msgid "Add stories back to \"Send to Device\" Reading List(s) when marked \"Read\"."
msgstr ""
-#: config.py:727
+#: config.py:725
msgid "Menu option to remove from \"To Read\" lists will also add stories back to \"Send to Device\" Reading List(s)"
msgstr ""
-#: config.py:749
+#: config.py:747
msgid "The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFDL can run GC on new downloads and metadata updates. Pick a GC setting by site or Default."
msgstr ""
-#: config.py:767 config.py:771 config.py:784
+#: config.py:765 config.py:769 config.py:782
msgid "Default"
msgstr ""
-#: config.py:772
+#: config.py:770
msgid "On Metadata update, run %(gc)s with this setting, if not selected for specific site."
msgstr ""
-#: config.py:775
+#: config.py:773
msgid "On Metadata update, run %(gc)s with this setting for %(site)s stories."
msgstr ""
-#: config.py:798
+#: config.py:796
msgid "Run %(gc)s Only on New Books"
msgstr ""
-#: config.py:799
+#: config.py:797
msgid "Default is to run GC any time the calibre metadata is updated."
msgstr ""
-#: config.py:803
+#: config.py:801
msgid "Allow %(gcset)s from %(pini)s to override"
msgstr ""
-#: config.py:804
+#: config.py:802
msgid "The %(pini)s parameter %(gcset)s allows you to choose a GC setting based on metadata rather than site, but it's much more complex. %(gcset)s is ignored when this is off."
msgstr ""
-#: config.py:808
+#: config.py:806
msgid "Use calibre's Polish feature to inject/update the cover"
msgstr ""
-#: config.py:809
+#: config.py:807
msgid "Calibre's Polish feature will be used to inject or update the generated cover into the ebook, EPUB only."
msgstr ""
-#: config.py:823
+#: config.py:821
msgid "These settings provide integration with the %(cp)s Plugin. %(cp)s can automatically update custom columns with page, word and reading level statistics. You have to create and configure the columns in %(cp)s first."
msgstr ""
-#: config.py:828
+#: config.py:826
msgid "If any of the settings below are checked, when stories are added or updated, the %(cp)s Plugin will be called to update the checked statistics."
msgstr ""
-#: config.py:834
+#: config.py:832
msgid "Which column and algorithm to use are configured in %(cp)s."
msgstr ""
-#: config.py:844
+#: config.py:842
msgid "Will overwrite word count from FFDL metadata if set to update the same custom column."
msgstr ""
-#: config.py:849
+#: config.py:847
msgid "Only run Count Page's Word Count if checked and FFDL metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice."
msgstr ""
-#: config.py:885
+#: config.py:883
msgid "These controls aren't plugin settings as such, but convenience buttons for setting Keyboard shortcuts and getting all the FanFictionDownLoader confirmation dialogs back again."
msgstr ""
-#: config.py:890
+#: config.py:888
msgid "Keyboard shortcuts..."
msgstr ""
-#: config.py:891
+#: config.py:889
msgid "Edit the keyboard shortcuts associated with this plugin"
msgstr ""
-#: config.py:895
+#: config.py:893
msgid "Reset disabled &confirmation dialogs"
msgstr ""
-#: config.py:896
+#: config.py:894
msgid "Reset all show me again dialogs for the FanFictionDownLoader plugin"
msgstr ""
-#: config.py:900
+#: config.py:898
msgid "&View library preferences..."
msgstr ""
-#: config.py:901
+#: config.py:899
msgid "View data stored in the library database for this plugin"
msgstr ""
-#: config.py:912
+#: config.py:910
msgid "Done"
msgstr ""
-#: config.py:913
+#: config.py:911
msgid "Confirmation dialogs have all been reset"
msgstr ""
-#: config.py:961
+#: config.py:959
msgid "Category"
msgstr ""
-#: config.py:962
+#: config.py:960
msgid "Genre"
msgstr ""
-#: config.py:963
+#: config.py:961
msgid "Language"
msgstr ""
-#: config.py:964 ffdl_plugin.py:1199 ffdl_plugin.py:1397 ffdl_plugin.py:1427
+#: config.py:962 ffdl_plugin.py:1199 ffdl_plugin.py:1397 ffdl_plugin.py:1427
msgid "Status"
msgstr ""
-#: config.py:965
+#: config.py:963
msgid "Status:%(cmplt)s"
msgstr ""
-#: config.py:966
+#: config.py:964
msgid "Status:%(inprog)s"
msgstr ""
-#: config.py:967 config.py:1101
+#: config.py:965 config.py:1099
msgid "Series"
msgstr ""
-#: config.py:968
+#: config.py:966
msgid "Characters"
msgstr ""
-#: config.py:969
+#: config.py:967
msgid "Relationships"
msgstr ""
-#: config.py:970
+#: config.py:968
msgid "Published"
msgstr ""
-#: config.py:971 ffdl_plugin.py:1510 ffdl_plugin.py:1529
+#: config.py:969 ffdl_plugin.py:1510 ffdl_plugin.py:1529
msgid "Updated"
msgstr ""
-#: config.py:972
+#: config.py:970
msgid "Created"
msgstr ""
-#: config.py:973
+#: config.py:971
msgid "Rating"
msgstr ""
-#: config.py:974
+#: config.py:972
msgid "Warnings"
msgstr ""
-#: config.py:975
+#: config.py:973
msgid "Chapters"
msgstr ""
-#: config.py:976
+#: config.py:974
msgid "Words"
msgstr ""
-#: config.py:977
+#: config.py:975
msgid "Site"
msgstr ""
-#: config.py:978
+#: config.py:976
msgid "Story ID"
msgstr ""
-#: config.py:979
+#: config.py:977
msgid "Author ID"
msgstr ""
-#: config.py:980
+#: config.py:978
msgid "Extra Tags"
msgstr ""
-#: config.py:981 config.py:1093 dialogs.py:853 dialogs.py:949
+#: config.py:979 config.py:1091 dialogs.py:853 dialogs.py:949
#: ffdl_plugin.py:1199 ffdl_plugin.py:1397 ffdl_plugin.py:1427
msgid "Title"
msgstr ""
-#: config.py:982
+#: config.py:980
msgid "Story URL"
msgstr ""
-#: config.py:983
+#: config.py:981
msgid "Description"
msgstr ""
-#: config.py:984 dialogs.py:853 dialogs.py:949 ffdl_plugin.py:1199
+#: config.py:982 dialogs.py:853 dialogs.py:949 ffdl_plugin.py:1199
#: ffdl_plugin.py:1397 ffdl_plugin.py:1427
msgid "Author"
msgstr ""
-#: config.py:985
+#: config.py:983
msgid "Author URL"
msgstr ""
-#: config.py:986
+#: config.py:984
msgid "File Format"
msgstr ""
-#: config.py:987
+#: config.py:985
msgid "File Extension"
msgstr ""
-#: config.py:988
+#: config.py:986
msgid "Site Abbrev"
msgstr ""
-#: config.py:989
+#: config.py:987
msgid "FFDL Version"
msgstr ""
-#: config.py:1004
+#: config.py:1002
msgid "If you have custom columns defined, they will be listed below. Choose a metadata value type to fill your columns automatically."
msgstr ""
-#: config.py:1029
+#: config.py:1027
msgid "Update this %s column(%s) with..."
msgstr ""
-#: config.py:1039
+#: config.py:1037
msgid "Values that aren't valid for this enumeration column will be ignored."
msgstr ""
-#: config.py:1039 config.py:1041
+#: config.py:1037 config.py:1039
msgid "Metadata values valid for this type of column."
msgstr ""
-#: config.py:1044 config.py:1120
+#: config.py:1042 config.py:1118
msgid "New Only"
msgstr ""
-#: config.py:1045
+#: config.py:1043
msgid ""
"Write to %s(%s) only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1056
+#: config.py:1054
msgid "Allow %(ccset)s from %(pini)s to override"
msgstr ""
-#: config.py:1057
+#: config.py:1055
msgid "The %(pini)s parameter %(ccset)s allows you to set custom columns to site specific values that aren't common to all sites. %(ccset)s is ignored when this is off."
msgstr ""
-#: config.py:1062
+#: config.py:1060
msgid "Special column:"
msgstr ""
-#: config.py:1067
+#: config.py:1065
msgid "Update/Overwrite Error Column:"
msgstr ""
-#: config.py:1068
+#: config.py:1066
msgid ""
"When an update or overwrite of an existing story fails, record the reason in this column.\n"
"(Text and Long Text columns only.)"
msgstr ""
-#: config.py:1094
+#: config.py:1092
msgid "Author(s)"
msgstr ""
-#: config.py:1095
+#: config.py:1093
msgid "Publisher"
msgstr ""
-#: config.py:1096
+#: config.py:1094
msgid "Tags"
msgstr ""
-#: config.py:1097
+#: config.py:1095
msgid "Languages"
msgstr ""
-#: config.py:1098
+#: config.py:1096
msgid "Published Date"
msgstr ""
-#: config.py:1099
+#: config.py:1097
msgid "Date"
msgstr ""
-#: config.py:1100
+#: config.py:1098
msgid "Comments"
msgstr ""
-#: config.py:1102
+#: config.py:1100
msgid "Ids(url id only)"
msgstr ""
-#: config.py:1107
+#: config.py:1105
msgid "The standard calibre metadata columns are listed below. You may choose whether FFDL will fill each column automatically on updates or only for new books."
msgstr ""
-#: config.py:1121
+#: config.py:1119
msgid ""
"Write to %s only for new\n"
"books, not updates to existing books."
msgstr ""
-#: config.py:1142
+#: config.py:1140
msgid "These settings will allow FFDL to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below."
msgstr ""
-#: config.py:1147
+#: config.py:1145
msgid "IMAP Server Name"
msgstr ""
-#: config.py:1148
+#: config.py:1146
msgid "Name of IMAP server--must allow IMAP4 with SSL. Eg: imap.gmail.com"
msgstr ""
-#: config.py:1157
+#: config.py:1155
msgid "IMAP User Name"
msgstr ""
-#: config.py:1158
+#: config.py:1156
msgid ""
"Name of IMAP user. Eg: yourname@gmail.com\n"
"Note that Gmail accounts need to have IMAP enabled in Gmail Settings first."
msgstr ""
-#: config.py:1167
+#: config.py:1165
msgid "IMAP User Password"
msgstr ""
-#: config.py:1168
+#: config.py:1166
msgid "IMAP password. If left empty, FFDL will ask you for your password when you use the feature."
msgstr ""
-#: config.py:1178
+#: config.py:1176
msgid "Remember Password for Session (when not saved above)"
msgstr ""
-#: config.py:1179
+#: config.py:1177
msgid "If checked, and no password is entered above, FFDL will remember your password until you close calibre or change Libraries."
msgstr ""
-#: config.py:1184
+#: config.py:1182
msgid "IMAP Folder Name"
msgstr ""
-#: config.py:1185
+#: config.py:1183
msgid "Name of IMAP folder to search for new emails. The folder (or label) has to already exist. Use INBOX for your default inbox."
msgstr ""
-#: config.py:1194
+#: config.py:1192
msgid "Mark Emails Read"
msgstr ""
-#: config.py:1195
+#: config.py:1193
msgid "If checked, emails will be marked as having been read if they contain any story URLs."
msgstr ""
-#: config.py:1200
+#: config.py:1198
msgid "It's safest if you create a separate email account that you use only for your story update notices. FFDL and calibre cannot guarantee that malicious code cannot get your email password once you've entered it. Use this feature at your own risk. "
msgstr ""
@@ -826,10 +868,6 @@ msgstr ""
msgid "Update Calibre Metadata Only"
msgstr ""
-#: dialogs.py:246 ffdl_plugin.py:89
-msgid "FanFictionDownLoader"
-msgstr ""
-
#: dialogs.py:263 dialogs.py:752
msgid "Show Download Options"
msgstr ""
@@ -915,11 +953,11 @@ msgid ""
"Requires %s plugin."
msgstr ""
-#: dialogs.py:499 dialogs.py:553 dialogs.py:580 dialogs.py:1461
+#: dialogs.py:499 dialogs.py:553 dialogs.py:580 dialogs.py:1457
msgid "Cancel"
msgstr ""
-#: dialogs.py:531 dialogs.py:1449
+#: dialogs.py:531 dialogs.py:1445
msgid "Password"
msgstr ""
@@ -943,7 +981,7 @@ msgstr ""
msgid "Password:"
msgstr ""
-#: dialogs.py:549 dialogs.py:694 dialogs.py:1457
+#: dialogs.py:549 dialogs.py:694 dialogs.py:1453
msgid "OK"
msgstr ""
@@ -1000,7 +1038,7 @@ msgid "less than 1 second"
msgstr ""
#: dialogs.py:689 ffdl_plugin.py:342
-msgid "About FanFictionDownLoader"
+msgid "About FanFicFare"
msgstr ""
#: dialogs.py:743
@@ -1087,38 +1125,38 @@ msgstr ""
msgid "Search for case sensitive string; don't treat Harry, HARRY and harry all the same."
msgstr ""
-#: dialogs.py:1277
+#: dialogs.py:1273
msgid "Go back to fix errors?"
msgstr ""
-#: dialogs.py:1389
+#: dialogs.py:1385
msgid "Click an error below to return to Editing directly on that line:"
msgstr ""
-#: dialogs.py:1401
+#: dialogs.py:1397
msgid "Click to go to line %s"
msgstr ""
-#: dialogs.py:1417
+#: dialogs.py:1413
msgid "Return to Editing"
msgstr ""
-#: dialogs.py:1421
+#: dialogs.py:1417
msgid "Save Anyway"
msgstr ""
-#: dialogs.py:1450
+#: dialogs.py:1446
msgid "Enter Email Password for %s:"
msgstr ""
+#: ffdl_plugin.py:89 ffdl_plugin.py:120
+msgid "FanFicFare"
+msgstr ""
+
#: ffdl_plugin.py:90
msgid "Download FanFiction stories from various web sites"
msgstr ""
-#: ffdl_plugin.py:120
-msgid "FanFictionDL"
-msgstr ""
-
#: ffdl_plugin.py:252
msgid "&Add New from URL(s)"
msgstr ""
@@ -1192,7 +1230,7 @@ msgid "&Configure Plugin"
msgstr ""
#: ffdl_plugin.py:336
-msgid "Configure FanFictionDownLoader"
+msgid "Configure FanFicFare"
msgstr ""
#: ffdl_plugin.py:339
@@ -1491,7 +1529,7 @@ msgstr ""
msgid "Already contains %d chapters."
msgstr ""
-#: ffdl_plugin.py:1101 jobs.py:198
+#: ffdl_plugin.py:1101 jobs.py:206
msgid "Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update."
msgstr ""
@@ -1635,51 +1673,51 @@ msgstr ""
msgid "Error"
msgstr ""
-#: ffdl_plugin.py:1841
-msgid "You configured FanFictionDownLoader to automatically update Reading Lists, but you don't have the %s plugin installed anymore?"
+#: ffdl_plugin.py:1842
+msgid "You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?"
msgstr ""
-#: ffdl_plugin.py:1853
-msgid "You configured FanFictionDownLoader to automatically update \"To Read\" Reading Lists, but you don't have any lists set?"
+#: ffdl_plugin.py:1854
+msgid "You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: ffdl_plugin.py:1863 ffdl_plugin.py:1881
-msgid "You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?"
+#: ffdl_plugin.py:1864 ffdl_plugin.py:1882
+msgid "You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?"
msgstr ""
-#: ffdl_plugin.py:1869
-msgid "You configured FanFictionDownLoader to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?"
+#: ffdl_plugin.py:1870
+msgid "You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?"
msgstr ""
-#: ffdl_plugin.py:1990
+#: ffdl_plugin.py:1991
msgid "No story URL found."
msgstr ""
-#: ffdl_plugin.py:1993
+#: ffdl_plugin.py:1994
msgid "Not Found"
msgstr ""
-#: ffdl_plugin.py:1999
+#: ffdl_plugin.py:2000
msgid "URL is not a valid story URL."
msgstr ""
-#: ffdl_plugin.py:2002
+#: ffdl_plugin.py:2003
msgid "Bad URL"
msgstr ""
-#: ffdl_plugin.py:2138 ffdl_plugin.py:2141
+#: ffdl_plugin.py:2142 ffdl_plugin.py:2145
msgid "Anthology containing:"
msgstr ""
-#: ffdl_plugin.py:2139
+#: ffdl_plugin.py:2143
msgid "%s by %s"
msgstr ""
-#: ffdl_plugin.py:2161
+#: ffdl_plugin.py:2165
msgid " Anthology"
msgstr ""
-#: ffdl_plugin.py:2198
+#: ffdl_plugin.py:2202
msgid "(was set, removed for security)"
msgstr ""
@@ -1699,11 +1737,11 @@ msgstr ""
msgid "Download started..."
msgstr ""
-#: jobs.py:192
+#: jobs.py:200
msgid "Already contains %d chapters. Reuse as is."
msgstr ""
-#: jobs.py:209
+#: jobs.py:217
msgid "Update %s completed, added %s chapters for %s total."
msgstr ""
diff --git a/defaults.ini b/cli/defaults.ini
similarity index 100%
rename from defaults.ini
rename to cli/defaults.ini
diff --git a/downloader.py b/cli/downloader.py
similarity index 88%
rename from downloader.py
rename to cli/downloader.py
index f0a994a9..7b3ca7e9 100644
--- a/downloader.py
+++ b/cli/downloader.py
@@ -39,15 +39,15 @@ if sys.version_info >= (2, 7):
try:
# running under calibre
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, writers, exceptions
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.configurable import Configuration
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.epubutils import get_dcsource_chaptercount, get_update_data
- from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.geturls import get_urls_from_page
+ from calibre_plugins.fanfictiondownloader_plugin.fff_internals import adapters, writers, exceptions
+ from calibre_plugins.fanfictiondownloader_plugin.fff_internals.configurable import Configuration
+ from calibre_plugins.fanfictiondownloader_plugin.fff_internals.epubutils import get_dcsource_chaptercount, get_update_data
+ from calibre_plugins.fanfictiondownloader_plugin.fff_internals.geturls import get_urls_from_page
except ImportError:
- from fanficdownloader import adapters, writers, exceptions
- from fanficdownloader.configurable import Configuration
- from fanficdownloader.epubutils import get_dcsource_chaptercount, get_update_data
- from fanficdownloader.geturls import get_urls_from_page
+ from fff_internals import adapters, writers, exceptions
+ from fff_internals.configurable import Configuration
+ from fff_internals.epubutils import get_dcsource_chaptercount, get_update_data
+ from fff_internals.geturls import get_urls_from_page
def write_story(config, adapter, writeformat, metaonly=False, outstream=None):
@@ -66,9 +66,9 @@ def main(argv, parser=None, passed_defaultsini=None, passed_personalini=None):
help='write story as FORMAT, epub(default), mobi, text or html', metavar='FORMAT')
if passed_defaultsini:
- config_help = 'read config from specified file(s) in addition to calibre plugin personal.ini, ~/.fanficdownloader/personal.ini, and ./personal.ini'
+ config_help = 'read config from specified file(s) in addition to calibre plugin personal.ini, ~/.fanficfare/personal.ini, and ./personal.ini'
else:
- config_help = 'read config from specified file(s) in addition to ~/.fanficdownloader/defaults.ini, ~/.fanficdownloader/personal.ini, ./defaults.ini, and ./personal.ini'
+ config_help = 'read config from specified file(s) in addition to ~/.fanficfare/defaults.ini, ~/.fanficfare/personal.ini, ./defaults.ini, and ./personal.ini'
parser.add_option('-c', '--config',
action='append', dest='configfile', default=None,
help=config_help, metavar='CONFIG')
@@ -107,7 +107,7 @@ def main(argv, parser=None, passed_defaultsini=None, passed_personalini=None):
options, args = parser.parse_args(argv)
if not options.debug:
- logger = logging.getLogger('fanficdownloader')
+ logger = logging.getLogger('fff_internals')
logger.setLevel(logging.INFO)
if not options.siteslist and len(args) != 1:
@@ -152,12 +152,16 @@ def main(argv, parser=None, passed_defaultsini=None, passed_personalini=None):
conflist = []
homepath = join(expanduser('~'), '.fanficdownloader')
+ ## also look for .fanficfare now, give higher priority than old dir.
+ homepath2 = join(expanduser('~'), '.fanficfare')
if passed_defaultsini:
configuration.readfp(passed_defaultsini)
if isfile(join(homepath, 'defaults.ini')):
conflist.append(join(homepath, 'defaults.ini'))
+ if isfile(join(homepath2, 'defaults.ini')):
+ conflist.append(join(homepath2, 'defaults.ini'))
if isfile('defaults.ini'):
conflist.append('defaults.ini')
@@ -166,6 +170,8 @@ def main(argv, parser=None, passed_defaultsini=None, passed_personalini=None):
if isfile(join(homepath, 'personal.ini')):
conflist.append(join(homepath, 'personal.ini'))
+ if isfile(join(homepath2, 'personal.ini')):
+ conflist.append(join(homepath2, 'personal.ini'))
if isfile('personal.ini'):
conflist.append('personal.ini')
diff --git a/example.ini b/cli/example.ini
similarity index 100%
rename from example.ini
rename to cli/example.ini
diff --git a/delete_fic.py b/delete_fic.py
deleted file mode 100644
index 73722724..00000000
--- a/delete_fic.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import os
-import cgi
-import sys
-import logging
-import traceback
-import StringIO
-
-from google.appengine.api import users
-from google.appengine.ext import webapp
-from google.appengine.ext.webapp import util
-
-from fanficdownloader.downaloder import *
-from fanficdownloader.ffnet import *
-from fanficdownloader.output import *
-
-from google.appengine.ext import db
-
-from fanficdownloader.zipdir import *
-
-from ffstorage import *
-
-def create_mac(user, fic_id, fic_url):
- return str(abs(hash(user)+hash(fic_id)))+str(abs(hash(fic_url)))
-
-def check_mac(user, fic_id, fic_url, mac):
- return (create_mac(user, fic_id, fic_url) == mac)
-
-def create_mac_for_fic(user, fic_id):
- key = db.Key(fic_id)
- fanfic = db.get(key)
- if fanfic.user != user:
- return None
- else:
- return create_mac(user, key, fanfic.url)
-
-class DeleteFicHandler(webapp.RequestHandler):
- def get(self):
- user = users.get_current_user()
- if not user:
- self.redirect('/login')
-
- fic_id = self.request.get('fic_id')
- fic_mac = self.request.get('key_id')
-
- actual_mac = create_mac_for_fic(user, fic_id)
- if actual_mac != fic_mac:
- self.response.out.write("Ooops")
- else:
- key = db.Key(fic_id)
- fanfic = db.get(key)
- fanfic.delete()
- self.redirect('/recent')
-
-
- fics = db.GqlQuery("Select * From DownloadedFanfic WHERE user = :1", user)
- template_values = dict(fics = fics, nickname = user.nickname())
- path = os.path.join(os.path.dirname(__file__), 'recent.html')
- self.response.out.write(template.render(path, template_values))
-
\ No newline at end of file
diff --git a/epubmerge.py b/epubmerge.py
deleted file mode 100644
index f7e76b8c..00000000
--- a/epubmerge.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# epubmerge.py 1.0
-
-# Copyright 2011, Jim Miller
-
-# 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.
-
-if __name__ == "__main__":
- print('''
-The this utility has been split out into it's own project.
-See: http://code.google.com/p/epubmerge/
-...for a CLI epubmerge.py program and calibre plugin.
-''')
diff --git a/fanficdownloader/BeautifulSoup.py b/fff_internals/BeautifulSoup.py
similarity index 100%
rename from fanficdownloader/BeautifulSoup.py
rename to fff_internals/BeautifulSoup.py
diff --git a/fanficdownloader/HtmlTagStack.py b/fff_internals/HtmlTagStack.py
similarity index 100%
rename from fanficdownloader/HtmlTagStack.py
rename to fff_internals/HtmlTagStack.py
diff --git a/fanficdownloader/__init__.py b/fff_internals/__init__.py
similarity index 82%
rename from fanficdownloader/__init__.py
rename to fff_internals/__init__.py
index 17816cac..308e9773 100644
--- a/fanficdownloader/__init__.py
+++ b/fff_internals/__init__.py
@@ -12,7 +12,7 @@ except:
import logging
logger = logging.getLogger(__name__)
loghandler=logging.StreamHandler()
- loghandler.setFormatter(logging.Formatter("FFDL:%(levelname)s:%(filename)s(%(lineno)d):%(message)s"))
+ loghandler.setFormatter(logging.Formatter("FFF:%(levelname)s:%(filename)s(%(lineno)d):%(message)s"))
logger.addHandler(loghandler)
loghandler.setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG)
diff --git a/fanficdownloader/adapters/__init__.py b/fff_internals/adapters/__init__.py
similarity index 96%
rename from fanficdownloader/adapters/__init__.py
rename to fff_internals/adapters/__init__.py
index cfc475f2..b335d19b 100644
--- a/fanficdownloader/adapters/__init__.py
+++ b/fff_internals/adapters/__init__.py
@@ -156,7 +156,7 @@ def imports():
yield val.__name__
for x in imports():
- if "fanficdownloader.adapters.adapter_" in x:
+ if "fff_internals.adapters.adapter_" in x:
#print x
cls = sys.modules[x].getClass()
__class_list.append(cls)
diff --git a/fanficdownloader/adapters/adapter_adastrafanficcom.py b/fff_internals/adapters/adapter_adastrafanficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_adastrafanficcom.py
rename to fff_internals/adapters/adapter_adastrafanficcom.py
diff --git a/fanficdownloader/adapters/adapter_archiveofourownorg.py b/fff_internals/adapters/adapter_archiveofourownorg.py
similarity index 98%
rename from fanficdownloader/adapters/adapter_archiveofourownorg.py
rename to fff_internals/adapters/adapter_archiveofourownorg.py
index ff88be50..9d988ece 100644
--- a/fanficdownloader/adapters/adapter_archiveofourownorg.py
+++ b/fff_internals/adapters/adapter_archiveofourownorg.py
@@ -105,11 +105,11 @@ class ArchiveOfOurOwnOrgAdapter(BaseSiteAdapter):
params['user_session[remember_me]'] = '1'
params['commit'] = 'Log in'
#params['utf8'] = u'✓'#u'\x2713' # gets along with out it, and it confuses the encoder.
- params['authenticity_token'] = data.split('input name="authenticity_token" type="hidden" value="')[1].split('" />')[0]
+ params['authenticity_token'] = data.split('input name="authenticity_token" type="hidden" value="')[1].split('"')[0]
loginUrl = 'http://' + self.getSiteDomain() + '/user_sessions'
logger.info("Will now login to URL (%s) as (%s)" % (loginUrl,
- params['user_session[login]']))
+ params['user_session[login]']))
d = self._postUrl(loginUrl, params)
#logger.info(d)
@@ -327,7 +327,7 @@ class ArchiveOfOurOwnOrgAdapter(BaseSiteAdapter):
def hookForUpdates(self,chaptercount):
if self.oldchapters and len(self.oldchapters) > self.newestChapterNum:
- print("Existing epub has %s chapters\nNewest chapter is %s. Discarding old chapters from there on."%(len(self.oldchapters), self.newestChapterNum+1))
+ logger.info("Existing epub has %s chapters\nNewest chapter is %s. Discarding old chapters from there on."%(len(self.oldchapters), self.newestChapterNum+1))
self.oldchapters = self.oldchapters[:self.newestChapterNum]
return len(self.oldchapters)
diff --git a/fanficdownloader/adapters/adapter_archiveskyehawkecom.py b/fff_internals/adapters/adapter_archiveskyehawkecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_archiveskyehawkecom.py
rename to fff_internals/adapters/adapter_archiveskyehawkecom.py
diff --git a/fanficdownloader/adapters/adapter_ashwindersycophanthexcom.py b/fff_internals/adapters/adapter_ashwindersycophanthexcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ashwindersycophanthexcom.py
rename to fff_internals/adapters/adapter_ashwindersycophanthexcom.py
diff --git a/fanficdownloader/adapters/adapter_asr3slashzoneorg.py b/fff_internals/adapters/adapter_asr3slashzoneorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_asr3slashzoneorg.py
rename to fff_internals/adapters/adapter_asr3slashzoneorg.py
diff --git a/fanficdownloader/adapters/adapter_bdsmgeschichten.py b/fff_internals/adapters/adapter_bdsmgeschichten.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_bdsmgeschichten.py
rename to fff_internals/adapters/adapter_bdsmgeschichten.py
diff --git a/fanficdownloader/adapters/adapter_bloodshedversecom.py b/fff_internals/adapters/adapter_bloodshedversecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_bloodshedversecom.py
rename to fff_internals/adapters/adapter_bloodshedversecom.py
diff --git a/fanficdownloader/adapters/adapter_bloodtiesfancom.py b/fff_internals/adapters/adapter_bloodtiesfancom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_bloodtiesfancom.py
rename to fff_internals/adapters/adapter_bloodtiesfancom.py
diff --git a/fanficdownloader/adapters/adapter_buffynfaithnet.py b/fff_internals/adapters/adapter_buffynfaithnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_buffynfaithnet.py
rename to fff_internals/adapters/adapter_buffynfaithnet.py
diff --git a/fanficdownloader/adapters/adapter_chaossycophanthexcom.py b/fff_internals/adapters/adapter_chaossycophanthexcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_chaossycophanthexcom.py
rename to fff_internals/adapters/adapter_chaossycophanthexcom.py
diff --git a/fanficdownloader/adapters/adapter_checkmatedcom.py b/fff_internals/adapters/adapter_checkmatedcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_checkmatedcom.py
rename to fff_internals/adapters/adapter_checkmatedcom.py
diff --git a/fanficdownloader/adapters/adapter_csiforensicscom.py b/fff_internals/adapters/adapter_csiforensicscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_csiforensicscom.py
rename to fff_internals/adapters/adapter_csiforensicscom.py
diff --git a/fanficdownloader/adapters/adapter_darksolaceorg.py b/fff_internals/adapters/adapter_darksolaceorg.py
similarity index 97%
rename from fanficdownloader/adapters/adapter_darksolaceorg.py
rename to fff_internals/adapters/adapter_darksolaceorg.py
index d641f752..10b0fe61 100644
--- a/fanficdownloader/adapters/adapter_darksolaceorg.py
+++ b/fff_internals/adapters/adapter_darksolaceorg.py
@@ -319,7 +319,7 @@ class DarkSolaceOrgAdapter(BaseSiteAdapter):
break
except Exception, e:
- print("Series parsing failed: %s"%e)
+ logger.debug("Series parsing failed: %s"%e)
# grab the text for an individual chapter.
def getChapterText(self, url):
diff --git a/fanficdownloader/adapters/adapter_destinysgatewaycom.py b/fff_internals/adapters/adapter_destinysgatewaycom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_destinysgatewaycom.py
rename to fff_internals/adapters/adapter_destinysgatewaycom.py
diff --git a/fanficdownloader/adapters/adapter_devianthearts.py b/fff_internals/adapters/adapter_devianthearts.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_devianthearts.py
rename to fff_internals/adapters/adapter_devianthearts.py
diff --git a/fanficdownloader/adapters/adapter_dokugacom.py b/fff_internals/adapters/adapter_dokugacom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_dokugacom.py
rename to fff_internals/adapters/adapter_dokugacom.py
diff --git a/fanficdownloader/adapters/adapter_dotmoonnet.py b/fff_internals/adapters/adapter_dotmoonnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_dotmoonnet.py
rename to fff_internals/adapters/adapter_dotmoonnet.py
diff --git a/fanficdownloader/adapters/adapter_dracoandginnycom.py b/fff_internals/adapters/adapter_dracoandginnycom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_dracoandginnycom.py
rename to fff_internals/adapters/adapter_dracoandginnycom.py
diff --git a/fanficdownloader/adapters/adapter_dramioneorg.py b/fff_internals/adapters/adapter_dramioneorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_dramioneorg.py
rename to fff_internals/adapters/adapter_dramioneorg.py
diff --git a/fanficdownloader/adapters/adapter_efictionestelielde.py b/fff_internals/adapters/adapter_efictionestelielde.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_efictionestelielde.py
rename to fff_internals/adapters/adapter_efictionestelielde.py
diff --git a/fanficdownloader/adapters/adapter_efpfanficnet.py b/fff_internals/adapters/adapter_efpfanficnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_efpfanficnet.py
rename to fff_internals/adapters/adapter_efpfanficnet.py
diff --git a/fanficdownloader/adapters/adapter_erosnsapphosycophanthexcom.py b/fff_internals/adapters/adapter_erosnsapphosycophanthexcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_erosnsapphosycophanthexcom.py
rename to fff_internals/adapters/adapter_erosnsapphosycophanthexcom.py
diff --git a/fanficdownloader/adapters/adapter_fanficcastletvnet.py b/fff_internals/adapters/adapter_fanficcastletvnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanficcastletvnet.py
rename to fff_internals/adapters/adapter_fanficcastletvnet.py
diff --git a/fanficdownloader/adapters/adapter_fanfichu.py b/fff_internals/adapters/adapter_fanfichu.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanfichu.py
rename to fff_internals/adapters/adapter_fanfichu.py
diff --git a/fanficdownloader/adapters/adapter_fanfictioncsodaidokhu.py b/fff_internals/adapters/adapter_fanfictioncsodaidokhu.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanfictioncsodaidokhu.py
rename to fff_internals/adapters/adapter_fanfictioncsodaidokhu.py
diff --git a/fanficdownloader/adapters/adapter_fanfictionjunkiesde.py b/fff_internals/adapters/adapter_fanfictionjunkiesde.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanfictionjunkiesde.py
rename to fff_internals/adapters/adapter_fanfictionjunkiesde.py
diff --git a/fanficdownloader/adapters/adapter_fanfictionnet.py b/fff_internals/adapters/adapter_fanfictionnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanfictionnet.py
rename to fff_internals/adapters/adapter_fanfictionnet.py
diff --git a/fanficdownloader/adapters/adapter_fanfiktionde.py b/fff_internals/adapters/adapter_fanfiktionde.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fanfiktionde.py
rename to fff_internals/adapters/adapter_fanfiktionde.py
diff --git a/fanficdownloader/adapters/adapter_fannation.py b/fff_internals/adapters/adapter_fannation.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fannation.py
rename to fff_internals/adapters/adapter_fannation.py
diff --git a/fanficdownloader/adapters/adapter_fhsarchivecom.py b/fff_internals/adapters/adapter_fhsarchivecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fhsarchivecom.py
rename to fff_internals/adapters/adapter_fhsarchivecom.py
diff --git a/fanficdownloader/adapters/adapter_ficbooknet.py b/fff_internals/adapters/adapter_ficbooknet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ficbooknet.py
rename to fff_internals/adapters/adapter_ficbooknet.py
diff --git a/fanficdownloader/adapters/adapter_fictionalleyorg.py b/fff_internals/adapters/adapter_fictionalleyorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fictionalleyorg.py
rename to fff_internals/adapters/adapter_fictionalleyorg.py
diff --git a/fanficdownloader/adapters/adapter_fictionmaniatv.py b/fff_internals/adapters/adapter_fictionmaniatv.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fictionmaniatv.py
rename to fff_internals/adapters/adapter_fictionmaniatv.py
diff --git a/fanficdownloader/adapters/adapter_fictionpadcom.py b/fff_internals/adapters/adapter_fictionpadcom.py
similarity index 97%
rename from fanficdownloader/adapters/adapter_fictionpadcom.py
rename to fff_internals/adapters/adapter_fictionpadcom.py
index 0454d35f..36f82bfb 100644
--- a/fanficdownloader/adapters/adapter_fictionpadcom.py
+++ b/fff_internals/adapters/adapter_fictionpadcom.py
@@ -133,7 +133,7 @@ class FictionPadSiteAdapter(BaseSiteAdapter):
author = tables['users'][0]
story = tables['stories'][0]
story_ver = tables['story_versions'][0]
- print("story:%s"%story)
+ logger.debug("story:%s"%story)
self.story.setMetadata('authorId',author['id'])
self.story.setMetadata('author',author['display_name'])
diff --git a/fanficdownloader/adapters/adapter_fictionpresscom.py b/fff_internals/adapters/adapter_fictionpresscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_fictionpresscom.py
rename to fff_internals/adapters/adapter_fictionpresscom.py
diff --git a/fanficdownloader/adapters/adapter_ficwadcom.py b/fff_internals/adapters/adapter_ficwadcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ficwadcom.py
rename to fff_internals/adapters/adapter_ficwadcom.py
diff --git a/fanficdownloader/adapters/adapter_fimfictionnet.py b/fff_internals/adapters/adapter_fimfictionnet.py
similarity index 96%
rename from fanficdownloader/adapters/adapter_fimfictionnet.py
rename to fff_internals/adapters/adapter_fimfictionnet.py
index f50634d2..469e931a 100644
--- a/fanficdownloader/adapters/adapter_fimfictionnet.py
+++ b/fff_internals/adapters/adapter_fimfictionnet.py
@@ -321,7 +321,7 @@ class FimFictionNetSiteAdapter(BaseSiteAdapter):
def hookForUpdates(self,chaptercount):
if self.oldchapters and len(self.oldchapters) > self.newestChapterNum:
- print("Existing epub has %s chapters\nNewest chapter is %s. Discarding old chapters from there on."%(len(self.oldchapters), self.newestChapterNum+1))
+ logger.info("Existing epub has %s chapters\nNewest chapter is %s. Discarding old chapters from there on."%(len(self.oldchapters), self.newestChapterNum+1))
self.oldchapters = self.oldchapters[:self.newestChapterNum]
return len(self.oldchapters)
@@ -346,7 +346,7 @@ class FimFictionNetSiteAdapter(BaseSiteAdapter):
params['password'] = self.password
data = self._postUrl(url, params)
else:
- print("Chapter %s needed password but no password was present" % url)
+ logger.error("Chapter %s needed password but no password was present" % url)
data = self.do_fix_blockquotes(data)
diff --git a/fanficdownloader/adapters/adapter_finestoriescom.py b/fff_internals/adapters/adapter_finestoriescom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_finestoriescom.py
rename to fff_internals/adapters/adapter_finestoriescom.py
diff --git a/fanficdownloader/adapters/adapter_grangerenchantedcom.py b/fff_internals/adapters/adapter_grangerenchantedcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_grangerenchantedcom.py
rename to fff_internals/adapters/adapter_grangerenchantedcom.py
diff --git a/fanficdownloader/adapters/adapter_harrypotterfanfictioncom.py b/fff_internals/adapters/adapter_harrypotterfanfictioncom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_harrypotterfanfictioncom.py
rename to fff_internals/adapters/adapter_harrypotterfanfictioncom.py
diff --git a/fanficdownloader/adapters/adapter_hennethannunnet.py b/fff_internals/adapters/adapter_hennethannunnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_hennethannunnet.py
rename to fff_internals/adapters/adapter_hennethannunnet.py
diff --git a/fanficdownloader/adapters/adapter_hlfictionnet.py b/fff_internals/adapters/adapter_hlfictionnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_hlfictionnet.py
rename to fff_internals/adapters/adapter_hlfictionnet.py
diff --git a/fanficdownloader/adapters/adapter_hpfandomnet.py b/fff_internals/adapters/adapter_hpfandomnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_hpfandomnet.py
rename to fff_internals/adapters/adapter_hpfandomnet.py
diff --git a/fanficdownloader/adapters/adapter_hpfanficarchivecom.py b/fff_internals/adapters/adapter_hpfanficarchivecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_hpfanficarchivecom.py
rename to fff_internals/adapters/adapter_hpfanficarchivecom.py
diff --git a/fanficdownloader/adapters/adapter_iketernalnet.py b/fff_internals/adapters/adapter_iketernalnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_iketernalnet.py
rename to fff_internals/adapters/adapter_iketernalnet.py
diff --git a/fanficdownloader/adapters/adapter_imagineeficcom.py b/fff_internals/adapters/adapter_imagineeficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_imagineeficcom.py
rename to fff_internals/adapters/adapter_imagineeficcom.py
diff --git a/fanficdownloader/adapters/adapter_indeathnet.py b/fff_internals/adapters/adapter_indeathnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_indeathnet.py
rename to fff_internals/adapters/adapter_indeathnet.py
diff --git a/fanficdownloader/adapters/adapter_ksarchivecom.py b/fff_internals/adapters/adapter_ksarchivecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ksarchivecom.py
rename to fff_internals/adapters/adapter_ksarchivecom.py
diff --git a/fanficdownloader/adapters/adapter_libraryofmoriacom.py b/fff_internals/adapters/adapter_libraryofmoriacom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_libraryofmoriacom.py
rename to fff_internals/adapters/adapter_libraryofmoriacom.py
diff --git a/fanficdownloader/adapters/adapter_literotica.py b/fff_internals/adapters/adapter_literotica.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_literotica.py
rename to fff_internals/adapters/adapter_literotica.py
diff --git a/fanficdownloader/adapters/adapter_lotrfanfictioncom.py b/fff_internals/adapters/adapter_lotrfanfictioncom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_lotrfanfictioncom.py
rename to fff_internals/adapters/adapter_lotrfanfictioncom.py
diff --git a/fanficdownloader/adapters/adapter_lumossycophanthexcom.py b/fff_internals/adapters/adapter_lumossycophanthexcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_lumossycophanthexcom.py
rename to fff_internals/adapters/adapter_lumossycophanthexcom.py
diff --git a/fanficdownloader/adapters/adapter_mediaminerorg.py b/fff_internals/adapters/adapter_mediaminerorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_mediaminerorg.py
rename to fff_internals/adapters/adapter_mediaminerorg.py
diff --git a/fanficdownloader/adapters/adapter_merlinficdtwinscouk.py b/fff_internals/adapters/adapter_merlinficdtwinscouk.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_merlinficdtwinscouk.py
rename to fff_internals/adapters/adapter_merlinficdtwinscouk.py
diff --git a/fanficdownloader/adapters/adapter_midnightwhispersca.py b/fff_internals/adapters/adapter_midnightwhispersca.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_midnightwhispersca.py
rename to fff_internals/adapters/adapter_midnightwhispersca.py
diff --git a/fanficdownloader/adapters/adapter_mugglenetcom.py b/fff_internals/adapters/adapter_mugglenetcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_mugglenetcom.py
rename to fff_internals/adapters/adapter_mugglenetcom.py
diff --git a/fanficdownloader/adapters/adapter_nationallibrarynet.py b/fff_internals/adapters/adapter_nationallibrarynet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_nationallibrarynet.py
rename to fff_internals/adapters/adapter_nationallibrarynet.py
diff --git a/fanficdownloader/adapters/adapter_ncisficcom.py b/fff_internals/adapters/adapter_ncisficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ncisficcom.py
rename to fff_internals/adapters/adapter_ncisficcom.py
diff --git a/fanficdownloader/adapters/adapter_ncisfictionnet.py b/fff_internals/adapters/adapter_ncisfictionnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ncisfictionnet.py
rename to fff_internals/adapters/adapter_ncisfictionnet.py
diff --git a/fanficdownloader/adapters/adapter_netraptororg.py b/fff_internals/adapters/adapter_netraptororg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_netraptororg.py
rename to fff_internals/adapters/adapter_netraptororg.py
diff --git a/fanficdownloader/adapters/adapter_nfacommunitycom.py b/fff_internals/adapters/adapter_nfacommunitycom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_nfacommunitycom.py
rename to fff_internals/adapters/adapter_nfacommunitycom.py
diff --git a/fanficdownloader/adapters/adapter_nhamagicalworldsus.py b/fff_internals/adapters/adapter_nhamagicalworldsus.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_nhamagicalworldsus.py
rename to fff_internals/adapters/adapter_nhamagicalworldsus.py
diff --git a/fanficdownloader/adapters/adapter_nickandgregnet.py b/fff_internals/adapters/adapter_nickandgregnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_nickandgregnet.py
rename to fff_internals/adapters/adapter_nickandgregnet.py
diff --git a/fanficdownloader/adapters/adapter_nocturnallightnet.py b/fff_internals/adapters/adapter_nocturnallightnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_nocturnallightnet.py
rename to fff_internals/adapters/adapter_nocturnallightnet.py
diff --git a/fanficdownloader/adapters/adapter_occlumencysycophanthexcom.py b/fff_internals/adapters/adapter_occlumencysycophanthexcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_occlumencysycophanthexcom.py
rename to fff_internals/adapters/adapter_occlumencysycophanthexcom.py
diff --git a/fanficdownloader/adapters/adapter_onedirectionfanfictioncom.py b/fff_internals/adapters/adapter_onedirectionfanfictioncom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_onedirectionfanfictioncom.py
rename to fff_internals/adapters/adapter_onedirectionfanfictioncom.py
diff --git a/fanficdownloader/adapters/adapter_phoenixsongnet.py b/fff_internals/adapters/adapter_phoenixsongnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_phoenixsongnet.py
rename to fff_internals/adapters/adapter_phoenixsongnet.py
diff --git a/fanficdownloader/adapters/adapter_pommedesangcom.py b/fff_internals/adapters/adapter_pommedesangcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_pommedesangcom.py
rename to fff_internals/adapters/adapter_pommedesangcom.py
diff --git a/fanficdownloader/adapters/adapter_ponyfictionarchivenet.py b/fff_internals/adapters/adapter_ponyfictionarchivenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_ponyfictionarchivenet.py
rename to fff_internals/adapters/adapter_ponyfictionarchivenet.py
diff --git a/fanficdownloader/adapters/adapter_portkeyorg.py b/fff_internals/adapters/adapter_portkeyorg.py
similarity index 97%
rename from fanficdownloader/adapters/adapter_portkeyorg.py
rename to fff_internals/adapters/adapter_portkeyorg.py
index 0a8e417d..92bf17cb 100644
--- a/fanficdownloader/adapters/adapter_portkeyorg.py
+++ b/fff_internals/adapters/adapter_portkeyorg.py
@@ -264,7 +264,7 @@ class PortkeyOrgAdapter(BaseSiteAdapter): # XXX
#print("soup:%s"%soup)
tag = soup.find('td', {'class' : 'story'})
if tag == None and "Chapter does not exist! " in data:
- print("Chapter is missing at: %s"%url)
+ logger.error("Chapter is missing at: %s"%url)
return self.utf8FromSoup(url,bs.BeautifulStoneSoup("
Chapter does not exist! Chapter is missing at: %s
"%(url,url)))
tag.name='div' # force to be a div to avoid problems with nook.
diff --git a/fanficdownloader/adapters/adapter_potionsandsnitches.py b/fff_internals/adapters/adapter_potionsandsnitches.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_potionsandsnitches.py
rename to fff_internals/adapters/adapter_potionsandsnitches.py
diff --git a/fanficdownloader/adapters/adapter_potterficscom.py b/fff_internals/adapters/adapter_potterficscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_potterficscom.py
rename to fff_internals/adapters/adapter_potterficscom.py
diff --git a/fanficdownloader/adapters/adapter_potterheadsanonymouscom.py b/fff_internals/adapters/adapter_potterheadsanonymouscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_potterheadsanonymouscom.py
rename to fff_internals/adapters/adapter_potterheadsanonymouscom.py
diff --git a/fanficdownloader/adapters/adapter_pretendercentrecom.py b/fff_internals/adapters/adapter_pretendercentrecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_pretendercentrecom.py
rename to fff_internals/adapters/adapter_pretendercentrecom.py
diff --git a/fanficdownloader/adapters/adapter_psychficcom.py b/fff_internals/adapters/adapter_psychficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_psychficcom.py
rename to fff_internals/adapters/adapter_psychficcom.py
diff --git a/fanficdownloader/adapters/adapter_qafficcom.py b/fff_internals/adapters/adapter_qafficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_qafficcom.py
rename to fff_internals/adapters/adapter_qafficcom.py
diff --git a/fanficdownloader/adapters/adapter_restrictedsectionorg.py b/fff_internals/adapters/adapter_restrictedsectionorg.py
similarity index 96%
rename from fanficdownloader/adapters/adapter_restrictedsectionorg.py
rename to fff_internals/adapters/adapter_restrictedsectionorg.py
index f03b4e34..5e31fb94 100644
--- a/fanficdownloader/adapters/adapter_restrictedsectionorg.py
+++ b/fff_internals/adapters/adapter_restrictedsectionorg.py
@@ -168,9 +168,9 @@ class RestrictedSectionOrgSiteAdapter(BaseSiteAdapter):
value.extract() # remove summary incase it contains file URLs.
if 'Updated' in label: # one-shots only.
- print "value:%s"%value
+ #print "value:%s"%value
value.find('sup').extract() # remove 'st', 'nd', 'th' ordinals
- print "value:%s"%value
+ #print "value:%s"%value
date = makeDate(stripHTML(value), '%d %B %Y') # full month name
self.story.setMetadata('datePublished', date)
diff --git a/fanficdownloader/adapters/adapter_samandjacknet.py b/fff_internals/adapters/adapter_samandjacknet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_samandjacknet.py
rename to fff_internals/adapters/adapter_samandjacknet.py
diff --git a/fanficdownloader/adapters/adapter_samdeanarchivenu.py b/fff_internals/adapters/adapter_samdeanarchivenu.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_samdeanarchivenu.py
rename to fff_internals/adapters/adapter_samdeanarchivenu.py
diff --git a/fanficdownloader/adapters/adapter_scarheadnet.py b/fff_internals/adapters/adapter_scarheadnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_scarheadnet.py
rename to fff_internals/adapters/adapter_scarheadnet.py
diff --git a/fanficdownloader/adapters/adapter_scarvesandcoffeenet.py b/fff_internals/adapters/adapter_scarvesandcoffeenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_scarvesandcoffeenet.py
rename to fff_internals/adapters/adapter_scarvesandcoffeenet.py
diff --git a/fanficdownloader/adapters/adapter_sg1heliopoliscom.py b/fff_internals/adapters/adapter_sg1heliopoliscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_sg1heliopoliscom.py
rename to fff_internals/adapters/adapter_sg1heliopoliscom.py
diff --git a/fanficdownloader/adapters/adapter_sheppardweircom.py b/fff_internals/adapters/adapter_sheppardweircom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_sheppardweircom.py
rename to fff_internals/adapters/adapter_sheppardweircom.py
diff --git a/fanficdownloader/adapters/adapter_simplyundeniablecom.py b/fff_internals/adapters/adapter_simplyundeniablecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_simplyundeniablecom.py
rename to fff_internals/adapters/adapter_simplyundeniablecom.py
diff --git a/fanficdownloader/adapters/adapter_sinfuldesireorg.py b/fff_internals/adapters/adapter_sinfuldesireorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_sinfuldesireorg.py
rename to fff_internals/adapters/adapter_sinfuldesireorg.py
diff --git a/fanficdownloader/adapters/adapter_siyecouk.py b/fff_internals/adapters/adapter_siyecouk.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_siyecouk.py
rename to fff_internals/adapters/adapter_siyecouk.py
diff --git a/fanficdownloader/adapters/adapter_spikeluvercom.py b/fff_internals/adapters/adapter_spikeluvercom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_spikeluvercom.py
rename to fff_internals/adapters/adapter_spikeluvercom.py
diff --git a/fanficdownloader/adapters/adapter_squidgeorgpeja.py b/fff_internals/adapters/adapter_squidgeorgpeja.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_squidgeorgpeja.py
rename to fff_internals/adapters/adapter_squidgeorgpeja.py
diff --git a/fanficdownloader/adapters/adapter_stargateatlantisorg.py b/fff_internals/adapters/adapter_stargateatlantisorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_stargateatlantisorg.py
rename to fff_internals/adapters/adapter_stargateatlantisorg.py
diff --git a/fanficdownloader/adapters/adapter_storiesofardacom.py b/fff_internals/adapters/adapter_storiesofardacom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_storiesofardacom.py
rename to fff_internals/adapters/adapter_storiesofardacom.py
diff --git a/fanficdownloader/adapters/adapter_storiesonlinenet.py b/fff_internals/adapters/adapter_storiesonlinenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_storiesonlinenet.py
rename to fff_internals/adapters/adapter_storiesonlinenet.py
diff --git a/fanficdownloader/adapters/adapter_tenhawkpresentscom.py b/fff_internals/adapters/adapter_tenhawkpresentscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_tenhawkpresentscom.py
rename to fff_internals/adapters/adapter_tenhawkpresentscom.py
diff --git a/fanficdownloader/adapters/adapter_test1.py b/fff_internals/adapters/adapter_test1.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_test1.py
rename to fff_internals/adapters/adapter_test1.py
diff --git a/fanficdownloader/adapters/adapter_thealphagatecom.py b/fff_internals/adapters/adapter_thealphagatecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_thealphagatecom.py
rename to fff_internals/adapters/adapter_thealphagatecom.py
diff --git a/fanficdownloader/adapters/adapter_thehexfilesnet.py b/fff_internals/adapters/adapter_thehexfilesnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_thehexfilesnet.py
rename to fff_internals/adapters/adapter_thehexfilesnet.py
diff --git a/fanficdownloader/adapters/adapter_thehookupzonenet.py b/fff_internals/adapters/adapter_thehookupzonenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_thehookupzonenet.py
rename to fff_internals/adapters/adapter_thehookupzonenet.py
diff --git a/fanficdownloader/adapters/adapter_themaplebookshelf.py b/fff_internals/adapters/adapter_themaplebookshelf.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_themaplebookshelf.py
rename to fff_internals/adapters/adapter_themaplebookshelf.py
diff --git a/fanficdownloader/adapters/adapter_themasquenet.py b/fff_internals/adapters/adapter_themasquenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_themasquenet.py
rename to fff_internals/adapters/adapter_themasquenet.py
diff --git a/fanficdownloader/adapters/adapter_thepetulantpoetesscom.py b/fff_internals/adapters/adapter_thepetulantpoetesscom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_thepetulantpoetesscom.py
rename to fff_internals/adapters/adapter_thepetulantpoetesscom.py
diff --git a/fanficdownloader/adapters/adapter_thequidditchpitchorg.py b/fff_internals/adapters/adapter_thequidditchpitchorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_thequidditchpitchorg.py
rename to fff_internals/adapters/adapter_thequidditchpitchorg.py
diff --git a/fanficdownloader/adapters/adapter_tokrafandomnetcom.py b/fff_internals/adapters/adapter_tokrafandomnetcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_tokrafandomnetcom.py
rename to fff_internals/adapters/adapter_tokrafandomnetcom.py
diff --git a/fanficdownloader/adapters/adapter_tolkienfanfiction.py b/fff_internals/adapters/adapter_tolkienfanfiction.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_tolkienfanfiction.py
rename to fff_internals/adapters/adapter_tolkienfanfiction.py
diff --git a/fanficdownloader/adapters/adapter_trekiverseorg.py b/fff_internals/adapters/adapter_trekiverseorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_trekiverseorg.py
rename to fff_internals/adapters/adapter_trekiverseorg.py
diff --git a/fanficdownloader/adapters/adapter_tthfanficorg.py b/fff_internals/adapters/adapter_tthfanficorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_tthfanficorg.py
rename to fff_internals/adapters/adapter_tthfanficorg.py
diff --git a/fanficdownloader/adapters/adapter_twcslibrarynet.py b/fff_internals/adapters/adapter_twcslibrarynet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_twcslibrarynet.py
rename to fff_internals/adapters/adapter_twcslibrarynet.py
diff --git a/fanficdownloader/adapters/adapter_twilightarchivescom.py b/fff_internals/adapters/adapter_twilightarchivescom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_twilightarchivescom.py
rename to fff_internals/adapters/adapter_twilightarchivescom.py
diff --git a/fanficdownloader/adapters/adapter_twilightednet.py b/fff_internals/adapters/adapter_twilightednet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_twilightednet.py
rename to fff_internals/adapters/adapter_twilightednet.py
diff --git a/fanficdownloader/adapters/adapter_twiwritenet.py b/fff_internals/adapters/adapter_twiwritenet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_twiwritenet.py
rename to fff_internals/adapters/adapter_twiwritenet.py
diff --git a/fanficdownloader/adapters/adapter_voracity2eficcom.py b/fff_internals/adapters/adapter_voracity2eficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_voracity2eficcom.py
rename to fff_internals/adapters/adapter_voracity2eficcom.py
diff --git a/fanficdownloader/adapters/adapter_walkingtheplankorg.py b/fff_internals/adapters/adapter_walkingtheplankorg.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_walkingtheplankorg.py
rename to fff_internals/adapters/adapter_walkingtheplankorg.py
diff --git a/fanficdownloader/adapters/adapter_whoficcom.py b/fff_internals/adapters/adapter_whoficcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_whoficcom.py
rename to fff_internals/adapters/adapter_whoficcom.py
diff --git a/fanficdownloader/adapters/adapter_wizardtalesnet.py b/fff_internals/adapters/adapter_wizardtalesnet.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_wizardtalesnet.py
rename to fff_internals/adapters/adapter_wizardtalesnet.py
diff --git a/fanficdownloader/adapters/adapter_wolverineandroguecom.py b/fff_internals/adapters/adapter_wolverineandroguecom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_wolverineandroguecom.py
rename to fff_internals/adapters/adapter_wolverineandroguecom.py
diff --git a/fanficdownloader/adapters/adapter_wraithbaitcom.py b/fff_internals/adapters/adapter_wraithbaitcom.py
similarity index 100%
rename from fanficdownloader/adapters/adapter_wraithbaitcom.py
rename to fff_internals/adapters/adapter_wraithbaitcom.py
diff --git a/fanficdownloader/adapters/base_adapter.py b/fff_internals/adapters/base_adapter.py
similarity index 100%
rename from fanficdownloader/adapters/base_adapter.py
rename to fff_internals/adapters/base_adapter.py
diff --git a/fanficdownloader/adapters/base_efiction_adapter.py b/fff_internals/adapters/base_efiction_adapter.py
similarity index 100%
rename from fanficdownloader/adapters/base_efiction_adapter.py
rename to fff_internals/adapters/base_efiction_adapter.py
diff --git a/fanficdownloader/configurable.py b/fff_internals/configurable.py
similarity index 100%
rename from fanficdownloader/configurable.py
rename to fff_internals/configurable.py
diff --git a/fanficdownloader/epubutils.py b/fff_internals/epubutils.py
similarity index 100%
rename from fanficdownloader/epubutils.py
rename to fff_internals/epubutils.py
diff --git a/fanficdownloader/exceptions.py b/fff_internals/exceptions.py
similarity index 100%
rename from fanficdownloader/exceptions.py
rename to fff_internals/exceptions.py
diff --git a/fanficdownloader/geturls.py b/fff_internals/geturls.py
similarity index 100%
rename from fanficdownloader/geturls.py
rename to fff_internals/geturls.py
diff --git a/fanficdownloader/gziphttp.py b/fff_internals/gziphttp.py
similarity index 100%
rename from fanficdownloader/gziphttp.py
rename to fff_internals/gziphttp.py
diff --git a/fanficdownloader/html.py b/fff_internals/html.py
similarity index 100%
rename from fanficdownloader/html.py
rename to fff_internals/html.py
diff --git a/fanficdownloader/html2text.py b/fff_internals/html2text.py
similarity index 100%
rename from fanficdownloader/html2text.py
rename to fff_internals/html2text.py
diff --git a/fanficdownloader/htmlcleanup.py b/fff_internals/htmlcleanup.py
similarity index 100%
rename from fanficdownloader/htmlcleanup.py
rename to fff_internals/htmlcleanup.py
diff --git a/fanficdownloader/htmlheuristics.py b/fff_internals/htmlheuristics.py
similarity index 100%
rename from fanficdownloader/htmlheuristics.py
rename to fff_internals/htmlheuristics.py
diff --git a/fanficdownloader/mobi.py b/fff_internals/mobi.py
similarity index 100%
rename from fanficdownloader/mobi.py
rename to fff_internals/mobi.py
diff --git a/fanficdownloader/story.py b/fff_internals/story.py
similarity index 100%
rename from fanficdownloader/story.py
rename to fff_internals/story.py
diff --git a/fanficdownloader/translit.py b/fff_internals/translit.py
similarity index 100%
rename from fanficdownloader/translit.py
rename to fff_internals/translit.py
diff --git a/fanficdownloader/writers/__init__.py b/fff_internals/writers/__init__.py
similarity index 100%
rename from fanficdownloader/writers/__init__.py
rename to fff_internals/writers/__init__.py
diff --git a/fanficdownloader/writers/base_writer.py b/fff_internals/writers/base_writer.py
similarity index 100%
rename from fanficdownloader/writers/base_writer.py
rename to fff_internals/writers/base_writer.py
diff --git a/fanficdownloader/writers/writer_epub.py b/fff_internals/writers/writer_epub.py
similarity index 96%
rename from fanficdownloader/writers/writer_epub.py
rename to fff_internals/writers/writer_epub.py
index 3b1b19d2..c97a1831 100644
--- a/fanficdownloader/writers/writer_epub.py
+++ b/fff_internals/writers/writer_epub.py
@@ -326,7 +326,7 @@ div { margin: 0pt; padding: 0pt; }
## other included files, and another 'spine' list of the items in the
## file
- uniqueid= 'fanficdownloader-uid:%s-u%s-s%s' % (
+ uniqueid= 'fanficfare-uid:%s-u%s-s%s' % (
self.getMetadata('site'),
self.story.getList('authorId')[0],
self.getMetadata('storyId'))
@@ -335,7 +335,7 @@ div { margin: 0pt; padding: 0pt; }
package = contentdom.documentElement
package.setAttribute("version","2.0")
package.setAttribute("xmlns","http://www.idpf.org/2007/opf")
- package.setAttribute("unique-identifier","fanficdownloader-uid")
+ package.setAttribute("unique-identifier","fanficfare-uid")
metadata=newTag(contentdom,"metadata",
attrs={"xmlns:dc":"http://purl.org/dc/elements/1.1/",
"xmlns:opf":"http://www.idpf.org/2007/opf"})
@@ -343,7 +343,7 @@ div { margin: 0pt; padding: 0pt; }
metadata.appendChild(newTag(contentdom,"dc:identifier",
text=uniqueid,
- attrs={"id":"fanficdownloader-uid"}))
+ attrs={"id":"fanficfare-uid"}))
if self.getMetadata('title'):
metadata.appendChild(newTag(contentdom,"dc:title",text=self.getMetadata('title')))
@@ -359,7 +359,7 @@ div { margin: 0pt; padding: 0pt; }
attrs={"opf:role":"aut"},
text=self.getMetadata('author')))
- metadata.appendChild(newTag(contentdom,"dc:contributor",text="fanficdownloader [http://fanficdownloader.googlecode.com]",attrs={"opf:role":"bkp"}))
+ metadata.appendChild(newTag(contentdom,"dc:contributor",text="fanficfare [https://github.com/JimmXinu/fanficdownloader]",attrs={"opf:role":"bkp"}))
metadata.appendChild(newTag(contentdom,"dc:rights",text=""))
if self.story.getMetadata('langcode'):
metadata.appendChild(newTag(contentdom,"dc:language",text=self.story.getMetadata('langcode')))
diff --git a/fanficdownloader/writers/writer_html.py b/fff_internals/writers/writer_html.py
similarity index 100%
rename from fanficdownloader/writers/writer_html.py
rename to fff_internals/writers/writer_html.py
diff --git a/fanficdownloader/writers/writer_mobi.py b/fff_internals/writers/writer_mobi.py
similarity index 100%
rename from fanficdownloader/writers/writer_mobi.py
rename to fff_internals/writers/writer_mobi.py
diff --git a/fanficdownloader/writers/writer_txt.py b/fff_internals/writers/writer_txt.py
similarity index 100%
rename from fanficdownloader/writers/writer_txt.py
rename to fff_internals/writers/writer_txt.py
diff --git a/bs4/COPYING.txt b/included_dependencies/bs4/COPYING.txt
similarity index 100%
rename from bs4/COPYING.txt
rename to included_dependencies/bs4/COPYING.txt
diff --git a/bs4/__init__.py b/included_dependencies/bs4/__init__.py
similarity index 100%
rename from bs4/__init__.py
rename to included_dependencies/bs4/__init__.py
diff --git a/bs4/builder/__init__.py b/included_dependencies/bs4/builder/__init__.py
similarity index 100%
rename from bs4/builder/__init__.py
rename to included_dependencies/bs4/builder/__init__.py
diff --git a/bs4/builder/_html5lib.py b/included_dependencies/bs4/builder/_html5lib.py
similarity index 100%
rename from bs4/builder/_html5lib.py
rename to included_dependencies/bs4/builder/_html5lib.py
diff --git a/bs4/builder/_htmlparser.py b/included_dependencies/bs4/builder/_htmlparser.py
similarity index 100%
rename from bs4/builder/_htmlparser.py
rename to included_dependencies/bs4/builder/_htmlparser.py
diff --git a/bs4/builder/_lxml.py b/included_dependencies/bs4/builder/_lxml.py
similarity index 100%
rename from bs4/builder/_lxml.py
rename to included_dependencies/bs4/builder/_lxml.py
diff --git a/bs4/dammit.py b/included_dependencies/bs4/dammit.py
similarity index 100%
rename from bs4/dammit.py
rename to included_dependencies/bs4/dammit.py
diff --git a/bs4/diagnose.py b/included_dependencies/bs4/diagnose.py
similarity index 100%
rename from bs4/diagnose.py
rename to included_dependencies/bs4/diagnose.py
diff --git a/bs4/element.py b/included_dependencies/bs4/element.py
similarity index 100%
rename from bs4/element.py
rename to included_dependencies/bs4/element.py
diff --git a/chardet/__init__.py b/included_dependencies/chardet/__init__.py
similarity index 100%
rename from chardet/__init__.py
rename to included_dependencies/chardet/__init__.py
diff --git a/chardet/big5freq.py b/included_dependencies/chardet/big5freq.py
similarity index 100%
rename from chardet/big5freq.py
rename to included_dependencies/chardet/big5freq.py
diff --git a/chardet/big5prober.py b/included_dependencies/chardet/big5prober.py
similarity index 100%
rename from chardet/big5prober.py
rename to included_dependencies/chardet/big5prober.py
diff --git a/chardet/chardetect.py b/included_dependencies/chardet/chardetect.py
similarity index 100%
rename from chardet/chardetect.py
rename to included_dependencies/chardet/chardetect.py
diff --git a/chardet/chardistribution.py b/included_dependencies/chardet/chardistribution.py
similarity index 100%
rename from chardet/chardistribution.py
rename to included_dependencies/chardet/chardistribution.py
diff --git a/chardet/charsetgroupprober.py b/included_dependencies/chardet/charsetgroupprober.py
similarity index 100%
rename from chardet/charsetgroupprober.py
rename to included_dependencies/chardet/charsetgroupprober.py
diff --git a/chardet/charsetprober.py b/included_dependencies/chardet/charsetprober.py
similarity index 100%
rename from chardet/charsetprober.py
rename to included_dependencies/chardet/charsetprober.py
diff --git a/chardet/codingstatemachine.py b/included_dependencies/chardet/codingstatemachine.py
similarity index 100%
rename from chardet/codingstatemachine.py
rename to included_dependencies/chardet/codingstatemachine.py
diff --git a/chardet/compat.py b/included_dependencies/chardet/compat.py
similarity index 100%
rename from chardet/compat.py
rename to included_dependencies/chardet/compat.py
diff --git a/chardet/constants.py b/included_dependencies/chardet/constants.py
similarity index 100%
rename from chardet/constants.py
rename to included_dependencies/chardet/constants.py
diff --git a/chardet/cp949prober.py b/included_dependencies/chardet/cp949prober.py
similarity index 100%
rename from chardet/cp949prober.py
rename to included_dependencies/chardet/cp949prober.py
diff --git a/chardet/escprober.py b/included_dependencies/chardet/escprober.py
similarity index 100%
rename from chardet/escprober.py
rename to included_dependencies/chardet/escprober.py
diff --git a/chardet/escsm.py b/included_dependencies/chardet/escsm.py
similarity index 100%
rename from chardet/escsm.py
rename to included_dependencies/chardet/escsm.py
diff --git a/chardet/eucjpprober.py b/included_dependencies/chardet/eucjpprober.py
similarity index 100%
rename from chardet/eucjpprober.py
rename to included_dependencies/chardet/eucjpprober.py
diff --git a/chardet/euckrfreq.py b/included_dependencies/chardet/euckrfreq.py
similarity index 100%
rename from chardet/euckrfreq.py
rename to included_dependencies/chardet/euckrfreq.py
diff --git a/chardet/euckrprober.py b/included_dependencies/chardet/euckrprober.py
similarity index 100%
rename from chardet/euckrprober.py
rename to included_dependencies/chardet/euckrprober.py
diff --git a/chardet/euctwfreq.py b/included_dependencies/chardet/euctwfreq.py
similarity index 100%
rename from chardet/euctwfreq.py
rename to included_dependencies/chardet/euctwfreq.py
diff --git a/chardet/euctwprober.py b/included_dependencies/chardet/euctwprober.py
similarity index 100%
rename from chardet/euctwprober.py
rename to included_dependencies/chardet/euctwprober.py
diff --git a/chardet/gb2312freq.py b/included_dependencies/chardet/gb2312freq.py
similarity index 100%
rename from chardet/gb2312freq.py
rename to included_dependencies/chardet/gb2312freq.py
diff --git a/chardet/gb2312prober.py b/included_dependencies/chardet/gb2312prober.py
similarity index 100%
rename from chardet/gb2312prober.py
rename to included_dependencies/chardet/gb2312prober.py
diff --git a/chardet/hebrewprober.py b/included_dependencies/chardet/hebrewprober.py
similarity index 100%
rename from chardet/hebrewprober.py
rename to included_dependencies/chardet/hebrewprober.py
diff --git a/chardet/jisfreq.py b/included_dependencies/chardet/jisfreq.py
similarity index 100%
rename from chardet/jisfreq.py
rename to included_dependencies/chardet/jisfreq.py
diff --git a/chardet/jpcntx.py b/included_dependencies/chardet/jpcntx.py
similarity index 100%
rename from chardet/jpcntx.py
rename to included_dependencies/chardet/jpcntx.py
diff --git a/chardet/langbulgarianmodel.py b/included_dependencies/chardet/langbulgarianmodel.py
similarity index 100%
rename from chardet/langbulgarianmodel.py
rename to included_dependencies/chardet/langbulgarianmodel.py
diff --git a/chardet/langcyrillicmodel.py b/included_dependencies/chardet/langcyrillicmodel.py
similarity index 100%
rename from chardet/langcyrillicmodel.py
rename to included_dependencies/chardet/langcyrillicmodel.py
diff --git a/chardet/langgreekmodel.py b/included_dependencies/chardet/langgreekmodel.py
similarity index 100%
rename from chardet/langgreekmodel.py
rename to included_dependencies/chardet/langgreekmodel.py
diff --git a/chardet/langhebrewmodel.py b/included_dependencies/chardet/langhebrewmodel.py
similarity index 100%
rename from chardet/langhebrewmodel.py
rename to included_dependencies/chardet/langhebrewmodel.py
diff --git a/chardet/langhungarianmodel.py b/included_dependencies/chardet/langhungarianmodel.py
similarity index 100%
rename from chardet/langhungarianmodel.py
rename to included_dependencies/chardet/langhungarianmodel.py
diff --git a/chardet/langthaimodel.py b/included_dependencies/chardet/langthaimodel.py
similarity index 100%
rename from chardet/langthaimodel.py
rename to included_dependencies/chardet/langthaimodel.py
diff --git a/chardet/latin1prober.py b/included_dependencies/chardet/latin1prober.py
similarity index 100%
rename from chardet/latin1prober.py
rename to included_dependencies/chardet/latin1prober.py
diff --git a/chardet/mbcharsetprober.py b/included_dependencies/chardet/mbcharsetprober.py
similarity index 100%
rename from chardet/mbcharsetprober.py
rename to included_dependencies/chardet/mbcharsetprober.py
diff --git a/chardet/mbcsgroupprober.py b/included_dependencies/chardet/mbcsgroupprober.py
similarity index 100%
rename from chardet/mbcsgroupprober.py
rename to included_dependencies/chardet/mbcsgroupprober.py
diff --git a/chardet/mbcssm.py b/included_dependencies/chardet/mbcssm.py
similarity index 100%
rename from chardet/mbcssm.py
rename to included_dependencies/chardet/mbcssm.py
diff --git a/chardet/sbcharsetprober.py b/included_dependencies/chardet/sbcharsetprober.py
similarity index 100%
rename from chardet/sbcharsetprober.py
rename to included_dependencies/chardet/sbcharsetprober.py
diff --git a/chardet/sbcsgroupprober.py b/included_dependencies/chardet/sbcsgroupprober.py
similarity index 100%
rename from chardet/sbcsgroupprober.py
rename to included_dependencies/chardet/sbcsgroupprober.py
diff --git a/chardet/sjisprober.py b/included_dependencies/chardet/sjisprober.py
similarity index 100%
rename from chardet/sjisprober.py
rename to included_dependencies/chardet/sjisprober.py
diff --git a/chardet/universaldetector.py b/included_dependencies/chardet/universaldetector.py
similarity index 100%
rename from chardet/universaldetector.py
rename to included_dependencies/chardet/universaldetector.py
diff --git a/chardet/utf8prober.py b/included_dependencies/chardet/utf8prober.py
similarity index 100%
rename from chardet/utf8prober.py
rename to included_dependencies/chardet/utf8prober.py
diff --git a/html5lib/LICENSE b/included_dependencies/html5lib/LICENSE
similarity index 100%
rename from html5lib/LICENSE
rename to included_dependencies/html5lib/LICENSE
diff --git a/html5lib/__init__.py b/included_dependencies/html5lib/__init__.py
similarity index 100%
rename from html5lib/__init__.py
rename to included_dependencies/html5lib/__init__.py
diff --git a/html5lib/constants.py b/included_dependencies/html5lib/constants.py
similarity index 100%
rename from html5lib/constants.py
rename to included_dependencies/html5lib/constants.py
diff --git a/html5lib/filters/__init__.py b/included_dependencies/html5lib/filters/__init__.py
similarity index 100%
rename from html5lib/filters/__init__.py
rename to included_dependencies/html5lib/filters/__init__.py
diff --git a/html5lib/filters/_base.py b/included_dependencies/html5lib/filters/_base.py
similarity index 100%
rename from html5lib/filters/_base.py
rename to included_dependencies/html5lib/filters/_base.py
diff --git a/html5lib/filters/alphabeticalattributes.py b/included_dependencies/html5lib/filters/alphabeticalattributes.py
similarity index 100%
rename from html5lib/filters/alphabeticalattributes.py
rename to included_dependencies/html5lib/filters/alphabeticalattributes.py
diff --git a/html5lib/filters/inject_meta_charset.py b/included_dependencies/html5lib/filters/inject_meta_charset.py
similarity index 100%
rename from html5lib/filters/inject_meta_charset.py
rename to included_dependencies/html5lib/filters/inject_meta_charset.py
diff --git a/html5lib/filters/lint.py b/included_dependencies/html5lib/filters/lint.py
similarity index 100%
rename from html5lib/filters/lint.py
rename to included_dependencies/html5lib/filters/lint.py
diff --git a/html5lib/filters/optionaltags.py b/included_dependencies/html5lib/filters/optionaltags.py
similarity index 100%
rename from html5lib/filters/optionaltags.py
rename to included_dependencies/html5lib/filters/optionaltags.py
diff --git a/html5lib/filters/sanitizer.py b/included_dependencies/html5lib/filters/sanitizer.py
similarity index 100%
rename from html5lib/filters/sanitizer.py
rename to included_dependencies/html5lib/filters/sanitizer.py
diff --git a/html5lib/filters/whitespace.py b/included_dependencies/html5lib/filters/whitespace.py
similarity index 100%
rename from html5lib/filters/whitespace.py
rename to included_dependencies/html5lib/filters/whitespace.py
diff --git a/html5lib/html5parser.py b/included_dependencies/html5lib/html5parser.py
similarity index 100%
rename from html5lib/html5parser.py
rename to included_dependencies/html5lib/html5parser.py
diff --git a/html5lib/ihatexml.py b/included_dependencies/html5lib/ihatexml.py
similarity index 100%
rename from html5lib/ihatexml.py
rename to included_dependencies/html5lib/ihatexml.py
diff --git a/html5lib/inputstream.py b/included_dependencies/html5lib/inputstream.py
similarity index 100%
rename from html5lib/inputstream.py
rename to included_dependencies/html5lib/inputstream.py
diff --git a/html5lib/sanitizer.py b/included_dependencies/html5lib/sanitizer.py
similarity index 100%
rename from html5lib/sanitizer.py
rename to included_dependencies/html5lib/sanitizer.py
diff --git a/html5lib/serializer/__init__.py b/included_dependencies/html5lib/serializer/__init__.py
similarity index 100%
rename from html5lib/serializer/__init__.py
rename to included_dependencies/html5lib/serializer/__init__.py
diff --git a/html5lib/serializer/htmlserializer.py b/included_dependencies/html5lib/serializer/htmlserializer.py
similarity index 100%
rename from html5lib/serializer/htmlserializer.py
rename to included_dependencies/html5lib/serializer/htmlserializer.py
diff --git a/html5lib/tokenizer.py b/included_dependencies/html5lib/tokenizer.py
similarity index 100%
rename from html5lib/tokenizer.py
rename to included_dependencies/html5lib/tokenizer.py
diff --git a/html5lib/treeadapters/__init__.py b/included_dependencies/html5lib/treeadapters/__init__.py
similarity index 100%
rename from html5lib/treeadapters/__init__.py
rename to included_dependencies/html5lib/treeadapters/__init__.py
diff --git a/html5lib/treeadapters/sax.py b/included_dependencies/html5lib/treeadapters/sax.py
similarity index 100%
rename from html5lib/treeadapters/sax.py
rename to included_dependencies/html5lib/treeadapters/sax.py
diff --git a/html5lib/treebuilders/__init__.py b/included_dependencies/html5lib/treebuilders/__init__.py
similarity index 100%
rename from html5lib/treebuilders/__init__.py
rename to included_dependencies/html5lib/treebuilders/__init__.py
diff --git a/html5lib/treebuilders/_base.py b/included_dependencies/html5lib/treebuilders/_base.py
similarity index 100%
rename from html5lib/treebuilders/_base.py
rename to included_dependencies/html5lib/treebuilders/_base.py
diff --git a/html5lib/treebuilders/dom.py b/included_dependencies/html5lib/treebuilders/dom.py
similarity index 100%
rename from html5lib/treebuilders/dom.py
rename to included_dependencies/html5lib/treebuilders/dom.py
diff --git a/html5lib/treebuilders/etree.py b/included_dependencies/html5lib/treebuilders/etree.py
similarity index 100%
rename from html5lib/treebuilders/etree.py
rename to included_dependencies/html5lib/treebuilders/etree.py
diff --git a/html5lib/treebuilders/etree_lxml.py b/included_dependencies/html5lib/treebuilders/etree_lxml.py
similarity index 100%
rename from html5lib/treebuilders/etree_lxml.py
rename to included_dependencies/html5lib/treebuilders/etree_lxml.py
diff --git a/html5lib/treewalkers/__init__.py b/included_dependencies/html5lib/treewalkers/__init__.py
similarity index 100%
rename from html5lib/treewalkers/__init__.py
rename to included_dependencies/html5lib/treewalkers/__init__.py
diff --git a/html5lib/treewalkers/_base.py b/included_dependencies/html5lib/treewalkers/_base.py
similarity index 100%
rename from html5lib/treewalkers/_base.py
rename to included_dependencies/html5lib/treewalkers/_base.py
diff --git a/html5lib/treewalkers/dom.py b/included_dependencies/html5lib/treewalkers/dom.py
similarity index 100%
rename from html5lib/treewalkers/dom.py
rename to included_dependencies/html5lib/treewalkers/dom.py
diff --git a/html5lib/treewalkers/etree.py b/included_dependencies/html5lib/treewalkers/etree.py
similarity index 100%
rename from html5lib/treewalkers/etree.py
rename to included_dependencies/html5lib/treewalkers/etree.py
diff --git a/html5lib/treewalkers/genshistream.py b/included_dependencies/html5lib/treewalkers/genshistream.py
similarity index 100%
rename from html5lib/treewalkers/genshistream.py
rename to included_dependencies/html5lib/treewalkers/genshistream.py
diff --git a/html5lib/treewalkers/lxmletree.py b/included_dependencies/html5lib/treewalkers/lxmletree.py
similarity index 100%
rename from html5lib/treewalkers/lxmletree.py
rename to included_dependencies/html5lib/treewalkers/lxmletree.py
diff --git a/html5lib/treewalkers/pulldom.py b/included_dependencies/html5lib/treewalkers/pulldom.py
similarity index 100%
rename from html5lib/treewalkers/pulldom.py
rename to included_dependencies/html5lib/treewalkers/pulldom.py
diff --git a/html5lib/trie/__init__.py b/included_dependencies/html5lib/trie/__init__.py
similarity index 100%
rename from html5lib/trie/__init__.py
rename to included_dependencies/html5lib/trie/__init__.py
diff --git a/html5lib/trie/_base.py b/included_dependencies/html5lib/trie/_base.py
similarity index 100%
rename from html5lib/trie/_base.py
rename to included_dependencies/html5lib/trie/_base.py
diff --git a/html5lib/trie/datrie.py b/included_dependencies/html5lib/trie/datrie.py
similarity index 100%
rename from html5lib/trie/datrie.py
rename to included_dependencies/html5lib/trie/datrie.py
diff --git a/html5lib/trie/py.py b/included_dependencies/html5lib/trie/py.py
similarity index 100%
rename from html5lib/trie/py.py
rename to included_dependencies/html5lib/trie/py.py
diff --git a/html5lib/utils.py b/included_dependencies/html5lib/utils.py
similarity index 100%
rename from html5lib/utils.py
rename to included_dependencies/html5lib/utils.py
diff --git a/six.py b/included_dependencies/six.py
similarity index 100%
rename from six.py
rename to included_dependencies/six.py
diff --git a/index-ajax.html b/index-ajax.html
deleted file mode 100644
index 62eba47c..00000000
--- a/index-ajax.html
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
- FanFictionDownLoader (fanfiction.net, fictionalley, ficwad to epub and HTML)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hi, {{ nickname }}! This is a fan fiction downloader, which makes reading stories from various websites much easier. Please paste a URL of the
first chapter in the box to start. Alternatively, see your personal list of
previously downloaded fanfics .
-
-
-
- Ebook format
- ePub
- HTML
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Login and Password
-
-
- If the story requires a login and password to download (e.g. marked as Mature on FFA), you may need to provide your credentials to download it, otherwise just leave it empty
-
-
-
-
Download
-
-
-
-
-
-
-
-
- Few things to know, which will make your life substantially easier:
-
- Small post written by me — how to read fiction in Stanza or any other ebook reader.
- Currently we support fanfiction.net, fictionpress.com, fanficauthors.net and ficwad.com
- Paste a URL of the first chapter of the fanfic, not the index page
- Fics with a single chapter are not supported (you can just copy and paste it)
- Stories which are too long may not be downloaded correctly and application will report a time-out error — this is a limitation which is currently imposed by Google AppEngine on a long-running activities
- FicWad support is somewhat flaky — if you feel it doesn't work for you, send all the details to me
- You can download fanfics and store them for 'later' by just downloading them and visiting recent downloads section, but in future they will be deleted after 5 days to save the space
- If Downloader simply opens a download file window rather than saves the fanfic and gives you a link, it means it is too large to save in the database and you need to download it straight away
- If you think that something that should work in fact doesn't, drop me a mail to sigizmund@gmail.com
-
- Otherwise, just have fun, and if you want to say thank you — use the email above.
-
-
-
-
-
-
-
-
diff --git a/js/fdownloader.js b/js/fdownloader.js
deleted file mode 100644
index 8f6ab0a8..00000000
--- a/js/fdownloader.js
+++ /dev/null
@@ -1,116 +0,0 @@
-var g_CurrentKey = null;
-var g_Counter = 0;
-
-var COUNTER_MAX = 50;
-
-
-function setErrorState(error)
-{
- olderr = error;
- error = error + "" + "Complain about this error ";
- $('#error').html(error);
-}
-
-function clearErrorState()
-{
- $('#error').html('');
-}
-
-function showFile(data)
-{
- $('#yourfile').html('' + data.name + " by " + data.author + " ");
- $('#yourfile').show();
-}
-
-function hideFile()
-{
- $('#yourfile').hide();
-}
-
-function checkResults()
-{
- if ( g_Counter >= COUNTER_MAX )
- {
- return;
- }
-
- g_Counter+=1;
-
- $.getJSON('/progress', { 'key' : g_CurrentKey }, function(data)
- {
- if ( data.result != "Nope")
- {
- if ( data.result != "OK" )
- {
- leaveLoadingState();
- setErrorState(data.result);
- }
- else
- {
- showFile(data);
- leaveLoadingState();
- // result = data.split("|");
- // showFile(result[1], result[2], result[3]);
- }
-
- $("#progressbar").progressbar('destroy');
- g_Counter = 101;
- }
- });
-
- if ( g_Counter < COUNTER_MAX )
- setTimeout("checkResults()", 1000);
- else
- {
- leaveLoadingState();
- setErrorState("Operation takes too long - terminating by timeout (story too long?)");
- }
-}
-
-function enterLoadingState()
-{
- $('#submit_button').hide();
- $('#ajax_loader').show();
-}
-
-function leaveLoadingState()
-{
- $('#submit_button').show();
- $('#ajax_loader').hide();
-}
-
-function downloadFanfic()
-{
- clearErrorState();
- hideFile();
-
-
- format = $("#format").val();
- alert(format);
-
- return;
-
- var url = $('#url').val();
- var login = $('#login').val();
- var password = $('#password').val();
-
- if ( url == '' )
- {
- setErrorState('URL shouldn\'t be empty');
- return;
- }
-
- if ( (url.indexOf('fanfiction.net') == -1 && url.indexOf('fanficauthors') == -1 && url.indexOf('ficwad') == -1 && url.indexOf('fictionpress') == -1) || (url.indexOf('adultfanfiction.net') != -1) )
- {
- setErrorState("This source is not yet supported. Ping me if you want it!");
- return;
- }
-
- $.post('/submitDownload', {'url' : url, 'login' : login, 'password' : password, 'format' : format}, function(data)
- {
- g_CurrentKey = data;
- g_Counter = 0;
- setTimeout("checkResults()", 1000);
- enterLoadingState();
- })
-}
\ No newline at end of file
diff --git a/js/jquery-1.3.2.js b/js/jquery-1.3.2.js
deleted file mode 100644
index 92635743..00000000
--- a/js/jquery-1.3.2.js
+++ /dev/null
@@ -1,4376 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){
-
-var
- // Will speed up references to window, and allows munging its name.
- window = this,
- // Will speed up references to undefined, and allows munging its name.
- undefined,
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- jQuery = window.jQuery = window.$ = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context );
- },
-
- // A simple way to check for HTML strings or ID strings
- // (both of which we optimize for)
- quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
- // Is it a simple selector
- isSimple = /^.[^:#\[\.,]*$/;
-
-jQuery.fn = jQuery.prototype = {
- init: function( selector, context ) {
- // Make sure that a selection was provided
- selector = selector || document;
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this[0] = selector;
- this.length = 1;
- this.context = selector;
- return this;
- }
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- var match = quickExpr.exec( selector );
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] )
- selector = jQuery.clean( [ match[1] ], context );
-
- // HANDLE: $("#id")
- else {
- var elem = document.getElementById( match[3] );
-
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem && elem.id != match[3] )
- return jQuery().find( selector );
-
- // Otherwise, we inject the element directly into the jQuery object
- var ret = jQuery( elem || [] );
- ret.context = document;
- ret.selector = selector;
- return ret;
- }
-
- // HANDLE: $(expr, [context])
- // (which is just equivalent to: $(content).find(expr)
- } else
- return jQuery( context ).find( selector );
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) )
- return jQuery( document ).ready( selector );
-
- // Make sure that old selector state is passed along
- if ( selector.selector && selector.context ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return this.setArray(jQuery.isArray( selector ) ?
- selector :
- jQuery.makeArray(selector));
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.3.2",
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num === undefined ?
-
- // Return a 'clean' array
- Array.prototype.slice.call( this ) :
-
- // Return just the object
- this[ num ];
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = jQuery( elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" )
- ret.selector = this.selector + (this.selector ? " " : "") + selector;
- else if ( name )
- ret.selector = this.selector + "." + name + "(" + selector + ")";
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Force the current matched set of elements to become
- // the specified array of elements (destroying the stack in the process)
- // You should use pushStack() in order to do this, but maintain the stack
- setArray: function( elems ) {
- // Resetting the length to 0, then using the native Array push
- // is a super-fast way to populate an object with array-like properties
- this.length = 0;
- Array.prototype.push.apply( this, elems );
-
- return this;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem && elem.jquery ? elem[0] : elem
- , this );
- },
-
- attr: function( name, value, type ) {
- var options = name;
-
- // Look for the case where we're accessing a style value
- if ( typeof name === "string" )
- if ( value === undefined )
- return this[0] && jQuery[ type || "attr" ]( this[0], name );
-
- else {
- options = {};
- options[ name ] = value;
- }
-
- // Check to see if we're setting style values
- return this.each(function(i){
- // Set all the styles
- for ( name in options )
- jQuery.attr(
- type ?
- this.style :
- this,
- name, jQuery.prop( this, options[ name ], type, i, name )
- );
- });
- },
-
- css: function( key, value ) {
- // ignore negative width and height values
- if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
- value = undefined;
- return this.attr( key, value, "curCSS" );
- },
-
- text: function( text ) {
- if ( typeof text !== "object" && text != null )
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-
- var ret = "";
-
- jQuery.each( text || this, function(){
- jQuery.each( this.childNodes, function(){
- if ( this.nodeType != 8 )
- ret += this.nodeType != 1 ?
- this.nodeValue :
- jQuery.fn.text( [ this ] );
- });
- });
-
- return ret;
- },
-
- wrapAll: function( html ) {
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).clone();
-
- if ( this[0].parentNode )
- wrap.insertBefore( this[0] );
-
- wrap.map(function(){
- var elem = this;
-
- while ( elem.firstChild )
- elem = elem.firstChild;
-
- return elem;
- }).append(this);
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- return this.each(function(){
- jQuery( this ).contents().wrapAll( html );
- });
- },
-
- wrap: function( html ) {
- return this.each(function(){
- jQuery( this ).wrapAll( html );
- });
- },
-
- append: function() {
- return this.domManip(arguments, true, function(elem){
- if (this.nodeType == 1)
- this.appendChild( elem );
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function(elem){
- if (this.nodeType == 1)
- this.insertBefore( elem, this.firstChild );
- });
- },
-
- before: function() {
- return this.domManip(arguments, false, function(elem){
- this.parentNode.insertBefore( elem, this );
- });
- },
-
- after: function() {
- return this.domManip(arguments, false, function(elem){
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- },
-
- end: function() {
- return this.prevObject || jQuery( [] );
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: [].push,
- sort: [].sort,
- splice: [].splice,
-
- find: function( selector ) {
- if ( this.length === 1 ) {
- var ret = this.pushStack( [], "find", selector );
- ret.length = 0;
- jQuery.find( selector, this[0], ret );
- return ret;
- } else {
- return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
- return jQuery.find( selector, elem );
- })), "find", selector );
- }
- },
-
- clone: function( events ) {
- // Do the clone
- var ret = this.map(function(){
- if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
- // IE copies events bound via attachEvent when
- // using cloneNode. Calling detachEvent on the
- // clone will also remove the events from the orignal
- // In order to get around this, we use innerHTML.
- // Unfortunately, this means some modifications to
- // attributes in IE that are actually only stored
- // as properties will not be copied (such as the
- // the name attribute on an input).
- var html = this.outerHTML;
- if ( !html ) {
- var div = this.ownerDocument.createElement("div");
- div.appendChild( this.cloneNode(true) );
- html = div.innerHTML;
- }
-
- return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
- } else
- return this.cloneNode(true);
- });
-
- // Copy the events from the original to the clone
- if ( events === true ) {
- var orig = this.find("*").andSelf(), i = 0;
-
- ret.find("*").andSelf().each(function(){
- if ( this.nodeName !== orig[i].nodeName )
- return;
-
- var events = jQuery.data( orig[i], "events" );
-
- for ( var type in events ) {
- for ( var handler in events[ type ] ) {
- jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
- }
- }
-
- i++;
- });
- }
-
- // Return the cloned set
- return ret;
- },
-
- filter: function( selector ) {
- return this.pushStack(
- jQuery.isFunction( selector ) &&
- jQuery.grep(this, function(elem, i){
- return selector.call( elem, i );
- }) ||
-
- jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
- return elem.nodeType === 1;
- }) ), "filter", selector );
- },
-
- closest: function( selector ) {
- var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
- closer = 0;
-
- return this.map(function(){
- var cur = this;
- while ( cur && cur.ownerDocument ) {
- if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
- jQuery.data(cur, "closest", closer);
- return cur;
- }
- cur = cur.parentNode;
- closer++;
- }
- });
- },
-
- not: function( selector ) {
- if ( typeof selector === "string" )
- // test special case where just one selector is passed in
- if ( isSimple.test( selector ) )
- return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
- else
- selector = jQuery.multiFilter( selector, this );
-
- var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
- return this.filter(function() {
- return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
- });
- },
-
- add: function( selector ) {
- return this.pushStack( jQuery.unique( jQuery.merge(
- this.get(),
- typeof selector === "string" ?
- jQuery( selector ) :
- jQuery.makeArray( selector )
- )));
- },
-
- is: function( selector ) {
- return !!selector && jQuery.multiFilter( selector, this ).length > 0;
- },
-
- hasClass: function( selector ) {
- return !!selector && this.is( "." + selector );
- },
-
- val: function( value ) {
- if ( value === undefined ) {
- var elem = this[0];
-
- if ( elem ) {
- if( jQuery.nodeName( elem, 'option' ) )
- return (elem.attributes.value || {}).specified ? elem.value : elem.text;
-
- // We need to handle select boxes special
- if ( jQuery.nodeName( elem, "select" ) ) {
- var index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type == "select-one";
-
- // Nothing was selected
- if ( index < 0 )
- return null;
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
-
- if ( option.selected ) {
- // Get the specifc value for the option
- value = jQuery(option).val();
-
- // We don't need an array for one selects
- if ( one )
- return value;
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- }
-
- // Everything else, we just grab the value
- return (elem.value || "").replace(/\r/g, "");
-
- }
-
- return undefined;
- }
-
- if ( typeof value === "number" )
- value += '';
-
- return this.each(function(){
- if ( this.nodeType != 1 )
- return;
-
- if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
- this.checked = (jQuery.inArray(this.value, value) >= 0 ||
- jQuery.inArray(this.name, value) >= 0);
-
- else if ( jQuery.nodeName( this, "select" ) ) {
- var values = jQuery.makeArray(value);
-
- jQuery( "option", this ).each(function(){
- this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
- jQuery.inArray( this.text, values ) >= 0);
- });
-
- if ( !values.length )
- this.selectedIndex = -1;
-
- } else
- this.value = value;
- });
- },
-
- html: function( value ) {
- return value === undefined ?
- (this[0] ?
- this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
- null) :
- this.empty().append( value );
- },
-
- replaceWith: function( value ) {
- return this.after( value ).remove();
- },
-
- eq: function( i ) {
- return this.slice( i, +i + 1 );
- },
-
- slice: function() {
- return this.pushStack( Array.prototype.slice.apply( this, arguments ),
- "slice", Array.prototype.slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function(elem, i){
- return callback.call( elem, i, elem );
- }));
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- },
-
- domManip: function( args, table, callback ) {
- if ( this[0] ) {
- var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
- scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
- first = fragment.firstChild;
-
- if ( first )
- for ( var i = 0, l = this.length; i < l; i++ )
- callback.call( root(this[i], first), this.length > 1 || i > 0 ?
- fragment.cloneNode(true) : fragment );
-
- if ( scripts )
- jQuery.each( scripts, evalScript );
- }
-
- return this;
-
- function root( elem, cur ) {
- return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
- }
- }
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-function evalScript( i, elem ) {
- if ( elem.src )
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
-
- else
- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
-
- if ( elem.parentNode )
- elem.parentNode.removeChild( elem );
-}
-
-function now(){
- return +new Date;
-}
-
-jQuery.extend = jQuery.fn.extend = function() {
- // copy reference to target object
- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) )
- target = {};
-
- // extend jQuery itself if only one argument is passed
- if ( length == i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ )
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null )
- // Extend the base object
- for ( var name in options ) {
- var src = target[ name ], copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy )
- continue;
-
- // Recurse if we're merging object values
- if ( deep && copy && typeof copy === "object" && !copy.nodeType )
- target[ name ] = jQuery.extend( deep,
- // Never move original objects, clone them
- src || ( copy.length != null ? [ ] : { } )
- , copy );
-
- // Don't bring in undefined values
- else if ( copy !== undefined )
- target[ name ] = copy;
-
- }
-
- // Return the modified object
- return target;
-};
-
-// exclude the following css properties to add px
-var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
- // cache defaultView
- defaultView = document.defaultView || {},
- toString = Object.prototype.toString;
-
-jQuery.extend({
- noConflict: function( deep ) {
- window.$ = _$;
-
- if ( deep )
- window.jQuery = _jQuery;
-
- return jQuery;
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return toString.call(obj) === "[object Function]";
- },
-
- isArray: function( obj ) {
- return toString.call(obj) === "[object Array]";
- },
-
- // check if an element is in a (or is an) XML document
- isXMLDoc: function( elem ) {
- return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
- !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
- },
-
- // Evalulates a script in a global context
- globalEval: function( data ) {
- if ( data && /\S/.test(data) ) {
- // Inspired by code by Andrea Giammarchi
- // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
- var head = document.getElementsByTagName("head")[0] || document.documentElement,
- script = document.createElement("script");
-
- script.type = "text/javascript";
- if ( jQuery.support.scriptEval )
- script.appendChild( document.createTextNode( data ) );
- else
- script.text = data;
-
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709).
- head.insertBefore( script, head.firstChild );
- head.removeChild( script );
- }
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0, length = object.length;
-
- if ( args ) {
- if ( length === undefined ) {
- for ( name in object )
- if ( callback.apply( object[ name ], args ) === false )
- break;
- } else
- for ( ; i < length; )
- if ( callback.apply( object[ i++ ], args ) === false )
- break;
-
- // A special, fast, case for the most common use of each
- } else {
- if ( length === undefined ) {
- for ( name in object )
- if ( callback.call( object[ name ], name, object[ name ] ) === false )
- break;
- } else
- for ( var value = object[0];
- i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
- }
-
- return object;
- },
-
- prop: function( elem, value, type, i, name ) {
- // Handle executable functions
- if ( jQuery.isFunction( value ) )
- value = value.call( elem, i );
-
- // Handle passing in a number to a CSS property
- return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
- value + "px" :
- value;
- },
-
- className: {
- // internal only, use addClass("class")
- add: function( elem, classNames ) {
- jQuery.each((classNames || "").split(/\s+/), function(i, className){
- if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
- elem.className += (elem.className ? " " : "") + className;
- });
- },
-
- // internal only, use removeClass("class")
- remove: function( elem, classNames ) {
- if (elem.nodeType == 1)
- elem.className = classNames !== undefined ?
- jQuery.grep(elem.className.split(/\s+/), function(className){
- return !jQuery.className.has( classNames, className );
- }).join(" ") :
- "";
- },
-
- // internal only, use hasClass("class")
- has: function( elem, className ) {
- return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( var name in options )
- elem.style[ name ] = old[ name ];
- },
-
- css: function( elem, name, force, extra ) {
- if ( name == "width" || name == "height" ) {
- var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
-
- function getWH() {
- val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
-
- if ( extra === "border" )
- return;
-
- jQuery.each( which, function() {
- if ( !extra )
- val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
- if ( extra === "margin" )
- val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
- else
- val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
- });
- }
-
- if ( elem.offsetWidth !== 0 )
- getWH();
- else
- jQuery.swap( elem, props, getWH );
-
- return Math.max(0, Math.round(val));
- }
-
- return jQuery.curCSS( elem, name, force );
- },
-
- curCSS: function( elem, name, force ) {
- var ret, style = elem.style;
-
- // We need to handle opacity special in IE
- if ( name == "opacity" && !jQuery.support.opacity ) {
- ret = jQuery.attr( style, "opacity" );
-
- return ret == "" ?
- "1" :
- ret;
- }
-
- // Make sure we're using the right name for getting the float value
- if ( name.match( /float/i ) )
- name = styleFloat;
-
- if ( !force && style && style[ name ] )
- ret = style[ name ];
-
- else if ( defaultView.getComputedStyle ) {
-
- // Only "float" is needed here
- if ( name.match( /float/i ) )
- name = "float";
-
- name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
-
- var computedStyle = defaultView.getComputedStyle( elem, null );
-
- if ( computedStyle )
- ret = computedStyle.getPropertyValue( name );
-
- // We should always get a number back from opacity
- if ( name == "opacity" && ret == "" )
- ret = "1";
-
- } else if ( elem.currentStyle ) {
- var camelCase = name.replace(/\-(\w)/g, function(all, letter){
- return letter.toUpperCase();
- });
-
- ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
- // Remember the original values
- var left = style.left, rsLeft = elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- elem.runtimeStyle.left = elem.currentStyle.left;
- style.left = ret || 0;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret;
- },
-
- clean: function( elems, context, fragment ) {
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" )
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
- var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
- if ( match )
- return [ context.createElement( match[1] ) ];
- }
-
- var ret = [], scripts = [], div = context.createElement("div");
-
- jQuery.each(elems, function(i, elem){
- if ( typeof elem === "number" )
- elem += '';
-
- if ( !elem )
- return;
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
- return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
- all :
- front + ">" + tag + ">";
- });
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
-
- var wrap =
- // option or optgroup
- !tags.indexOf("", "" ] ||
-
- !tags.indexOf("", "" ] ||
-
- tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
- [ 1, "" ] ||
-
- !tags.indexOf("", " " ] ||
-
- // matched above
- (!tags.indexOf(" ", " " ] ||
-
- !tags.indexOf("", " " ] ||
-
- // IE can't serialize and
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Default System configuration
-
-{{ defaultsini }}
-
-
-
-
-
-
-
-
-
-
-
-