From 6e4a72a3442af9e6c4010cccc2329035008df167 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 10 Aug 2013 10:54:14 +0200 Subject: Various Bugfixes * cache: use qint64 consistently instead of quint64 once (typo, I guess) * sync cancelling of ArchiveCollector: wait for it and reset the cancel var * sync access to cache file with QMutex * don't set quality for pics --- archivemodel.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'archivemodel.cpp') diff --git a/archivemodel.cpp b/archivemodel.cpp index 4f4c69e..58bfc24 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -52,8 +52,9 @@ ArchiveModel::~ArchiveModel(){ * crashes when we exit and a collector is * still runnning */ foreach(ArchiveCollector *c, mCollectors){ - c->cancel(); + c->setCancelled(true); c->wait(); + c->setCancelled(false); } } @@ -519,7 +520,9 @@ void ArchiveModel::refresh(){ emit message(tr("Reading archive data...")); foreach(ArchiveCollector *c, mCollectors){ if(c->isRunning()){ - c->cancel(); + c->setCancelled(true); + c->wait(); + c->setCancelled(false); } c->start(); } @@ -539,6 +542,9 @@ void ArchiveModel::setWindowTitle(){ void ArchiveModel::collectorFinished(QObject *thread){ ArchiveCollector *t = qobject_cast(thread); + if(t->isCancelled()){ + return; + } SmTreeItem *rootCopy = t->rootItem(); int sortOrder = t->sortOrder(); if(sortOrder == mOrder){ @@ -569,6 +575,7 @@ void ArchiveModel::emitDatabaseError(const QSqlError &e){ } void ArchiveModel::writeCache(int o, SmTreeItem *rItem){ + mCacheMx.lock(); QFile cache(cacheFile(o)); cache.open(QIODevice::WriteOnly); QDataStream stream(&cache); @@ -578,11 +585,12 @@ void ArchiveModel::writeCache(int o, SmTreeItem *rItem){ for(int i = 0; i < rItem->childCount(); ++i){ writeRecursive(rItem->child(i), stream); } + mCacheMx.unlock(); } void ArchiveModel::writeRecursive(SmTreeItem *start, QDataStream &stream){ if(start->childCount()){ - stream << (quint64)start->parent() << (qint64)start; + stream << (qint64)start->parent() << (qint64)start; writeItem(start, stream); for(int i = 0; i < start->childCount(); ++i){ writeRecursive(start->child(i), stream); @@ -600,6 +608,7 @@ void ArchiveModel::writeItem(SmTreeItem *item, QDataStream &stream){ } SmTreeItem *ArchiveModel::readCache(int o){ + QMutexLocker l(&mCacheMx); QFile cache(cacheFile(o)); if(!cache.exists() || !cache.size()){ return 0; @@ -906,9 +915,9 @@ SmTreeItem *ArchiveCollector::rootItem(){ return retval; } -void ArchiveCollector::cancel(){ +void ArchiveCollector::setCancelled(bool cancel){ QMutexLocker l(&mCancelledMx); - mCancelled = true; + mCancelled = cancel; } void ArchiveCollector::run(){ -- cgit v1.2.3-70-g09d2