mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-14 17:23:07 -07:00
- Mostly rewritten RSS part
* Fixed a lot of bugs * Improved CPU & memory usage * Improved usability Please report any bug you may experience.
This commit is contained in:
parent
2589d4e682
commit
dcb6642394
5 changed files with 404 additions and 379 deletions
356
src/rss_imp.cpp
356
src/rss_imp.cpp
|
@ -31,12 +31,13 @@
|
|||
|
||||
// display a right-click menu
|
||||
void RSSImp::displayRSSListMenu(const QPoint& pos){
|
||||
moveCurrentItem();
|
||||
QMenu myFinishedListMenu(this);
|
||||
QTreeWidgetItem* item = listStreams->itemAt(pos);
|
||||
if(item!=NULL) {
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
if(item != 0) {
|
||||
myFinishedListMenu.addAction(actionDelete);
|
||||
myFinishedListMenu.addAction(actionRename);
|
||||
if(selectedItems.size() == 1)
|
||||
myFinishedListMenu.addAction(actionRename);
|
||||
myFinishedListMenu.addAction(actionRefresh);
|
||||
}else{
|
||||
myFinishedListMenu.addAction(actionCreate);
|
||||
|
@ -52,19 +53,29 @@
|
|||
|
||||
// delete a stream by a button
|
||||
void RSSImp::on_delStream_button_clicked() {
|
||||
if(getNumStreamSelected()<0 || rssmanager->getNbStreams()==0) {
|
||||
qDebug("no stream selected");
|
||||
return;
|
||||
}else {
|
||||
int ok = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to delete this stream from the list?"),
|
||||
tr("&Yes"), tr("&No"),
|
||||
QString(), 0, 1);
|
||||
if(ok==0) {
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
rssmanager->removeStream(rssmanager->getStream(getNumStreamSelected()));
|
||||
refreshStreamList();
|
||||
}
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
QTreeWidgetItem *item;
|
||||
if(!selectedItems.size()) return;
|
||||
int ret = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to delete this stream from the list?"),
|
||||
tr("&Yes"), tr("&No"),
|
||||
QString(), 0, 1);
|
||||
if(!ret) {
|
||||
QStringList urlsToDelete;
|
||||
foreach(item, selectedItems){
|
||||
QString url = item->data(1, Qt::DisplayRole).toString();
|
||||
urlsToDelete << url;
|
||||
}
|
||||
QString url;
|
||||
foreach(url, urlsToDelete){
|
||||
if(selectedFeedUrl == url){
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
}
|
||||
rssmanager->removeStream(url);
|
||||
delete getTreeItemFromUrl(url);
|
||||
}
|
||||
if(urlsToDelete.size())
|
||||
rssmanager->saveStreamList();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,205 +84,167 @@
|
|||
refreshAllStreams();
|
||||
}
|
||||
|
||||
// display the news of a stream when click on it
|
||||
void RSSImp::on_listStreams_clicked() {
|
||||
if(rssmanager->getNbStreams()>0) {
|
||||
moveCurrentItem();
|
||||
rssmanager->getStream(getNumStreamSelected())->setRead();
|
||||
// update the color of the stream, is it old ?
|
||||
updateStreamName(getNumStreamSelected(), LATENCY);
|
||||
refreshNewsList();
|
||||
}
|
||||
}
|
||||
|
||||
// display the content of a new when clicked on it
|
||||
void RSSImp::on_listNews_clicked() {
|
||||
listNews->item(listNews->currentRow())->setData(Qt::ForegroundRole, QVariant(QColor("grey")));
|
||||
listNews->item(listNews->currentRow())->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png")));
|
||||
refreshTextBrowser();
|
||||
}
|
||||
|
||||
// open the url of the news in a browser
|
||||
void RSSImp::on_listNews_doubleClicked() {
|
||||
if(getNumStreamSelected()>=0 && listNews->currentRow()>=0 && rssmanager->getStream(getNumStreamSelected())->getListSize()>0) {
|
||||
RssItem* currentItem = rssmanager->getStream(getNumStreamSelected())->getItem(listNews->currentRow());
|
||||
if(currentItem->getLink()!=NULL && currentItem->getLink().length()>5)
|
||||
QDesktopServices::openUrl(QUrl(currentItem->getLink()));
|
||||
}
|
||||
void RSSImp::openInBrowser(QListWidgetItem *item) {
|
||||
RssItem* news = rssmanager->getFeed(selectedFeedUrl)->getItem(listNews->row(item));
|
||||
QString link = news->getLink();
|
||||
if(!link.isEmpty())
|
||||
QDesktopServices::openUrl(QUrl(link));
|
||||
}
|
||||
|
||||
// move the current selection if it is not a toplevelitem (id : stream)
|
||||
void RSSImp::moveCurrentItem() {
|
||||
if(getNumStreamSelected()<0) {
|
||||
int index = listStreams->indexOfTopLevelItem(listStreams->currentItem()->parent());
|
||||
if(index>=0)
|
||||
listStreams->setCurrentItem(listStreams->topLevelItem(index));
|
||||
else
|
||||
listStreams->setCurrentItem(listStreams->topLevelItem(0));
|
||||
}
|
||||
}
|
||||
|
||||
//right-clik on stream : delete it
|
||||
void RSSImp::deleteStream() {
|
||||
if(rssmanager->getNbStreams()==0) {
|
||||
qDebug("no stream selected");
|
||||
return;
|
||||
}else {
|
||||
int ok = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to delete this stream from the list ?"), tr("&Yes"), tr("&No"), QString(), 0, 1);
|
||||
if(ok==0) {
|
||||
moveCurrentItem();
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
rssmanager->removeStream(rssmanager->getStream(getNumStreamSelected()));
|
||||
refreshStreamList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//right-clik on stream : give him an alias
|
||||
//right-click on stream : give him an alias
|
||||
void RSSImp::renameStream() {
|
||||
if(rssmanager->getNbStreams()==0) {
|
||||
qDebug("no stream selected");
|
||||
return;
|
||||
}else {
|
||||
moveCurrentItem();
|
||||
bool ok;
|
||||
short index = getNumStreamSelected();
|
||||
QString newAlias = QInputDialog::getText(this, tr("Please choose a new name for this stream"), tr("New stream name:"), QLineEdit::Normal, rssmanager->getStream(index)->getAlias(), &ok);
|
||||
if(ok) {
|
||||
rssmanager->setAlias(index, newAlias);
|
||||
updateStreamName(index, NEWS);
|
||||
}
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
Q_ASSERT(selectedItems.size() == 1);
|
||||
QTreeWidgetItem *item = selectedItems.at(0);
|
||||
QString url = item->data(1, Qt::DisplayRole).toString();
|
||||
bool ok;
|
||||
QString newAlias = QInputDialog::getText(this, tr("Please choose a new name for this stream"), tr("New stream name:"), QLineEdit::Normal, rssmanager->getFeed(url)->getAlias(), &ok);
|
||||
if(ok) {
|
||||
rssmanager->setAlias(url, newAlias);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//right-clik on stream : refresh it
|
||||
void RSSImp::refreshStream() {
|
||||
if(rssmanager->getNbStreams()>0) {
|
||||
moveCurrentItem();
|
||||
short index = getNumStreamSelected();
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
listStreams->topLevelItem(index)->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
rssmanager->refresh(index);
|
||||
//right-click on stream : refresh it
|
||||
void RSSImp::refreshSelectedStreams() {
|
||||
QList<QTreeWidgetItem*> selectedItems = listStreams->selectedItems();
|
||||
QTreeWidgetItem* item;
|
||||
foreach(item, selectedItems){
|
||||
QString url = item->text(1);
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
rssmanager->refresh(url);
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
}
|
||||
updateLastRefreshedTimeForStreams();
|
||||
}
|
||||
|
||||
//right-click somewhere, refresh all the streams
|
||||
void RSSImp::refreshAllStreams() {
|
||||
textBrowser->clear();
|
||||
listNews->clear();
|
||||
unsigned short nbstream = rssmanager->getNbStreams();
|
||||
for(unsigned short i=0; i<nbstream; ++i)
|
||||
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;
|
||||
foreach(stream, feeds){
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(listStreams);
|
||||
item->setData(0, Qt::DisplayRole, stream->getAliasOrUrl()+ QString(" (0)"));
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
item->setData(1, Qt::DisplayRole, stream->getUrl());
|
||||
item->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+stream->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+stream->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+stream->getLastRefreshElapsedString());
|
||||
}
|
||||
}
|
||||
|
||||
//right-click, register a new stream
|
||||
void RSSImp::createStream() {
|
||||
bool ok;
|
||||
QString newUrl = QInputDialog::getText(this, tr("Please type a rss stream url"), tr("Stream URL:"), QLineEdit::Normal, "http://", &ok);
|
||||
if(ok) {
|
||||
newUrl = newUrl.trimmed();
|
||||
if(!newUrl.isEmpty() && newUrl != "http://"){
|
||||
rssmanager->addStream(newUrl);
|
||||
refreshStreamList();
|
||||
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(" (0)"));
|
||||
item->setText(1, stream->getUrl());
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png")));
|
||||
item->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+stream->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+stream->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+stream->getLastRefreshElapsedString());
|
||||
if(listStreams->topLevelItemCount() == 1)
|
||||
selectFirstFeed();
|
||||
rssmanager->refresh(newUrl);
|
||||
rssmanager->saveStreamList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fills the streamList
|
||||
void RSSImp::refreshStreamList() {
|
||||
qDebug("Refreshing stream list");
|
||||
unsigned short nbstream = rssmanager->getNbStreams();
|
||||
listStreams->clear();
|
||||
QList<QTreeWidgetItem *> streams;
|
||||
for(unsigned short i=0; i<nbstream; ++i) {
|
||||
QTreeWidgetItem* stream = new QTreeWidgetItem(listStreams);
|
||||
updateStreamName(i, NEWS);
|
||||
stream->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+rssmanager->getStream(i)->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+rssmanager->getStream(i)->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+rssmanager->getStream(i)->getLastRefreshElapsedString());
|
||||
void RSSImp::updateLastRefreshedTimeForStreams() {
|
||||
qDebug("Refreshing last refresh time in rss list");
|
||||
unsigned int nbFeeds = listStreams->topLevelItemCount();
|
||||
for(unsigned int i=0; i<nbFeeds; ++i){
|
||||
QTreeWidgetItem* item = listStreams->topLevelItem(i);
|
||||
RssStream* stream = rssmanager->getFeed(item->data(1, Qt::DisplayRole).toString());
|
||||
item->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+stream->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+stream->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+stream->getLastRefreshElapsedString());
|
||||
}
|
||||
qDebug("Stream list refreshed");
|
||||
}
|
||||
|
||||
// fills the newsList
|
||||
void RSSImp::refreshNewsList() {
|
||||
if(rssmanager->getNbStreams()>0) {
|
||||
RssStream* currentstream = rssmanager->getStream(getNumStreamSelected());
|
||||
listNews->clear();
|
||||
unsigned short currentStreamSize = currentstream->getListSize();
|
||||
for(unsigned short i=0; i<currentStreamSize; ++i) {
|
||||
new QListWidgetItem(currentstream->getItem(i)->getTitle(), listNews);
|
||||
if(currentstream->getItem(i)->isRead()){
|
||||
listNews->item(i)->setData(Qt::ForegroundRole, QVariant(QColor("grey")));
|
||||
listNews->item(i)->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png")));
|
||||
} else {
|
||||
listNews->item(i)->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere2.png")));
|
||||
listNews->item(i)->setData(Qt::ForegroundRole, QVariant(QColor("blue")));
|
||||
}
|
||||
if(i%2==0)
|
||||
listNews->item(i)->setData(Qt::BackgroundRole, QVariant(QColor(0, 255, 255, 20)));
|
||||
}
|
||||
void RSSImp::refreshNewsList(QTreeWidgetItem* item, int) {
|
||||
selectedFeedUrl = item->text(1);
|
||||
RssStream *stream = rssmanager->getFeed(selectedFeedUrl);
|
||||
listNews->clear();
|
||||
qDebug("Getting the list of news");
|
||||
QList<RssItem*> news = stream->getNewsList();
|
||||
qDebug("Got the list of news");
|
||||
RssItem* article;
|
||||
foreach(article, news){
|
||||
QListWidgetItem* it = new QListWidgetItem(article->getTitle(), listNews);
|
||||
if(article->isRead()){
|
||||
it->setData(Qt::ForegroundRole, QVariant(QColor("grey")));
|
||||
it->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png")));
|
||||
}else{
|
||||
it->setData(Qt::ForegroundRole, QVariant(QColor("blue")));
|
||||
it->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere2.png")));
|
||||
}
|
||||
}
|
||||
qDebug("Added all news to the GUI");
|
||||
selectFirstNews();
|
||||
qDebug("First news selected");
|
||||
}
|
||||
|
||||
// display a news
|
||||
void RSSImp::refreshTextBrowser() {
|
||||
if(getNumStreamSelected()>=0 && listNews->currentRow()>=0) {
|
||||
RssItem* currentitem = rssmanager->getStream(getNumStreamSelected())->getItem(listNews->currentRow());
|
||||
textBrowser->setHtml(currentitem->getTitle()+" : \n"+currentitem->getDescription());
|
||||
currentitem->setRead();
|
||||
}
|
||||
void RSSImp::refreshTextBrowser(QListWidgetItem *item) {
|
||||
RssItem* article = rssmanager->getFeed(selectedFeedUrl)->getItem(listNews->row(item));
|
||||
textBrowser->setHtml(article->getTitle()+":<br/>"+article->getDescription());
|
||||
article->setRead();
|
||||
item->setData(Qt::ForegroundRole, QVariant(QColor("grey")));
|
||||
item->setData(Qt::DecorationRole, QVariant(QIcon(":/Icons/sphere.png")));
|
||||
updateFeedNbNews(selectedFeedUrl);
|
||||
}
|
||||
|
||||
void RSSImp::updateLastRefreshedTimeForStreams() {
|
||||
unsigned int nbStreams = rssmanager->getNbStreams();
|
||||
for(unsigned int i=0; i<nbStreams; ++i){
|
||||
listStreams->topLevelItem(i)->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+rssmanager->getStream(i)->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+rssmanager->getStream(i)->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+rssmanager->getStream(i)->getLastRefreshElapsedString());
|
||||
QTreeWidgetItem* RSSImp::getTreeItemFromUrl(QString url) const{
|
||||
unsigned int nbItems = listStreams->topLevelItemCount();
|
||||
for(unsigned int i = 0; i<nbItems; ++i){
|
||||
QTreeWidgetItem* item = listStreams->topLevelItem(i);
|
||||
if(item->text(1) == url)
|
||||
return item;
|
||||
}
|
||||
qDebug("Cannot find url %s in feeds list", (const char*)url.toUtf8());
|
||||
Q_ASSERT(false); // Should never go through here
|
||||
return (QTreeWidgetItem*)0;
|
||||
}
|
||||
|
||||
// show the number of news for a stream, his status and an icon
|
||||
void RSSImp::updateStreamName(const unsigned short& i, const unsigned short& type) {
|
||||
// icon has just been download
|
||||
if(type == ICON) {
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(rssmanager->getStream(i)->getIconPath())));
|
||||
}
|
||||
// on click, show the age of the stream
|
||||
if(type == LATENCY) {
|
||||
unsigned short nbitem = rssmanager->getStream(i)->getNbNonRead();
|
||||
listStreams->topLevelItem(i)->setText(0,rssmanager->getStream(i)->getAlias().toUtf8()+" ("+QString::number(nbitem,10).toUtf8()+")");
|
||||
if(nbitem==0)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("red")));
|
||||
else if(rssmanager->getStream(i)->getLastRefreshElapsed()>REFRESH_MAX_LATENCY)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("orange")));
|
||||
else
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("green")));
|
||||
listStreams->topLevelItem(getNumStreamSelected())->setData(0,Qt::BackgroundRole, QVariant(QColor("white")));
|
||||
}
|
||||
// when news are refreshed, update all informations
|
||||
if(type == NEWS) {
|
||||
unsigned short nbitem = rssmanager->getStream(i)->getListSize();
|
||||
listStreams->topLevelItem(i)->setText(0,rssmanager->getStream(i)->getAlias().toUtf8()+" ("+QString::number(nbitem,10).toUtf8()+")");
|
||||
if(nbitem==0)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("red")));
|
||||
else if(rssmanager->getStream(i)->getLastRefreshElapsed()>REFRESH_MAX_LATENCY)
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("orange")));
|
||||
else
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::ForegroundRole, QVariant(QColor("green")));
|
||||
void RSSImp::updateFeedIcon(QString url, QString icon_path){
|
||||
QTreeWidgetItem *item = getTreeItemFromUrl(url);
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(icon_path)));
|
||||
}
|
||||
|
||||
if(!rssmanager->getStream(i)->isRead())
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::BackgroundRole, QVariant(QColor(0, 255, 0, 20)));
|
||||
if(getNumStreamSelected()==i) {
|
||||
listNews->clear();
|
||||
refreshNewsList();
|
||||
}
|
||||
listStreams->topLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(rssmanager->getStream(i)->getIconPath())));
|
||||
// update description and display last refresh
|
||||
listStreams->topLevelItem(i)->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+rssmanager->getStream(i)->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+rssmanager->getStream(i)->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+rssmanager->getStream(i)->getLastRefreshElapsedString());
|
||||
void RSSImp::updateFeedNbNews(QString url){
|
||||
QTreeWidgetItem *item = getTreeItemFromUrl(url);
|
||||
RssStream *stream = rssmanager->getFeed(url);
|
||||
item->setText(0, stream->getAliasOrUrl() + QString(" (") + QString::number(stream->getNbUnRead(), 10)+ String(")"));
|
||||
}
|
||||
|
||||
void RSSImp::updateFeedInfos(QString url, QString aliasOrUrl, unsigned int nbUnread){
|
||||
QTreeWidgetItem *item = getTreeItemFromUrl(url);
|
||||
RssStream *stream = rssmanager->getFeed(url);
|
||||
item->setText(0, aliasOrUrl + QString(" (") + QString::number(nbUnread, 10)+ String(")"));
|
||||
item->setData(0,Qt::DecorationRole, QVariant(QIcon(stream->getIconPath())));
|
||||
item->setToolTip(0, QString("<b>")+tr("Description:")+QString("</b> ")+stream->getDescription()+QString("<br/><b>")+tr("url:")+QString("</b> ")+stream->getUrl()+QString("<br/><b>")+tr("Last refresh:")+QString("</b> ")+stream->getLastRefreshElapsedString());
|
||||
// If the feed is selected, update the displayed news
|
||||
if(selectedFeedUrl == url){
|
||||
refreshNewsList(getTreeItemFromUrl(url), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -288,29 +261,50 @@
|
|||
actionCreate->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/add.png")));
|
||||
actionRefreshAll->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png")));
|
||||
|
||||
// Hide second column (url)
|
||||
listStreams->hideColumn(1);
|
||||
|
||||
rssmanager = new RssManager();
|
||||
connect(rssmanager, SIGNAL(streamNeedRefresh(const unsigned short&, const unsigned short&)), this, SLOT(updateStreamName(const unsigned short&, const unsigned short&)));
|
||||
fillFeedsList();
|
||||
connect(rssmanager, SIGNAL(feedInfosChanged(QString, QString, unsigned int)), this, SLOT(updateFeedInfos(QString, QString, unsigned int)));
|
||||
connect(rssmanager, SIGNAL(feedIconChanged(QString, QString)), this, SLOT(updateFeedIcon(QString, QString)));
|
||||
|
||||
connect(listStreams, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayRSSListMenu(const QPoint&)));
|
||||
connect(actionDelete, SIGNAL(triggered()), this, SLOT(deleteStream()));
|
||||
connect(actionDelete, SIGNAL(triggered()), this, SLOT(on_delStream_button_clicked()));
|
||||
connect(actionRename, SIGNAL(triggered()), this, SLOT(renameStream()));
|
||||
connect(actionRefresh, SIGNAL(triggered()), this, SLOT(refreshStream()));
|
||||
connect(actionRefresh, SIGNAL(triggered()), this, SLOT(refreshSelectedStreams()));
|
||||
connect(actionCreate, SIGNAL(triggered()), this, SLOT(createStream()));
|
||||
connect(actionRefreshAll, SIGNAL(triggered()), this, SLOT(refreshAllStreams()));
|
||||
connect(listStreams, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(refreshNewsList(QTreeWidgetItem*,int)));
|
||||
connect(listNews, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(refreshTextBrowser(QListWidgetItem *)));
|
||||
connect(listNews, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(openInBrowser(QListWidgetItem *)));
|
||||
refreshTimeTimer = new QTimer(this);
|
||||
connect(refreshTimeTimer, SIGNAL(timeout()), this, SLOT(updateLastRefreshedTimeForStreams()));
|
||||
refreshTimeTimer->start(60000); // 1min
|
||||
refreshStreamList();
|
||||
refreshTextBrowser();
|
||||
// Select first news of first feed
|
||||
selectFirstFeed();
|
||||
// Refresh all feeds
|
||||
rssmanager->refreshAll();
|
||||
qDebug("RSSImp constructed");
|
||||
}
|
||||
|
||||
void RSSImp::selectFirstFeed(){
|
||||
if(listStreams->topLevelItemCount()){
|
||||
QTreeWidgetItem *first = listStreams->topLevelItem(0);
|
||||
listStreams->setCurrentItem(first);
|
||||
selectedFeedUrl = first->text(1);
|
||||
}
|
||||
}
|
||||
|
||||
void RSSImp::selectFirstNews(){
|
||||
if(listNews->count()){
|
||||
listNews->setCurrentRow(0);
|
||||
refreshTextBrowser(listNews->currentItem());
|
||||
}
|
||||
}
|
||||
|
||||
RSSImp::~RSSImp(){
|
||||
delete refreshTimeTimer;
|
||||
delete rssmanager;
|
||||
}
|
||||
|
||||
short RSSImp::getNumStreamSelected(){
|
||||
return listStreams->indexOfTopLevelItem(listStreams->currentItem());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue