diff options
-rw-r--r-- | archivemodel.cpp | 13 | ||||
-rw-r--r-- | archivemodel.h | 3 | ||||
-rw-r--r-- | archiveview.cpp | 2 |
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; |