diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index 303260415..b043f7602 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -30,7 +30,7 @@ https://martinrotter.github.io/donate/ - + none diff --git a/resources/scripts/7za b/resources/scripts/7za index 9c10723bf..47f412575 160000 --- a/resources/scripts/7za +++ b/resources/scripts/7za @@ -1 +1 @@ -Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749 +Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9 diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 4dc8d3a95..310292bca 100755 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -2002,7 +2002,7 @@ void DatabaseQueries::removeMessageFilterFromFeed(const QSqlDatabase& db, const } } -QStringList DatabaseQueries::getAllRecipients(const QSqlDatabase& db, int account_id) { +QStringList DatabaseQueries::getAllGmailRecipients(const QSqlDatabase& db, int account_id) { QSqlQuery query(db); QStringList rec; diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index d02e71982..955c32f25 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -139,7 +139,7 @@ class DatabaseQueries { int account_id, bool* ok = nullptr); // Gmail account. - static QStringList getAllRecipients(const QSqlDatabase& db, int account_id); + static QStringList getAllGmailRecipients(const QSqlDatabase& db, int account_id); private: static QString unnulifyString(const QString& str); diff --git a/src/librssguard/services/abstract/accountcheckmodel.cpp b/src/librssguard/services/abstract/accountcheckmodel.cpp index 736aff3fd..6266c14ef 100644 --- a/src/librssguard/services/abstract/accountcheckmodel.cpp +++ b/src/librssguard/services/abstract/accountcheckmodel.cpp @@ -234,9 +234,9 @@ bool AccountCheckModel::setData(const QModelIndex& index, const QVariant& value, // Check children of this new parent item. bool all_checked = true; bool all_unchecked = true; - auto chi = item->childItems(); + auto childr = item->childItems(); - for (RootItem* child_of_parent : qAsConst(chi)) { + for (RootItem* child_of_parent : qAsConst(childr)) { if (m_checkStates.contains(child_of_parent)) { all_checked &= m_checkStates[child_of_parent] == Qt::CheckState::Checked; all_unchecked &= m_checkStates[child_of_parent] == Qt::CheckState::Unchecked; diff --git a/src/librssguard/services/gmail/gmailnetworkfactory.cpp b/src/librssguard/services/gmail/gmailnetworkfactory.cpp index add256255..3621d3184 100755 --- a/src/librssguard/services/gmail/gmailnetworkfactory.cpp +++ b/src/librssguard/services/gmail/gmailnetworkfactory.cpp @@ -391,8 +391,9 @@ void GmailNetworkFactory::onAuthFailed() { bool GmailNetworkFactory::fillFullMessage(Message& msg, const QJsonObject& json, const QString& feed_id) { QHash headers; + auto json_headers = json["payload"].toObject()["headers"].toArray(); - for (const QJsonValue& header : json["payload"].toObject()["headers"].toArray()) { + for (const QJsonValue& header : qAsConst(json_headers)) { headers.insert(header.toObject()["name"].toString(), header.toObject()["value"].toString()); } @@ -400,7 +401,9 @@ bool GmailNetworkFactory::fillFullMessage(Message& msg, const QJsonObject& json, msg.m_rawContents = QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact); // Assign correct main labels/states. - for (const QVariant& label : json["labelIds"].toArray().toVariantList()) { + auto labelids = json["labelIds"].toArray().toVariantList(); + + for (const QVariant& label : qAsConst(labelids)) { QString lbl = label.toString(); if (lbl == QL1S(GMAIL_SYSTEM_LABEL_UNREAD)) { @@ -569,8 +572,7 @@ bool GmailNetworkFactory::obtainAndDecodeFullMessages(QList& messages, if (res.first == QNetworkReply::NetworkError::NoError) { // We parse each part of HTTP response (it contains HTTP headers and payload with msg full data). - for (const HttpResponse& part : output) { - auto xx = part.body(); + for (const HttpResponse& part : qAsConst(output)) { QJsonObject msg_doc = QJsonDocument::fromJson(part.body().toUtf8()).object(); QString msg_id = msg_doc["id"].toString(); diff --git a/src/librssguard/services/gmail/gmailserviceroot.cpp b/src/librssguard/services/gmail/gmailserviceroot.cpp index e34ab7a8d..b7b8e44a0 100644 --- a/src/librssguard/services/gmail/gmailserviceroot.cpp +++ b/src/librssguard/services/gmail/gmailserviceroot.cpp @@ -2,8 +2,8 @@ #include "services/gmail/gmailserviceroot.h" -#include "miscellaneous/application.h" #include "database/databasequeries.h" +#include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" #include "network-web/oauth2service.h" #include "services/abstract/importantnode.h" @@ -171,7 +171,9 @@ void GmailServiceRoot::start(bool freshly_activated) { syncIn(); } - for (RootItem* feed : childItems()) { + auto chi = childItems(); + + for (RootItem* feed : qAsConst(chi)) { if (feed->customId() == QL1S("INBOX")) { feed->setKeepOnTop(true); } diff --git a/src/librssguard/services/gmail/gui/formaddeditemail.cpp b/src/librssguard/services/gmail/gui/formaddeditemail.cpp index f56a8ae58..c55c3f455 100644 --- a/src/librssguard/services/gmail/gui/formaddeditemail.cpp +++ b/src/librssguard/services/gmail/gui/formaddeditemail.cpp @@ -3,11 +3,11 @@ #include "services/gmail/gui/formaddeditemail.h" #include "3rd-party/mimesis/mimesis.hpp" +#include "database/databasequeries.h" #include "exceptions/applicationexception.h" #include "gui/guiutilities.h" #include "gui/messagebox.h" #include "miscellaneous/application.h" -#include "database/databasequeries.h" #include "miscellaneous/iconfactory.h" #include "services/gmail/gmailnetworkfactory.h" #include "services/gmail/gmailserviceroot.h" @@ -38,11 +38,12 @@ FormAddEditEmail::FormAddEditEmail(GmailServiceRoot* root, QWidget* parent) this, &FormAddEditEmail::onOkClicked); - QSqlDatabase db = qApp->database()->driver()->connection(metaObject()->className()); + QSqlDatabase db = qApp->database()->driver()->connection(QSL("FormAddEditEmail")); - m_possibleRecipients = DatabaseQueries::getAllRecipients(db, m_root->accountId()); + m_possibleRecipients = DatabaseQueries::getAllGmailRecipients(db, m_root->accountId()); + auto ctrls = recipientControls(); - for (auto* rec: recipientControls()) { + for (auto* rec: qAsConst(ctrls)) { rec->setPossibleRecipients(m_possibleRecipients); } } diff --git a/src/librssguard/services/greader/greadernetwork.cpp b/src/librssguard/services/greader/greadernetwork.cpp index dd1b49d85..44cab5e2b 100755 --- a/src/librssguard/services/greader/greadernetwork.cpp +++ b/src/librssguard/services/greader/greadernetwork.cpp @@ -35,7 +35,6 @@ QNetworkReply::NetworkError GreaderNetwork::editLabels(const QString& state, } QStringList trimmed_ids; - QRegularExpression regex_short_id(QSL("[0-9a-zA-Z]+$")); for (const QString& id : msg_custom_ids) { trimmed_ids.append(QString("i=") + id); @@ -202,10 +201,11 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con // We need to process subscription list first and extract categories. json = QJsonDocument::fromJson(feeds.toUtf8()).object()["subscriptions"].toArray(); - for (const QJsonValue& feed : json) { + for (const QJsonValue& feed : qAsConst(json)) { auto subscription = feed.toObject(); + auto json_cats = subscription["categories"].toArray(); - for (const QJsonValue& cat : subscription["categories"].toArray()) { + for (const QJsonValue& cat : qAsConst(json_cats)) { auto cat_obj = cat.toObject(); auto cat_id = cat_obj["id"].toString(); @@ -225,7 +225,7 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con json = QJsonDocument::fromJson(categories.toUtf8()).object()["tags"].toArray(); cats.insert(QString(), parent); - for (const QJsonValue& obj : json) { + for (const QJsonValue& obj : qAsConst(json)) { auto label = obj.toObject(); QString label_id = label["id"].toString(); @@ -266,7 +266,7 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con json = QJsonDocument::fromJson(feeds.toUtf8()).object()["subscriptions"].toArray(); - for (const QJsonValue& obj : json) { + for (const QJsonValue& obj : qAsConst(json)) { auto subscription = obj.toObject(); QString id = subscription["id"].toString(); QString title = subscription["title"].toString(); @@ -278,7 +278,7 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con continue; } - for (const QJsonValue& cat : assigned_categories) { + for (const QJsonValue& cat : qAsConst(assigned_categories)) { QString potential_id = cat.toObject()["id"].toString(); if (potential_id.contains(QSL("/label/"))) { @@ -301,8 +301,6 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con : subscription["htmlUrl"].toString(); if (!icon_url.isEmpty()) { - QByteArray icon_data; - if (icon_url.startsWith(QSL("//"))) { icon_url = QUrl(baseUrl()).scheme() + QSL(":") + icon_url; } diff --git a/src/librssguard/services/inoreader/inoreadernetworkfactory.cpp b/src/librssguard/services/inoreader/inoreadernetworkfactory.cpp index c479384bd..5d7bbda1c 100755 --- a/src/librssguard/services/inoreader/inoreadernetworkfactory.cpp +++ b/src/librssguard/services/inoreader/inoreadernetworkfactory.cpp @@ -144,8 +144,9 @@ QList InoreaderNetworkFactory::getLabels() { {}, m_service->networkProxy()); QJsonDocument json_lbls = QJsonDocument::fromJson(output); + auto json_tags = json_lbls.object()["tags"].toArray(); - for (const QJsonValue& lbl_val : json_lbls.object()["tags"].toArray()) { + for (const QJsonValue& lbl_val : qAsConst(json_tags)) { QJsonObject lbl_obj = lbl_val.toObject(); if (lbl_obj["type"] == QL1S("tag")) { @@ -400,7 +401,7 @@ RootItem* InoreaderNetworkFactory::decodeFeedCategoriesData(const QString& categ json = QJsonDocument::fromJson(feeds.toUtf8()).object()["subscriptions"].toArray(); - for (const QJsonValue& obj : json) { + for (const QJsonValue& obj : qAsConst(json)) { auto subscription = obj.toObject(); QString id = subscription["id"].toString(); QString title = subscription["title"].toString(); diff --git a/src/librssguard/services/owncloud/owncloudnetworkfactory.cpp b/src/librssguard/services/owncloud/owncloudnetworkfactory.cpp index 4c314a1ac..4873aa1ac 100755 --- a/src/librssguard/services/owncloud/owncloudnetworkfactory.cpp +++ b/src/librssguard/services/owncloud/owncloudnetworkfactory.cpp @@ -494,7 +494,9 @@ RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) cats.insert(QSL("0"), parent); // Process categories first, then process feeds. - for (const QJsonValue& cat : QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray()) { + auto json_folders = QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray(); + + for (const QJsonValue& cat : qAsConst(json_folders)) { QJsonObject item = cat.toObject(); auto* category = new Category(); @@ -507,7 +509,9 @@ RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) } // We have categories added, now add all feeds. - for (const QJsonValue& fed : QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray()) { + auto json_feeds = QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray(); + + for (const QJsonValue& fed : qAsConst(json_feeds)) { QJsonObject item = fed.toObject(); auto* feed = new OwnCloudFeed(); @@ -571,8 +575,9 @@ OwnCloudGetMessagesResponse::~OwnCloudGetMessagesResponse() = default; QListOwnCloudGetMessagesResponse::messages() const { QListmsgs; + auto json_items = m_rawContent["items"].toArray(); - for (const QJsonValue& message : m_rawContent["items"].toArray()) { + for (const QJsonValue& message : qAsConst(json_items)) { QJsonObject message_map = message.toObject(); Message msg; diff --git a/src/librssguard/services/standard/feedparser.cpp b/src/librssguard/services/standard/feedparser.cpp index 1a498574a..e0ea9ca25 100755 --- a/src/librssguard/services/standard/feedparser.cpp +++ b/src/librssguard/services/standard/feedparser.cpp @@ -112,7 +112,7 @@ QStringList FeedParser::textsFromPath(const QDomElement& element, const QString& } if (!current_elements.isEmpty()) { - for (const QDomElement& elem : current_elements) { + for (const QDomElement& elem : qAsConst(current_elements)) { result.append(elem.text()); } } diff --git a/src/librssguard/services/standard/gui/standardfeeddetails.h b/src/librssguard/services/standard/gui/standardfeeddetails.h index 1e1d726c8..4c6ce0dd6 100755 --- a/src/librssguard/services/standard/gui/standardfeeddetails.h +++ b/src/librssguard/services/standard/gui/standardfeeddetails.h @@ -22,6 +22,8 @@ class StandardFeedDetails : public QWidget { public: explicit StandardFeedDetails(QWidget* parent = nullptr); + StandardFeed::SourceType sourceType() const; + private slots: void guessIconOnly(StandardFeed::SourceType source_type, const QString& source, @@ -43,8 +45,6 @@ class StandardFeedDetails : public QWidget { void onLoadIconFromFile(); void onUseDefaultIcon(); - StandardFeed::SourceType sourceType() const; - private: void prepareForNewFeed(RootItem* parent_to_select, const QString& url); void setExistingFeed(StandardFeed* feed); diff --git a/src/librssguard/services/standard/jsonparser.cpp b/src/librssguard/services/standard/jsonparser.cpp index 231b117c1..9d8476c44 100644 --- a/src/librssguard/services/standard/jsonparser.cpp +++ b/src/librssguard/services/standard/jsonparser.cpp @@ -19,7 +19,9 @@ QList JsonParser::messages() const { global_author = json.object()["authors"].toArray().at(0).toObject()["name"].toString(); } - for (const QJsonValue& msg_val : json.object()["items"].toArray()) { + auto json_items = json.object()["items"].toArray(); + + for (const QJsonValue& msg_val : qAsConst(json_items)) { QJsonObject msg_obj = msg_val.toObject(); Message msg; @@ -50,9 +52,10 @@ QList JsonParser::messages() const { msg.m_author = global_author; } - for (const QJsonValue& att : msg_obj["attachments"].toArray()) { + auto json_att = msg_obj["attachments"].toArray(); + + for (const QJsonValue& att : qAsConst(json_att)) { QJsonObject att_obj = att.toObject(); - auto xx = att_obj["url"].toString(); msg.m_enclosures.append(Enclosure(att_obj["url"].toString(), att_obj["mime_type"].toString())); } diff --git a/src/librssguard/services/standard/standardcategory.cpp b/src/librssguard/services/standard/standardcategory.cpp index 8a9f8f913..bb60c1ede 100644 --- a/src/librssguard/services/standard/standardcategory.cpp +++ b/src/librssguard/services/standard/standardcategory.cpp @@ -80,7 +80,9 @@ bool StandardCategory::removeItself() { // Remove all child items (feeds and categories) // from the database. - for (RootItem* child : childItems()) { + auto chi = childItems(); + + for (RootItem* child : qAsConst(chi)) { if (child->kind() == RootItem::Kind::Category) { children_removed &= dynamic_cast(child)->removeItself(); } diff --git a/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp b/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp index 43dd97b8c..b06d43191 100644 --- a/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp +++ b/src/librssguard/services/standard/standardfeedsimportexportmodel.cpp @@ -65,8 +65,9 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray& result) { while (!items_to_process.isEmpty()) { QDomElement active_element = elements_to_use.pop(); RootItem* active_item = items_to_process.pop(); + auto chi = active_item->childItems(); - for (RootItem* child_item : active_item->childItems()) { + for (RootItem* child_item : qAsConst(chi)) { if (!sourceModel()->isItemChecked(child_item)) { continue; } @@ -313,7 +314,9 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m } bool FeedsImportExportModel::exportToTxtURLPerLine(QByteArray& result) { - for (const Feed* const feed : sourceModel()->rootItem()->getSubTreeFeeds()) { + auto stf = sourceModel()->rootItem()->getSubTreeFeeds(); + + for (const Feed* const feed : qAsConst(stf)) { result += feed->source() + QL1S("\n"); } diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index 94ca2c96e..fb0e1e570 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -272,7 +272,9 @@ QList StandardServiceRoot::obtainNewMessages(const QList& feeds, } void StandardServiceRoot::checkArgumentsForFeedAdding() { - for (const QString& arg : qApp->arguments().mid(1)) { + auto args = qApp->arguments().mid(1); + + for (const QString& arg : qAsConst(args)) { checkArgumentForFeedAdding(arg); } } @@ -333,8 +335,9 @@ bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model, while (!new_parents.isEmpty()) { RootItem* target_parent = original_parents.pop(); RootItem* source_parent = new_parents.pop(); + auto sour_chi = source_parent->childItems(); - for (RootItem* source_item : source_parent->childItems()) { + for (RootItem* source_item : qAsConst(sour_chi)) { if (!model->sourceModel()->isItemChecked(source_item)) { // We can skip this item, because it is not checked and should not be imported. // NOTE: All descendants are thus skipped too. @@ -366,8 +369,9 @@ bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model, // already exists. If such a category exists in current parent, then find it and // add descendants to it. RootItem* existing_category = nullptr; + auto tar_chi = target_parent->childItems(); - for (RootItem* child : target_parent->childItems()) { + for (RootItem* child : qAsConst(tar_chi)) { if (child->kind() == RootItem::Kind::Category && child->title() == new_category_title) { existing_category = child; } diff --git a/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp b/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp index 5141c79d3..3e3934b5a 100755 --- a/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp +++ b/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp @@ -697,7 +697,9 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS if (item_id == 0) { // This is "Uncategorized" category, all its feeds belong to top-level root. if (item.contains("items")) { - for (const QJsonValue& child_feed : item["items"].toArray()) { + auto ite = item["items"].toArray(); + + for (const QJsonValue& child_feed : qAsConst(ite)) { pairs.append(QPair(parent, child_feed)); } } @@ -710,7 +712,9 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS act_parent->appendChild(category); if (item.contains("items")) { - for (const QJsonValue& child : item["items"].toArray()) { + auto ite = item["items"].toArray(); + + for (const QJsonValue& child : qAsConst(ite)) { pairs.append(QPair(category, child)); } } @@ -758,8 +762,9 @@ TtRssGetHeadlinesResponse::~TtRssGetHeadlinesResponse() = default; QList TtRssGetHeadlinesResponse::messages(ServiceRoot* root) const { QList messages; auto active_labels = root->labelsNode() != nullptr ? root->labelsNode()->labels() : QList(); + auto json_msgs = m_rawContent["content"].toArray(); - for (const QJsonValue& item : m_rawContent["content"].toArray()) { + for (const QJsonValue& item : qAsConst(json_msgs)) { QJsonObject mapped = item.toObject(); Message message; @@ -769,7 +774,9 @@ QList TtRssGetHeadlinesResponse::messages(ServiceRoot* root) const { message.m_contents = mapped["content"].toString(); message.m_rawContents = QJsonDocument(mapped).toJson(QJsonDocument::JsonFormat::Compact); - for (const QJsonValue& lbl_val : mapped["labels"].toArray()) { + auto json_labels = mapped["labels"].toArray(); + + for (const QJsonValue& lbl_val : qAsConst(json_labels)) { QString lbl_custom_id = QString::number(lbl_val.toArray().at(0).toInt()); Label* label = boolinq::from(active_labels.begin(), active_labels.end()).firstOrDefault([lbl_custom_id](Label* lbl) { return lbl->customId() == lbl_custom_id; @@ -797,7 +804,9 @@ QList TtRssGetHeadlinesResponse::messages(ServiceRoot* root) const { if (mapped.contains(QSL("attachments"))) { // Process enclosures. - for (const QJsonValue& attachment : mapped["attachments"].toArray()) { + auto json_att = mapped["attachments"].toArray(); + + for (const QJsonValue& attachment : qAsConst(json_att)) { QJsonObject mapped_attachemnt = attachment.toObject(); Enclosure enclosure; @@ -869,8 +878,9 @@ TtRssGetLabelsResponse::TtRssGetLabelsResponse(const QString& raw_content) : TtR QList TtRssGetLabelsResponse::labels() const { QList labels; + auto json_labels = m_rawContent["content"].toArray(); - for (const QJsonValue& lbl_val : m_rawContent["content"].toArray()) { + for (const QJsonValue& lbl_val : qAsConst(json_labels)) { QJsonObject lbl_obj = lbl_val.toObject(); Label* lbl = new Label(lbl_obj["caption"].toString(), QColor(lbl_obj["fg_color"].toString()));