diff options
author | Arno <am@disconnect.de> | 2013-08-10 10:54:14 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-08-10 10:54:14 +0200 |
commit | 6e4a72a3442af9e6c4010cccc2329035008df167 (patch) | |
tree | 38b50e34e43b972b01942a57b45bc1d17a108a9d /archivemodel.cpp | |
parent | 485e8ca24887b387b2a8f08a7561d2054651633b (diff) | |
download | SheMov-6e4a72a3442af9e6c4010cccc2329035008df167.tar.gz SheMov-6e4a72a3442af9e6c4010cccc2329035008df167.tar.bz2 SheMov-6e4a72a3442af9e6c4010cccc2329035008df167.zip |
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
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
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<ArchiveCollector*>(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(){ |