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.");