summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-06-28 13:47:08 +0200
committerArno <am@disconnect.de>2013-06-28 13:47:08 +0200
commit04d9dcbe2139109e00d07488f6e45d0353a676e2 (patch)
tree3f56c92a31fce83991de3eb4073d7f751fa35b21
parent4fd07f5957b20dc229c4aa76e9132d4d8e2567ef (diff)
downloadSheMov-04d9dcbe2139109e00d07488f6e45d0353a676e2.tar.gz
SheMov-04d9dcbe2139109e00d07488f6e45d0353a676e2.tar.bz2
SheMov-04d9dcbe2139109e00d07488f6e45d0353a676e2.zip
Implement destructor for ArchiveModel, get rid of 2 signals
We need a destructor for ArchiveModel, because we have to stop the collectors first. Otherwise there will be random crashes all over the place on exit when the Threads are destroyed while they're still running. Also, get rid of the signals collectorDone and collectorAboutToBeDone. The latter was unused, and the former can be replaced with QAbstractItemModel::modelReset.
-rw-r--r--archivemodel.cpp13
-rw-r--r--archivemodel.h3
-rw-r--r--archiveview.cpp2
3 files changed, 12 insertions, 6 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 208bed8..14757af 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -36,6 +36,16 @@ ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTree
refresh();
}
+ArchiveModel::~ArchiveModel(){
+ /* We need this, otherwise there are random
+ * crashes when we exit and a collector is
+ * still runnning */
+ foreach(ArchiveCollector *c, mCollectors){
+ c->cancel();
+ c->wait();
+ }
+}
+
const QStringList ArchiveModel::availableOrders() const {
QStringList retval = mAvailableOrders.keys();
qSort(retval);
@@ -220,7 +230,6 @@ void ArchiveModel::setOrder(int order) {
SmTreeItem *rootItem = readCache(mOrder);
if(rootItem){
setRoot(rootItem);
- emit collectorDone();
}
}
@@ -245,9 +254,7 @@ void ArchiveModel::collectorFinished(QObject *thread){
SmTreeItem *rootCopy = t->rootItem();
int sortOrder = t->sortOrder();
if(sortOrder == mOrder){
- emit collectorAboutToBeDone();
setRoot(rootCopy);
- emit collectorDone();
}
writeCache(sortOrder, rootCopy);
QString sortOrderName = mAvailableOrders.key(sortOrder);
diff --git a/archivemodel.h b/archivemodel.h
index 3848d94..4ef39fa 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -26,6 +26,7 @@ class ArchiveModel : public SmTreeModel {
enum { NumFields = 8 };
enum NodeType { SeriesNode, SeriesPartNode, GenreNode, ActorNode };
explicit ArchiveModel(const QStringList &headers, QObject *parent = 0);
+ virtual ~ArchiveModel();
const QStringList availableOrders() const;
const QHash<QString, int> availableOrdersHash() const { return mAvailableOrders; }
virtual QVariant data(const QModelIndex &index, int role) const;
@@ -39,8 +40,6 @@ class ArchiveModel : public SmTreeModel {
void needRefresh();
void databaseError(const QString &error);
void message(const QString &msg);
- void collectorAboutToBeDone();
- void collectorDone();
public slots:
void setOrder(int order);
diff --git a/archiveview.cpp b/archiveview.cpp
index e2cfac7..34fd169 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -51,7 +51,7 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent), mConstructing(true)
// item in the list, nothing will happen otherwise!
mArchiveModel->setOrder(sortOrderName);
connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString)));
- connect(mArchiveModel, SIGNAL(collectorDone()), this, SLOT(expandedItems()));
+ connect(mArchiveModel, SIGNAL(modelReset()), this, SLOT(expandedItems()));
QLabel *l1 = new QLabel(tr("Filter"));
mFilter = new QLineEdit;