diff --git a/resources/misc/db_init_mysql.sql b/resources/misc/db_init_mysql.sql
index 54d6fd185..68e397b7c 100644
--- a/resources/misc/db_init_mysql.sql
+++ b/resources/misc/db_init_mysql.sql
@@ -29,6 +29,7 @@ CREATE TABLE IF NOT EXISTS TtRssAccounts (
auth_username TEXT,
auth_password TEXT,
url TEXT NOT NULL,
+ force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0,
FOREIGN KEY (id) REFERENCES Accounts (id)
);
@@ -62,7 +63,7 @@ CREATE TABLE IF NOT EXISTS Feeds (
username TEXT,
password TEXT,
update_type INTEGER(1) NOT NULL CHECK (update_type >= 0),
- update_interval INTEGER NOT NULL DEFAULT 15 CHECK (update_interval >= 5),
+ update_interval INTEGER NOT NULL CHECK (update_interval >= 5) DEFAULT 15,
type INTEGER,
account_id INTEGER NOT NULL,
custom_id TEXT,
@@ -74,16 +75,16 @@ DROP TABLE IF EXISTS Messages;
-- !
CREATE TABLE IF NOT EXISTS Messages (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
- is_read INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_read >= 0 AND is_read <= 1),
- is_deleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_deleted >= 0 AND is_deleted <= 1),
- is_important INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_important >= 0 AND is_important <= 1),
+ is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0,
+ is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0,
+ is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT 0 ,
feed TEXT NOT NULL,
title TEXT NOT NULL CHECK (title != ''),
url TEXT,
author TEXT,
date_created BIGINT NOT NULL CHECK (date_created != 0),
contents TEXT,
- is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1),
+ is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0 ,
enclosures TEXT,
account_id INTEGER NOT NULL,
custom_id TEXT,
diff --git a/resources/misc/db_init_sqlite.sql b/resources/misc/db_init_sqlite.sql
index 157fb0ffc..d4c20de99 100644
--- a/resources/misc/db_init_sqlite.sql
+++ b/resources/misc/db_init_sqlite.sql
@@ -23,6 +23,7 @@ CREATE TABLE IF NOT EXISTS TtRssAccounts (
auth_username TEXT,
auth_password TEXT,
url TEXT NOT NULL,
+ force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0,
FOREIGN KEY (id) REFERENCES Accounts (id)
);
@@ -69,16 +70,16 @@ DROP TABLE IF EXISTS Messages;
-- !
CREATE TABLE IF NOT EXISTS Messages (
id INTEGER PRIMARY KEY,
- is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT (0),
- is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT (0),
- is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT (0),
+ is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0,
+ is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0,
+ is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT 0,
feed TEXT NOT NULL,
title TEXT NOT NULL CHECK (title != ''),
url TEXT,
author TEXT,
date_created INTEGER NOT NULL CHECK (date_created != 0),
contents TEXT,
- is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1),
+ is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0,
enclosures TEXT,
account_id INTEGER NOT NULL,
custom_id TEXT,
diff --git a/resources/misc/db_update_mysql_3_4.sql b/resources/misc/db_update_mysql_3_4.sql
index b6acbcb72..f2c27f644 100644
--- a/resources/misc/db_update_mysql_3_4.sql
+++ b/resources/misc/db_update_mysql_3_4.sql
@@ -15,12 +15,13 @@ CREATE TABLE TtRssAccounts (
auth_username TEXT,
auth_password TEXT,
url TEXT NOT NULL,
+ force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0,
FOREIGN KEY (id) REFERENCES Accounts (id)
);
-- !
ALTER TABLE Messages
-ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1);
+ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1;
-- !
ALTER TABLE Messages
ADD COLUMN custom_id TEXT;
@@ -38,7 +39,7 @@ ALTER TABLE Messages
MODIFY url TEXT;
-- !
ALTER TABLE Feeds
-ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1);
+ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1;
-- !
ALTER TABLE Feeds
ADD COLUMN custom_id TEXT;
@@ -56,7 +57,7 @@ ALTER TABLE Feeds
MODIFY type INTEGER;
-- !
ALTER TABLE Categories
-ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1);
+ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1;
-- !
ALTER TABLE Categories
ADD COLUMN custom_id TEXT;
diff --git a/resources/misc/db_update_sqlite_3_4.sql b/resources/misc/db_update_sqlite_3_4.sql
index 33e985e6f..7366f1b5e 100644
--- a/resources/misc/db_update_sqlite_3_4.sql
+++ b/resources/misc/db_update_sqlite_3_4.sql
@@ -15,6 +15,7 @@ CREATE TABLE TtRssAccounts (
auth_username TEXT,
auth_password TEXT,
url TEXT NOT NULL,
+ force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0,
FOREIGN KEY (id) REFERENCES Accounts (id)
);
@@ -25,16 +26,16 @@ DROP TABLE Messages;
-- !
CREATE TABLE Messages (
id INTEGER PRIMARY KEY,
- is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT (0),
- is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT (0),
- is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT (0),
+ is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0,
+ is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0,
+ is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT 0,
feed TEXT NOT NULL,
title TEXT NOT NULL CHECK (title != ''),
url TEXT,
author TEXT,
date_created INTEGER NOT NULL CHECK (date_created != 0),
contents TEXT,
- is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1),
+ is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0,
enclosures TEXT,
account_id INTEGER NOT NULL,
custom_id TEXT,
diff --git a/src/gui/dialogs/formaddaccount.cpp b/src/gui/dialogs/formaddaccount.cpp
index 60fa962af..d191d9128 100755
--- a/src/gui/dialogs/formaddaccount.cpp
+++ b/src/gui/dialogs/formaddaccount.cpp
@@ -59,9 +59,7 @@ void FormAddAccount::addSelectedAccount() {
m_model->addServiceAccount(new_root);
}
else {
- qApp->showGuiMessage(tr("Cannot add account"),
- tr("Some critical error occurred, report this to developers."),
- QSystemTrayIcon::Critical, parentWidget(), true);
+ qCritical("Cannot create new account.");
}
}
diff --git a/src/services/tt-rss/gui/formeditaccount.cpp b/src/services/tt-rss/gui/formeditaccount.cpp
index e0e1728b1..7d58ae34f 100755
--- a/src/services/tt-rss/gui/formeditaccount.cpp
+++ b/src/services/tt-rss/gui/formeditaccount.cpp
@@ -42,12 +42,12 @@ FormEditAccount::FormEditAccount(QWidget *parent)
tr("No test done yet."),
tr("Here, results of connection test are shown."));
- setTabOrder(m_ui->m_txtUrl->lineEdit(), m_ui->m_txtUsername->lineEdit());
+ setTabOrder(m_ui->m_txtUrl->lineEdit(), m_ui->m_checkServerSideUpdate);
+ setTabOrder(m_ui->m_checkServerSideUpdate, m_ui->m_txtUsername->lineEdit());
setTabOrder(m_ui->m_txtUsername->lineEdit(), m_ui->m_txtPassword->lineEdit());
setTabOrder(m_ui->m_txtPassword->lineEdit(), m_ui->m_checkShowPassword);
setTabOrder(m_ui->m_checkShowPassword, m_ui->m_gbHttpAuthentication);
setTabOrder(m_ui->m_gbHttpAuthentication, m_ui->m_txtHttpUsername->lineEdit());
-
setTabOrder(m_ui->m_txtHttpUsername->lineEdit(), m_ui->m_txtHttpPassword->lineEdit());
setTabOrder(m_ui->m_txtHttpPassword->lineEdit(), m_ui->m_checkShowHttpPassword);
setTabOrder(m_ui->m_checkShowHttpPassword, m_ui->m_btnTestSetup);
@@ -99,6 +99,7 @@ void FormEditAccount::execForEdit(TtRssServiceRoot *existing_root) {
m_ui->m_txtUsername->lineEdit()->setText(existing_root->network()->username());
m_ui->m_txtPassword->lineEdit()->setText(existing_root->network()->password());
m_ui->m_txtUrl->lineEdit()->setText(existing_root->network()->url());
+ m_ui->m_checkServerSideUpdate->setChecked(existing_root->network()->forceServerSideUpdate());
exec();
}
@@ -120,6 +121,7 @@ void FormEditAccount::performTest() {
factory.setAuthIsUsed(m_ui->m_gbHttpAuthentication->isChecked());
factory.setAuthUsername(m_ui->m_txtHttpUsername->lineEdit()->text());
factory.setAuthPassword(m_ui->m_txtHttpPassword->lineEdit()->text());
+ factory.setForceServerSideUpdate(m_ui->m_checkServerSideUpdate->isChecked());
TtRssLoginResponse result = factory.login();
@@ -179,6 +181,7 @@ void FormEditAccount::onClickedOk() {
m_editableRoot->network()->setAuthIsUsed(m_ui->m_gbHttpAuthentication->isChecked());
m_editableRoot->network()->setAuthUsername(m_ui->m_txtHttpUsername->lineEdit()->text());
m_editableRoot->network()->setAuthPassword(m_ui->m_txtHttpPassword->lineEdit()->text());
+ m_editableRoot->network()->setForceServerSideUpdate(m_ui->m_checkServerSideUpdate->isChecked());
m_editableRoot->saveAccountDataToDatabase();
accept();
diff --git a/src/services/tt-rss/gui/formeditaccount.ui b/src/services/tt-rss/gui/formeditaccount.ui
index adbf578f3..670b544db 100755
--- a/src/services/tt-rss/gui/formeditaccount.ui
+++ b/src/services/tt-rss/gui/formeditaccount.ui
@@ -14,7 +14,7 @@
Dialog
- -
+
-
Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported.
@@ -65,7 +65,7 @@
- -
+
-
Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported.
@@ -80,7 +80,7 @@
true
- true
+ false
-
@@ -119,7 +119,7 @@
- -
+
-
@@ -132,7 +132,7 @@
- -
+
-
Qt::Horizontal
@@ -159,13 +159,23 @@
- -
+
-
&Test setup
+ -
+
+
+ Force execution of server-side update when updating feeds from RSS Guard
+
+
+ true
+
+
+
diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.cpp b/src/services/tt-rss/network/ttrssnetworkfactory.cpp
index 51fccd388..d14b0957b 100755
--- a/src/services/tt-rss/network/ttrssnetworkfactory.cpp
+++ b/src/services/tt-rss/network/ttrssnetworkfactory.cpp
@@ -31,7 +31,7 @@
TtRssNetworkFactory::TtRssNetworkFactory()
- : m_url(QString()), m_username(QString()), m_password(QString()), m_authIsUsed(false),
+ : m_url(QString()), m_username(QString()), m_password(QString()), m_forceServerSideUpdate(false), m_authIsUsed(false),
m_authUsername(QString()), m_authPassword(QString()), m_sessionId(QString()),
m_lastLoginTime(QDateTime()), m_lastError(QNetworkReply::NoError) {
}
@@ -145,14 +145,14 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
return result;
}
-TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, bool force_update, int limit, int skip,
+TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int limit, int skip,
bool show_content, bool include_attachments,
bool sanitize) {
QtJson::JsonObject json;
json["op"] = "getHeadlines";
json["sid"] = m_sessionId;
json["feed_id"] = feed_id;
- json["force_update"] = force_update;
+ json["force_update"] = m_forceServerSideUpdate;
json["limit"] = limit;
json["skip"] = skip;
json["show_content"] = show_content;
@@ -206,8 +206,16 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList
m_lastError = network_reply.first;
return result;
}
-bool TtRssNetworkFactory::authIsUsed() const
-{
+
+bool TtRssNetworkFactory::forceServerSideUpdate() const {
+ return m_forceServerSideUpdate;
+}
+
+void TtRssNetworkFactory::setForceServerSideUpdate(bool force_server_side_update) {
+ m_forceServerSideUpdate = force_server_side_update;
+}
+
+bool TtRssNetworkFactory::authIsUsed() const {
return m_authIsUsed;
}
@@ -408,7 +416,7 @@ QList TtRssGetHeadlinesResponse::messages() const {
QMap mapped = item.toMap();
Message message;
- message.m_author = mapped["author"].toString();
+ message.m_author = mapped["author"].toString();
message.m_isRead = !mapped["unread"].toBool();
message.m_isImportant = mapped["marked"].toBool();
message.m_contents = mapped["content"].toString();
diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.h b/src/services/tt-rss/network/ttrssnetworkfactory.h
index 55879056e..3d1cd2281 100755
--- a/src/services/tt-rss/network/ttrssnetworkfactory.h
+++ b/src/services/tt-rss/network/ttrssnetworkfactory.h
@@ -120,6 +120,10 @@ class TtRssNetworkFactory {
QString authPassword() const;
void setAuthPassword(const QString &auth_password);
+ bool forceServerSideUpdate() const;
+ void setForceServerSideUpdate(bool force_server_side_update);
+
+
// Metadata.
QDateTime lastLoginTime() const;
@@ -137,7 +141,7 @@ class TtRssNetworkFactory {
TtRssGetFeedsCategoriesResponse getFeedsCategories();
// Gets headlines (messages) from the server.
- TtRssGetHeadlinesResponse getHeadlines(int feed_id, bool force_update, int limit, int skip,
+ TtRssGetHeadlinesResponse getHeadlines(int feed_id, int limit, int skip,
bool show_content, bool include_attachments,
bool sanitize);
@@ -148,6 +152,7 @@ class TtRssNetworkFactory {
QString m_url;
QString m_username;
QString m_password;
+ bool m_forceServerSideUpdate;
bool m_authIsUsed;
QString m_authUsername;
QString m_authPassword;
diff --git a/src/services/tt-rss/ttrssfeed.cpp b/src/services/tt-rss/ttrssfeed.cpp
index f8ca2a0ca..2796008a1 100755
--- a/src/services/tt-rss/ttrssfeed.cpp
+++ b/src/services/tt-rss/ttrssfeed.cpp
@@ -91,7 +91,7 @@ int TtRssFeed::update() {
int skip = 0;
do {
- TtRssGetHeadlinesResponse headlines = serviceRoot()->network()->getHeadlines(customId(), true, limit, skip,
+ TtRssGetHeadlinesResponse headlines = serviceRoot()->network()->getHeadlines(customId(), limit, skip,
true, true, false);
if (serviceRoot()->network()->lastError() != QNetworkReply::NoError) {
diff --git a/src/services/tt-rss/ttrssserviceentrypoint.cpp b/src/services/tt-rss/ttrssserviceentrypoint.cpp
index 37a8d2dc9..14f50bcc9 100755
--- a/src/services/tt-rss/ttrssserviceentrypoint.cpp
+++ b/src/services/tt-rss/ttrssserviceentrypoint.cpp
@@ -87,12 +87,12 @@ QList TtRssServiceEntryPoint::initializeSubtree() {
root->setAccountId(query.value(0).toInt());
root->network()->setUsername(query.value(1).toString());
root->network()->setPassword(TextFactory::decrypt(query.value(2).toString()));
-
root->network()->setAuthIsUsed(query.value(3).toBool());
root->network()->setAuthUsername(query.value(4).toString());
root->network()->setAuthPassword(TextFactory::decrypt(query.value(5).toString()));
-
root->network()->setUrl(query.value(6).toString());
+ root->network()->setForceServerSideUpdate(query.value(7).toBool());
+
root->updateTitle();
roots.append(root);
}
diff --git a/src/services/tt-rss/ttrssserviceroot.cpp b/src/services/tt-rss/ttrssserviceroot.cpp
index 92e828b35..f1dd2d921 100755
--- a/src/services/tt-rss/ttrssserviceroot.cpp
+++ b/src/services/tt-rss/ttrssserviceroot.cpp
@@ -426,7 +426,7 @@ void TtRssServiceRoot::saveAccountDataToDatabase() {
query.prepare("UPDATE TtRssAccounts "
"SET username = :username, password = :password, url = :url, auth_protected = :auth_protected, "
- "auth_username = :auth_username, auth_password = :auth_password "
+ "auth_username = :auth_username, auth_password = :auth_password, force_update = :force_update "
"WHERE id = :id;");
query.bindValue(QSL(":username"), m_network->username());
query.bindValue(QSL(":password"), TextFactory::encrypt(m_network->password()));
@@ -434,6 +434,7 @@ void TtRssServiceRoot::saveAccountDataToDatabase() {
query.bindValue(QSL(":auth_protected"), m_network->authIsUsed());
query.bindValue(QSL(":auth_username"), m_network->authUsername());
query.bindValue(QSL(":auth_password"), TextFactory::encrypt(m_network->authPassword()));
+ query.bindValue(QSL(":force_update"), m_network->forceServerSideUpdate());
query.bindValue(QSL(":id"), accountId());
if (query.exec()) {
@@ -452,13 +453,26 @@ void TtRssServiceRoot::saveAccountDataToDatabase() {
}
int id_to_assign = query.value(0).toInt() + 1;
+ bool saved = true;
- bool saved = query.exec(QString("INSERT INTO Accounts (id, type) VALUES (%1, '%2');").arg(QString::number(id_to_assign),
- SERVICE_CODE_TT_RSS)) &&
- query.exec(QString("INSERT INTO TtRssAccounts (id, username, password, url) VALUES (%1, '%2', '%3', '%4');").arg(QString::number(id_to_assign),
- network()->username(),
- network()->password(),
- network()->url()));
+ query.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);"));
+ query.bindValue(QSL(":id"), id_to_assign);
+ query.bindValue(QSL(":type"), SERVICE_CODE_TT_RSS);
+
+ saved &= query.exec();
+
+ query.prepare("INSERT INTO TtRssAccounts (id, username, password, auth_protected, auth_username, auth_password, url, force_update) "
+ "VALUES (:id, :username, :password, :auth_protected, :auth_username, :auth_password, :url, :force_update);");
+ query.bindValue(QSL(":id"), id_to_assign);
+ query.bindValue(QSL(":username"), m_network->username());
+ query.bindValue(QSL(":password"), TextFactory::encrypt(m_network->password()));
+ query.bindValue(QSL(":auth_protected"), m_network->authIsUsed());
+ query.bindValue(QSL(":auth_username"), m_network->authUsername());
+ query.bindValue(QSL(":auth_password"), TextFactory::encrypt(m_network->authPassword()));
+ query.bindValue(QSL(":url"), m_network->url());
+ query.bindValue(QSL(":force_update"), m_network->forceServerSideUpdate());
+
+ saved &= query.exec();
if (saved) {
setId(id_to_assign);