summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-08-10 10:54:14 +0200
committerArno <am@disconnect.de>2013-08-10 10:54:14 +0200
commit6e4a72a3442af9e6c4010cccc2329035008df167 (patch)
tree38b50e34e43b972b01942a57b45bc1d17a108a9d /archivemodel.cpp
parent485e8ca24887b387b2a8f08a7561d2054651633b (diff)
downloadSheMov-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.cpp19
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(){