mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-14 09:13:08 -07:00
- COSMETIC: Redesigned RSS tab to improve usability
This commit is contained in:
parent
2dc9f10bf4
commit
7e252d3fbd
7 changed files with 180 additions and 203 deletions
128
src/rss_imp.cpp
128
src/rss_imp.cpp
|
@ -43,17 +43,21 @@
|
|||
#include "bittorrent.h"
|
||||
|
||||
// display a right-click menu
|
||||
void RSSImp::displayRSSListMenu(const QPoint&){
|
||||
void RSSImp::displayRSSListMenu(const QPoint& pos){
|
||||
if(!listStreams->indexAt(pos).isValid()) {
|
||||
// No item under the mouse, clear selection
|
||||
listStreams->clearSelection();
|
||||
}
|
||||
QMenu myFinishedListMenu(this);
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
if(selectedItems.size() > 0) {
|
||||
myFinishedListMenu.addAction(actionRefresh);
|
||||
myFinishedListMenu.addAction(actionMark_all_as_read);
|
||||
myFinishedListMenu.addAction(actionUpdate_feed);
|
||||
myFinishedListMenu.addAction(actionMark_items_read);
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionDelete);
|
||||
if(selectedItems.size() == 1) {
|
||||
myFinishedListMenu.addAction(actionRename);
|
||||
myFinishedListMenu.addAction(actionRename_feed);
|
||||
}
|
||||
myFinishedListMenu.addAction(actionDelete_feed);
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionCopy_feed_URL);
|
||||
if(selectedItems.size() == 1) {
|
||||
|
@ -62,8 +66,8 @@ void RSSImp::displayRSSListMenu(const QPoint&){
|
|||
}
|
||||
|
||||
}else{
|
||||
myFinishedListMenu.addAction(actionCreate);
|
||||
myFinishedListMenu.addAction(actionRefreshAll);
|
||||
myFinishedListMenu.addAction(actionNew_subscription);
|
||||
myFinishedListMenu.addAction(actionUpdate_all_feeds);
|
||||
}
|
||||
myFinishedListMenu.exec(QCursor::pos());
|
||||
}
|
||||
|
@ -79,8 +83,36 @@ void RSSImp::displayItemsListMenu(const QPoint&){
|
|||
}
|
||||
|
||||
// add a stream by a button
|
||||
void RSSImp::on_addStream_button_clicked() {
|
||||
createStream();
|
||||
void RSSImp::on_newFeedButton_clicked() {
|
||||
bool ok;
|
||||
QString clip_txt = qApp->clipboard()->text();
|
||||
QString default_url = "http://";
|
||||
if(clip_txt.startsWith("http://", Qt::CaseInsensitive) || clip_txt.startsWith("https://", Qt::CaseInsensitive) || clip_txt.startsWith("ftp://", Qt::CaseInsensitive)) {
|
||||
default_url = clip_txt;
|
||||
}
|
||||
QString newUrl = QInputDialog::getText(this, tr("Please type a rss stream url"), tr("Stream URL:"), QLineEdit::Normal, default_url, &ok);
|
||||
if(ok) {
|
||||
newUrl = newUrl.trimmed();
|
||||
if(!newUrl.isEmpty()){
|
||||
RssStream *stream = rssmanager->addStream(newUrl);
|
||||
if(stream == 0){
|
||||
// Already existing
|
||||
QMessageBox::warning(this, tr("qBittorrent"),
|
||||
tr("This rss feed is already in the list."),
|
||||
QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(listStreams);
|
||||
item->setText(0, stream->getAliasOrUrl() + QString::fromUtf8(" (0)"));
|
||||
item->setText(1, stream->getUrl());
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
item->setToolTip(0, QString::fromUtf8("<b>")+tr("Description:")+QString::fromUtf8("</b> ")+stream->getDescription()+QString::fromUtf8("<br/><b>")+tr("url:")+QString::fromUtf8("</b> ")+stream->getUrl()+QString::fromUtf8("<br/><b>")+tr("Last refresh:")+QString::fromUtf8("</b> ")+stream->getLastRefreshElapsedString());
|
||||
if(listStreams->topLevelItemCount() == 1)
|
||||
selectFirstFeed();
|
||||
rssmanager->refresh(newUrl);
|
||||
rssmanager->saveStreamList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delete a stream by a button
|
||||
|
@ -112,8 +144,12 @@ void RSSImp::on_delStream_button_clicked() {
|
|||
}
|
||||
|
||||
// refresh all streams by a button
|
||||
void RSSImp::on_refreshAll_button_clicked() {
|
||||
refreshAllStreams();
|
||||
void RSSImp::on_updateAllButton_clicked() {
|
||||
unsigned int nbFeeds = listStreams->topLevelItemCount();
|
||||
for(unsigned int i=0; i<nbFeeds; ++i)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
rssmanager->refreshAll();
|
||||
updateLastRefreshedTimeForStreams();
|
||||
}
|
||||
|
||||
void RSSImp::downloadTorrent() {
|
||||
|
@ -174,7 +210,7 @@ void RSSImp::showFeedDownloader() {
|
|||
new FeedDownloaderDlg(this, item->text(1), rssmanager->getFeed(item->text(1))->getAliasOrUrl(), BTSession);
|
||||
}
|
||||
|
||||
void RSSImp::on_actionMark_all_as_read_triggered() {
|
||||
void RSSImp::on_markReadButton_clicked() {
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
QTreeWidgetItem* item;
|
||||
foreach(item, selectedItems){
|
||||
|
@ -187,15 +223,6 @@ void RSSImp::on_actionMark_all_as_read_triggered() {
|
|||
refreshNewsList(listStreams->currentItem());
|
||||
}
|
||||
|
||||
//right-click somewhere, refresh all the streams
|
||||
void RSSImp::refreshAllStreams() {
|
||||
unsigned int nbFeeds = listStreams->topLevelItemCount();
|
||||
for(unsigned int i=0; i<nbFeeds; ++i)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
rssmanager->refreshAll();
|
||||
updateLastRefreshedTimeForStreams();
|
||||
}
|
||||
|
||||
void RSSImp::fillFeedsList() {
|
||||
QList<RssStream*> feeds = rssmanager->getRssFeeds();
|
||||
RssStream* stream;
|
||||
|
@ -208,39 +235,6 @@ void RSSImp::fillFeedsList() {
|
|||
}
|
||||
}
|
||||
|
||||
//right-click, register a new stream
|
||||
void RSSImp::createStream() {
|
||||
bool ok;
|
||||
QString clip_txt = qApp->clipboard()->text();
|
||||
QString default_url = "http://";
|
||||
if(clip_txt.startsWith("http://", Qt::CaseInsensitive) || clip_txt.startsWith("https://", Qt::CaseInsensitive) || clip_txt.startsWith("ftp://", Qt::CaseInsensitive)) {
|
||||
default_url = clip_txt;
|
||||
}
|
||||
QString newUrl = QInputDialog::getText(this, tr("Please type a rss stream url"), tr("Stream URL:"), QLineEdit::Normal, default_url, &ok);
|
||||
if(ok) {
|
||||
newUrl = newUrl.trimmed();
|
||||
if(!newUrl.isEmpty()){
|
||||
RssStream *stream = rssmanager->addStream(newUrl);
|
||||
if(stream == 0){
|
||||
// Already existing
|
||||
QMessageBox::warning(this, tr("qBittorrent"),
|
||||
tr("This rss feed is already in the list."),
|
||||
QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(listStreams);
|
||||
item->setText(0, stream->getAliasOrUrl() + QString::fromUtf8(" (0)"));
|
||||
item->setText(1, stream->getUrl());
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
item->setToolTip(0, QString::fromUtf8("<b>")+tr("Description:")+QString::fromUtf8("</b> ")+stream->getDescription()+QString::fromUtf8("<br/><b>")+tr("url:")+QString::fromUtf8("</b> ")+stream->getUrl()+QString::fromUtf8("<br/><b>")+tr("Last refresh:")+QString::fromUtf8("</b> ")+stream->getLastRefreshElapsedString());
|
||||
if(listStreams->topLevelItemCount() == 1)
|
||||
selectFirstFeed();
|
||||
rssmanager->refresh(newUrl);
|
||||
rssmanager->saveStreamList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RSSImp::updateLastRefreshedTimeForStreams() {
|
||||
unsigned int nbFeeds = listStreams->topLevelItemCount();
|
||||
for(unsigned int i=0; i<nbFeeds; ++i){
|
||||
|
@ -361,18 +355,6 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){
|
|||
setupUi(this);
|
||||
selectedFeedUrl = QString::null;
|
||||
|
||||
// icons of bottom buttons
|
||||
addStream_button->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/subscribe.png")));
|
||||
delStream_button->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/unsubscribe.png")));
|
||||
refreshAll_button->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png")));
|
||||
actionMark_all_as_read->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/button_ok.png")));
|
||||
// icons of right-click menu
|
||||
actionDelete->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/unsubscribe16.png")));
|
||||
actionRename->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/log.png")));
|
||||
actionRefresh->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png")));
|
||||
actionCreate->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/subscribe16.png")));
|
||||
actionRefreshAll->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png")));
|
||||
|
||||
// Hide second column (url)
|
||||
listStreams->hideColumn(1);
|
||||
|
||||
|
@ -384,14 +366,16 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){
|
|||
connect(listStreams, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayRSSListMenu(const QPoint&)));
|
||||
connect(listNews, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayItemsListMenu(const QPoint&)));
|
||||
|
||||
connect(actionDelete, SIGNAL(triggered()), this, SLOT(on_delStream_button_clicked()));
|
||||
connect(actionRename, SIGNAL(triggered()), this, SLOT(renameStream()));
|
||||
connect(actionRefresh, SIGNAL(triggered()), this, SLOT(refreshSelectedStreams()));
|
||||
connect(actionCreate, SIGNAL(triggered()), this, SLOT(createStream()));
|
||||
connect(actionRefreshAll, SIGNAL(triggered()), this, SLOT(refreshAllStreams()));
|
||||
// Feeds list actions
|
||||
connect(actionDelete_feed, SIGNAL(triggered()), this, SLOT(on_delStream_button_clicked()));
|
||||
connect(actionRename_feed, SIGNAL(triggered()), this, SLOT(renameStream()));
|
||||
connect(actionUpdate_feed, SIGNAL(triggered()), this, SLOT(refreshSelectedStreams()));
|
||||
connect(actionNew_subscription, SIGNAL(triggered()), this, SLOT(on_newFeedButton_clicked()));
|
||||
connect(actionUpdate_all_feeds, SIGNAL(triggered()), this, SLOT(on_updateAllButton_clicked()));
|
||||
connect(actionCopy_feed_URL, SIGNAL(triggered()), this, SLOT(copySelectedFeedsURL()));
|
||||
connect(actionRSS_feed_downloader, SIGNAL(triggered()), this, SLOT(showFeedDownloader()));
|
||||
|
||||
connect(actionMark_items_read, SIGNAL(triggered()), this, SLOT(on_markReadButton_clicked()));
|
||||
// News list actions
|
||||
connect(actionOpen_news_URL, SIGNAL(triggered()), this, SLOT(openNewsUrl()));
|
||||
connect(actionDownload_torrent, SIGNAL(triggered()), this, SLOT(downloadTorrent()));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue