From 6dfa478a2ab99df6e340eeb6ba8ebf499f65429a Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Fri, 19 Oct 2012 13:56:49 -0500 Subject: [PATCH] Add include_logpage: smart Add logpage only if In-Progress or has already one. --- defaults.ini | 50 +++++++++++---------- fanficdownloader/writers/writer_epub.py | 60 +++++++++++++------------ plugin-defaults.ini | 50 +++++++++++---------- 3 files changed, 85 insertions(+), 75 deletions(-) diff --git a/defaults.ini b/defaults.ini index 69fd76d..7797f34 100644 --- a/defaults.ini +++ b/defaults.ini @@ -282,13 +282,17 @@ zip_output: false ## 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 included, the -## log will be updated each time the epub is an all the metadata +## 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. 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 @@ -397,31 +401,31 @@ nook_img_fix:true ## 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 +# 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 +# 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, +# 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 +# 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 +# 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 diff --git a/fanficdownloader/writers/writer_epub.py b/fanficdownloader/writers/writer_epub.py index af3e0b5..c3015e2 100644 --- a/fanficdownloader/writers/writer_epub.py +++ b/fanficdownloader/writers/writer_epub.py @@ -192,30 +192,28 @@ div { margin: 0pt; padding: 0pt; } string.Template(). START and END are expected to use the same names as Story.metadata, but ENTRY should use id, label and value. """ - if self.getConfig("include_logpage"): + if self.hasConfig("logpage_start"): + START = string.Template(self.getConfig("logpage_start")) + else: + START = self.EPUB_LOG_PAGE_START - if self.hasConfig("logpage_start"): - START = string.Template(self.getConfig("logpage_start")) - else: - START = self.EPUB_LOG_PAGE_START - - if self.hasConfig("logpage_end"): - END = string.Template(self.getConfig("logpage_end")) - else: - END = self.EPUB_LOG_PAGE_END - - # if there's a self.story.logfile, there's an existing log - # to add to. - if self.story.logfile: - logger.debug("existing logfile found, appending") - logger.debug("existing data:%s"%self._getLastLogData(self.story.logfile)) - replace_string = "" # "" - self._write(out,self.story.logfile.replace(replace_string,self._makeLogEntry(self._getLastLogData(self.story.logfile))+replace_string)) - else: - # otherwise, write a new one. - self._write(out,START.substitute(self.story.getAllMetadata())) - self._write(out,self._makeLogEntry()) - self._write(out,END.substitute(self.story.getAllMetadata())) + if self.hasConfig("logpage_end"): + END = string.Template(self.getConfig("logpage_end")) + else: + END = self.EPUB_LOG_PAGE_END + + # if there's a self.story.logfile, there's an existing log + # to add to. + if self.story.logfile: + logger.debug("existing logfile found, appending") + logger.debug("existing data:%s"%self._getLastLogData(self.story.logfile)) + replace_string = "" # "" + self._write(out,self.story.logfile.replace(replace_string,self._makeLogEntry(self._getLastLogData(self.story.logfile))+replace_string)) + else: + # otherwise, write a new one. + self._write(out,START.substitute(self.story.getAllMetadata())) + self._write(out,self._makeLogEntry()) + self._write(out,END.substitute(self.story.getAllMetadata())) # self parsing instead of Soup because it should be simple and not # worth the overhead. @@ -494,7 +492,11 @@ div { margin: 0pt; padding: 0pt; } items.append(("toc_page","OEBPS/toc_page.xhtml","application/xhtml+xml","Table of Contents")) itemrefs.append("toc_page") - if self.getConfig("include_logpage"): + dologpage = ( self.getConfig("include_logpage") == "smart" and \ + (self.story.logfile or self.story.getMetadataRaw("status") == "In-Progress") ) \ + or self.getConfig("include_logpage") == "true" + + if dologpage: items.append(("log_page","OEBPS/log_page.xhtml","application/xhtml+xml","Update Log")) itemrefs.append("log_page") @@ -629,12 +631,12 @@ div { margin: 0pt; padding: 0pt; } outputepub.writestr("OEBPS/toc_page.xhtml",tocpageIO.getvalue()) tocpageIO.close() - # write log page. - logpageIO = StringIO.StringIO() - self.writeLogPage(logpageIO) - if logpageIO.getvalue(): # will be false if no log page. + if dologpage: + # write log page. + logpageIO = StringIO.StringIO() + self.writeLogPage(logpageIO) outputepub.writestr("OEBPS/log_page.xhtml",logpageIO.getvalue()) - logpageIO.close() + logpageIO.close() if self.hasConfig('chapter_start'): CHAPTER_START = string.Template(self.getConfig("chapter_start")) diff --git a/plugin-defaults.ini b/plugin-defaults.ini index 83e01eb..15a6ebe 100644 --- a/plugin-defaults.ini +++ b/plugin-defaults.ini @@ -258,13 +258,17 @@ windows_eol: true ## 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 included, the -## log will be updated each time the epub is an all the metadata +## 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. 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 @@ -372,31 +376,31 @@ nook_img_fix:true ## 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 +# 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 +# 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, +# 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 +# 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 +# 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