Improve coding style

This commit is contained in:
Vladimir Golovnev (Glassez)
2020-11-16 10:02:11 +03:00
parent acad35c5bc
commit c41df9ffbd
147 changed files with 4454 additions and 2227 deletions

View File

@@ -65,13 +65,16 @@ void ArticleListWidget::setRSSItem(RSS::Item *rssItem, bool unreadOnly)
m_unreadOnly = unreadOnly;
m_rssItem = rssItem;
if (m_rssItem) {
if (m_rssItem)
{
connect(m_rssItem, &RSS::Item::newArticle, this, &ArticleListWidget::handleArticleAdded);
connect(m_rssItem, &RSS::Item::articleRead, this, &ArticleListWidget::handleArticleRead);
connect(m_rssItem, &RSS::Item::articleAboutToBeRemoved, this, &ArticleListWidget::handleArticleAboutToBeRemoved);
for (const auto article : asConst(rssItem->articles())) {
if (!(m_unreadOnly && article->isRead())) {
for (const auto article : asConst(rssItem->articles()))
{
if (!(m_unreadOnly && article->isRead()))
{
auto item = createItem(article);
addItem(item);
m_rssArticleToListItemMapping.insert(article, item);
@@ -84,7 +87,8 @@ void ArticleListWidget::setRSSItem(RSS::Item *rssItem, bool unreadOnly)
void ArticleListWidget::handleArticleAdded(RSS::Article *rssArticle)
{
if (!(m_unreadOnly && rssArticle->isRead())) {
if (!(m_unreadOnly && rssArticle->isRead()))
{
auto item = createItem(rssArticle);
insertItem(0, item);
m_rssArticleToListItemMapping.insert(rssArticle, item);
@@ -124,13 +128,15 @@ QListWidgetItem *ArticleListWidget::createItem(RSS::Article *article) const
item->setData(Qt::DisplayRole, article->title());
item->setData(Qt::UserRole, reinterpret_cast<quintptr>(article));
if (article->isRead()) {
if (article->isRead())
{
const QColor defaultColor {palette().color(QPalette::Inactive, QPalette::WindowText)};
const QBrush foregroundBrush {UIThemeManager::instance()->getColor("RSS.ReadArticle", defaultColor)};
item->setData(Qt::ForegroundRole, foregroundBrush);
item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere")));
}
else {
else
{
const QColor defaultColor {palette().color(QPalette::Active, QPalette::Link)};
const QBrush foregroundBrush {UIThemeManager::instance()->getColor("RSS.UnreadArticle", defaultColor)};
item->setData(Qt::ForegroundRole, foregroundBrush);

View File

@@ -181,7 +181,8 @@ void AutomatedRssDownloader::loadFeedList()
{
const QSignalBlocker feedListSignalBlocker(m_ui->listFeeds);
for (const auto feed : asConst(RSS::Session::instance()->feeds())) {
for (const auto feed : asConst(RSS::Session::instance()->feeds()))
{
QListWidgetItem *item = new QListWidgetItem(feed->name(), m_ui->listFeeds);
item->setData(Qt::UserRole, feed->url());
item->setFlags(item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsTristate);
@@ -203,7 +204,8 @@ void AutomatedRssDownloader::updateFeedList()
bool enable = !selection.isEmpty();
for (int i = 0; i < m_ui->listFeeds->count(); ++i) {
for (int i = 0; i < m_ui->listFeeds->count(); ++i)
{
QListWidgetItem *item = m_ui->listFeeds->item(i);
const QString feedURL = item->data(Qt::UserRole).toString();
item->setHidden(!enable);
@@ -211,7 +213,8 @@ void AutomatedRssDownloader::updateFeedList()
bool allEnabled = true;
bool anyEnabled = false;
for (const QListWidgetItem *ruleItem : asConst(selection)) {
for (const QListWidgetItem *ruleItem : asConst(selection))
{
const auto rule = RSS::AutoDownloader::instance()->ruleByName(ruleItem->text());
if (rule.feedURLs().contains(feedURL))
anyEnabled = true;
@@ -236,14 +239,16 @@ void AutomatedRssDownloader::updateRuleDefinitionBox()
{
const QList<QListWidgetItem *> selection = m_ui->listRules->selectedItems();
QListWidgetItem *currentRuleItem = ((selection.count() == 1) ? selection.first() : nullptr);
if (m_currentRuleItem != currentRuleItem) {
if (m_currentRuleItem != currentRuleItem)
{
saveEditedRule(); // Save previous rule first
m_currentRuleItem = currentRuleItem;
//m_ui->listRules->setCurrentItem(m_currentRuleItem);
}
// Update rule definition box
if (m_currentRuleItem) {
if (m_currentRuleItem)
{
m_currentRule = RSS::AutoDownloader::instance()->ruleByName(m_currentRuleItem->text());
m_ui->lineContains->setText(m_currentRule.mustContain());
@@ -290,7 +295,8 @@ void AutomatedRssDownloader::updateRuleDefinitionBox()
updateFieldsToolTips(m_ui->checkRegex->isChecked());
m_ui->ruleDefBox->setEnabled(true);
}
else {
else
{
m_currentRule = RSS::AutoDownloadRule();
clearRuleDefinitionBox();
m_ui->ruleDefBox->setEnabled(false);
@@ -376,7 +382,8 @@ void AutomatedRssDownloader::on_addRuleBtn_clicked()
if (ruleName.isEmpty()) return;
// Check if this rule name already exists
if (RSS::AutoDownloader::instance()->hasRule(ruleName)) {
if (RSS::AutoDownloader::instance()->hasRule(ruleName))
{
QMessageBox::warning(this, tr("Rule name conflict")
, tr("A rule with this name already exists, please choose another name."));
return;
@@ -404,7 +411,8 @@ void AutomatedRssDownloader::on_removeRuleBtn_clicked()
void AutomatedRssDownloader::on_exportBtn_clicked()
{
if (RSS::AutoDownloader::instance()->rules().isEmpty()) {
if (RSS::AutoDownloader::instance()->rules().isEmpty())
{
QMessageBox::warning(this, tr("Invalid action")
, tr("The list is empty, there is nothing to export."));
return;
@@ -416,24 +424,28 @@ void AutomatedRssDownloader::on_exportBtn_clicked()
, QString::fromLatin1("%1;;%2").arg(m_formatFilterJSON, m_formatFilterLegacy), &selectedFilter);
if (path.isEmpty()) return;
const RSS::AutoDownloader::RulesFileFormat format {
const RSS::AutoDownloader::RulesFileFormat format
{
(selectedFilter == m_formatFilterJSON)
? RSS::AutoDownloader::RulesFileFormat::JSON
: RSS::AutoDownloader::RulesFileFormat::Legacy
};
if (format == RSS::AutoDownloader::RulesFileFormat::JSON) {
if (format == RSS::AutoDownloader::RulesFileFormat::JSON)
{
if (!path.endsWith(EXT_JSON, Qt::CaseInsensitive))
path += EXT_JSON;
}
else {
else
{
if (!path.endsWith(EXT_LEGACY, Qt::CaseInsensitive))
path += EXT_LEGACY;
}
QFile file {path};
if (!file.open(QFile::WriteOnly)
|| (file.write(RSS::AutoDownloader::instance()->exportRules(format)) == -1)) {
|| (file.write(RSS::AutoDownloader::instance()->exportRules(format)) == -1))
{
QMessageBox::critical(
this, tr("I/O Error")
, tr("Failed to create the destination file. Reason: %1").arg(file.errorString()));
@@ -450,23 +462,27 @@ void AutomatedRssDownloader::on_importBtn_clicked()
return;
QFile file {path};
if (!file.open(QIODevice::ReadOnly)) {
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::critical(
this, tr("I/O Error")
, tr("Failed to open the file. Reason: %1").arg(file.errorString()));
return;
}
const RSS::AutoDownloader::RulesFileFormat format {
const RSS::AutoDownloader::RulesFileFormat format
{
(selectedFilter == m_formatFilterJSON)
? RSS::AutoDownloader::RulesFileFormat::JSON
: RSS::AutoDownloader::RulesFileFormat::Legacy
};
try {
try
{
RSS::AutoDownloader::instance()->importRules(file.readAll(),format);
}
catch (const RSS::ParsingError &error) {
catch (const RSS::ParsingError &error)
{
QMessageBox::critical(
this, tr("Import Error")
, tr("Failed to import the selected rules file. Reason: %1").arg(error.message()));
@@ -483,8 +499,10 @@ void AutomatedRssDownloader::displayRulesListMenu()
const QList<QListWidgetItem *> selection = m_ui->listRules->selectedItems();
if (!selection.isEmpty()) {
if (selection.count() == 1) {
if (!selection.isEmpty())
{
if (selection.count() == 1)
{
const QAction *delAct = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Delete rule"));
connect(delAct, &QAction::triggered, this, &AutomatedRssDownloader::on_removeRuleBtn_clicked);
@@ -493,7 +511,8 @@ void AutomatedRssDownloader::displayRulesListMenu()
const QAction *renameAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename rule..."));
connect(renameAct, &QAction::triggered, this, &AutomatedRssDownloader::renameSelectedRule);
}
else {
else
{
const QAction *delAct = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Delete selected rules"));
connect(delAct, &QAction::triggered, this, &AutomatedRssDownloader::on_removeRuleBtn_clicked);
}
@@ -513,18 +532,21 @@ void AutomatedRssDownloader::renameSelectedRule()
if (selection.isEmpty()) return;
QListWidgetItem *item = selection.first();
forever {
forever
{
QString newName = AutoExpandableDialog::getText(
this, tr("Rule renaming"), tr("Please type the new rule name")
, QLineEdit::Normal, item->text());
newName = newName.trimmed();
if (newName.isEmpty()) return;
if (RSS::AutoDownloader::instance()->hasRule(newName)) {
if (RSS::AutoDownloader::instance()->hasRule(newName))
{
QMessageBox::warning(this, tr("Rule name conflict")
, tr("A rule with this name already exists, please choose another name."));
}
else {
else
{
// Rename the rule
RSS::AutoDownloader::instance()->renameRule(item->text(), newName);
return;
@@ -545,7 +567,8 @@ void AutomatedRssDownloader::clearSelectedRuleDownloadedEpisodeList()
tr("Are you sure you want to clear the list of downloaded episodes for the selected rule?"),
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
if (reply == QMessageBox::Yes)
{
m_currentRule.setPreviouslyMatchedEpisodes(QStringList());
handleRuleDefinitionChanged();
}
@@ -554,7 +577,8 @@ void AutomatedRssDownloader::clearSelectedRuleDownloadedEpisodeList()
void AutomatedRssDownloader::handleFeedCheckStateChange(QListWidgetItem *feedItem)
{
const QString feedURL = feedItem->data(Qt::UserRole).toString();
for (QListWidgetItem *ruleItem : asConst(m_ui->listRules->selectedItems())) {
for (QListWidgetItem *ruleItem : asConst(m_ui->listRules->selectedItems()))
{
RSS::AutoDownloadRule rule = (ruleItem == m_currentRuleItem
? m_currentRule
: RSS::AutoDownloader::instance()->ruleByName(ruleItem->text()));
@@ -578,11 +602,13 @@ void AutomatedRssDownloader::updateMatchingArticles()
{
m_ui->treeMatchingArticles->clear();
for (const QListWidgetItem *ruleItem : asConst(m_ui->listRules->selectedItems())) {
for (const QListWidgetItem *ruleItem : asConst(m_ui->listRules->selectedItems()))
{
RSS::AutoDownloadRule rule = (ruleItem == m_currentRuleItem
? m_currentRule
: RSS::AutoDownloader::instance()->ruleByName(ruleItem->text()));
for (const QString &feedURL : asConst(rule.feedURLs())) {
for (const QString &feedURL : asConst(rule.feedURLs()))
{
auto feed = RSS::Session::instance()->feedByURL(feedURL);
if (!feed) continue; // feed doesn't exist
@@ -605,16 +631,19 @@ void AutomatedRssDownloader::addFeedArticlesToTree(RSS::Feed *feed, const QStrin
// Check if this feed is already in the tree
QTreeWidgetItem *treeFeedItem = nullptr;
for (int i = 0; i < m_ui->treeMatchingArticles->topLevelItemCount(); ++i) {
for (int i = 0; i < m_ui->treeMatchingArticles->topLevelItemCount(); ++i)
{
QTreeWidgetItem *item = m_ui->treeMatchingArticles->topLevelItem(i);
if (item->data(0, Qt::UserRole).toString() == feed->url()) {
if (item->data(0, Qt::UserRole).toString() == feed->url())
{
treeFeedItem = item;
break;
}
}
// If there is none, create it
if (!treeFeedItem) {
if (!treeFeedItem)
{
treeFeedItem = new QTreeWidgetItem(QStringList() << feed->name());
treeFeedItem->setToolTip(0, feed->name());
QFont f = treeFeedItem->font(0);
@@ -626,10 +655,12 @@ void AutomatedRssDownloader::addFeedArticlesToTree(RSS::Feed *feed, const QStrin
}
// Insert the articles
for (const QString &article : articles) {
for (const QString &article : articles)
{
QPair<QString, QString> key(feed->name(), article);
if (!m_treeListEntries.contains(key)) {
if (!m_treeListEntries.contains(key))
{
m_treeListEntries << key;
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << article);
item->setToolTip(0, article);
@@ -645,10 +676,12 @@ void AutomatedRssDownloader::addFeedArticlesToTree(RSS::Feed *feed, const QStrin
void AutomatedRssDownloader::updateFieldsToolTips(bool regex)
{
QString tip;
if (regex) {
if (regex)
{
tip = "<p>" + tr("Regex mode: use Perl-compatible regular expressions") + "</p>";
}
else {
else
{
tip = "<p>" + tr("Wildcard mode: you can use") + "<ul>"
+ "<li>" + tr("? to match any single character") + "</li>"
+ "<li>" + tr("* to match zero or more of any characters") + "</li>"
@@ -676,7 +709,8 @@ void AutomatedRssDownloader::updateMustLineValidity()
bool valid = true;
QString error;
if (!text.isEmpty()) {
if (!text.isEmpty())
{
QStringList tokens;
if (isRegex)
tokens << text;
@@ -684,9 +718,11 @@ void AutomatedRssDownloader::updateMustLineValidity()
for (const QString &token : asConst(text.split('|')))
tokens << Utils::String::wildcardToRegex(token);
for (const QString &token : asConst(tokens)) {
for (const QString &token : asConst(tokens))
{
QRegularExpression reg(token, QRegularExpression::CaseInsensitiveOption);
if (!reg.isValid()) {
if (!reg.isValid())
{
if (isRegex)
error = tr("Position %1: %2").arg(reg.patternErrorOffset()).arg(reg.errorString());
valid = false;
@@ -695,12 +731,14 @@ void AutomatedRssDownloader::updateMustLineValidity()
}
}
if (valid) {
if (valid)
{
m_ui->lineContains->setStyleSheet("");
m_ui->labelMustStat->setPixmap(QPixmap());
m_ui->labelMustStat->setToolTip("");
}
else {
else
{
m_ui->lineContains->setStyleSheet("QLineEdit { color: #ff0000; }");
m_ui->labelMustStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16));
m_ui->labelMustStat->setToolTip(error);
@@ -714,7 +752,8 @@ void AutomatedRssDownloader::updateMustNotLineValidity()
bool valid = true;
QString error;
if (!text.isEmpty()) {
if (!text.isEmpty())
{
QStringList tokens;
if (isRegex)
tokens << text;
@@ -722,9 +761,11 @@ void AutomatedRssDownloader::updateMustNotLineValidity()
for (const QString &token : asConst(text.split('|')))
tokens << Utils::String::wildcardToRegex(token);
for (const QString &token : asConst(tokens)) {
for (const QString &token : asConst(tokens))
{
QRegularExpression reg(token, QRegularExpression::CaseInsensitiveOption);
if (!reg.isValid()) {
if (!reg.isValid())
{
if (isRegex)
error = tr("Position %1: %2").arg(reg.patternErrorOffset()).arg(reg.errorString());
valid = false;
@@ -733,12 +774,14 @@ void AutomatedRssDownloader::updateMustNotLineValidity()
}
}
if (valid) {
if (valid)
{
m_ui->lineNotContains->setStyleSheet("");
m_ui->labelMustNotStat->setPixmap(QPixmap());
m_ui->labelMustNotStat->setToolTip("");
}
else {
else
{
m_ui->lineNotContains->setStyleSheet("QLineEdit { color: #ff0000; }");
m_ui->labelMustNotStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16));
m_ui->labelMustNotStat->setToolTip(error);
@@ -750,11 +793,13 @@ void AutomatedRssDownloader::updateEpisodeFilterValidity()
const QString text = m_ui->lineEFilter->text();
bool valid = text.isEmpty() || m_episodeRegex->match(text).hasMatch();
if (valid) {
if (valid)
{
m_ui->lineEFilter->setStyleSheet("");
m_ui->labelEpFilterStat->setPixmap(QPixmap());
}
else {
else
{
m_ui->lineEFilter->setStyleSheet("QLineEdit { color: #ff0000; }");
m_ui->labelEpFilterStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16));
}

View File

@@ -97,7 +97,8 @@ void FeedListWidget::handleFeedStateChanged(RSS::Feed *feed)
void FeedListWidget::handleFeedIconLoaded(RSS::Feed *feed)
{
if (!feed->isLoading() && !feed->hasError()) {
if (!feed->isLoading() && !feed->hasError())
{
QTreeWidgetItem *item = m_rssToTreeItemMapping.value(feed);
Q_ASSERT(item);
@@ -107,10 +108,12 @@ void FeedListWidget::handleFeedIconLoaded(RSS::Feed *feed)
void FeedListWidget::handleItemUnreadCountChanged(RSS::Item *rssItem)
{
if (rssItem == RSS::Session::instance()->rootFolder()) {
if (rssItem == RSS::Session::instance()->rootFolder())
{
m_unreadStickyItem->setText(0, tr("Unread (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount()));
}
else {
else
{
QTreeWidgetItem *item = mapRSSItem(rssItem);
Q_ASSERT(item);
item->setData(0, Qt::DisplayRole, QString::fromLatin1("%1 (%2)").arg(rssItem->name(), QString::number(rssItem->unreadCount())));
@@ -151,9 +154,11 @@ QList<QTreeWidgetItem *> FeedListWidget::getAllOpenedFolders(QTreeWidgetItem *pa
{
QList<QTreeWidgetItem *> openedFolders;
int nbChildren = (parent ? parent->childCount() : topLevelItemCount());
for (int i = 0; i < nbChildren; ++i) {
for (int i = 0; i < nbChildren; ++i)
{
QTreeWidgetItem *item (parent ? parent->child(i) : topLevelItem(i));
if (isFolder(item) && item->isExpanded()) {
if (isFolder(item) && item->isExpanded())
{
QList<QTreeWidgetItem *> openedSubfolders = getAllOpenedFolders(item);
if (!openedSubfolders.empty())
openedFolders << openedSubfolders;
@@ -215,7 +220,8 @@ void FeedListWidget::dropEvent(QDropEvent *event)
: RSS::Session::instance()->rootFolder());
// move as much items as possible
for (QTreeWidgetItem *srcItem : asConst(selectedItems())) {
for (QTreeWidgetItem *srcItem : asConst(selectedItems()))
{
auto rssItem = getRSSItem(srcItem);
RSS::Session::instance()->moveItem(rssItem, RSS::Item::joinPath(destFolder->path(), rssItem->name()));
}
@@ -233,7 +239,8 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem
m_rssToTreeItemMapping[rssItem] = item;
QIcon icon;
if (auto feed = qobject_cast<RSS::Feed *>(rssItem)) {
if (auto feed = qobject_cast<RSS::Feed *>(rssItem))
{
if (feed->isLoading())
icon = UIThemeManager::instance()->getIcon(QLatin1String("loading"));
else if (feed->hasError())
@@ -243,7 +250,8 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem
else
icon = UIThemeManager::instance()->getIcon(QLatin1String("application-rss+xml"));
}
else {
else
{
icon = UIThemeManager::instance()->getIcon(QLatin1String("inode-directory"));
}
item->setData(0, Qt::DecorationRole, icon);
@@ -260,7 +268,8 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem
void FeedListWidget::fill(QTreeWidgetItem *parent, RSS::Folder *rssParent)
{
for (const auto rssItem : asConst(rssParent->items())) {
for (const auto rssItem : asConst(rssParent->items()))
{
QTreeWidgetItem *item = createItem(rssItem, parent);
// Recursive call if this is a folder.
if (auto folder = qobject_cast<RSS::Folder *>(rssItem))

View File

@@ -59,20 +59,23 @@ HtmlBrowser::~HtmlBrowser()
QVariant HtmlBrowser::loadResource(int type, const QUrl &name)
{
if (type == QTextDocument::ImageResource) {
if (type == QTextDocument::ImageResource)
{
QUrl url(name);
if (url.scheme().isEmpty())
url.setScheme("http");
QIODevice *dev = m_diskCache->data(url);
if (dev) {
if (dev)
{
qDebug() << "HtmlBrowser::loadResource() cache " << url.toString();
QByteArray res = dev->readAll();
delete dev;
return res;
}
if (!m_activeRequests.contains(url)) {
if (!m_activeRequests.contains(url))
{
m_activeRequests.insert(url, true);
qDebug() << "HtmlBrowser::loadResource() get " << url.toString();
QNetworkRequest req(url);
@@ -90,10 +93,12 @@ void HtmlBrowser::resourceLoaded(QNetworkReply *reply)
{
m_activeRequests.remove(reply->request().url());
if ((reply->error() == QNetworkReply::NoError) && (reply->size() > 0)) {
if ((reply->error() == QNetworkReply::NoError) && (reply->size() > 0))
{
qDebug() << "HtmlBrowser::resourceLoaded() save " << reply->request().url().toString();
}
else {
else
{
// If resource failed to load, replace it with warning icon and store it in cache for 1 day.
// Otherwise HTMLBrowser will keep trying to download it every time article is displayed,
// since it's not possible to cache error responses.

View File

@@ -150,13 +150,16 @@ void RSSWidget::displayRSSListMenu(const QPoint &pos)
menu->setAttribute(Qt::WA_DeleteOnClose);
const QList<QTreeWidgetItem *> selectedItems = m_feedListWidget->selectedItems();
if (!selectedItems.isEmpty()) {
if (!selectedItems.isEmpty())
{
menu->addAction(m_ui->actionUpdate);
menu->addAction(m_ui->actionMarkItemsRead);
menu->addSeparator();
if (selectedItems.size() == 1) {
if (selectedItems.first() != m_feedListWidget->stickyUnreadItem()) {
if (selectedItems.size() == 1)
{
if (selectedItems.first() != m_feedListWidget->stickyUnreadItem())
{
menu->addAction(m_ui->actionRename);
menu->addAction(m_ui->actionDelete);
menu->addSeparator();
@@ -164,19 +167,22 @@ void RSSWidget::displayRSSListMenu(const QPoint &pos)
menu->addAction(m_ui->actionNewFolder);
}
}
else {
else
{
menu->addAction(m_ui->actionDelete);
menu->addSeparator();
}
menu->addAction(m_ui->actionNewSubscription);
if (m_feedListWidget->isFeed(selectedItems.first())) {
if (m_feedListWidget->isFeed(selectedItems.first()))
{
menu->addSeparator();
menu->addAction(m_ui->actionCopyFeedURL);
}
}
else {
else
{
menu->addAction(m_ui->actionNewSubscription);
menu->addAction(m_ui->actionNewFolder);
menu->addSeparator();
@@ -190,7 +196,8 @@ void RSSWidget::displayItemsListMenu(const QPoint &)
{
bool hasTorrent = false;
bool hasLink = false;
for (const QListWidgetItem *item : asConst(m_articleListWidget->selectedItems())) {
for (const QListWidgetItem *item : asConst(m_articleListWidget->selectedItems()))
{
auto article = reinterpret_cast<RSS::Article *>(item->data(Qt::UserRole).value<quintptr>());
Q_ASSERT(article);
@@ -228,7 +235,8 @@ void RSSWidget::askNewFolder()
// Determine destination folder for new item
QTreeWidgetItem *destItem = nullptr;
QList<QTreeWidgetItem *> selectedItems = m_feedListWidget->selectedItems();
if (!selectedItems.empty()) {
if (!selectedItems.empty())
{
destItem = selectedItems.first();
if (!m_feedListWidget->isFolder(destItem))
destItem = destItem->parent();
@@ -268,7 +276,8 @@ void RSSWidget::on_newFeedButton_clicked()
// Determine destination folder for new item
QTreeWidgetItem *destItem = nullptr;
QList<QTreeWidgetItem *> selectedItems = m_feedListWidget->selectedItems();
if (!selectedItems.empty()) {
if (!selectedItems.empty())
{
destItem = selectedItems.first();
if (!m_feedListWidget->isFolder(destItem))
destItem = destItem->parent();
@@ -313,13 +322,17 @@ void RSSWidget::deleteSelectedItems()
void RSSWidget::loadFoldersOpenState()
{
const QStringList openedFolders = Preferences::instance()->getRssOpenFolders();
for (const QString &varPath : openedFolders) {
for (const QString &varPath : openedFolders)
{
QTreeWidgetItem *parent = nullptr;
for (const QString &name : asConst(varPath.split('\\'))) {
for (const QString &name : asConst(varPath.split('\\')))
{
int nbChildren = (parent ? parent->childCount() : m_feedListWidget->topLevelItemCount());
for (int i = 0; i < nbChildren; ++i) {
for (int i = 0; i < nbChildren; ++i)
{
QTreeWidgetItem *child = (parent ? parent->child(i) : m_feedListWidget->topLevelItem(i));
if (m_feedListWidget->getRSSItem(child)->name() == name) {
if (m_feedListWidget->getRSSItem(child)->name() == name)
{
parent = child;
parent->setExpanded(true);
break;
@@ -344,14 +357,16 @@ void RSSWidget::refreshAllFeeds()
void RSSWidget::downloadSelectedTorrents()
{
for (QListWidgetItem *item : asConst(m_articleListWidget->selectedItems())) {
for (QListWidgetItem *item : asConst(m_articleListWidget->selectedItems()))
{
auto article = reinterpret_cast<RSS::Article *>(item->data(Qt::UserRole).value<quintptr>());
Q_ASSERT(article);
// Mark as read
article->markAsRead();
if (!article->torrentUrl().isEmpty()) {
if (!article->torrentUrl().isEmpty())
{
if (AddNewTorrentDialog::isEnabled())
AddNewTorrentDialog::show(article->torrentUrl(), window());
else
@@ -363,7 +378,8 @@ void RSSWidget::downloadSelectedTorrents()
// open the url of the selected RSS articles in the Web browser
void RSSWidget::openSelectedArticlesUrls()
{
for (QListWidgetItem *item : asConst(m_articleListWidget->selectedItems())) {
for (QListWidgetItem *item : asConst(m_articleListWidget->selectedItems()))
{
auto article = reinterpret_cast<RSS::Article *>(item->data(Qt::UserRole).value<quintptr>());
Q_ASSERT(article);
@@ -387,7 +403,8 @@ void RSSWidget::renameSelectedRSSItem()
RSS::Item *rssItem = m_feedListWidget->getRSSItem(item);
const QString parentPath = RSS::Item::parentPath(rssItem->path());
bool ok = false;
do {
do
{
QString newName = AutoExpandableDialog::getText(
this, tr("Please choose a new name for this RSS feed"), tr("New feed name:")
, QLineEdit::Normal, rssItem->name(), &ok);
@@ -395,7 +412,8 @@ void RSSWidget::renameSelectedRSSItem()
if (!ok) return;
QString error;
if (!RSS::Session::instance()->moveItem(rssItem, RSS::Item::joinPath(parentPath, newName), &error)) {
if (!RSS::Session::instance()->moveItem(rssItem, RSS::Item::joinPath(parentPath, newName), &error))
{
QMessageBox::warning(nullptr, tr("Rename failed"), error);
ok = false;
}
@@ -404,8 +422,10 @@ void RSSWidget::renameSelectedRSSItem()
void RSSWidget::refreshSelectedItems()
{
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems())) {
if (item == m_feedListWidget->stickyUnreadItem()) {
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems()))
{
if (item == m_feedListWidget->stickyUnreadItem())
{
refreshAllFeeds();
return;
}
@@ -417,7 +437,8 @@ void RSSWidget::refreshSelectedItems()
void RSSWidget::copySelectedFeedsURL()
{
QStringList URLs;
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems())) {
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems()))
{
if (auto feed = qobject_cast<RSS::Feed *>(m_feedListWidget->getRSSItem(item)))
URLs << feed->url();
}
@@ -432,7 +453,8 @@ void RSSWidget::handleCurrentFeedItemChanged(QTreeWidgetItem *currentItem)
void RSSWidget::on_markReadButton_clicked()
{
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems())) {
for (QTreeWidgetItem *item : asConst(m_feedListWidget->selectedItems()))
{
m_feedListWidget->getRSSItem(item)->markAsRead();
if (item == m_feedListWidget->stickyUnreadItem())
break; // all items was read
@@ -444,7 +466,8 @@ void RSSWidget::handleCurrentArticleItemChanged(QListWidgetItem *currentItem, QL
{
m_ui->textBrowser->clear();
if (previousItem) {
if (previousItem)
{
auto article = m_articleListWidget->getRSSArticle(previousItem);
Q_ASSERT(article);
article->markAsRead();
@@ -468,10 +491,12 @@ void RSSWidget::handleCurrentArticleItemChanged(QListWidgetItem *currentItem, QL
html += QString::fromLatin1("<div style='background-color: \"%1\";'><b>%2</b>%3</div>").arg(alternateBaseColor, tr("Author: "), article->author());
html += "</div>"
"<div style='margin-left: 5px; margin-right: 5px;'>";
if (Qt::mightBeRichText(article->description())) {
if (Qt::mightBeRichText(article->description()))
{
html += article->description();
}
else {
else
{
QString description = article->description();
QRegularExpression rx;
// If description is plain text, replace BBCode tags with HTML and wrap everything in <pre></pre> so it looks nice