diff --git a/localization/rssguard_cs.ts b/localization/rssguard_cs.ts index 9fe0dade6..8941e1d0e 100644 --- a/localization/rssguard_cs.ts +++ b/localization/rssguard_cs.ts @@ -864,7 +864,7 @@ or this functionality is not implemented yet. FormAccountDetails Edit account '%1' - Updavit účet '%1' + Upravit účet '%1' Network proxy diff --git a/src/librssguard/core/message.cpp b/src/librssguard/core/message.cpp index 3957aa250..d812041b4 100644 --- a/src/librssguard/core/message.cpp +++ b/src/librssguard/core/message.cpp @@ -65,7 +65,7 @@ QString Enclosures::encodeEnclosuresToString(const QList& enclosures) } Message::Message() { - m_title = m_url = m_author = m_contents = m_rawContents = m_feedId = m_customId = m_customHash = ""; + m_title = m_url = m_author = m_contents = m_rawContents = m_feedId = m_customId = m_customHash = QSL(""); m_enclosures = QList(); m_accountId = m_id = 0; m_score = 0.0; @@ -88,7 +88,7 @@ void Message::sanitize(const Feed* feed) { // Check if messages contain relative URLs and if they do, then replace them. if (m_url.startsWith(QL1S("//"))) { - m_url = QString(URI_SCHEME_HTTPS) + m_url.mid(2); + m_url = QSL(URI_SCHEME_HTTPS) + m_url.mid(2); } else if (QUrl(m_url).isRelative()) { QUrl base(feed->source()); diff --git a/src/librssguard/core/messagefilter.cpp b/src/librssguard/core/messagefilter.cpp index 9046de769..d3b3d52e3 100644 --- a/src/librssguard/core/messagefilter.cpp +++ b/src/librssguard/core/messagefilter.cpp @@ -59,10 +59,10 @@ void MessageFilter::initializeFilteringEngine(QJSEngine& engine, MessageObject* // Register the wrapper. auto js_object = engine.newQObject(message_wrapper); - auto js_meta_object = engine.newQMetaObject(&message_wrapper->staticMetaObject); + auto js_meta_object = engine.newQMetaObject(&MessageObject::staticMetaObject); engine.globalObject().setProperty(QSL("msg"), js_object); - engine.globalObject().setProperty(message_wrapper->staticMetaObject.className(), js_meta_object); + engine.globalObject().setProperty(MessageObject::staticMetaObject.className(), js_meta_object); // Register "utils". auto* utils = new FilterUtils(&engine); diff --git a/src/librssguard/core/messageobject.cpp b/src/librssguard/core/messageobject.cpp index ae5cefcd3..fa9819b09 100644 --- a/src/librssguard/core/messageobject.cpp +++ b/src/librssguard/core/messageobject.cpp @@ -9,7 +9,7 @@ #include MessageObject::MessageObject(QSqlDatabase* db, const QString& feed_custom_id, int account_id, - QList available_labels, bool is_new_message, QObject* parent) + const QList& available_labels, bool is_new_message, QObject* parent) : QObject(parent), m_db(db), m_feedCustomId(feed_custom_id), m_accountId(account_id), m_message(nullptr), m_availableLabels(available_labels), m_runningAfterFetching(is_new_message) {} @@ -26,31 +26,31 @@ bool MessageObject::isDuplicateWithAttribute(MessageObject::DuplicationAttribute // Now we construct the query according to parameter. if ((attribute_check& DuplicationAttributeCheck::SameTitle) == DuplicationAttributeCheck::SameTitle) { where_clauses.append(QSL("title = :title")); - bind_values.append({ ":title", title() }); + bind_values.append({ QSL(":title"), title() }); } if ((attribute_check& DuplicationAttributeCheck::SameUrl) == DuplicationAttributeCheck::SameUrl) { where_clauses.append(QSL("url = :url")); - bind_values.append({ ":url", url() }); + bind_values.append({ QSL(":url"), url() }); } if ((attribute_check& DuplicationAttributeCheck::SameAuthor) == DuplicationAttributeCheck::SameAuthor) { where_clauses.append(QSL("author = :author")); - bind_values.append({ ":author", author() }); + bind_values.append({ QSL(":author"), author() }); } if ((attribute_check& DuplicationAttributeCheck::SameDateCreated) == DuplicationAttributeCheck::SameDateCreated) { where_clauses.append(QSL("date_created = :date_created")); - bind_values.append({ ":date_created", created().toMSecsSinceEpoch() }); + bind_values.append({ QSL(":date_created"), created().toMSecsSinceEpoch() }); } where_clauses.append(QSL("account_id = :account_id")); - bind_values.append({ ":account_id", accountId() }); + bind_values.append({ QSL(":account_id"), accountId() }); if ((attribute_check& DuplicationAttributeCheck::AllFeedsSameAccount) != DuplicationAttributeCheck::AllFeedsSameAccount) { // Limit to current feed. where_clauses.append(QSL("feed = :feed")); - bind_values.append({ ":feed", feedCustomId() }); + bind_values.append({ QSL(":feed"), feedCustomId() }); } QString full_query = QSL("SELECT COUNT(*) FROM Messages WHERE ") + where_clauses.join(QSL(" AND ")) + QSL(";"); @@ -87,7 +87,7 @@ bool MessageObject::isDuplicateWithAttribute(MessageObject::DuplicationAttribute return false; } -bool MessageObject::assignLabel(QString label_custom_id) const { +bool MessageObject::assignLabel(const QString& label_custom_id) const { if (m_message->m_id <= 0 && m_message->m_customId.isEmpty()) { return false; } @@ -108,7 +108,7 @@ bool MessageObject::assignLabel(QString label_custom_id) const { } } -bool MessageObject::deassignLabel(QString label_custom_id) const { +bool MessageObject::deassignLabel(const QString& label_custom_id) const { if (m_message->m_id <= 0 && m_message->m_customId.isEmpty()) { return false; } diff --git a/src/librssguard/core/messageobject.h b/src/librssguard/core/messageobject.h index acbffa07c..ba83e0aa2 100644 --- a/src/librssguard/core/messageobject.h +++ b/src/librssguard/core/messageobject.h @@ -64,7 +64,7 @@ class MessageObject : public QObject { explicit MessageObject(QSqlDatabase* db, const QString& feed_custom_id, int account_id, - QList available_labels, + const QList& available_labels, bool is_new_message, QObject* parent = nullptr); @@ -77,11 +77,11 @@ class MessageObject : public QObject { // Adds given label to list of assigned labels to this message. // Returns true if label was assigned now or if the message already has it assigned. - Q_INVOKABLE bool assignLabel(QString label_custom_id) const; + Q_INVOKABLE bool assignLabel(const QString& label_custom_id) const; // Removes given label from list of assigned labels of this message. // Returns true if label was now removed or if it is not assigned to the message at all. - Q_INVOKABLE bool deassignLabel(QString label_custom_id) const; + Q_INVOKABLE bool deassignLabel(const QString& label_custom_id) const; // Returns list of assigned and available messages. QList assignedLabels() const; diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp index a2646fb12..ca59110e6 100644 --- a/src/librssguard/core/messagesmodel.cpp +++ b/src/librssguard/core/messagesmodel.cpp @@ -41,8 +41,8 @@ void MessagesModel::setupIcons() { m_unreadIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread")); m_enclosuresIcon = qApp->icons()->fromTheme(QSL("mail-attachment")); - for (double i = MSG_SCORE_MIN; i <= MSG_SCORE_MAX; i += 10.0) { - m_scoreIcons.append(generateIconForScore(i)); + for (int i = int(MSG_SCORE_MIN); i <= int(MSG_SCORE_MAX); i += 10) { + m_scoreIcons.append(generateIconForScore(double(i))); } } @@ -271,8 +271,8 @@ Qt::ItemFlags MessagesModel::flags(const QModelIndex& index) const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemNeverHasChildren; } -QList MessagesModel::messagesAt(QList row_indices) const { - QList msgs; +QList MessagesModel::messagesAt(const QList& row_indices) const { + QList msgs; msgs.reserve(row_indices.size()); for (int idx : row_indices) { msgs << messageAt(idx); @@ -537,8 +537,8 @@ bool MessagesModel::switchMessageImportance(int row_index) { } bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages) { - QStringList message_ids; - QList> message_states; + QStringList message_ids; message_ids.reserve(messages.size()); + QList> message_states; message_states.reserve(messages.size()); // Obtain IDs of all desired messages. for (const QModelIndex& message : messages) { @@ -572,8 +572,8 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages } bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) { - QStringList message_ids; - QList msgs; + QStringList message_ids; message_ids.reserve(messages.size()); + QList msgs; msgs.reserve(messages.size()); // Obtain IDs of all desired messages. for (const QModelIndex& message : messages) { @@ -614,8 +614,8 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) { } bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootItem::ReadStatus read) { - QStringList message_ids; - QList msgs; + QStringList message_ids; message_ids.reserve(messages.size()); + QList msgs; msgs.reserve(messages.size()); // Obtain IDs of all desired messages. for (const QModelIndex& message : messages) { @@ -641,8 +641,8 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootIt } bool MessagesModel::setBatchMessagesRestored(const QModelIndexList& messages) { - QStringList message_ids; - QList msgs; + QStringList message_ids; message_ids.reserve(messages.size()); + QList msgs; msgs.reserve(messages.size()); // Obtain IDs of all desired messages. for (const QModelIndex& message : messages) { diff --git a/src/librssguard/core/messagesmodel.h b/src/librssguard/core/messagesmodel.h index 205411706..2c3b5d938 100644 --- a/src/librssguard/core/messagesmodel.h +++ b/src/librssguard/core/messagesmodel.h @@ -45,7 +45,7 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { // Returns message at given index. - QList messagesAt(QList row_indices) const; + QList messagesAt(const QList& row_indices) const; Message messageAt(int row_index) const; int messageId(int row_index) const; RootItem::Importance messageImportance(int row_index) const; diff --git a/src/librssguard/core/messagesmodelsqllayer.cpp b/src/librssguard/core/messagesmodelsqllayer.cpp index 3f094b589..1a4c7dbc4 100644 --- a/src/librssguard/core/messagesmodelsqllayer.cpp +++ b/src/librssguard/core/messagesmodelsqllayer.cpp @@ -15,24 +15,24 @@ MessagesModelSqlLayer::MessagesModelSqlLayer() m_fieldNames = DatabaseQueries::messageTableAttributes(false); // Used in : SELECT ... FROM ... ORDER BY DESC, ASC; - m_orderByNames[MSG_DB_ID_INDEX] = "Messages.id"; - m_orderByNames[MSG_DB_READ_INDEX] = "Messages.is_read"; - m_orderByNames[MSG_DB_IMPORTANT_INDEX] = "Messages.is_important"; - m_orderByNames[MSG_DB_DELETED_INDEX] = "Messages.is_deleted"; - m_orderByNames[MSG_DB_PDELETED_INDEX] = "Messages.is_pdeleted"; - m_orderByNames[MSG_DB_FEED_CUSTOM_ID_INDEX] = "Messages.feed"; - m_orderByNames[MSG_DB_TITLE_INDEX] = "Messages.title"; - m_orderByNames[MSG_DB_URL_INDEX] = "Messages.url"; - m_orderByNames[MSG_DB_AUTHOR_INDEX] = "Messages.author"; - m_orderByNames[MSG_DB_DCREATED_INDEX] = "Messages.date_created"; - m_orderByNames[MSG_DB_CONTENTS_INDEX] = "Messages.contents"; - m_orderByNames[MSG_DB_ENCLOSURES_INDEX] = "Messages.enclosures"; - m_orderByNames[MSG_DB_SCORE_INDEX] = "Messages.score"; - m_orderByNames[MSG_DB_ACCOUNT_ID_INDEX] = "Messages.account_id"; - m_orderByNames[MSG_DB_CUSTOM_ID_INDEX] = "Messages.custom_id"; - m_orderByNames[MSG_DB_CUSTOM_HASH_INDEX] = "Messages.custom_hash"; - m_orderByNames[MSG_DB_FEED_TITLE_INDEX] = "Feeds.title"; - m_orderByNames[MSG_DB_HAS_ENCLOSURES] = "has_enclosures"; + m_orderByNames[MSG_DB_ID_INDEX] = QSL("Messages.id"); + m_orderByNames[MSG_DB_READ_INDEX] = QSL("Messages.is_read"); + m_orderByNames[MSG_DB_IMPORTANT_INDEX] = QSL("Messages.is_important"); + m_orderByNames[MSG_DB_DELETED_INDEX] = QSL("Messages.is_deleted"); + m_orderByNames[MSG_DB_PDELETED_INDEX] = QSL("Messages.is_pdeleted"); + m_orderByNames[MSG_DB_FEED_CUSTOM_ID_INDEX] = QSL("Messages.feed"); + m_orderByNames[MSG_DB_TITLE_INDEX] = QSL("Messages.title"); + m_orderByNames[MSG_DB_URL_INDEX] = QSL("Messages.url"); + m_orderByNames[MSG_DB_AUTHOR_INDEX] = QSL("Messages.author"); + m_orderByNames[MSG_DB_DCREATED_INDEX] = QSL("Messages.date_created"); + m_orderByNames[MSG_DB_CONTENTS_INDEX] = QSL("Messages.contents"); + m_orderByNames[MSG_DB_ENCLOSURES_INDEX] = QSL("Messages.enclosures"); + m_orderByNames[MSG_DB_SCORE_INDEX] = QSL("Messages.score"); + m_orderByNames[MSG_DB_ACCOUNT_ID_INDEX] = QSL("Messages.account_id"); + m_orderByNames[MSG_DB_CUSTOM_ID_INDEX] = QSL("Messages.custom_id"); + m_orderByNames[MSG_DB_CUSTOM_HASH_INDEX] = QSL("Messages.custom_hash"); + m_orderByNames[MSG_DB_FEED_TITLE_INDEX] = QSL("Feeds.title"); + m_orderByNames[MSG_DB_HAS_ENCLOSURES] = QSL("has_enclosures"); m_numericColumns << MSG_DB_ID_INDEX << MSG_DB_READ_INDEX << MSG_DB_DELETED_INDEX << MSG_DB_PDELETED_INDEX << MSG_DB_IMPORTANT_INDEX << MSG_DB_ACCOUNT_ID_INDEX << MSG_DB_DCREATED_INDEX diff --git a/src/librssguard/core/messagesproxymodel.cpp b/src/librssguard/core/messagesproxymodel.cpp index f051aeec1..50f80b723 100644 --- a/src/librssguard/core/messagesproxymodel.cpp +++ b/src/librssguard/core/messagesproxymodel.cpp @@ -211,7 +211,7 @@ void MessagesProxyModel::sort(int column, Qt::SortOrder order) { } QModelIndexList MessagesProxyModel::mapListToSource(const QModelIndexList& indexes) const { - QModelIndexList source_indexes; + QModelIndexList source_indexes; source_indexes.reserve(indexes.size()); for (const QModelIndex& index : indexes) { source_indexes << mapToSource(index); diff --git a/src/librssguard/database/databasecleaner.cpp b/src/librssguard/database/databasecleaner.cpp index 81df6b2c2..6265a6d25 100644 --- a/src/librssguard/database/databasecleaner.cpp +++ b/src/librssguard/database/databasecleaner.cpp @@ -10,7 +10,7 @@ DatabaseCleaner::DatabaseCleaner(QObject* parent) : QObject(parent) {} -void DatabaseCleaner::purgeDatabaseData(const CleanerOrders& which_data) { +void DatabaseCleaner::purgeDatabaseData(CleanerOrders which_data) { qDebugNN << LOGSEC_DB << "Performing database cleanup in thread: '" << QThread::currentThreadId() << "'."; // Inform everyone about the start of the process. diff --git a/src/librssguard/database/databasecleaner.h b/src/librssguard/database/databasecleaner.h index cefcce221..790c52fc7 100644 --- a/src/librssguard/database/databasecleaner.h +++ b/src/librssguard/database/databasecleaner.h @@ -29,7 +29,7 @@ class DatabaseCleaner : public QObject { void purgeFinished(bool result); public slots: - void purgeDatabaseData(const CleanerOrders& which_data); + void purgeDatabaseData(CleanerOrders which_data); private: bool purgeStarredMessages(const QSqlDatabase& database); diff --git a/src/librssguard/database/databasedriver.cpp b/src/librssguard/database/databasedriver.cpp index a543f7a4c..06a792270 100644 --- a/src/librssguard/database/databasedriver.cpp +++ b/src/librssguard/database/databasedriver.cpp @@ -18,7 +18,7 @@ QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder, QStringList statements; QString next_file = base_sql_folder + QDir::separator() + sql_file; QString sql_script = QString::fromUtf8(IOFactory::readFile(next_file)); - QStringList new_statements = sql_script.split(APP_DB_COMMENT_SPLIT, + QStringList new_statements = sql_script.split(QSL(APP_DB_COMMENT_SPLIT), #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 Qt::SplitBehaviorFlags::SkipEmptyParts); #else @@ -26,13 +26,13 @@ QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder, #endif for (int i = 0; i < new_statements.size(); i++) { - if (new_statements.at(i).startsWith(APP_DB_INCLUDE_PLACEHOLDER)) { + if (new_statements.at(i).startsWith(QSL(APP_DB_INCLUDE_PLACEHOLDER))) { // We include another file. QString included_file_name = new_statements.at(i).mid(QSL(APP_DB_INCLUDE_PLACEHOLDER).size() + 1); QString included_file = base_sql_folder + QDir::separator() + included_file_name; QString included_sql_script = QString::fromUtf8(IOFactory::readFile(included_file)); - QStringList included_statements = included_sql_script.split(APP_DB_COMMENT_SPLIT, + QStringList included_statements = included_sql_script.split(QSL(APP_DB_COMMENT_SPLIT), #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 Qt::SplitBehaviorFlags::SkipEmptyParts); #else @@ -46,9 +46,9 @@ QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder, } } - statements.replaceInStrings(APP_DB_NAME_PLACEHOLDER, database_name); - statements.replaceInStrings(APP_DB_AUTO_INC_PRIM_KEY_PLACEHOLDER, autoIncrementPrimaryKey()); - statements.replaceInStrings(APP_DB_BLOB_PLACEHOLDER, blob()); + statements.replaceInStrings(QSL(APP_DB_NAME_PLACEHOLDER), database_name); + statements.replaceInStrings(QSL(APP_DB_AUTO_INC_PRIM_KEY_PLACEHOLDER), autoIncrementPrimaryKey()); + statements.replaceInStrings(QSL(APP_DB_BLOB_PLACEHOLDER), blob()); return statements; } diff --git a/src/librssguard/database/databasefactory.cpp b/src/librssguard/database/databasefactory.cpp index 262470db0..98bd56311 100644 --- a/src/librssguard/database/databasefactory.cpp +++ b/src/librssguard/database/databasefactory.cpp @@ -31,7 +31,7 @@ void DatabaseFactory::determineDriver() { new SqliteDriver(qApp->settings()->value(GROUP(Database), SETTING(Database::UseInMemory)).toBool(), this) }; - if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) { + if (QSqlDatabase::isDriverAvailable(QSL(APP_DB_MYSQL_DRIVER))) { m_allDbDrivers.append(new MariaDbDriver(this)); } diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 3d033510a..176d303e2 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -16,24 +16,27 @@ QMap DatabaseQueries::messageTableAttributes(bool only_msg_table) { QMap field_names; - field_names[MSG_DB_ID_INDEX] = "Messages.id"; - field_names[MSG_DB_READ_INDEX] = "Messages.is_read"; - field_names[MSG_DB_IMPORTANT_INDEX] = "Messages.is_important"; - field_names[MSG_DB_DELETED_INDEX] = "Messages.is_deleted"; - field_names[MSG_DB_PDELETED_INDEX] = "Messages.is_pdeleted"; - field_names[MSG_DB_FEED_CUSTOM_ID_INDEX] = "Messages.feed"; - field_names[MSG_DB_TITLE_INDEX] = "Messages.title"; - field_names[MSG_DB_URL_INDEX] = "Messages.url"; - field_names[MSG_DB_AUTHOR_INDEX] = "Messages.author"; - field_names[MSG_DB_DCREATED_INDEX] = "Messages.date_created"; - field_names[MSG_DB_CONTENTS_INDEX] = "Messages.contents"; - field_names[MSG_DB_ENCLOSURES_INDEX] = "Messages.enclosures"; - field_names[MSG_DB_SCORE_INDEX] = "Messages.score"; - field_names[MSG_DB_ACCOUNT_ID_INDEX] = "Messages.account_id"; - field_names[MSG_DB_CUSTOM_ID_INDEX] = "Messages.custom_id"; - field_names[MSG_DB_CUSTOM_HASH_INDEX] = "Messages.custom_hash"; - field_names[MSG_DB_FEED_TITLE_INDEX] = only_msg_table ? "Messages.feed" : "Feeds.title"; - field_names[MSG_DB_HAS_ENCLOSURES] = "CASE WHEN length(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures"; + field_names[MSG_DB_ID_INDEX] = QSL("Messages.id"); + field_names[MSG_DB_READ_INDEX] = QSL("Messages.is_read"); + field_names[MSG_DB_IMPORTANT_INDEX] = QSL("Messages.is_important"); + field_names[MSG_DB_DELETED_INDEX] = QSL("Messages.is_deleted"); + field_names[MSG_DB_PDELETED_INDEX] = QSL("Messages.is_pdeleted"); + field_names[MSG_DB_FEED_CUSTOM_ID_INDEX] = QSL("Messages.feed"); + field_names[MSG_DB_TITLE_INDEX] = QSL("Messages.title"); + field_names[MSG_DB_URL_INDEX] = QSL("Messages.url"); + field_names[MSG_DB_AUTHOR_INDEX] = QSL("Messages.author"); + field_names[MSG_DB_DCREATED_INDEX] = QSL("Messages.date_created"); + field_names[MSG_DB_CONTENTS_INDEX] = QSL("Messages.contents"); + field_names[MSG_DB_ENCLOSURES_INDEX] = QSL("Messages.enclosures"); + field_names[MSG_DB_SCORE_INDEX] = QSL("Messages.score"); + field_names[MSG_DB_ACCOUNT_ID_INDEX] = QSL("Messages.account_id"); + field_names[MSG_DB_CUSTOM_ID_INDEX] = QSL("Messages.custom_id"); + field_names[MSG_DB_CUSTOM_HASH_INDEX] = QSL("Messages.custom_hash"); + field_names[MSG_DB_FEED_TITLE_INDEX] = only_msg_table ? QSL("Messages.feed") : QSL("Feeds.title"); + field_names[MSG_DB_HAS_ENCLOSURES] = QSL("CASE WHEN length(Messages.enclosures) > 10 " + "THEN 'true' " + "ELSE 'false' " + "END AS has_enclosures"); return field_names; } @@ -63,7 +66,8 @@ bool DatabaseQueries::isLabelAssignedToMessage(const QSqlDatabase& db, Label* la QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("SELECT COUNT(*) FROM LabelsInMessages WHERE label = :label AND message = :message AND account_id = :account_id;"); + q.prepare(QSL("SELECT COUNT(*) FROM LabelsInMessages " + "WHERE label = :label AND message = :message AND account_id = :account_id;")); q.bindValue(QSL(":label"), label->customId()); q.bindValue(QSL(":message"), msg.m_customId); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); @@ -77,7 +81,8 @@ bool DatabaseQueries::deassignLabelFromMessage(const QSqlDatabase& db, Label* la QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("DELETE FROM LabelsInMessages WHERE label = :label AND message = :message AND account_id = :account_id;"); + q.prepare(QSL("DELETE FROM LabelsInMessages " + "WHERE label = :label AND message = :message AND account_id = :account_id;")); q.bindValue(QSL(":label"), label->customId()); q.bindValue(QSL(":message"), msg.m_customId.isEmpty() ? QString::number(msg.m_id) : msg.m_customId); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); @@ -89,7 +94,8 @@ bool DatabaseQueries::assignLabelToMessage(const QSqlDatabase& db, Label* label, QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("DELETE FROM LabelsInMessages WHERE label = :label AND message = :message AND account_id = :account_id;"); + q.prepare(QSL("DELETE FROM LabelsInMessages " + "WHERE label = :label AND message = :message AND account_id = :account_id;")); q.bindValue(QSL(":label"), label->customId()); q.bindValue(QSL(":message"), msg.m_customId.isEmpty() ? QString::number(msg.m_id) : msg.m_customId); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); @@ -97,7 +103,8 @@ bool DatabaseQueries::assignLabelToMessage(const QSqlDatabase& db, Label* label, auto succ = q.exec(); if (succ) { - q.prepare("INSERT INTO LabelsInMessages (label, message, account_id) VALUES (:label, :message, :account_id);"); + q.prepare(QSL("INSERT INTO LabelsInMessages (label, message, account_id) " + "VALUES (:label, :message, :account_id);")); q.bindValue(QSL(":label"), label->customId()); q.bindValue(QSL(":message"), msg.m_customId.isEmpty() ? QString::number(msg.m_id) : msg.m_customId); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); @@ -142,8 +149,7 @@ QList DatabaseQueries::getLabelsForAccount(const QSqlDatabase& db, int a QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("SELECT * FROM Labels WHERE account_id = :account_id;"); - + q.prepare(QSL("SELECT * FROM Labels WHERE account_id = :account_id;")); q.bindValue(QSL(":account_id"), account_id); if (q.exec()) { @@ -167,7 +173,7 @@ QList DatabaseQueries::getLabelsForMessage(const QSqlDatabase& db, QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("SELECT DISTINCT label FROM LabelsInMessages WHERE message = :message AND account_id = :account_id;"); + q.prepare(QSL("SELECT DISTINCT label FROM LabelsInMessages WHERE message = :message AND account_id = :account_id;")); q.bindValue(QSL(":account_id"), msg.m_accountId); q.bindValue(QSL(":message"), msg.m_customId.isEmpty() ? QString::number(msg.m_id) : msg.m_customId); @@ -194,8 +200,8 @@ bool DatabaseQueries::updateLabel(const QSqlDatabase& db, Label* label) { QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Labels SET name = :name, color = :color " - "WHERE id = :id AND account_id = :account_id;"); + q.prepare(QSL("UPDATE Labels SET name = :name, color = :color " + "WHERE id = :id AND account_id = :account_id;")); q.bindValue(QSL(":name"), label->title()); q.bindValue(QSL(":color"), label->color().name()); q.bindValue(QSL(":id"), label->id()); @@ -210,12 +216,12 @@ bool DatabaseQueries::deleteLabel(const QSqlDatabase& db, Label* label) { QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("DELETE FROM Labels WHERE id = :id AND account_id = :account_id;"); + q.prepare(QSL("DELETE FROM Labels WHERE id = :id AND account_id = :account_id;")); q.bindValue(QSL(":id"), label->id()); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); if (q.exec()) { - q.prepare("DELETE FROM LabelsInMessages WHERE label = :custom_id AND account_id = :account_id;"); + q.prepare(QSL("DELETE FROM LabelsInMessages WHERE label = :custom_id AND account_id = :account_id;")); q.bindValue(QSL(":custom_id"), label->customId()); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); @@ -230,8 +236,8 @@ bool DatabaseQueries::createLabel(const QSqlDatabase& db, Label* label, int acco QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("INSERT INTO Labels (name, color, custom_id, account_id) " - "VALUES (:name, :color, :custom_id, :account_id);"); + q.prepare(QSL("INSERT INTO Labels (name, color, custom_id, account_id) " + "VALUES (:name, :color, :custom_id, :account_id);")); q.bindValue(QSL(":name"), label->title()); q.bindValue(QSL(":color"), label->color().name()); q.bindValue(QSL(":custom_id"), label->customId()); @@ -249,7 +255,7 @@ bool DatabaseQueries::createLabel(const QSqlDatabase& db, Label* label, int acco } // Fixup missing custom IDs. - q.prepare("UPDATE Labels SET custom_id = id WHERE custom_id IS NULL OR custom_id = '';"); + q.prepare(QSL("UPDATE Labels SET custom_id = id WHERE custom_id IS NULL OR custom_id = '';")); return q.exec() && res; } @@ -258,12 +264,12 @@ bool DatabaseQueries::markLabelledMessagesReadUnread(const QSqlDatabase& db, Lab QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Messages SET is_read = :read " - "WHERE " - " is_deleted = 0 AND " - " is_pdeleted = 0 AND " - " account_id = :account_id AND " - " EXISTS (SELECT * FROM LabelsInMessages WHERE LabelsInMessages.label = :label AND Messages.account_id = LabelsInMessages.account_id AND Messages.custom_id = LabelsInMessages.message);"); + q.prepare(QSL("UPDATE Messages SET is_read = :read " + "WHERE " + " is_deleted = 0 AND " + " is_pdeleted = 0 AND " + " account_id = :account_id AND " + " EXISTS (SELECT * FROM LabelsInMessages WHERE LabelsInMessages.label = :label AND Messages.account_id = LabelsInMessages.account_id AND Messages.custom_id = LabelsInMessages.message);")); q.bindValue(QSL(":read"), read == RootItem::ReadStatus::Read ? 1 : 0); q.bindValue(QSL(":account_id"), label->getParentServiceRoot()->accountId()); q.bindValue(QSL(":label"), label->customId()); @@ -275,8 +281,8 @@ bool DatabaseQueries::markImportantMessagesReadUnread(const QSqlDatabase& db, in QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Messages SET is_read = :read " - "WHERE is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("UPDATE Messages SET is_read = :read " + "WHERE is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); q.bindValue(QSL(":read"), read == RootItem::ReadStatus::Read ? 1 : 0); q.bindValue(QSL(":account_id"), account_id); return q.exec(); @@ -286,8 +292,8 @@ bool DatabaseQueries::markUnreadMessagesRead(const QSqlDatabase& db, int account QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Messages SET is_read = :read " - "WHERE is_read = 0 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("UPDATE Messages SET is_read = :read " + "WHERE is_read = 0 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); q.bindValue(QSL(":read"), 1); q.bindValue(QSL(":account_id"), account_id); return q.exec(); @@ -323,8 +329,8 @@ bool DatabaseQueries::markFeedsReadUnread(const QSqlDatabase& db, const QStringL QSqlQuery q(db); q.setForwardOnly(true); - q.prepare(QString("UPDATE Messages SET is_read = :read " - "WHERE feed IN (%1) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;").arg(ids.join(QSL(", ")))); + q.prepare(QSL("UPDATE Messages SET is_read = :read " + "WHERE feed IN (%1) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;").arg(ids.join(QSL(", ")))); q.bindValue(QSL(":read"), read == RootItem::ReadStatus::Read ? 1 : 0); q.bindValue(QSL(":account_id"), account_id); return q.exec(); @@ -334,8 +340,8 @@ bool DatabaseQueries::markBinReadUnread(const QSqlDatabase& db, int account_id, QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Messages SET is_read = :read " - "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("UPDATE Messages SET is_read = :read " + "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;")); q.bindValue(QSL(":read"), read == RootItem::ReadStatus::Read ? 1 : 0); q.bindValue(QSL(":account_id"), account_id); return q.exec(); @@ -355,31 +361,31 @@ bool DatabaseQueries::switchMessagesImportance(const QSqlDatabase& db, const QSt QSqlQuery q(db); q.setForwardOnly(true); - return q.exec(QString(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);")).arg(ids.join(QSL(", ")))); + return q.exec(QSL("UPDATE Messages SET is_important = NOT is_important WHERE id IN (%1);").arg(ids.join(QSL(", ")))); } bool DatabaseQueries::permanentlyDeleteMessages(const QSqlDatabase& db, const QStringList& ids) { QSqlQuery q(db); q.setForwardOnly(true); - return q.exec(QString(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);")).arg(ids.join(QSL(", ")))); + return q.exec(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE id IN (%1);").arg(ids.join(QSL(", ")))); } bool DatabaseQueries::deleteOrRestoreMessagesToFromBin(const QSqlDatabase& db, const QStringList& ids, bool deleted) { QSqlQuery q(db); q.setForwardOnly(true); - return q.exec(QString(QSL("UPDATE Messages SET is_deleted = %2, is_pdeleted = %3 WHERE id IN (%1);")).arg(ids.join(QSL(", ")), - QString::number(deleted ? 1 : 0), - QString::number(0))); + return q.exec(QSL("UPDATE Messages SET is_deleted = %2, is_pdeleted = %3 WHERE id IN (%1);").arg(ids.join(QSL(", ")), + QString::number(deleted ? 1 : 0), + QString::number(0))); } bool DatabaseQueries::restoreBin(const QSqlDatabase& db, int account_id) { QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("UPDATE Messages SET is_deleted = 0 " - "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("UPDATE Messages SET is_deleted = 0 " + "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;")); q.bindValue(QSL(":account_id"), account_id); return q.exec(); } @@ -388,7 +394,7 @@ bool DatabaseQueries::purgeMessage(const QSqlDatabase& db, int message_id) { QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("DELETE FROM Messages WHERE id = :id;"); + q.prepare(QSL("DELETE FROM Messages WHERE id = :id;")); q.bindValue(QSL(":id"), message_id); return q.exec(); @@ -410,7 +416,8 @@ bool DatabaseQueries::purgeReadMessages(const QSqlDatabase& db) { QSqlQuery q(db); q.setForwardOnly(true); - q.prepare(QSL("DELETE FROM Messages WHERE is_important = :is_important AND is_deleted = :is_deleted AND is_read = :is_read;")); + q.prepare(QSL("DELETE FROM Messages " + "WHERE is_important = :is_important AND is_deleted = :is_deleted AND is_read = :is_read;")); q.bindValue(QSL(":is_read"), 1); // Remove only messages which are NOT in recycle bin. @@ -458,14 +465,14 @@ QMap> DatabaseQueries::getMessageCountsForCategory(cons q.setForwardOnly(true); if (only_total_counts) { - q.prepare("SELECT feed, sum((is_read + 1) % 2), count(*) FROM Messages " - "WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " - "GROUP BY feed;"); + q.prepare(QSL("SELECT feed, sum((is_read + 1) % 2), count(*) FROM Messages " + "WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " + "GROUP BY feed;")); } else { - q.prepare("SELECT feed, sum((is_read + 1) % 2) FROM Messages " - "WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " - "GROUP BY feed;"); + q.prepare(QSL("SELECT feed, sum((is_read + 1) % 2) FROM Messages " + "WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " + "GROUP BY feed;")); } q.bindValue(QSL(":category"), custom_id); @@ -507,14 +514,14 @@ QMap> DatabaseQueries::getMessageCountsForAccount(const q.setForwardOnly(true); if (only_total_counts) { - q.prepare("SELECT feed, sum((is_read + 1) % 2), count(*) FROM Messages " - "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " - "GROUP BY feed;"); + q.prepare(QSL("SELECT feed, sum((is_read + 1) % 2), count(*) FROM Messages " + "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " + "GROUP BY feed;")); } else { - q.prepare("SELECT feed, sum((is_read + 1) % 2) FROM Messages " - "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " - "GROUP BY feed;"); + q.prepare(QSL("SELECT feed, sum((is_read + 1) % 2) FROM Messages " + "WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id " + "GROUP BY feed;")); } q.bindValue(QSL(":account_id"), account_id); @@ -554,12 +561,12 @@ int DatabaseQueries::getMessageCountsForFeed(const QSqlDatabase& db, const QStri q.setForwardOnly(true); if (only_total_counts) { - q.prepare("SELECT count(*) FROM Messages " - "WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); } else { - q.prepare("SELECT count(*) FROM Messages " - "WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND is_read = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND is_read = 0 AND account_id = :account_id;")); } q.bindValue(QSL(":feed"), feed_custom_id); @@ -587,20 +594,20 @@ int DatabaseQueries::getMessageCountsForLabel(const QSqlDatabase& db, Label* lab q.setForwardOnly(true); if (only_total_counts) { - q.prepare("SELECT COUNT(*) FROM Messages " - "INNER JOIN LabelsInMessages " - "ON " - " Messages.is_pdeleted = 0 AND Messages.is_deleted = 0 AND " - " LabelsInMessages.account_id = :account_id AND LabelsInMessages.account_id = Messages.account_id AND " - " LabelsInMessages.label = :label AND LabelsInMessages.message = Messages.custom_id;"); + q.prepare(QSL("SELECT COUNT(*) FROM Messages " + "INNER JOIN LabelsInMessages " + "ON " + " Messages.is_pdeleted = 0 AND Messages.is_deleted = 0 AND " + " LabelsInMessages.account_id = :account_id AND LabelsInMessages.account_id = Messages.account_id AND " + " LabelsInMessages.label = :label AND LabelsInMessages.message = Messages.custom_id;")); } else { - q.prepare("SELECT COUNT(*) FROM Messages " - "INNER JOIN LabelsInMessages " - "ON " - " Messages.is_pdeleted = 0 AND Messages.is_deleted = 0 AND Messages.is_read = 0 AND " - " LabelsInMessages.account_id = :account_id AND LabelsInMessages.account_id = Messages.account_id AND " - " LabelsInMessages.label = :label AND LabelsInMessages.message = Messages.custom_id;"); + q.prepare(QSL("SELECT COUNT(*) FROM Messages " + "INNER JOIN LabelsInMessages " + "ON " + " Messages.is_pdeleted = 0 AND Messages.is_deleted = 0 AND Messages.is_read = 0 AND " + " LabelsInMessages.account_id = :account_id AND LabelsInMessages.account_id = Messages.account_id AND " + " LabelsInMessages.label = :label AND LabelsInMessages.message = Messages.custom_id;")); } q.bindValue(QSL(":account_id"), account_id); @@ -628,12 +635,12 @@ int DatabaseQueries::getImportantMessageCounts(const QSqlDatabase& db, int accou q.setForwardOnly(true); if (only_total_counts) { - q.prepare("SELECT count(*) FROM Messages " - "WHERE is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); } else { - q.prepare("SELECT count(*) FROM Messages " - "WHERE is_read = 0 AND is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE is_read = 0 AND is_important = 1 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); } q.bindValue(QSL(":account_id"), account_id); @@ -658,8 +665,8 @@ int DatabaseQueries::getUnreadMessageCounts(const QSqlDatabase& db, int account_ QSqlQuery q(db); q.setForwardOnly(true); - q.prepare("SELECT count(*) FROM Messages " - "WHERE is_read = 0 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE is_read = 0 AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")); q.bindValue(QSL(":account_id"), account_id); @@ -685,12 +692,12 @@ int DatabaseQueries::getMessageCountsForBin(const QSqlDatabase& db, int account_ q.setForwardOnly(true); if (including_total_counts) { - q.prepare("SELECT count(*) FROM Messages " - "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;")); } else { - q.prepare("SELECT count(*) FROM Messages " - "WHERE is_read = 0 AND is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"); + q.prepare(QSL("SELECT count(*) FROM Messages " + "WHERE is_read = 0 AND is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;")); } q.bindValue(QSL(":account_id"), account_id); @@ -1054,37 +1061,37 @@ QPair DatabaseQueries::updateMessages(QSqlDatabase db, // 4) they have same TITLE. // NOTE: This only applies to messages from standard RSS/ATOM/JSON feeds without ID/GUID. query_select_with_url.setForwardOnly(true); - query_select_with_url.prepare("SELECT id, date_created, is_read, is_important, contents, feed FROM Messages " - "WHERE feed = :feed AND title = :title AND url = :url AND author = :author AND account_id = :account_id;"); + query_select_with_url.prepare(QSL("SELECT id, date_created, is_read, is_important, contents, feed FROM Messages " + "WHERE feed = :feed AND title = :title AND url = :url AND author = :author AND account_id = :account_id;")); // When we have custom ID of the message which is service-specific (synchronized services). query_select_with_custom_id.setForwardOnly(true); - query_select_with_custom_id.prepare("SELECT id, date_created, is_read, is_important, contents, feed, title FROM Messages " - "WHERE custom_id = :custom_id AND account_id = :account_id;"); + query_select_with_custom_id.prepare(QSL("SELECT id, date_created, is_read, is_important, contents, feed, title FROM Messages " + "WHERE custom_id = :custom_id AND account_id = :account_id;")); // We have custom ID of message, but it is feed-specific not service-specific (standard RSS/ATOM/JSON). query_select_with_custom_id_for_feed.setForwardOnly(true); - query_select_with_custom_id_for_feed.prepare("SELECT id, date_created, is_read, is_important, contents, title FROM Messages " - "WHERE feed = :feed AND custom_id = :custom_id AND account_id = :account_id;"); + query_select_with_custom_id_for_feed.prepare(QSL("SELECT id, date_created, is_read, is_important, contents, title FROM Messages " + "WHERE feed = :feed AND custom_id = :custom_id AND account_id = :account_id;")); // In some case, messages are already stored in the DB and they all have primary DB ID. // This is particularly the case when user runs some message filter manually on existing messages // of some feed. query_select_with_id.setForwardOnly(true); - query_select_with_id.prepare("SELECT date_created, is_read, is_important, contents, feed, title FROM Messages " - "WHERE id = :id AND account_id = :account_id;"); + query_select_with_id.prepare(QSL("SELECT date_created, is_read, is_important, contents, feed, title FROM Messages " + "WHERE id = :id AND account_id = :account_id;")); // Used to insert new messages. query_insert.setForwardOnly(true); - query_insert.prepare("INSERT INTO Messages " - "(feed, title, is_read, is_important, is_deleted, url, author, score, date_created, contents, enclosures, custom_id, custom_hash, account_id) " - "VALUES (:feed, :title, :is_read, :is_important, :is_deleted, :url, :author, :score, :date_created, :contents, :enclosures, :custom_id, :custom_hash, :account_id);"); + query_insert.prepare(QSL("INSERT INTO Messages " + "(feed, title, is_read, is_important, is_deleted, url, author, score, date_created, contents, enclosures, custom_id, custom_hash, account_id) " + "VALUES (:feed, :title, :is_read, :is_important, :is_deleted, :url, :author, :score, :date_created, :contents, :enclosures, :custom_id, :custom_hash, :account_id);")); // Used to update existing messages. query_update.setForwardOnly(true); - query_update.prepare("UPDATE Messages " - "SET title = :title, is_read = :is_read, is_important = :is_important, is_deleted = :is_deleted, url = :url, author = :author, score = :score, date_created = :date_created, contents = :contents, enclosures = :enclosures, feed = :feed " - "WHERE id = :id;"); + query_update.prepare(QSL("UPDATE Messages " + "SET title = :title, is_read = :is_read, is_important = :is_important, is_deleted = :is_deleted, url = :url, author = :author, score = :score, date_created = :date_created, contents = :contents, enclosures = :enclosures, feed = :feed " + "WHERE id = :id;")); if (use_transactions && !db.transaction()) { qCriticalNN << LOGSEC_DB @@ -2073,7 +2080,7 @@ MessageFilter* DatabaseQueries::addMessageFilter(const QSqlDatabase& db, const Q QSqlQuery q(db); - q.prepare("INSERT INTO MessageFilters (name, script) VALUES(:name, :script);"); + q.prepare(QSL("INSERT INTO MessageFilters (name, script) VALUES(:name, :script);")); q.bindValue(QSL(":name"), title); q.bindValue(QSL(":script"), script); @@ -2095,7 +2102,7 @@ MessageFilter* DatabaseQueries::addMessageFilter(const QSqlDatabase& db, const Q void DatabaseQueries::removeMessageFilter(const QSqlDatabase& db, int filter_id, bool* ok) { QSqlQuery q(db); - q.prepare("DELETE FROM MessageFilters WHERE id = :id;"); + q.prepare(QSL("DELETE FROM MessageFilters WHERE id = :id;")); q.bindValue(QSL(":id"), filter_id); q.setForwardOnly(true); @@ -2115,7 +2122,7 @@ void DatabaseQueries::removeMessageFilter(const QSqlDatabase& db, int filter_id, void DatabaseQueries::removeMessageFilterAssignments(const QSqlDatabase& db, int filter_id, bool* ok) { QSqlQuery q(db); - q.prepare("DELETE FROM MessageFiltersInFeeds WHERE filter = :filter;"); + q.prepare(QSL("DELETE FROM MessageFiltersInFeeds WHERE filter = :filter;")); q.bindValue(QSL(":filter"), filter_id); q.setForwardOnly(true); @@ -2167,7 +2174,7 @@ QMultiMap DatabaseQueries::messageFiltersInFeeds(const QSqlDatabas QSqlQuery q(db); QMultiMap filters_in_feeds; - q.prepare("SELECT filter, feed_custom_id FROM MessageFiltersInFeeds WHERE account_id = :account_id;"); + q.prepare(QSL("SELECT filter, feed_custom_id FROM MessageFiltersInFeeds WHERE account_id = :account_id;")); q.bindValue(QSL(":account_id"), account_id); q.setForwardOnly(true); @@ -2196,8 +2203,8 @@ void DatabaseQueries::assignMessageFilterToFeed(const QSqlDatabase& db, const QS int filter_id, int account_id, bool* ok) { QSqlQuery q(db); - q.prepare("INSERT INTO MessageFiltersInFeeds (filter, feed_custom_id, account_id) " - "VALUES(:filter, :feed_custom_id, :account_id);"); + q.prepare(QSL("INSERT INTO MessageFiltersInFeeds (filter, feed_custom_id, account_id) " + "VALUES(:filter, :feed_custom_id, :account_id);")); q.bindValue(QSL(":filter"), filter_id); q.bindValue(QSL(":feed_custom_id"), feed_custom_id); @@ -2219,7 +2226,7 @@ void DatabaseQueries::assignMessageFilterToFeed(const QSqlDatabase& db, const QS void DatabaseQueries::updateMessageFilter(const QSqlDatabase& db, MessageFilter* filter, bool* ok) { QSqlQuery q(db); - q.prepare("UPDATE MessageFilters SET name = :name, script = :script WHERE id = :id;"); + q.prepare(QSL("UPDATE MessageFilters SET name = :name, script = :script WHERE id = :id;")); q.bindValue(QSL(":name"), filter->name()); q.bindValue(QSL(":script"), filter->script()); @@ -2242,8 +2249,8 @@ void DatabaseQueries::removeMessageFilterFromFeed(const QSqlDatabase& db, const int filter_id, int account_id, bool* ok) { QSqlQuery q(db); - q.prepare("DELETE FROM MessageFiltersInFeeds " - "WHERE filter = :filter AND feed_custom_id = :feed_custom_id AND account_id = :account_id;"); + q.prepare(QSL("DELETE FROM MessageFiltersInFeeds " + "WHERE filter = :filter AND feed_custom_id = :feed_custom_id AND account_id = :account_id;")); q.bindValue(QSL(":filter"), filter_id); q.bindValue(QSL(":feed_custom_id"), feed_custom_id); @@ -2300,7 +2307,7 @@ bool DatabaseQueries::storeNewOauthTokens(const QSqlDatabase& db, QVariantHash custom_data = deserializeCustomData(query.value(0).toString()); - custom_data["refresh_token"] = refresh_token; + custom_data[QSL("refresh_token")] = refresh_token; query.clear(); query.prepare(QSL("UPDATE Accounts SET custom_data = :custom_data WHERE id = :id;")); @@ -2319,5 +2326,5 @@ bool DatabaseQueries::storeNewOauthTokens(const QSqlDatabase& db, } QString DatabaseQueries::unnulifyString(const QString& str) { - return str.isNull() ? "" : str; + return str.isNull() ? QSL("") : str; } diff --git a/src/librssguard/database/mariadbdriver.cpp b/src/librssguard/database/mariadbdriver.cpp index 4c286f479..0a3852c87 100644 --- a/src/librssguard/database/mariadbdriver.cpp +++ b/src/librssguard/database/mariadbdriver.cpp @@ -16,7 +16,7 @@ MariaDbDriver::MariaDbDriver(QObject* parent) : DatabaseDriver(parent), m_databa MariaDbDriver::MariaDbError MariaDbDriver::testConnection(const QString& hostname, int port, const QString& w_database, const QString& username, const QString& password) { - QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, APP_DB_MYSQL_TEST); + QSqlDatabase database = QSqlDatabase::addDatabase(QSL(APP_DB_MYSQL_DRIVER), QSL(APP_DB_MYSQL_TEST)); database.setHostName(hostname); database.setPort(port); @@ -93,7 +93,7 @@ QString MariaDbDriver::humanDriverType() const { } QString MariaDbDriver::qtDriverCode() const { - return APP_DB_MYSQL_DRIVER; + return QSL(APP_DB_MYSQL_DRIVER); } DatabaseDriver::DriverType MariaDbDriver::driverType() const { @@ -146,7 +146,7 @@ qint64 MariaDbDriver::databaseDataSize() { QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) { // Folders are created. Create new QSqlDatabase object. - QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name); + QSqlDatabase database = QSqlDatabase::addDatabase(QSL(APP_DB_MYSQL_DRIVER), connection_name); const QString database_name = qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString(); database.setHostName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString()); @@ -163,13 +163,13 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) { query_db.setForwardOnly(true); - if (!query_db.exec(QString("USE %1").arg(database_name)) || + if (!query_db.exec(QSL("USE %1").arg(database_name)) || !query_db.exec(QSL("SELECT inf_value FROM Information WHERE inf_key = 'schema_version'"))) { // If no "rssguard" database exists or schema version is wrong, then initialize it. qWarningNN << LOGSEC_DB << "Error occurred. MySQL database is not initialized. Initializing now."; try { - const QStringList statements = prepareScript(APP_SQL_PATH, APP_DB_MYSQL_INIT, database_name); + const QStringList statements = prepareScript(APP_SQL_PATH, QSL(APP_DB_MYSQL_INIT), database_name); for (const QString& statement : statements) { query_db.exec(statement); @@ -190,7 +190,7 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) { query_db.next(); const QString installed_db_schema = query_db.value(0).toString(); - if (installed_db_schema.toInt() < QString(APP_DB_SCHEMA_VERSION).toInt()) { + if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) { if (updateDatabaseSchema(database, installed_db_schema, database_name)) { qDebugNN << LOGSEC_DB << "Database schema was updated from" @@ -218,14 +218,14 @@ bool MariaDbDriver::updateDatabaseSchema(const QSqlDatabase& database, const QString& source_db_schema_version, const QString& database_name) { int working_version = QString(source_db_schema_version).remove('.').toInt(); - const int current_version = QString(APP_DB_SCHEMA_VERSION).remove('.').toInt(); + const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt(); while (working_version != current_version) { try { const QStringList statements = prepareScript(APP_SQL_PATH, - QString(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("mysql"), - QString::number(working_version), - QString::number(working_version + 1)), + QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("mysql"), + QString::number(working_version), + QString::number(working_version + 1)), database_name); for (const QString& statement : statements) { @@ -275,7 +275,7 @@ QSqlDatabase MariaDbDriver::connection(const QString& connection_name, DatabaseD else { // Database connection with this name does not exist // yet, add it and set it up. - database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name); + database = QSqlDatabase::addDatabase(QSL(APP_DB_MYSQL_DRIVER), connection_name); database.setHostName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString()); database.setPort(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt()); database.setUserName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString()); diff --git a/src/librssguard/database/sqlitedriver.cpp b/src/librssguard/database/sqlitedriver.cpp index 165260591..ea226f982 100644 --- a/src/librssguard/database/sqlitedriver.cpp +++ b/src/librssguard/database/sqlitedriver.cpp @@ -12,7 +12,7 @@ SqliteDriver::SqliteDriver(bool in_memory, QObject* parent) : DatabaseDriver(parent), m_inMemoryDatabase(in_memory), - m_databaseFilePath(qApp->userDataFolder() + QDir::separator() + QString(APP_DB_SQLITE_PATH)), + m_databaseFilePath(qApp->userDataFolder() + QDir::separator() + QSL(APP_DB_SQLITE_PATH)), m_fileBasedDatabaseInitialized(false), m_inMemoryDatabaseInitialized(false) {} @@ -123,7 +123,7 @@ QSqlDatabase SqliteDriver::connection(const QString& connection_name, DesiredSto database = QSqlDatabase::database(connection_name); } else { - database = QSqlDatabase::addDatabase(APP_DB_SQLITE_DRIVER, connection_name); + database = QSqlDatabase::addDatabase(QSL(APP_DB_SQLITE_DRIVER), connection_name); if (want_in_memory) { database.setConnectOptions(QSL("QSQLITE_OPEN_URI;QSQLITE_ENABLE_SHARED_CACHE")); @@ -131,7 +131,7 @@ QSqlDatabase SqliteDriver::connection(const QString& connection_name, DesiredSto } else { const QDir db_path(m_databaseFilePath); - QFile db_file(db_path.absoluteFilePath(APP_DB_SQLITE_FILE)); + QFile db_file(db_path.absoluteFilePath(QSL(APP_DB_SQLITE_FILE))); database.setDatabaseName(db_file.fileName()); } @@ -196,7 +196,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo if (!in_memory) { // Prepare file paths. const QDir db_path(m_databaseFilePath); - QFile db_file(db_path.absoluteFilePath(APP_DB_SQLITE_FILE)); + QFile db_file(db_path.absoluteFilePath(QSL(APP_DB_SQLITE_FILE))); // Check if database directory exists. if (!db_path.exists()) { @@ -218,7 +218,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo // Folders are created. Create new QSQLDatabase object. QSqlDatabase database; - database = QSqlDatabase::addDatabase(APP_DB_SQLITE_DRIVER, connection_name); + database = QSqlDatabase::addDatabase(QSL(APP_DB_SQLITE_DRIVER), connection_name); if (in_memory) { database.setConnectOptions(QSL("QSQLITE_OPEN_URI;QSQLITE_ENABLE_SHARED_CACHE")); @@ -241,7 +241,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo qWarningNN << LOGSEC_DB << "SQLite database is not initialized. Initializing now."; try { - const QStringList statements = prepareScript(APP_SQL_PATH, APP_DB_SQLITE_INIT); + const QStringList statements = prepareScript(APP_SQL_PATH, QSL(APP_DB_SQLITE_INIT)); for (const QString& statement : statements) { query_db.exec(statement); @@ -261,7 +261,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo query_db.next(); const QString installed_db_schema = query_db.value(0).toString(); - if (installed_db_schema.toInt() < QString(APP_DB_SCHEMA_VERSION).toInt()) { + if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) { if (updateDatabaseSchema(database, installed_db_schema)) { qDebugNN << LOGSEC_DB << "Database schema was updated from '" @@ -302,7 +302,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo QSqlQuery copy_contents(database); // Attach database. - copy_contents.exec(QString("ATTACH DATABASE '%1' AS 'storage';").arg(file_database.databaseName())); + copy_contents.exec(QSL("ATTACH DATABASE '%1' AS 'storage';").arg(file_database.databaseName())); // Copy all stuff. QStringList tables; @@ -317,7 +317,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo } for (const QString& table : tables) { - copy_contents.exec(QString("INSERT INTO main.%1 SELECT * FROM storage.%1;").arg(table)); + copy_contents.exec(QSL("INSERT INTO main.%1 SELECT * FROM storage.%1;").arg(table)); } qDebugNN << LOGSEC_DB @@ -344,7 +344,7 @@ QString SqliteDriver::databaseFilePath() const { bool SqliteDriver::updateDatabaseSchema(const QSqlDatabase& database, const QString& source_db_schema_version) { int working_version = QString(source_db_schema_version).remove('.').toInt(); - const int current_version = QString(APP_DB_SCHEMA_VERSION).remove('.').toInt(); + const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt(); // Now, it would be good to create backup of SQLite DB file. if (IOFactory::copyFile(databaseFilePath(), databaseFilePath() + ".bak")) { @@ -357,9 +357,9 @@ bool SqliteDriver::updateDatabaseSchema(const QSqlDatabase& database, const QStr while (working_version != current_version) { try { const QStringList statements = prepareScript(APP_SQL_PATH, - QString(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("sqlite"), - QString::number(working_version), - QString::number(working_version + 1))); + QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("sqlite"), + QString::number(working_version), + QString::number(working_version + 1))); for (const QString& statement : statements) { QSqlQuery query = database.exec(statement); @@ -425,7 +425,7 @@ QString SqliteDriver::humanDriverType() const { } QString SqliteDriver::qtDriverCode() const { - return APP_DB_SQLITE_DRIVER; + return QSL(APP_DB_SQLITE_DRIVER); } void SqliteDriver::backupDatabase(const QString& backup_folder, const QString& backup_name) { diff --git a/src/librssguard/gui/dialogs/formabout.cpp b/src/librssguard/gui/dialogs/formabout.cpp index 910f56262..62b00207b 100644 --- a/src/librssguard/gui/dialogs/formabout.cpp +++ b/src/librssguard/gui/dialogs/formabout.cpp @@ -18,7 +18,7 @@ FormAbout::FormAbout(QWidget* parent) : QDialog(parent) { m_ui.setupUi(this); m_ui.m_lblIcon->setPixmap(QPixmap(APP_ICON_PATH)); - GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("help-about")), tr("About %1").arg(APP_NAME)); + GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("help-about")), tr("About %1").arg(QSL(APP_NAME))); loadLicenseAndInformation(); loadSettingsAndPaths(); } @@ -73,20 +73,21 @@ void FormAbout::loadLicenseAndInformation() { // Set other informative texts. m_ui.m_lblDesc->setText(tr("%8
" "Version: %1 (built on %2/%3)
" "Revision: %4
" "Build date: %5
" "Qt: %6 (compiled against %7)
").arg( - qApp->applicationVersion(), APP_SYSTEM_NAME, APP_SYSTEM_VERSION, APP_REVISION, - QLocale().toString(TextFactory::parseDateTime(QString("%1 %2").arg(__DATE__, __TIME__)), + qApp->applicationVersion(), QSL(APP_SYSTEM_NAME), + QSL(APP_SYSTEM_VERSION), QSL(APP_REVISION), + QLocale().toString(TextFactory::parseDateTime(QSL("%1 %2").arg(__DATE__, __TIME__)), QLocale::FormatType::ShortFormat), - qVersion(), QT_VERSION_STR, - APP_NAME)); + qVersion(), QSL(QT_VERSION_STR), + QSL(APP_NAME))); m_ui.m_txtInfo->setText(tr("%5 is a (very) tiny feed reader." "

This software is distributed under the terms of GNU General Public License, version 3." "

Contacts:" "
  • %1 ~e-mail
  • " "
  • %2 ~website
" "You can obtain source code for %5 from its website." - "


Copyright (C) 2011-%3 %4").arg(APP_EMAIL, APP_URL, + "


Copyright (C) 2011-%3 %4").arg(QSL(APP_EMAIL), QSL(APP_URL), QString::number(QDateTime::currentDateTime() .date() .year()), - APP_AUTHOR, APP_NAME)); + QSL(APP_AUTHOR), QSL(APP_NAME))); } diff --git a/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp b/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp index 39bc6eb7f..5c353782d 100644 --- a/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp +++ b/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp @@ -29,7 +29,7 @@ FormBackupDatabaseSettings::FormBackupDatabaseSettings(QWidget* parent) : QDialo connect(m_ui->m_txtBackupName->lineEdit(), &BaseLineEdit::textChanged, this, &FormBackupDatabaseSettings::checkOkButton); connect(m_ui->m_btnSelectFolder, &QPushButton::clicked, this, &FormBackupDatabaseSettings::selectFolderInitial); selectFolder(qApp->documentsFolder()); - m_ui->m_txtBackupName->lineEdit()->setText(QString(APP_LOW_NAME) + QL1S("_") + + m_ui->m_txtBackupName->lineEdit()->setText(QSL(APP_LOW_NAME) + QL1S("_") + QDateTime::currentDateTime().toString(QSL("yyyyMMddHHmm"))); m_ui->m_lblResult->setStatus(WidgetWithStatus::StatusType::Warning, tr("No operation executed yet."), tr("No operation executed yet.")); diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index 23dadb59b..5c1ff8131 100644 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -60,7 +60,7 @@ FormMain::FormMain(QWidget* parent, Qt::WindowFlags f) qApp->setMainForm(this); setWindowIcon(qApp->desktopAwareIcon()); - setWindowTitle(APP_LONG_NAME); + setWindowTitle(QSL(APP_LONG_NAME)); #if defined(USE_WEBENGINE) m_ui->m_menuWebBrowserTabs->addAction(qApp->web()->adBlock()->adBlockIcon()); @@ -209,7 +209,7 @@ void FormMain::prepareMenus() { // Setup menu for tray icon. if (SystemTrayIcon::isSystemTrayAreaAvailable()) { #if defined(Q_OS_WIN) - m_trayMenu = new TrayIconMenu(APP_NAME, this); + m_trayMenu = new TrayIconMenu(QSL(APP_NAME), this); #else m_trayMenu = new QMenu(QSL(APP_NAME), this); #endif @@ -228,6 +228,7 @@ void FormMain::prepareMenus() { m_ui->m_menuWebBrowserTabs->removeAction(m_ui->m_actionTabNewWebBrowser); m_ui->m_menuWebBrowserTabs->setTitle(tr("Ta&bs")); #endif + #if defined(Q_OS_MACOS) m_ui->m_actionSwitchMainMenu->setVisible(false); m_ui->m_actionFullscreen->setVisible(false); @@ -878,7 +879,7 @@ void FormMain::hideEvent(QHideEvent* event) { } void FormMain::showDocs() { - qApp->web()->openUrlInExternalBrowser(APP_URL_DOCUMENTATION); + qApp->web()->openUrlInExternalBrowser(QSL(APP_URL_DOCUMENTATION)); } void FormMain::showAddAccountDialog() { diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp index 092ab9ab0..0f7238777 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp @@ -57,7 +57,7 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q m_ui.m_treeExistingMessages->header()->setSectionResizeMode(MFM_MODEL_URL, QHeaderView::ResizeMode::Interactive); connect(m_ui.m_btnDetailedHelp, &QPushButton::clicked, this, []() { - qApp->web()->openUrlInExternalBrowser(MSG_FILTERING_HELP); + qApp->web()->openUrlInExternalBrowser(QSL(MSG_FILTERING_HELP)); }); connect(m_ui.m_listFilters, &QListWidget::currentRowChanged, this, &FormMessageFiltersManager::loadFilter); diff --git a/src/librssguard/gui/dialogs/formsettings.cpp b/src/librssguard/gui/dialogs/formsettings.cpp index 4f4e26293..3a274ce41 100644 --- a/src/librssguard/gui/dialogs/formsettings.cpp +++ b/src/librssguard/gui/dialogs/formsettings.cpp @@ -75,7 +75,7 @@ void FormSettings::applySettings() { if (!panels_for_restart.isEmpty()) { const QStringList changed_settings_description = panels_for_restart.replaceInStrings(QRegularExpression(QSL("^")), - QString::fromUtf8(" • ")); + QString::fromUtf8(QByteArray(" • "))); const QMessageBox::StandardButton clicked_button = MessageBox::show(this, QMessageBox::Icon::Question, tr("Critical settings were changed"), @@ -111,7 +111,7 @@ void FormSettings::cancelSettings() { } else { const QStringList changed_settings_description = changed_panels.replaceInStrings(QRegularExpression(QSL("^")), - QString::fromUtf8(" • ")); + QString::fromUtf8(QByteArray(" • "))); if (MessageBox::show(this, QMessageBox::Icon::Critical, diff --git a/src/librssguard/gui/dialogs/formupdate.cpp b/src/librssguard/gui/dialogs/formupdate.cpp index 9e1a8787e..f9430dcd6 100644 --- a/src/librssguard/gui/dialogs/formupdate.cpp +++ b/src/librssguard/gui/dialogs/formupdate.cpp @@ -20,7 +20,7 @@ FormUpdate::FormUpdate(QWidget* parent) : QDialog(parent) { m_ui.setupUi(this); - m_ui.m_lblCurrentRelease->setText(APP_VERSION); + m_ui.m_lblCurrentRelease->setText(QSL(APP_VERSION)); m_ui.m_tabInfo->removeTab(1); m_ui.m_buttonBox->setEnabled(false); @@ -78,7 +78,7 @@ void FormUpdate::checkForUpdates() { m_ui.m_lblAvailableRelease->setText(m_updateInfo.m_availableVersion); m_ui.m_txtChanges->setText(m_updateInfo.m_changes); - if (SystemFactory::isVersionNewer(m_updateInfo.m_availableVersion, APP_VERSION)) { + if (SystemFactory::isVersionNewer(m_updateInfo.m_availableVersion, QSL(APP_VERSION))) { m_btnUpdate->setVisible(true); m_ui.m_lblStatus->setStatus(WidgetWithStatus::StatusType::Ok, tr("New release available."), @@ -200,7 +200,7 @@ void FormUpdate::startUpdate() { m_ui.m_listFiles->setEnabled(false); } else { - url_file = APP_URL; + url_file = QSL(APP_URL); } if (m_readyToInstall) { diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp index 4198bac7a..b3ee82b56 100644 --- a/src/librssguard/gui/feedsview.cpp +++ b/src/librssguard/gui/feedsview.cpp @@ -415,7 +415,7 @@ void FeedsView::selectNextUnreadItem() { } } -QModelIndex FeedsView::nextPreviousUnreadItem(QModelIndex default_row) { +QModelIndex FeedsView::nextPreviousUnreadItem(const QModelIndex& default_row) { const bool started_from_zero = default_row.row() == 0 && !default_row.parent().isValid(); QModelIndex next_index = nextUnreadItem(default_row); @@ -427,34 +427,34 @@ QModelIndex FeedsView::nextPreviousUnreadItem(QModelIndex default_row) { return next_index; } -QModelIndex FeedsView::nextUnreadItem(QModelIndex default_row) { - default_row = m_proxyModel->index(default_row.row(), 0, default_row.parent()); +QModelIndex FeedsView::nextUnreadItem(const QModelIndex& default_row) { + QModelIndex nconst_default_row = m_proxyModel->index(default_row.row(), 0, default_row.parent()); const QModelIndex starting_row = default_row; while (true) { - bool has_unread = m_sourceModel->itemForIndex(m_proxyModel->mapToSource(default_row))->countOfUnreadMessages() > 0; + bool has_unread = m_sourceModel->itemForIndex(m_proxyModel->mapToSource(nconst_default_row))->countOfUnreadMessages() > 0; if (has_unread) { - if (m_proxyModel->hasChildren(default_row)) { + if (m_proxyModel->hasChildren(nconst_default_row)) { // Current index has unread items, but is expandable, go to first child. - expand(default_row); - default_row = indexBelow(default_row); + expand(nconst_default_row); + nconst_default_row = indexBelow(nconst_default_row); continue; } else { // We found unread feed, return it. - return default_row; + return nconst_default_row; } } else { - QModelIndex next_row = indexBelow(default_row); + QModelIndex next_row = indexBelow(nconst_default_row); - if (next_row == default_row || !next_row.isValid() || starting_row == next_row) { + if (next_row == nconst_default_row || !next_row.isValid() || starting_row == next_row) { // We came to last row probably. break; } else { - default_row = next_row; + nconst_default_row = next_row; } } } diff --git a/src/librssguard/gui/feedsview.h b/src/librssguard/gui/feedsview.h index debb5a6d0..fb3a97599 100644 --- a/src/librssguard/gui/feedsview.h +++ b/src/librssguard/gui/feedsview.h @@ -101,8 +101,8 @@ class RSSGUARD_DLLSPEC FeedsView : public QTreeView { void onItemExpandStateSaveRequested(RootItem* item); private: - QModelIndex nextPreviousUnreadItem(QModelIndex default_row); - QModelIndex nextUnreadItem(QModelIndex default_row); + QModelIndex nextPreviousUnreadItem(const QModelIndex& default_row); + QModelIndex nextUnreadItem(const QModelIndex& default_row); // Initializes context menus. QMenu* initializeContextMenuBin(RootItem* clicked_item); diff --git a/src/librssguard/gui/guiutilities.cpp b/src/librssguard/gui/guiutilities.cpp index 1c2e6e0b9..b8baaa7f2 100644 --- a/src/librssguard/gui/guiutilities.cpp +++ b/src/librssguard/gui/guiutilities.cpp @@ -54,10 +54,6 @@ void GuiUtilities::applyResponsiveDialogResize(QWidget& widget, double factor) { } void GuiUtilities::restoreState(QWidget* wdg, QByteArray state) { - QHash props_to_serialize { - { QSL("QCheckBox"), { QSL("checked") } }, - { QSL("QSpinBox"), { QSL("value") } } - }; QHash> props; QDataStream str(&state, QIODevice::OpenModeFlag::ReadOnly); diff --git a/src/librssguard/gui/messagebox.cpp b/src/librssguard/gui/messagebox.cpp index b2b2ed690..f7e593339 100644 --- a/src/librssguard/gui/messagebox.cpp +++ b/src/librssguard/gui/messagebox.cpp @@ -63,7 +63,7 @@ QMessageBox::StandardButton MessageBox::show(QWidget* parent, QMessageBox::StandardButton default_button, bool* dont_show_again, const QString& functor_heading, - std::function functor) { + const std::function& functor) { // Create and find needed components. MessageBox msg_box(parent); diff --git a/src/librssguard/gui/messagebox.h b/src/librssguard/gui/messagebox.h index aa98dbf72..b12184f84 100644 --- a/src/librssguard/gui/messagebox.h +++ b/src/librssguard/gui/messagebox.h @@ -30,7 +30,7 @@ class MessageBox : public QMessageBox { QMessageBox::StandardButton default_button = QMessageBox::Ok, bool* dont_show_again = nullptr, const QString& functor_heading = {}, - std::function functor = nullptr); + const std::function& functor = nullptr); static QIcon iconForStatus(QMessageBox::Icon status); }; diff --git a/src/librssguard/gui/messagepreviewer.cpp b/src/librssguard/gui/messagepreviewer.cpp index b2bcb9769..da33e99ee 100644 --- a/src/librssguard/gui/messagepreviewer.cpp +++ b/src/librssguard/gui/messagepreviewer.cpp @@ -31,15 +31,15 @@ void MessagePreviewer::createConnections() { installEventFilter(this); - connect(m_actionMarkRead = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-read"), tr("Mark article read")), + connect(m_actionMarkRead = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-read")), tr("Mark article read")), &QAction::triggered, this, &MessagePreviewer::markMessageAsRead); - connect(m_actionMarkUnread = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-unread"), tr("Mark article unread")), + connect(m_actionMarkUnread = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-unread")), tr("Mark article unread")), &QAction::triggered, this, &MessagePreviewer::markMessageAsUnread); - connect(m_actionSwitchImportance = m_toolBar->addAction(qApp->icons()->fromTheme("mail-mark-important"), tr("Switch article importance")), + connect(m_actionSwitchImportance = m_toolBar->addAction(qApp->icons()->fromTheme(QSL("mail-mark-important")), tr("Switch article importance")), &QAction::triggered, this, &MessagePreviewer::switchMessageImportance); diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index e62cdf2a7..b0ad0e8d6 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -445,7 +445,7 @@ void MessagesView::openSelectedSourceMessagesExternally() { for (const QModelIndex& index : qAsConst(rws)) { QString link = m_sourceModel->messageAt(m_proxyModel->mapToSource(index).row()) .m_url - .replace(QRegularExpression("[\\t\\n]"), QString()); + .replace(QRegularExpression(QSL("[\\t\\n]")), QString()); qApp->web()->openUrlInExternalBrowser(link); } @@ -691,7 +691,7 @@ void MessagesView::openSelectedMessagesWithExternalTool() { for (const QModelIndex& index : qAsConst(rws)) { const QString link = m_sourceModel->messageAt(m_proxyModel->mapToSource(index).row()) .m_url - .replace(QRegularExpression("[\\t\\n]"), QString()); + .replace(QRegularExpression(QSL("[\\t\\n]")), QString()); if (!link.isEmpty()) { if (!tool.run(link)) { diff --git a/src/librssguard/gui/reusable/colortoolbutton.cpp b/src/librssguard/gui/reusable/colortoolbutton.cpp index 2eb29f292..b264e0cf3 100644 --- a/src/librssguard/gui/reusable/colortoolbutton.cpp +++ b/src/librssguard/gui/reusable/colortoolbutton.cpp @@ -2,6 +2,8 @@ #include "gui/reusable/colortoolbutton.h" +#include "definitions/definitions.h" + #include #include #include @@ -34,7 +36,7 @@ void ColorToolButton::setColor(const QColor& color) { void ColorToolButton::setRandomColor() { auto rnd_color = QRandomGenerator::global()->bounded(0xFFFFFF); - auto rnd_color_name = QString("#%1").arg(QString::number(rnd_color, 16)); + auto rnd_color_name = QSL("#%1").arg(QString::number(rnd_color, 16)); setColor(rnd_color_name); emit colorChanged(rnd_color_name); diff --git a/src/librssguard/gui/reusable/labelsmenu.cpp b/src/librssguard/gui/reusable/labelsmenu.cpp index 6ed3c0193..856c0df58 100644 --- a/src/librssguard/gui/reusable/labelsmenu.cpp +++ b/src/librssguard/gui/reusable/labelsmenu.cpp @@ -16,7 +16,7 @@ LabelsMenu::LabelsMenu(const QList& messages, const QList& labe setIcon(qApp->icons()->fromTheme(QSL("tag-folder"))); if (labels.isEmpty()) { - QAction* act_not_labels = new QAction("No labels found"); + QAction* act_not_labels = new QAction(tr("No labels found")); act_not_labels->setEnabled(false); addAction(act_not_labels); diff --git a/src/librssguard/gui/reusable/nonclosablemenu.cpp b/src/librssguard/gui/reusable/nonclosablemenu.cpp index 81c729499..0b0ca42cc 100644 --- a/src/librssguard/gui/reusable/nonclosablemenu.cpp +++ b/src/librssguard/gui/reusable/nonclosablemenu.cpp @@ -15,7 +15,7 @@ void NonClosableMenu::keyPressEvent(QKeyEvent* event) { } void NonClosableMenu::mousePressEvent(QMouseEvent* event) { - auto* act = dynamic_cast(activeAction()); + auto* act = activeAction(); if (act != nullptr) { act->toggle(); diff --git a/src/librssguard/gui/reusable/timespinbox.cpp b/src/librssguard/gui/reusable/timespinbox.cpp index 5903f71b2..44608e050 100644 --- a/src/librssguard/gui/reusable/timespinbox.cpp +++ b/src/librssguard/gui/reusable/timespinbox.cpp @@ -2,6 +2,8 @@ #include "gui/reusable/timespinbox.h" +#include "definitions/definitions.h" + #include TimeSpinBox::TimeSpinBox(QWidget* parent) : QDoubleSpinBox(parent) { @@ -19,7 +21,7 @@ double TimeSpinBox::valueFromText(const QString& text) const { return value; } else { - QRegularExpression rx("\\b[0-9]{1,}\\b"); + QRegularExpression rx(QSL("\\b[0-9]{1,}\\b")); QStringList numbers; int pos = 0; int count = 0; @@ -84,7 +86,7 @@ TimeSpinBox::Mode TimeSpinBox::mode() const { return m_mode; } -void TimeSpinBox::setMode(const TimeSpinBox::Mode& mode) { +void TimeSpinBox::setMode(TimeSpinBox::Mode mode) { m_mode = mode; setValue(value()); diff --git a/src/librssguard/gui/reusable/timespinbox.h b/src/librssguard/gui/reusable/timespinbox.h index 4caf6dad1..cd8e4d4d2 100644 --- a/src/librssguard/gui/reusable/timespinbox.h +++ b/src/librssguard/gui/reusable/timespinbox.h @@ -22,7 +22,7 @@ class TimeSpinBox : public QDoubleSpinBox { QValidator::State validate(QString& input, int& pos) const; Mode mode() const; - void setMode(const TimeSpinBox::Mode& mode); + void setMode(Mode mode); private: Mode m_mode; diff --git a/src/librssguard/gui/settings/settingsbrowsermail.cpp b/src/librssguard/gui/settings/settingsbrowsermail.cpp index 55440b94f..0d2175cca 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.cpp +++ b/src/librssguard/gui/settings/settingsbrowsermail.cpp @@ -93,8 +93,8 @@ void SettingsBrowserMail::selectBrowserExecutable() { } } -QList SettingsBrowserMail::externalTools() const { - QList list; +QVector SettingsBrowserMail::externalTools() const { + QVector list; list.reserve(m_ui->m_listTools->topLevelItemCount()); for (int i = 0; i < m_ui->m_listTools->topLevelItemCount(); i++) { list.append(m_ui->m_listTools->topLevelItem(i)->data(0, Qt::ItemDataRole::UserRole).value()); @@ -241,7 +241,7 @@ ExternalTool SettingsBrowserMail::tweakExternalTool(const ExternalTool& tool) co bool ok; QString parameters = QInputDialog::getText(window(), tr("Enter parameters"), - tr("Enter (optional) parameters separated by \"%1\":").arg(EXECUTION_LINE_SEPARATOR), + tr("Enter (optional) parameters separated by \"%1\":").arg(QSL(EXECUTION_LINE_SEPARATOR)), QLineEdit::EchoMode::Normal, tool.parameters(), &ok); diff --git a/src/librssguard/gui/settings/settingsbrowsermail.h b/src/librssguard/gui/settings/settingsbrowsermail.h index 74586274c..167c9ab4e 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.h +++ b/src/librssguard/gui/settings/settingsbrowsermail.h @@ -35,7 +35,7 @@ class SettingsBrowserMail : public SettingsPanel { ExternalTool tweakExternalTool(const ExternalTool& tool) const; private: - QList externalTools() const; + QVector externalTools() const; void setExternalTools(const QList& list); NetworkProxyDetails* m_proxyDetails; diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index fea2f3f7d..5d4d17358 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -188,8 +188,8 @@ void Application::offerChanges() const { qApp->showGuiMessage(Notification::Event::GeneralEvent, QSL(APP_NAME), QObject::tr("Welcome to %1.\n\nPlease, check NEW stuff included in this\n" - "version by clicking this popup notification.").arg(APP_LONG_NAME), - QSystemTrayIcon::MessageIcon::NoIcon, {}, {}, "Go to changelog", [] { + "version by clicking this popup notification.").arg(QSL(APP_LONG_NAME)), + QSystemTrayIcon::MessageIcon::NoIcon, {}, {}, tr("Go to changelog"), [] { FormAbout(qApp->mainForm()).exec(); }); } @@ -198,12 +198,12 @@ void Application::offerChanges() const { bool Application::isAlreadyRunning() { return m_allowMultipleInstances ? false - : sendMessage((QStringList() << QSL("-%1").arg(CLI_IS_RUNNING) - << Application::arguments().mid(1)).join(ARGUMENTS_LIST_SEPARATOR)); + : sendMessage((QStringList() << QSL("-%1").arg(QSL(CLI_IS_RUNNING)) + << Application::arguments().mid(1)).join(QSL(ARGUMENTS_LIST_SEPARATOR))); } QStringList Application::builtinSounds() const { - auto builtin_sounds = QDir(SOUNDS_BUILTIN_DIRECTORY).entryInfoList(QDir::Filter::Files, QDir::SortFlag::Name); + auto builtin_sounds = QDir(QSL(SOUNDS_BUILTIN_DIRECTORY)).entryInfoList(QDir::Filter::Files, QDir::SortFlag::Name); auto iter = boolinq::from(builtin_sounds).select([](const QFileInfo& i) { return i.absoluteFilePath(); }).toStdList(); @@ -652,32 +652,32 @@ void Application::parseCmdArgumentsFromOtherInstance(const QString& message) { << "execution message."; #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 - QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, Qt::SplitBehaviorFlags::SkipEmptyParts); + QStringList messages = message.split(QSL(ARGUMENTS_LIST_SEPARATOR), Qt::SplitBehaviorFlags::SkipEmptyParts); #else - QStringList messages = message.split(ARGUMENTS_LIST_SEPARATOR, QString::SplitBehavior::SkipEmptyParts); + QStringList messages = message.split(QSL(ARGUMENTS_LIST_SEPARATOR), QString::SplitBehavior::SkipEmptyParts); #endif QCommandLineParser cmd_parser; messages.prepend(qApp->applicationFilePath()); - cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_QUIT_INSTANCE)); - cmd_parser.addOption(QCommandLineOption(QStringList() << CLI_IS_RUNNING)); - cmd_parser.addPositionalArgument("urls", - "List of URL addresses pointing to individual online feeds which should be added.", - "[url-1 ... url-n]"); + cmd_parser.addOption(QCommandLineOption({ QSL(CLI_QUIT_INSTANCE) })); + cmd_parser.addOption(QCommandLineOption({ QSL(CLI_IS_RUNNING) })); + cmd_parser.addPositionalArgument(QSL("urls"), + QSL("List of URL addresses pointing to individual online feeds which should be added."), + QSL("[url-1 ... url-n]")); if (!cmd_parser.parse(messages)) { qCriticalNN << LOGSEC_CORE << cmd_parser.errorText(); } - if (cmd_parser.isSet(CLI_QUIT_INSTANCE)) { + if (cmd_parser.isSet(QSL(CLI_QUIT_INSTANCE))) { quit(); return; } - else if (cmd_parser.isSet(CLI_IS_RUNNING)) { + else if (cmd_parser.isSet(QSL(CLI_IS_RUNNING))) { showGuiMessage(Notification::Event::GeneralEvent, - APP_NAME, + QSL(APP_NAME), tr("Application is already running."), QSystemTrayIcon::MessageIcon::Information); mainForm()->display(); @@ -705,35 +705,35 @@ void Application::parseCmdArgumentsFromOtherInstance(const QString& message) { } void Application::parseCmdArgumentsFromMyInstance() { - QCommandLineOption help(QStringList() << CLI_HELP_SHORT << CLI_HELP_LONG, - "Displays overview of CLI."); - QCommandLineOption version(QStringList() << CLI_VER_SHORT << CLI_VER_LONG, - "Displays version of the application."); - QCommandLineOption log_file(QStringList() << CLI_LOG_SHORT << CLI_LOG_LONG, - "Write application debug log to file. Note that logging to file may slow application down.", - "log-file"); - QCommandLineOption custom_data_folder(QStringList() << CLI_DAT_SHORT << CLI_DAT_LONG, - "Use custom folder for user data and disable single instance application mode.", - "user-data-folder"); - QCommandLineOption disable_singleinstance(QStringList() << CLI_SIN_SHORT << CLI_SIN_LONG, - "Allow running of multiple application instances."); - QCommandLineOption disable_debug(QStringList() << CLI_NDEBUG_SHORT << CLI_NDEBUG_LONG, - "Completely disable stdout/stderr outputs."); + QCommandLineOption help({ QSL(CLI_HELP_SHORT), QSL(CLI_HELP_LONG) }, + QSL("Displays overview of CLI.")); + QCommandLineOption version({ QSL(CLI_VER_SHORT), QSL(CLI_VER_LONG) }, + QSL("Displays version of the application.")); + QCommandLineOption log_file({ QSL(CLI_LOG_SHORT), QSL(CLI_LOG_LONG) }, + QSL("Write application debug log to file. Note that logging to file may slow application down."), + QSL("log-file")); + QCommandLineOption custom_data_folder({ QSL(CLI_DAT_SHORT), QSL(CLI_DAT_LONG) }, + QSL("Use custom folder for user data and disable single instance application mode."), + QSL("user-data-folder")); + QCommandLineOption disable_singleinstance({ QSL(CLI_SIN_SHORT), QSL(CLI_SIN_LONG) }, + QSL("Allow running of multiple application instances.")); + QCommandLineOption disable_debug({ QSL(CLI_NDEBUG_SHORT), QSL(CLI_NDEBUG_LONG) }, + QSL("Completely disable stdout/stderr outputs.")); m_cmdParser.addOptions({ help, version, log_file, custom_data_folder, disable_singleinstance, disable_debug }); - m_cmdParser.addPositionalArgument("urls", - "List of URL addresses pointing to individual online feeds which should be added.", - "[url-1 ... url-n]"); - m_cmdParser.setApplicationDescription(APP_NAME); + m_cmdParser.addPositionalArgument(QSL("urls"), + QSL("List of URL addresses pointing to individual online feeds which should be added."), + QSL("[url-1 ... url-n]")); + m_cmdParser.setApplicationDescription(QSL(APP_NAME)); if (!m_cmdParser.parse(QCoreApplication::arguments())) { qCriticalNN << LOGSEC_CORE << m_cmdParser.errorText(); } - s_customLogFile = m_cmdParser.value(CLI_LOG_SHORT); + s_customLogFile = m_cmdParser.value(QSL(CLI_LOG_SHORT)); - if (!m_cmdParser.value(CLI_DAT_SHORT).isEmpty()) { - auto data_folder = QDir::toNativeSeparators(m_cmdParser.value(CLI_DAT_SHORT)); + if (!m_cmdParser.value(QSL(CLI_DAT_SHORT)).isEmpty()) { + auto data_folder = QDir::toNativeSeparators(m_cmdParser.value(QSL(CLI_DAT_SHORT))); qDebugNN << LOGSEC_CORE << "User wants to use custom directory for user data (and disable single instance mode):" @@ -745,19 +745,19 @@ void Application::parseCmdArgumentsFromMyInstance() { m_allowMultipleInstances = false; } - if (m_cmdParser.isSet(CLI_HELP_SHORT)) { + if (m_cmdParser.isSet(QSL(CLI_HELP_SHORT))) { m_cmdParser.showHelp(); } - else if (m_cmdParser.isSet(CLI_VER_SHORT)) { + else if (m_cmdParser.isSet(QSL(CLI_VER_SHORT))) { m_cmdParser.showVersion(); } - if (m_cmdParser.isSet(CLI_SIN_SHORT)) { + if (m_cmdParser.isSet(QSL(CLI_SIN_SHORT))) { m_allowMultipleInstances = true; qDebugNN << LOGSEC_CORE << "Explicitly allowing this instance to run."; } - if (m_cmdParser.isSet(CLI_NDEBUG_SHORT)) { + if (m_cmdParser.isSet(QSL(CLI_NDEBUG_SHORT))) { s_disableDebug = true; qDebugNN << LOGSEC_CORE << "Disabling any stdout/stderr outputs."; } diff --git a/src/librssguard/miscellaneous/externaltool.cpp b/src/librssguard/miscellaneous/externaltool.cpp index ad514d09a..339c18855 100644 --- a/src/librssguard/miscellaneous/externaltool.cpp +++ b/src/librssguard/miscellaneous/externaltool.cpp @@ -59,7 +59,7 @@ QList ExternalTool::toolsFromSettings() { return tools; } -void ExternalTool::setToolsToSettings(QList& tools) { +void ExternalTool::setToolsToSettings(QVector& tools) { QStringList encode; for (ExternalTool tool : tools) { diff --git a/src/librssguard/miscellaneous/externaltool.h b/src/librssguard/miscellaneous/externaltool.h index d570cac25..6b1e30809 100644 --- a/src/librssguard/miscellaneous/externaltool.h +++ b/src/librssguard/miscellaneous/externaltool.h @@ -21,7 +21,7 @@ class ExternalTool { public: static ExternalTool fromString(const QString& str); static QList toolsFromSettings(); - static void setToolsToSettings(QList& tools); + static void setToolsToSettings(QVector& tools); private: QString m_executable;