From dbee1ddc2dc210c45e8e78f2e6a358cae54f5a06 Mon Sep 17 00:00:00 2001 From: James Hogan Date: Mon, 15 Nov 2010 18:26:51 +0000 Subject: [PATCH] BibleManager: add module fetch error checking Add bool* ok = 0 parameter to KwBibleManager module/language fetch functions, and implement in BibleGateway and SWORD bible managers. Improve error handling in KwBiblePlugin, removing placeholder from combobox and disabling combobox if failed to load module list or no modules found. --- kworship/bible/KwBibleManager.h | 6 +++--- kworship/bible/KwBiblePlugin.cpp | 19 ++++++++++--------- .../biblegateway/KwBibleManagerBibleGateway.cpp | 22 +++++++++++++++------- .../biblegateway/KwBibleManagerBibleGateway.h | 8 ++++---- kworship/bible/sword/KwBibleManagerSword.cpp | 12 +++++++++--- kworship/bible/sword/KwBibleManagerSword.h | 6 +++--- 6 files changed, 44 insertions(+), 29 deletions(-) diff --git a/kworship/bible/KwBibleManager.h b/kworship/bible/KwBibleManager.h index 99c069b..acd0426 100644 --- a/kworship/bible/KwBibleManager.h +++ b/kworship/bible/KwBibleManager.h @@ -103,13 +103,13 @@ class KWBIBLE_EXPORT KwBibleManager : public QObject virtual KwBibleModule* module(const QString& name) = 0; /// Get the list of module names. - virtual QStringList moduleNames() = 0; + virtual QStringList moduleNames(bool* ok = 0) = 0; /// Get the list of module names in a specific language. - virtual QStringList moduleNamesInLanguage(const QString& lang) = 0; + virtual QStringList moduleNamesInLanguage(const QString& lang, bool* ok = 0) = 0; /// Get a list of module languages. - virtual QStringList languages() = 0; + virtual QStringList languages(bool* ok = 0) = 0; }; #endif // _KwBibleManager_h_ diff --git a/kworship/bible/KwBiblePlugin.cpp b/kworship/bible/KwBiblePlugin.cpp index 9658ba5..e16ac7a 100644 --- a/kworship/bible/KwBiblePlugin.cpp +++ b/kworship/bible/KwBiblePlugin.cpp @@ -152,14 +152,6 @@ void KwBiblePlugin::slotConnect() // This will force the connection fillBiblesList(mgr); - if (mgr->comboBibles->count() == 0) - { - KMessageBox::information(m_docker, i18n("No bibles found")); - } - else - { - mgr->comboBibles->setEnabled(true); - } } /// Fired when the bible is changed. @@ -489,7 +481,9 @@ void KwBiblePlugin::_unload() /// Fill up the bibles list for a manager. void KwBiblePlugin::fillBiblesList(BibleManager* mgr) { - QStringList languages = mgr->manager->languages(); + bool ok; + QStringList languages = mgr->manager->languages(&ok); + mgr->comboBibles->setEnabled(false); mgr->comboBibles->clear(); mgr->comboBibles->addItem(i18n("-- select a translation --")); foreach (QString language, languages) @@ -504,5 +498,12 @@ void KwBiblePlugin::fillBiblesList(BibleManager* mgr) } } } + // re-enable or clear + if (ok && mgr->comboBibles->count() > 1) { + mgr->comboBibles->setEnabled(true); + } + else { + mgr->comboBibles->clear(); + } } diff --git a/kworship/bible/biblegateway/KwBibleManagerBibleGateway.cpp b/kworship/bible/biblegateway/KwBibleManagerBibleGateway.cpp index b7089f2..666c4b1 100644 --- a/kworship/bible/biblegateway/KwBibleManagerBibleGateway.cpp +++ b/kworship/bible/biblegateway/KwBibleManagerBibleGateway.cpp @@ -117,15 +117,15 @@ KwBibleModule* KwBibleManagerBibleGateway::module(const QString& name) } } -QStringList KwBibleManagerBibleGateway::moduleNames() +QStringList KwBibleManagerBibleGateway::moduleNames(bool* ok) { - ensureCached(); + ensureCached(ok); return m_versionsByName.keys(); } -QStringList KwBibleManagerBibleGateway::moduleNamesInLanguage(const QString& lang) +QStringList KwBibleManagerBibleGateway::moduleNamesInLanguage(const QString& lang, bool* ok) { - ensureCached(); + ensureCached(ok); int languageId = m_languages.indexOf(lang); QStringList names; if (languageId >= 0) @@ -139,9 +139,9 @@ QStringList KwBibleManagerBibleGateway::moduleNamesInLanguage(const QString& lan return names; } -QStringList KwBibleManagerBibleGateway::languages() +QStringList KwBibleManagerBibleGateway::languages(bool* ok) { - ensureCached(); + ensureCached(ok); return m_languages; } @@ -150,7 +150,7 @@ QStringList KwBibleManagerBibleGateway::languages() */ /// Ensure the version information is cached. -void KwBibleManagerBibleGateway::ensureCached() +void KwBibleManagerBibleGateway::ensureCached(bool* ok) { if (!m_cached) { @@ -294,13 +294,21 @@ void KwBibleManagerBibleGateway::ensureCached() } } + if (ok) + *ok = true; KIO::NetAccess::removeTempFile(tmpFile); } else { + if (ok) + *ok = false; KMessageBox::error(0, KIO::NetAccess::lastErrorString()); } } + else if (ok) + { + *ok = true; + } } /// Clear all modules. diff --git a/kworship/bible/biblegateway/KwBibleManagerBibleGateway.h b/kworship/bible/biblegateway/KwBibleManagerBibleGateway.h index 52ca636..c2ac7e9 100644 --- a/kworship/bible/biblegateway/KwBibleManagerBibleGateway.h +++ b/kworship/bible/biblegateway/KwBibleManagerBibleGateway.h @@ -67,13 +67,13 @@ class KwBibleManagerBibleGateway : public KwBibleManager virtual KwBibleModule* module(const QString& name); // Reimplemented - virtual QStringList moduleNames(); + virtual QStringList moduleNames(bool* ok = 0); // Reimplemented - virtual QStringList moduleNamesInLanguage(const QString& lang); + virtual QStringList moduleNamesInLanguage(const QString& lang, bool* ok = 0); // Reimplemented - virtual QStringList languages(); + virtual QStringList languages(bool* ok = 0); private: @@ -82,7 +82,7 @@ class KwBibleManagerBibleGateway : public KwBibleManager */ /// Ensure the version information is cached. - void ensureCached(); + void ensureCached(bool* ok = 0); /// Clear all modules. void clear(); diff --git a/kworship/bible/sword/KwBibleManagerSword.cpp b/kworship/bible/sword/KwBibleManagerSword.cpp index b9f6b87..1d4d639 100644 --- a/kworship/bible/sword/KwBibleManagerSword.cpp +++ b/kworship/bible/sword/KwBibleManagerSword.cpp @@ -111,14 +111,18 @@ KwBibleModule* KwBibleManagerSword::module(const QString& name) } } -QStringList KwBibleManagerSword::moduleNames() +QStringList KwBibleManagerSword::moduleNames(bool* ok) { + if (ok) + *ok = true; return m_modules.keys(); } -QStringList KwBibleManagerSword::moduleNamesInLanguage(const QString& lang) +QStringList KwBibleManagerSword::moduleNamesInLanguage(const QString& lang, bool* ok) { QHash::const_iterator it = m_modulesByLanguage.constFind(lang); + if (ok) + *ok = (it != m_modulesByLanguage.constEnd()); if (it != m_modulesByLanguage.constEnd()) { return *it; @@ -129,8 +133,10 @@ QStringList KwBibleManagerSword::moduleNamesInLanguage(const QString& lang) } } -QStringList KwBibleManagerSword::languages() +QStringList KwBibleManagerSword::languages(bool* ok) { + if (ok) + *ok = true; return m_languages; } diff --git a/kworship/bible/sword/KwBibleManagerSword.h b/kworship/bible/sword/KwBibleManagerSword.h index d7d7ef4..2c06170 100644 --- a/kworship/bible/sword/KwBibleManagerSword.h +++ b/kworship/bible/sword/KwBibleManagerSword.h @@ -67,13 +67,13 @@ class KwBibleManagerSword : public KwBibleManager virtual KwBibleModule* module(const QString& name); // Reimplemented - virtual QStringList moduleNames(); + virtual QStringList moduleNames(bool* ok = 0); // Reimplemented - virtual QStringList moduleNamesInLanguage(const QString& lang); + virtual QStringList moduleNamesInLanguage(const QString& lang, bool* ok = 0); // Reimplemented - virtual QStringList languages(); + virtual QStringList languages(bool* ok = 0); private: -- 2.11.4.GIT