From 9a5fc945a4b85647f496a1336beadec4d60a3e58 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sat, 14 Jul 2012 13:52:54 -0500 Subject: [PATCH] Add optional call to 'Count Pages' plugin. Requires 'Count Pages' 1.6.0+ --- calibre-plugin/config.py | 72 ++++++++++++++++++++++++++++++++++- calibre-plugin/ffdl_plugin.py | 21 ++++++++-- 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py index bc43597b..d766d9f9 100644 --- a/calibre-plugin/config.py +++ b/calibre-plugin/config.py @@ -61,6 +61,8 @@ all_prefs.defaults['gcnewonly'] = False all_prefs.defaults['gc_site_settings'] = {} all_prefs.defaults['allow_gc_from_ini'] = True +all_prefs.defaults['countpagesstats'] = [] + all_prefs.defaults['errorcol'] = '' all_prefs.defaults['custom_cols'] = {} @@ -165,6 +167,11 @@ class ConfigWidget(QWidget): if 'Generate Cover' not in plugin_action.gui.iactions: self.generatecover_tab.setEnabled(False) + self.countpages_tab = CountPagesTab(self, plugin_action) + tab_widget.addTab(self.countpages_tab, 'Count Pages') + if 'Count Pages' not in plugin_action.gui.iactions: + self.countpages_tab.setEnabled(False) + self.columns_tab = CustomColumnsTab(self, plugin_action) tab_widget.addTab(self.columns_tab, 'Custom Columns') @@ -218,8 +225,23 @@ class ConfigWidget(QWidget): prefs['gc_site_settings'] = gc_site_settings prefs['allow_gc_from_ini'] = self.generatecover_tab.allow_gc_from_ini.isChecked() + # Count Pages tab + countpagesstats = [] + + if self.countpages_tab.pagecount.isChecked(): + countpagesstats.append('PageCount') + if self.countpages_tab.wordcount.isChecked(): + countpagesstats.append('WordCount') + if self.countpages_tab.fleschreading.isChecked(): + countpagesstats.append('FleschReading') + if self.countpages_tab.fleschgrade.isChecked(): + countpagesstats.append('FleschGrade') + if self.countpages_tab.gunningfog.isChecked(): + countpagesstats.append('GunningFog') + + prefs['countpagesstats'] = countpagesstats + # Custom Columns tab - # error column prefs['errorcol'] = unicode(self.columns_tab.errorcol.itemData(self.columns_tab.errorcol.currentIndex()).toString()) @@ -559,6 +581,54 @@ class GenerateCoverTab(QWidget): self.l.insertStretch(-1) +class CountPagesTab(QWidget): + + def __init__(self, parent_dialog, plugin_action): + self.parent_dialog = parent_dialog + self.plugin_action = plugin_action + QWidget.__init__(self) + + self.l = QVBoxLayout() + self.setLayout(self.l) + + label = QLabel('These settings provide integration with the Count Pages Plugin. Count Pages can automatically update custom columns with page, word and reading level statistics. You have to create and configure the columns in Count Pages first.') + label.setWordWrap(True) + self.l.addWidget(label) + self.l.addSpacing(5) + + label = QLabel('If any of the settings below are checked, when stories are added or updated, the Count Pages Plugin will be called to update the checked statistics.') + label.setWordWrap(True) + self.l.addWidget(label) + self.l.addSpacing(5) + + # 'PageCount', 'WordCount', 'FleschReading', 'FleschGrade', 'GunningFog' + self.pagecount = QCheckBox('PageCount',self) + self.pagecount.setToolTip('Which column and algorithm to use are configured in Count Pages.') + self.pagecount.setChecked('PageCount' in prefs['countpagesstats']) + self.l.addWidget(self.pagecount) + + self.wordcount = QCheckBox('WordCount',self) + self.wordcount.setToolTip('Which column and algorithm to use are configured in Count Words.\nWill overwrite word count from FFDL metadata if set to update the same custom column.') + self.wordcount.setChecked('WordCount' in prefs['countpagesstats']) + self.l.addWidget(self.wordcount) + + self.fleschreading = QCheckBox('FleschReading',self) + self.fleschreading.setToolTip('Which column and algorithm to use are configured in Count Pages.') + self.fleschreading.setChecked('FleschReading' in prefs['countpagesstats']) + self.l.addWidget(self.fleschreading) + + self.fleschgrade = QCheckBox('Fleschgrade',self) + self.fleschgrade.setToolTip('Which column and algorithm to use are configured in Count Pages.') + self.fleschgrade.setChecked('Fleschgrade' in prefs['countpagesstats']) + self.l.addWidget(self.fleschgrade) + + self.gunningfog = QCheckBox('GunningFog',self) + self.gunningfog.setToolTip('Which column and algorithm to use are configured in Count Pages.') + self.gunningfog.setChecked('GunningFog' in prefs['countpagesstats']) + self.l.addWidget(self.gunningfog) + + self.l.insertStretch(-1) + class OtherTab(QWidget): def __init__(self, parent_dialog, plugin_action): diff --git a/calibre-plugin/ffdl_plugin.py b/calibre-plugin/ffdl_plugin.py index 0e10b203..9550f994 100644 --- a/calibre-plugin/ffdl_plugin.py +++ b/calibre-plugin/ffdl_plugin.py @@ -19,6 +19,7 @@ from PyQt4.Qt import (QApplication, QMenu, QToolButton) from PyQt4.Qt import QPixmap, Qt from PyQt4.QtCore import QBuffer +from calibre.constants import numeric_version as calibre_version from calibre.ptempfile import PersistentTemporaryFile, PersistentTemporaryDirectory, remove_dir from calibre.ebooks.metadata import MetaInformation, authors_to_string @@ -528,13 +529,19 @@ make_firstimage_cover:true if len(identicalbooks) < 1: # find dups authlist = story.getList("author", removeallentities=True) - if len(authlist) > 100: - raise NotGoingToDownload("Story has too many authors--search for existing book will fail. Update by selecting book directly or use Add New.","search_delete_saved.png") + if len(authlist) > 100 and calibre_version < (0, 8, 61): + ## should be fixed from 0.8.61 on. In the + ## meantime, if it matches the title *and* first + ## 100 authors, I'm prepared to assume it's a + ## match. + print("reduce author list to 100 only when calibre < 0.8.61") + authlist = authlist[:100] mi = MetaInformation(story.getMetadata("title", removeallentities=True), authlist) identicalbooks = db.find_identical_books(mi) if len(identicalbooks) > 0: print("existing found by title/author(s)") + else: print("existing found by identifier URL") @@ -722,7 +729,7 @@ make_firstimage_cover:true self.gui.library_view.model().books_added(len(add_list)) self.gui.library_view.model().refresh_ids(add_ids) - if update_ids: + if len(update_list): self.gui.library_view.model().refresh_ids(update_ids) current = self.gui.library_view.currentIndex() @@ -746,7 +753,13 @@ make_firstimage_cover:true print("all done, remove temp dir.") remove_dir(options['tdir']) - + + all_ids = add_ids + all_ids.extend(update_ids) + if 'Count Pages' in self.gui.iactions and len(prefs['countpagesstats']) and len(all_ids): + cp_plugin = self.gui.iactions['Count Pages'] + cp_plugin.count_statistics(all_ids,prefs['countpagesstats']) + def download_list_completed(self, job, options={}): if job.failed: self.gui.job_exception(job, dialog_title='Failed to Download Stories')