From 2eaeead67ca973115983959c9efb518c81fa921a Mon Sep 17 00:00:00 2001 From: ngosang Date: Tue, 4 Aug 2015 17:48:41 +0200 Subject: [PATCH] [RSS] Allow multiple selection in RSS torrents list --- src/gui/rss/rss.ui | 2 +- src/gui/rss/rss_imp.cpp | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/gui/rss/rss.ui b/src/gui/rss/rss.ui index 7d0d348bb..be0509184 100644 --- a/src/gui/rss/rss.ui +++ b/src/gui/rss/rss.ui @@ -139,7 +139,7 @@ p, li { white-space: pre-wrap; } Qt::CustomContextMenu - QAbstractItemView::SingleSelection + QAbstractItemView::ExtendedSelection QAbstractItemView::SelectItems diff --git a/src/gui/rss/rss_imp.cpp b/src/gui/rss/rss_imp.cpp index a9cef41e1..613288a2d 100644 --- a/src/gui/rss/rss_imp.cpp +++ b/src/gui/rss/rss_imp.cpp @@ -340,13 +340,20 @@ void RSSImp::refreshAllFeeds() void RSSImp::downloadSelectedTorrents() { QList selected_items = listArticles->selectedItems(); - foreach (const QListWidgetItem* item, selected_items) { + if (selected_items.size() <= 0) + return; + foreach (QListWidgetItem* item, selected_items) { if (!item) continue; RssFeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); if (!feed) continue; RssArticlePtr article = feed->getItem(item->data(Article::IdRole).toString()); if (!article) continue; + // Mark as read + article->markAsRead(); + item->setData(Article::ColorRole, QVariant(QColor("grey"))); + item->setData(Article::IconRole, QVariant(QIcon(":/icons/sphere.png"))); + if (article->torrentUrl().isEmpty()) continue; if (Preferences::instance()->useAdditionDialog()) @@ -354,19 +361,36 @@ void RSSImp::downloadSelectedTorrents() else BitTorrent::Session::instance()->addTorrent(article->torrentUrl()); } + // Decrement feed nb unread news + updateItemInfos(m_feedList->stickyUnreadItem()); + updateItemInfos(m_feedList->getTreeItemFromUrl(selected_items.first()->data(Article::FeedUrlRole).toString())); } // open the url of the selected RSS articles in the Web browser void RSSImp::openSelectedArticlesUrls() { QList selected_items = listArticles->selectedItems(); - foreach (const QListWidgetItem* item, selected_items) { - RssArticlePtr news = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()) - ->getItem(item->data(Article::IdRole).toString()); - const QString link = news->link(); + if (selected_items.size() <= 0) + return; + foreach (QListWidgetItem* item, selected_items) { + if (!item) continue; + RssFeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); + if (!feed) continue; + RssArticlePtr article = feed->getItem(item->data(Article::IdRole).toString()); + if (!article) continue; + + // Mark as read + article->markAsRead(); + item->setData(Article::ColorRole, QVariant(QColor("grey"))); + item->setData(Article::IconRole, QVariant(QIcon(":/icons/sphere.png"))); + + const QString link = article->link(); if (!link.isEmpty()) QDesktopServices::openUrl(QUrl(link)); } + // Decrement feed nb unread news + updateItemInfos(m_feedList->stickyUnreadItem()); + updateItemInfos(m_feedList->getTreeItemFromUrl(selected_items.first()->data(Article::FeedUrlRole).toString())); } //right-click on stream : give it an alias @@ -543,7 +567,6 @@ void RSSImp::refreshTextBrowser() { QList selection = listArticles->selectedItems(); if (selection.empty()) return; - Q_ASSERT(selection.size() == 1); QListWidgetItem *item = selection.first(); Q_ASSERT(item); if (item == m_currentArticle) return; @@ -708,8 +731,6 @@ RSSImp::RSSImp(QWidget *parent): m_feedList = new FeedListWidget(splitter_h, m_rssManager); splitter_h->insertWidget(0, m_feedList); - listArticles->setSelectionBehavior(QAbstractItemView::SelectItems); - listArticles->setSelectionMode(QAbstractItemView::SingleSelection); editHotkey = new QShortcut(QKeySequence("F2"), m_feedList, 0, 0, Qt::WidgetShortcut); connect(editHotkey, SIGNAL(activated()), SLOT(renameSelectedRssFile())); connect(m_feedList, SIGNAL(doubleClicked(QModelIndex)), SLOT(renameSelectedRssFile()));