Hello community, here is the log from the commit of package python-fanficfare for openSUSE:Factory checked in at 2020-04-05 20:55:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-fanficfare (Old) and /work/SRC/openSUSE:Factory/.python-fanficfare.new.3248 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fanficfare" Sun Apr 5 20:55:04 2020 rev:19 rq:791430 version:3.18.1+git.1586013122.54f843ec Changes: -------- --- /work/SRC/openSUSE:Factory/python-fanficfare/python-fanficfare.changes 2020-04-01 19:14:23.479424565 +0200 +++ /work/SRC/openSUSE:Factory/.python-fanficfare.new.3248/python-fanficfare.changes 2020-04-05 20:55:18.233298422 +0200 @@ -1,0 +2,14 @@ +Sat Apr 04 20:32:27 UTC 2020 - mc...@suse.com + +- Update to version 3.18.0+git.1586013122.54f843ec: + * Bump Test Version 3.18.1 + * New Site: scifistories.com (extends finestories.com). + * Bump Release Version 3.18.0 + * Update translations + * Bump Test Version 3.17.9 + * Change fanfiction.tenhawkpresents.com to fanfic.tenhawkpresents.ink + * Revert "Remove defunct site fanfiction.tenhawkpresents.com" + * Bump Test Version 3.17.8 + * Changes to adapter_archiveofourownorg for AO3 changes re: view_adult=true + +------------------------------------------------------------------- Old: ---- FanFicFare-3.17.0+git.1585684191.22d2ad45.tar.xz New: ---- FanFicFare-3.18.1+git.1586013122.54f843ec.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-fanficfare.spec ++++++ --- /var/tmp/diff_new_pack.8j6P4F/_old 2020-04-05 20:55:20.381300727 +0200 +++ /var/tmp/diff_new_pack.8j6P4F/_new 2020-04-05 20:55:20.381300727 +0200 @@ -21,7 +21,7 @@ %define skip_python2 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-fanficfare -Version: 3.17.0+git.1585684191.22d2ad45 +Version: 3.18.1+git.1586013122.54f843ec Release: 0 Summary: Tool for making eBooks from stories on fanfiction and other web sites License: GPL-3.0-only ++++++ FanFicFare-3.17.0+git.1585684191.22d2ad45.tar.xz -> FanFicFare-3.18.1+git.1586013122.54f843ec.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/__init__.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/__init__.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/__init__.py 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/__init__.py 2020-04-04 17:12:02.000000000 +0200 @@ -33,7 +33,7 @@ from calibre.customize import InterfaceActionBase # pulled out from FanFicFareBase for saving in prefs.py -__version__ = (3, 17, 7) +__version__ = (3, 18, 1) ## Apparently the name for this class doesn't matter--it was still ## 'demo' for the first few versions. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/plugin-defaults.ini new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/plugin-defaults.ini --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/plugin-defaults.ini 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/plugin-defaults.ini 2020-04-04 17:12:02.000000000 +0200 @@ -1606,6 +1606,16 @@ website_encodings:Windows-1252,utf8 +[fanfic.tenhawkpresents.ink] +## 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 + +website_encodings:Windows-1252,utf8 + [fanficauthors.net] ## Some sites require login (or login for some rated stories) The ## program can prompt you, or you can save it in config. In @@ -2091,6 +2101,77 @@ website_encodings:Windows-1252,utf8 +[scifistories.com:epub] +## This is a workaround to replace truncated chapter titles present in +## chapter list. Uncomment this to remove the usual, shorter chapter +## title in the chapter files only. See inject_chapter_title below. +#chapter_start:<?xml version="1.0" encoding="UTF-8"?> +# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +# <html xmlns="http://www.w3.org/1999/xhtml"> +# <head> +# <title>${chapter}</title> +# <link href="stylesheet.css" type="text/css" charset="UTF-8" rel="stylesheet"/> +# <meta name="chapterurl" content="${url}"></meta> +# <meta name="chapterorigtitle" content="${origchapter}"></meta> +# <meta name="chaptertoctitle" content="${tocchapter}"></meta> +# <meta name="chaptertitle" content="${chapter}"></meta> +# </head> +# <body> + +[scifistories.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. +## scifistories.com has started requiring login by email rather than +## pen name. +#username:yourem...@yourdomain.dom +#password:yourpassword + +## dateUpdated/datePublished don't usually have time, but they do on this site. +## http://docs.python.org/library/datetime.html#strftime-strptime-behavior +## Note that ini format requires % to be escaped as %%. +dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S +datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S + +## 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 "<a class='%slink' href='%s'>%s</a>" to +## make entryHTML. +make_linkhtml_entries:universe + +## scifistories.com stories can be in a series and/or a universe. By +## default, series will be populated with the universe if there is +## universe but not series. +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 + +## This site uses shortened title chapters in chapter lists. When set +## true, this will inject the site's full length chapter title into +## the chapter text. Typically will be used with chapter_start to +## remove the standard chapter title, as shown above in +## [scifistories.com:epub]. +#inject_chapter_title:false + [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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/translations/sv.po new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/translations/sv.po --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/calibre-plugin/translations/sv.po 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/calibre-plugin/translations/sv.po 2020-04-04 17:12:02.000000000 +0200 @@ -14,7 +14,7 @@ msgstr "" "Project-Id-Version: calibre-plugins\n" "POT-Creation-Date: 2019-11-29 09:28+Central Standard Time\n" -"PO-Revision-Date: 2020-03-07 07:45+0000\n" +"PO-Revision-Date: 2020-03-29 10:05+0000\n" "Last-Translator: Jonatan Nyberg\n" "Language-Team: Swedish (http://www.transifex.com/calibre/calibre-plugins/language/sv/)\n" "MIME-Version: 1.0\n" @@ -359,7 +359,7 @@ #: config.py:580 msgid "FanFicFare button opens menu?" -msgstr "" +msgstr "Knappen FanFicFare öppnar menyn?" #: config.py:581 msgid "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/__init__.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/__init__.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/__init__.py 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/__init__.py 2020-04-04 17:12:02.000000000 +0200 @@ -41,6 +41,7 @@ from . import adapter_fimfictionnet from . import adapter_mediaminerorg from . import adapter_potionsandsnitches +from . import adapter_tenhawkpresents from . import adapter_adastrafanficcom from . import adapter_tthfanficorg from . import adapter_twilightednet @@ -166,6 +167,7 @@ from . import adapter_swiorgru from . import adapter_fanficsme from . import adapter_archivehpfanfictalkcom +from . import adapter_scifistoriescom ## This bit of complexity allows adapters to be added by just adding ## importing. It eliminates the long if/else clauses we used to need diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_archiveofourownorg.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_archiveofourownorg.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_archiveofourownorg.py 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_archiveofourownorg.py 2020-04-04 17:12:02.000000000 +0200 @@ -44,6 +44,7 @@ self.username = "NoneGiven" # if left empty, site doesn't return any message at all. self.password = "" self.is_adult=False + self.addurl = "" self.full_work_soup = None self.full_work_chapters = None @@ -94,7 +95,7 @@ def getSiteURLPattern(self): # https://archiveofourown.org/collections/Smallville_Slash_Archive/works/159770 # Discard leading zeros from story ID numbers--AO3 doesn't use them in it's own chapter URLs. - logger.debug(r"https?://" + r"|".join([x.replace('.','\.') for x in self.getAcceptDomains()]) + r"(/collections/[^/]+)?/works/0*(?P<id>\d+)") + # logger.debug(r"https?://" + r"|".join([x.replace('.','\.') for x in self.getAcceptDomains()]) + r"(/collections/[^/]+)?/works/0*(?P<id>\d+)") return r"https?://(" + r"|".join([x.replace('.','\.') for x in self.getAcceptDomains()]) + r")(/collections/[^/]+)?/works/0*(?P<id>\d+)" # The certificate is only valid for the following names: @@ -154,12 +155,12 @@ def extractChapterUrlsAndMetadata(self): if self.is_adult or self.getConfig("is_adult"): - addurl = "?view_adult=true" + self.addurl = "?view_adult=true" else: - addurl="" + self.addurl="" - metaurl = self.url+addurl - url = self.url+'/navigate'+addurl + metaurl = self.url+self.addurl + url = self.url+'/navigate'+self.addurl logger.info("url: "+url) logger.info("metaurl: "+metaurl) @@ -168,7 +169,15 @@ meta = self._fetchUrl(metaurl) if "This work could have adult content. If you proceed you have agreed that you are willing to see such content." in meta: - raise exceptions.AdultCheckRequired(self.url) + if self.addurl: + ## "?view_adult=true" doesn't work on base story + ## URL anymore, which means we have to + metasoup = self.make_soup(meta) + a = metasoup.find('a',text='Proceed') + metaurl = 'https://'+self.host+a['href'] + meta = self._fetchUrl(metaurl) + else: + raise exceptions.AdultCheckRequired(self.url) except HTTPError as e: if e.code == 404: @@ -422,7 +431,7 @@ logger.debug("USE view_full_work") ## Assumed view_adult=true was cookied during metadata if not self.full_work_soup: - self.full_work_soup = self.make_soup(self._fetchUrl(self.url+"?view_full_work=true")) + self.full_work_soup = self.make_soup(self._fetchUrl(self.url+"?view_full_work=true"+self.addurl.replace('?','&'))) ## AO3 has had several cases now where chapter numbers ## are missing, breaking the link between ## <div id=chapter-##> and Chapter ##. @@ -439,7 +448,7 @@ if whole_dl_soup: chapter_dl_soup = self.full_work_chapters[index] else: - whole_dl_soup = chapter_dl_soup = self.make_soup(self._fetchUrl(url)) + whole_dl_soup = chapter_dl_soup = self.make_soup(self._fetchUrl(url+self.addurl)) if None == chapter_dl_soup: raise exceptions.FailedToDownload("Error downloading Chapter: %s! Missing required element!" % url) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_scifistoriescom.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_scifistoriescom.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_scifistoriescom.py 1970-01-01 01:00:00.000000000 +0100 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_scifistoriescom.py 2020-04-04 17:12:02.000000000 +0200 @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +# Copyright 2013 Fanficdownloader team, 2020 FanFicFare team +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from __future__ import absolute_import +import logging +logger = logging.getLogger(__name__) + +# py2 vs py3 transition +from ..six import text_type as unicode + +from .adapter_finestoriescom import FineStoriesComAdapter + +def getClass(): + return SciFiStoriesComAdapter + +# Class name has to be unique. Our convention is camel case the +# sitename with Adapter at the end. www is skipped. +class SciFiStoriesComAdapter(FineStoriesComAdapter): + + @classmethod + def getSiteAbbrev(cls): + return 'sfst' + + @staticmethod # must be @staticmethod, don't remove it. + def getSiteDomain(): + # The site domain. Does have www here, if it uses it. + return 'scifistories.com' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_tenhawkpresents.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_tenhawkpresents.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/adapters/adapter_tenhawkpresents.py 1970-01-01 01:00:00.000000000 +0100 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/adapters/adapter_tenhawkpresents.py 2020-04-04 17:12:02.000000000 +0200 @@ -0,0 +1,252 @@ +# -*- coding: utf-8 -*- + +# Copyright 2011 Fanficdownloader team, 2018 FanFicFare team +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Software: eFiction +from __future__ import absolute_import +import logging +logger = logging.getLogger(__name__) +import re +import urllib +from ..htmlcleanup import stripHTML +from .. import exceptions as exceptions + +# py2 vs py3 transition +from ..six import text_type as unicode +from ..six.moves.urllib.error import HTTPError + +from .base_adapter import BaseSiteAdapter, makeDate + +class TenhawkPresentsSiteAdapter(BaseSiteAdapter): + + def __init__(self, config, url): + BaseSiteAdapter.__init__(self, config, url) + self.story.setMetadata('siteabbrev','thpi') + self.username = "NoneGiven" # if left empty, site doesn't return any message at all. + self.password = "" + self.is_adult=False + + # get storyId from url--url validation guarantees query is only sid=1234 + self.story.setMetadata('storyId',self.parsedUrl.query.split('=',)[1]) + + + # normalized story URL. + self._setURL('http://' + self.getSiteDomain() + '/viewstory.php?sid='+self.story.getMetadata('storyId')) + self.dateformat = "%b %d %Y" + + + @staticmethod + def getSiteDomain(): + return 'fanfic.tenhawkpresents.ink' + + @classmethod + def getSiteExampleURLs(cls): + return "http://"+cls.getSiteDomain()+"/viewstory.php?sid=1234" + + def getSiteURLPattern(self): + # accept https, but don't use it--site SSL is broken. + return r"https?:"+re.escape("//"+self.getSiteDomain()+"/viewstory.php?sid=")+r"\d+$" + + def use_pagecache(self): + ''' + adapters that will work with the page cache need to implement + this and change it to True. + ''' + return True + + def needToLoginCheck(self, data): + if 'Registered Users Only' in data \ + or 'There is no such account on our website' in data \ + or "That password doesn't match the one in our database" in data: + return True + else: + return False + + def performLogin(self, url): + params = {} + + if self.password: + params['penname'] = self.username + params['password'] = self.password + else: + params['penname'] = self.getConfig("username") + params['password'] = self.getConfig("password") + params['cookiecheck'] = '1' + params['submit'] = 'Submit' + + loginUrl = 'http://' + self.getSiteDomain() + '/user.php?action=login' + logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl, + params['penname'])) + + d = self._fetchUrl(loginUrl, params) + + if "Member Account" not in d : #Member Account + logger.info("Failed to login to URL %s as %s" % (loginUrl, + params['penname'])) + raise exceptions.FailedToLogin(url,params['penname']) + return False + else: + return True + + def extractChapterUrlsAndMetadata(self): + + if self.is_adult or self.getConfig("is_adult"): + addurl = "&ageconsent=ok&warning=3" + else: + addurl="" + + url = self.url+'&index=1'+addurl + logger.debug("URL: "+url) + + try: + data = self._fetchUrl(url) + except HTTPError as e: + if e.code == 404: + raise exceptions.StoryDoesNotExist(self.url) + else: + raise e + + if self.needToLoginCheck(data): + # need to log in for this one. + addurl = "&ageconsent=ok&warning=4" + url = self.url+'&index=1'+addurl + logger.debug("Changing URL: "+url) + self.performLogin(url) + data = self._fetchUrl(url,usecache=False) + + if "This story contains mature content which may include violence, sexual situations, and coarse language" in data: + raise exceptions.AdultCheckRequired(self.url) + + if "Access denied. This story has not been validated by the adminstrators of this site." in data: + raise exceptions.AccessDenied(self.getSiteDomain() +" says: Access denied. This story has not been validated by the adminstrators of this site.") + + # use BeautifulSoup HTML parser to make everything easier to find. + soup = self.make_soup(data) + + ## Title + a = soup.find('a', href=re.compile(r'viewstory.php\?sid='+self.story.getMetadata('storyId'))) + self.story.setMetadata('title',stripHTML(a)) + + # Find authorid and URL from... author url. + a = soup.find('a', href=re.compile(r"viewuser.php\?uid=\d+")) + self.story.setMetadata('authorId',a['href'].split('=')[1]) + self.story.setMetadata('authorUrl','http://'+self.host+'/'+a['href']) + self.story.setMetadata('author',a.string) + + # Find the chapters: + for chapter in soup.findAll('a', href=re.compile(r'viewstory.php\?sid='+self.story.getMetadata('storyId')+"&chapter=\d+$")): + # just in case there's tags, like <i> in chapter titles. + self.add_chapter(chapter,'http://'+self.host+'/'+chapter['href']+addurl) + + + def defaultGetattr(d,k): + try: + return d[k] + except: + return "" + + # <span class="label">Rated:</span> NC-17<br /> etc + labels = soup.findAll('span',{'class':'label'}) + for labelspan in labels: + value = labelspan.nextSibling + label = labelspan.string + + if 'Summary' in label: + ## Everything until the next span class='label' + svalue = "" + while 'label' not in defaultGetattr(value,'class'): + svalue += unicode(value) + value = value.nextSibling + self.setDescription(url,svalue) + #self.story.setMetadata('description',stripHTML(svalue)) + + if 'Rated' in label: + self.story.setMetadata('rating', value) + + if 'Word count' in label: + self.story.setMetadata('numWords', value) + + if 'Categories' in label: + cats = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=categories')) + catstext = [cat.string for cat in cats] + for cat in catstext: + self.story.addToList('category',cat.string) + + if 'Characters' in label: + chars = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=characters')) + charstext = [char.string for char in chars] + for char in charstext: + self.story.addToList('characters',char.string) + + if 'Genre' in label: + genres = labelspan.parent.findAll('a',href=re.compile(r'browse.php\?type=class')) + genrestext = [genre.string for genre in genres] + self.genre = ', '.join(genrestext) + for genre in genrestext: + self.story.addToList('genre',genre.string) + + if 'Completed' in label: + if 'Yes' in value: + self.story.setMetadata('status', 'Completed') + else: + self.story.setMetadata('status', 'In-Progress') + + if 'Published' in label: + self.story.setMetadata('datePublished', makeDate(stripHTML(value), self.dateformat)) + + if 'Updated' in label: + # there's a stray [ at the end. + #value = value[0:-1] + self.story.setMetadata('dateUpdated', makeDate(stripHTML(value), self.dateformat)) + + try: + # Find Series name from series URL. + a = soup.find('a', href=re.compile(r"viewseries.php\?seriesid=\d+")) + series_name = a.string + series_url = 'http://'+self.host+'/'+a['href'] + + # use BeautifulSoup HTML parser to make everything easier to find. + seriessoup = self.make_soup(self._fetchUrl(series_url)) + storyas = seriessoup.findAll('a', href=re.compile(r'^viewstory.php\?sid=\d+$')) + i=1 + for a in storyas: + if a['href'] == ('viewstory.php?sid='+self.story.getMetadata('storyId')): + self.setSeries(series_name, i) + self.story.setMetadata('seriesUrl',series_url) + break + i+=1 + + except: + # I find it hard to care if the series parsing fails + pass + + + def getChapterText(self, url): + + logger.debug('Getting chapter text from: %s' % url) + + soup = self.make_soup(self._fetchUrl(url)) + + span = soup.find('div', {'id' : 'story'}) + + if None == span: + raise exceptions.FailedToDownload("Error downloading Chapter: %s! Missing required element!" % url) + + return self.utf8FromSoup(url,span) + +def getClass(): + return TenhawkPresentsSiteAdapter + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/cli.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/cli.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/cli.py 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/cli.py 2020-04-04 17:12:02.000000000 +0200 @@ -40,7 +40,7 @@ def pickle_load(f): return pickle.load(f,encoding="bytes") -version="3.17.7" +version="3.18.1" os.environ['CURRENT_VERSION_ID']=version global_cache = 'global_cache' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/defaults.ini new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/defaults.ini --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/fanficfare/defaults.ini 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/fanficfare/defaults.ini 2020-04-04 17:12:02.000000000 +0200 @@ -1639,6 +1639,16 @@ website_encodings:Windows-1252,utf8 +[fanfic.tenhawkpresents.ink] +## 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 + +website_encodings:Windows-1252,utf8 + [fanficauthors.net] ## Some sites require login (or login for some rated stories) The ## program can prompt you, or you can save it in config. In @@ -2124,6 +2134,77 @@ website_encodings:Windows-1252,utf8 +[scifistories.com:epub] +## This is a workaround to replace truncated chapter titles present in +## chapter list. Uncomment this to remove the usual, shorter chapter +## title in the chapter files only. See inject_chapter_title below. +#chapter_start:<?xml version="1.0" encoding="UTF-8"?> +# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +# <html xmlns="http://www.w3.org/1999/xhtml"> +# <head> +# <title>${chapter}</title> +# <link href="stylesheet.css" type="text/css" charset="UTF-8" rel="stylesheet"/> +# <meta name="chapterurl" content="${url}"></meta> +# <meta name="chapterorigtitle" content="${origchapter}"></meta> +# <meta name="chaptertoctitle" content="${tocchapter}"></meta> +# <meta name="chaptertitle" content="${chapter}"></meta> +# </head> +# <body> + +[scifistories.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. +## scifistories.com has started requiring login by email rather than +## pen name. +#username:yourem...@yourdomain.dom +#password:yourpassword + +## dateUpdated/datePublished don't usually have time, but they do on this site. +## http://docs.python.org/library/datetime.html#strftime-strptime-behavior +## Note that ini format requires % to be escaped as %%. +dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S +datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S + +## 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 "<a class='%slink' href='%s'>%s</a>" to +## make entryHTML. +make_linkhtml_entries:universe + +## scifistories.com stories can be in a series and/or a universe. By +## default, series will be populated with the universe if there is +## universe but not series. +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 + +## This site uses shortened title chapters in chapter lists. When set +## true, this will inject the site's full length chapter title into +## the chapter text. Typically will be used with chapter_start to +## remove the standard chapter title, as shown above in +## [scifistories.com:epub]. +#inject_chapter_title:false + [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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/FanFicFare-3.17.0+git.1585684191.22d2ad45/setup.py new/FanFicFare-3.18.1+git.1586013122.54f843ec/setup.py --- old/FanFicFare-3.17.0+git.1585684191.22d2ad45/setup.py 2020-03-31 21:49:51.000000000 +0200 +++ new/FanFicFare-3.18.1+git.1586013122.54f843ec/setup.py 2020-04-04 17:12:02.000000000 +0200 @@ -27,7 +27,7 @@ name=package_name, # Versions should comply with PEP440. - version="3.17.7", + version="3.18.1", description='A tool for downloading fanfiction to eBook formats', long_description=long_description, ++++++ _service ++++++ --- /var/tmp/diff_new_pack.8j6P4F/_old 2020-04-05 20:55:20.685301053 +0200 +++ /var/tmp/diff_new_pack.8j6P4F/_new 2020-04-05 20:55:20.685301053 +0200 @@ -1,6 +1,6 @@ <services> <service mode="disabled" name="tar_scm"> - <param name="versionprefix">3.17.0+git</param> + <param name="versionprefix">3.18.1+git</param> <param name="url">https://github.com/JimmXinu/FanFicFare.git</param> <param name="scm">git</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.8j6P4F/_old 2020-04-05 20:55:20.705301074 +0200 +++ /var/tmp/diff_new_pack.8j6P4F/_new 2020-04-05 20:55:20.705301074 +0200 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/JimmXinu/FanFicFare.git</param> - <param name="changesrevision">22d2ad4564f50d9949aae1ebc10a6939a75e8d9b</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">54f843ec061d1760b994f081936384ccd84b9162</param></service></servicedata> \ No newline at end of file