summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;