summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--archivemodel.cpp19
-rw-r--r--archivemodel.h4
-rw-r--r--newmoviewizard.cpp3
3 files changed, 19 insertions, 7 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(){
diff --git a/archivemodel.h b/archivemodel.h
index 74a2715..8323385 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -82,6 +82,7 @@ class ArchiveModel : public SmTreeModel {
QHash<QString, int> mAvailableOrders;
QList<ArchiveCollector*> mCollectors;
QHash<int, QIcon> mNodeIcons;
+ QMutex mCacheMx;
int mOrder;
};
@@ -116,7 +117,8 @@ class ArchiveCollector : public QThread {
explicit ArchiveCollector(int numFields, int order, QObject *parent = 0);
SmTreeItem *rootItem();
int sortOrder() const { return mSortOrder; }
- void cancel();
+ void setCancelled(bool cancel);
+ bool isCancelled() const { return mCancelled; }
signals:
void message(const QString message);
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp
index 9c12dca..d956540 100644
--- a/newmoviewizard.cpp
+++ b/newmoviewizard.cpp
@@ -112,7 +112,6 @@ void NewMovieWizard::accept(){
//handle files
MovieInfoPage *movieInfoPage = qobject_cast<MovieInfoPage*>(page(0));
WizardTreeModel *wizardModel = movieInfoPage->model();
- int quality = field("quality").toInt();
QSqlQuery insertFilesQ(db);
insertFilesQ.prepare("INSERT INTO files (iseriespart_id, tfilename, cmd5sum, bisize, sifiletype, sifileno, siquality, cpicsize, iduration) VALUES(:ipid, :tfn, :md5, :size, :ft, :fno, :qual, :psize, :dur)");
QHash<QString, QString> md5Sums;
@@ -126,9 +125,11 @@ void NewMovieWizard::accept(){
qint64 secs = 0;
QString picSize;
int type = fData.value(WizardTreeModel::FileType).toInt();
+ QVariant quality;
if(type == ArchiveFilesModel::Movie){
QVariantMap m = Helper::ffmpegData(fullPath);
secs = m.value("duration").toDouble();
+ quality = field("quality").toInt();
}else{
QPixmap pix(fullPath);
picSize = QString("%1x%2").arg(QString::number(pix.width())).arg(QString::number(pix.height()));