mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-03 02:14:16 +00:00
- Remembering open state of RSS folders on startup
This commit is contained in:
parent
8e5f5b5d65
commit
fd81567ecd
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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");
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user