- Remembering open state of RSS folders on startup

This commit is contained in:
Christophe Dumez 2009-08-23 14:56:44 +00:00
parent 8e5f5b5d65
commit fd81567ecd
4 changed files with 91 additions and 6 deletions

View file

@ -158,9 +158,9 @@ downloadThread::~downloadThread(){
abort = true; abort = true;
condition.wakeOne(); condition.wakeOne();
mutex.unlock(); mutex.unlock();
qDebug("downloadThread deleting subthreads..."); //qDebug("downloadThread deleting subthreads...");
qDeleteAll(subThreads); qDeleteAll(subThreads);
qDebug("downloadThread deleted subthreads"); //qDebug("downloadThread deleted subthreads");
wait(); wait();
} }
@ -184,16 +184,16 @@ void downloadThread::run(){
if(!urls_queue.empty() && subThreads.size() < MAX_THREADS){ if(!urls_queue.empty() && subThreads.size() < MAX_THREADS){
QString url = urls_queue.dequeue(); QString url = urls_queue.dequeue();
mutex.unlock(); mutex.unlock();
qDebug("DownloadThread downloading %s...", url.toLocal8Bit().data()); //qDebug("DownloadThread downloading %s...", url.toLocal8Bit().data());
subDownloadThread *st = new subDownloadThread(0, url); subDownloadThread *st = new subDownloadThread(0, url);
subThreads << st; subThreads << st;
connect(st, SIGNAL(downloadFinishedST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadedFile(subDownloadThread*, QString, QString))); connect(st, SIGNAL(downloadFinishedST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadedFile(subDownloadThread*, QString, QString)));
connect(st, SIGNAL(downloadFailureST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadFailure(subDownloadThread*, QString, QString))); connect(st, SIGNAL(downloadFailureST(subDownloadThread*, QString, QString)), this, SLOT(propagateDownloadFailure(subDownloadThread*, QString, QString)));
st->start(); st->start();
}else{ }else{
qDebug("DownloadThread sleeping..."); //qDebug("DownloadThread sleeping...");
condition.wait(&mutex); condition.wait(&mutex);
qDebug("DownloadThread woke up"); //qDebug("DownloadThread woke up");
mutex.unlock(); mutex.unlock();
} }
} }

View file

@ -53,11 +53,46 @@ public:
return feeds_items.values(); return feeds_items.values();
} }
QStringList getItemPath(QTreeWidgetItem* item) {
QStringList path;
if(item) {
if(item->parent())
path.append(getItemPath(item->parent()));
path.append(getRSSItem(item)->getID());
}
return path;
}
QList<QTreeWidgetItem*> getAllOpenFolders(QTreeWidgetItem *parent=0) {
QList<QTreeWidgetItem*> open_folders;
int nbChildren;
if(parent)
nbChildren = parent->childCount();
else
nbChildren = topLevelItemCount();
for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem *item;
if(parent)
item = parent->child(i);
else
item = topLevelItem(i);
if(getItemType(item) == RssFile::FOLDER && item->isExpanded()) {
QList<QTreeWidgetItem*> open_subfolders = getAllOpenFolders(item);
if(!open_subfolders.empty()) {
open_folders.append(open_subfolders);
} else {
open_folders << item;
}
}
}
return open_folders;
}
QList<QTreeWidgetItem*> getAllFeedItems(QTreeWidgetItem* folder) { QList<QTreeWidgetItem*> getAllFeedItems(QTreeWidgetItem* folder) {
QList<QTreeWidgetItem*> feeds; QList<QTreeWidgetItem*> feeds;
int nbChildren = folder->childCount(); int nbChildren = folder->childCount();
for(int i=0; i<nbChildren; ++i) { for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem *item = folder->child(i); QTreeWidgetItem *item = folder->child(i);
if(getItemType(item) == RssFile::STREAM) { if(getItemType(item) == RssFile::STREAM) {
feeds << item; feeds << item;
} else { } else {

View file

@ -198,6 +198,52 @@ void RSSImp::deleteSelectedItems() {
} }
} }
void RSSImp::loadFoldersOpenState() {
QSettings settings("qBittorrent", "qBittorrent");
settings.beginGroup("Rss");
QVariantList open_folders = settings.value("open_folders", QVariantList()).toList();
settings.endGroup();
foreach(QVariant var_path, open_folders) {
QStringList path = var_path.toString().split("\\");
QTreeWidgetItem *parent = 0;
foreach(QString name, path) {
QList<QTreeWidgetItem*> children;
int nbChildren = 0;
if(parent)
nbChildren = parent->childCount();
else
nbChildren = listStreams->topLevelItemCount();
for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem* child;
if(parent)
child = parent->child(i);
else
child = listStreams->topLevelItem(i);
if(listStreams->getRSSItem(child)->getID() == name) {
parent = child;
parent->setExpanded(true);
qDebug("expanding folder %s", name.toLocal8Bit().data());
break;
}
}
}
}
}
void RSSImp::saveFoldersOpenState() {
QVariantList open_folders;
QList<QTreeWidgetItem*> items = listStreams->getAllOpenFolders();
foreach(QTreeWidgetItem* item, items) {
QString path = listStreams->getItemPath(item).join("\\");
qDebug("saving open folder: %s", path.toLocal8Bit().data());
open_folders << path;
}
QSettings settings("qBittorrent", "qBittorrent");
settings.beginGroup("Rss");
settings.setValue("open_folders", open_folders);
settings.endGroup();
}
// refresh all streams by a button // refresh all streams by a button
void RSSImp::on_updateAllButton_clicked() { void RSSImp::on_updateAllButton_clicked() {
foreach(QTreeWidgetItem *item, listStreams->getAllFeedItems()) { foreach(QTreeWidgetItem *item, listStreams->getAllFeedItems()) {
@ -443,6 +489,7 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){
splitter_h->insertWidget(0, listStreams); splitter_h->insertWidget(0, listStreams);
fillFeedsList(); fillFeedsList();
loadFoldersOpenState();
connect(rssmanager, SIGNAL(feedInfosChanged(QString, QString, unsigned int)), this, SLOT(updateFeedInfos(QString, QString, unsigned int))); 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(rssmanager, SIGNAL(feedIconChanged(QString, QString)), this, SLOT(updateFeedIcon(QString, QString)));
@ -482,6 +529,7 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){
RSSImp::~RSSImp(){ RSSImp::~RSSImp(){
qDebug("Deleting RSSImp..."); qDebug("Deleting RSSImp...");
saveFoldersOpenState();
delete listStreams; delete listStreams;
delete rssmanager; delete rssmanager;
qDebug("RSSImp deleted"); qDebug("RSSImp deleted");

View file

@ -72,6 +72,8 @@ protected slots:
void restoreSlidersPosition(); void restoreSlidersPosition();
void showFeedDownloader(); void showFeedDownloader();
void askNewFolder(); void askNewFolder();
void saveFoldersOpenState();
void loadFoldersOpenState();
public: public:
RSSImp(bittorrent *BTSession); RSSImp(bittorrent *BTSession);