From fd270789aca77b07dbad13b0a3c3b23be54b699c Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Wed, 17 Jul 2013 16:53:00 -0500 Subject: [PATCH] Smarten Punctuation option on epub download/update. --- calibre-plugin/config.py | 6 ++++++ calibre-plugin/dialogs.py | 5 ++++- calibre-plugin/jobs.py | 24 ++++++++++++++++++---- calibre-plugin/prefs.py | 1 + fanficdownloader/adapters/adapter_test1.py | 2 +- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py index 6ad8c949..f034bee4 100644 --- a/calibre-plugin/config.py +++ b/calibre-plugin/config.py @@ -177,6 +177,7 @@ class ConfigWidget(QWidget): prefs['lookforurlinhtml'] = self.basic_tab.lookforurlinhtml.isChecked() prefs['checkforseriesurlid'] = self.basic_tab.checkforseriesurlid.isChecked() prefs['injectseries'] = self.basic_tab.injectseries.isChecked() + prefs['smarten_punctuation'] = self.basic_tab.smarten_punctuation.isChecked() if self.readinglist_tab: # lists @@ -320,6 +321,11 @@ class BasicTab(QWidget): self.updateepubcover.setChecked(prefs['updateepubcover']) self.l.addWidget(self.updateepubcover) + self.smarten_punctuation = QCheckBox('Smarten Punctuation (EPUB only)',self) + self.smarten_punctuation.setToolTip("Run Smarten Punctuation from Calibre's Polish Book feature on each EPUB download and update.") + self.smarten_punctuation.setChecked(prefs['smarten_punctuation']) + self.l.addWidget(self.smarten_punctuation) + cali_gb = groupbox = QGroupBox("Updating Calibre Options") self.l = QVBoxLayout() groupbox.setLayout(self.l) diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py index af57f19b..43388079 100644 --- a/calibre-plugin/dialogs.py +++ b/calibre-plugin/dialogs.py @@ -383,6 +383,7 @@ class AddNewDialog(SizePersistedDialog): 'collision': unicode(self.collision.currentText()), 'updatemeta': self.updatemeta.isChecked(), 'updateepubcover': self.updateepubcover.isChecked(), + 'smarten_punctuation':self.prefs['smarten_punctuation'] } if self.merge: @@ -618,7 +619,8 @@ class UpdateExistingDialog(SizePersistedDialog): def __init__(self, gui, header, prefs, icon, books, save_size_name='fanfictiondownloader_plugin:update list dialog'): SizePersistedDialog.__init__(self, gui, save_size_name) - + + self.prefs = prefs self.setWindowTitle(header) self.setWindowIcon(icon) @@ -736,6 +738,7 @@ class UpdateExistingDialog(SizePersistedDialog): 'collision': unicode(self.collision.currentText()), 'updatemeta': self.updatemeta.isChecked(), 'updateepubcover': self.updateepubcover.isChecked(), + 'smarten_punctuation':self.prefs['smarten_punctuation'] } class StoryListTableWidget(QTableWidget): diff --git a/calibre-plugin/jobs.py b/calibre-plugin/jobs.py index 88bdf7ba..0b4899f6 100644 --- a/calibre-plugin/jobs.py +++ b/calibre-plugin/jobs.py @@ -49,7 +49,7 @@ def do_download_worker(book_list, options, args = ['calibre_plugins.fanfictiondownloader_plugin.jobs', 'do_download_for_worker', (book,options)] - job = ParallelJob('arbitrary', + job = ParallelJob('arbitrary_n', "url:(%s) id:(%s)"%(book['url'],book['calibre_id']), done=None, args=args) @@ -84,7 +84,7 @@ def do_download_worker(book_list, options, book_id = job._book['calibre_id'] #title = job._title count = count + 1 - notification(float(count)/total, 'Downloaded Story') + notification(float(count)/total, '%d of %d stories finished downloading'%(count,total)) # Add this job's output to the current log print('Logfile for book ID %s (%s)'%(book_id, job._book['title'])) print(job.details) @@ -106,7 +106,7 @@ def do_download_worker(book_list, options, # return the book list as the job result return book_list -def do_download_for_worker(book,options): +def do_download_for_worker(book,options,notification=lambda x,y:x): ''' Child job, to extract isbn from formats for this specific book, when run as a worker job @@ -206,6 +206,22 @@ def do_download_for_worker(book,options): book['comment'] = 'Update %s completed, added %s chapters for %s total.'%\ (options['fileform'],(urlchaptercount-chaptercount),urlchaptercount) + if options['smarten_punctuation'] and options['fileform'] == "epub": + # do smarten_punctuation from calibre's polish feature + from calibre.ebooks.oeb.polish.main import polish, ALL_OPTS + from calibre.utils.logging import Log + from collections import namedtuple + + data = {'smarten_punctuation':True} + opts = ALL_OPTS.copy() + opts.update(data) + O = namedtuple('Options', ' '.join(ALL_OPTS.iterkeys())) + opts = O(**opts) + + log = Log(level=Log.DEBUG) + # report = [] + polish({outfile:outfile}, opts, log, print) # report.append + except NotGoingToDownload as d: book['good']=False book['comment']=unicode(d) @@ -218,6 +234,6 @@ def do_download_for_worker(book,options): book['status'] = 'Error' print("Exception: %s:%s"%(book,unicode(e))) traceback.print_exc() - + #time.sleep(10) return book diff --git a/calibre-plugin/prefs.py b/calibre-plugin/prefs.py index 40365811..040ba90b 100644 --- a/calibre-plugin/prefs.py +++ b/calibre-plugin/prefs.py @@ -41,6 +41,7 @@ default_prefs['includeimages'] = False default_prefs['lookforurlinhtml'] = False default_prefs['checkforseriesurlid'] = True default_prefs['injectseries'] = False +default_prefs['smarten_punctuation'] = False default_prefs['send_lists'] = '' default_prefs['read_lists'] = '' diff --git a/fanficdownloader/adapters/adapter_test1.py b/fanficdownloader/adapters/adapter_test1.py index 0ec49db1..4aa2ffae 100644 --- a/fanficdownloader/adapters/adapter_test1.py +++ b/fanficdownloader/adapters/adapter_test1.py @@ -350,7 +350,7 @@ Don't—e;ver—d;o—that—a;gain, 法 é
horizontal rules
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+

"Lorem ipsum dolor sit amet", consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore--et dolore magna aliqua. 'Ut enim ad minim veniam', quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

'''