diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index 8f0994cdb..e310e0162 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -30,7 +30,7 @@ https://martinrotter.github.io/donate/ - + none diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index d6318f7ee..d02e71982 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -157,7 +157,6 @@ QList DatabaseQueries::getAccounts(const QSqlDatabase& db, const Q ServiceRoot* root = new T(); // Load common data. - //root->setId(query.value(QSL("id")).toInt()); root->setAccountId(query.value(QSL("id")).toInt()); QNetworkProxy proxy(QNetworkProxy::ProxyType(query.value(QSL("proxy_type")).toInt()), diff --git a/src/librssguard/services/abstract/rootitem.h b/src/librssguard/services/abstract/rootitem.h index 6dcda96df..1defec60e 100644 --- a/src/librssguard/services/abstract/rootitem.h +++ b/src/librssguard/services/abstract/rootitem.h @@ -161,6 +161,9 @@ class RSSGUARD_DLLSPEC RootItem : public QObject { // This ALWAYS represents primary column number/ID under which // the item is stored in DB. int id() const; + + // WARNING: Do not EVER call this method if your "this" object is derived + // from "ServiceRoot"; void setId(int id); // Each item has its title. diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index c259d0378..f48564e18 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -5,8 +5,9 @@ #include "3rd-party/boolinq/boolinq.h" #include "core/feedsmodel.h" #include "core/messagesmodel.h" -#include "miscellaneous/application.h" #include "database/databasequeries.h" +#include "exceptions/applicationexception.h" +#include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" #include "miscellaneous/textfactory.h" #include "services/abstract/cacheforserviceroot.h" @@ -281,7 +282,12 @@ ServiceRoot::LabelOperation ServiceRoot::supportedLabelOperations() const { void ServiceRoot::saveAccountDataToDatabase() { QSqlDatabase database = qApp->database()->driver()->connection(metaObject()->className()); - DatabaseQueries::createOverwriteAccount(database, this); + try { + DatabaseQueries::createOverwriteAccount(database, this); + } + catch (const ApplicationException& ex) { + qFatal("Account was not saved into database: '%s'.", qPrintable(ex.message())); + } } QVariantHash ServiceRoot::customDatabaseData() const { diff --git a/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp b/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp index 1e54a6968..a1945bd65 100644 --- a/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp +++ b/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp @@ -215,7 +215,7 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m QString feed_type = child_element.attribute(QSL("version"), DEFAULT_FEED_TYPE).toUpper(); QString feed_description = child_element.attribute(QSL("description")); QIcon feed_icon = qApp->icons()->fromByteArray(child_element.attribute(QSL("rssguard:icon")).toLocal8Bit()); - QString source_type = child_element.attribute(QSL("rssguard:xmlUrlType")); + StandardFeed::SourceType source_type = StandardFeed::SourceType(child_element.attribute(QSL("rssguard:xmlUrlType")).toInt()); QString post_process = child_element.attribute(QSL("rssguard:postProcess")); auto* new_feed = new StandardFeed(active_model_item); @@ -224,6 +224,8 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m new_feed->setEncoding(feed_encoding); new_feed->setSource(feed_url); new_feed->setCreationDate(QDateTime::currentDateTime()); + new_feed->setSourceType(source_type); + new_feed->setPostProcessScript(post_process); if (!feed_icon.isNull()) { new_feed->setIcon(feed_icon); diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index 1633abeb8..b304607ee 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -318,7 +318,9 @@ QList StandardServiceRoot::getContextMenuForFeed(StandardFeed* feed) { return m_feedContextMenu; } -bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model, RootItem* target_root_node, QString& output_message) { +bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model, + RootItem* target_root_node, + QString& output_message) { QStack original_parents; original_parents.push(target_root_node); @@ -385,17 +387,25 @@ bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model, auto* new_feed = new StandardFeed(*source_feed); QSqlDatabase database = qApp->database()->driver()->connection(metaObject()->className()); - DatabaseQueries::createOverwriteFeed(database, - new_feed, - target_root_node->getParentServiceRoot()->accountId(), - target_parent->id()); - requestItemReassignment(new_feed, target_parent); + try { + DatabaseQueries::createOverwriteFeed(database, + new_feed, + target_root_node->getParentServiceRoot()->accountId(), + target_parent->id()); + requestItemReassignment(new_feed, target_parent); + } + catch (const ApplicationException& ex) { + qCriticalNN << LOGSEC_CORE + << "Cannot import feed:" + << QUOTE_W_SPACE_DOT(ex.message()); + some_feed_category_error = true; + } } } } if (some_feed_category_error) { - output_message = tr("Import successful, but some feeds/categories were not imported due to error."); + output_message = tr("Some feeds/categories were not imported due to error, check debug log for more details."); } else { output_message = tr("Import was completely successful.");