summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-27 07:18:32 +0200
committerArno <am@disconnect.de>2013-07-27 07:18:32 +0200
commit1b1d3a18a8fffdd61f533fd4b0bde4f75d683212 (patch)
tree51b60f6afbe4a5e1bd8617a7c18f08a30e971526 /archivemodel.cpp
parent8fba0fcb81e7b517804f34a5c8ad3741f92926da (diff)
downloadSheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.gz
SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.bz2
SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.zip
Cleanup closeEvent
Don't try to delete all the prepared statements manually. Get rid of the ~destructors and just close the QSqlDatabase. close() deletes all Statements. Also, quit() all QThreads on closeEvent() except CompleterProducer. When the experimental archive view gets merged, that QThread is gone. No need to bother...
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 28a9cbb..4ca9f1c 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -878,7 +878,7 @@ void ArchiveFilesModel::readConfig(){
/*
* ArchiveCollector BEGIN */
-ArchiveCollector::ArchiveCollector(int numFields, int order, QObject *parent) : QThread(parent), mRootItem(0), mNumFields(numFields), mSortOrder(order) {
+ArchiveCollector::ArchiveCollector(int numFields, int order, QObject *parent) : QThread(parent), mRootItem(0), mNumFields(numFields), mSortOrder(order), mCancelled(false) {
QString dbName = QString("%1").arg((qint64(this)));
mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), dbName);
mDb.open();
@@ -919,7 +919,9 @@ void ArchiveCollector::run(){
void ArchiveCollector::populateBySeriesName() {
fetchSeries(QVariant(), mRootItem);
for(int i = 0; i < mRootItem->childCount(); ++i){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
fetchParts(QVariant(), mRootItem->child(i));
}
}
@@ -927,7 +929,9 @@ void ArchiveCollector::populateBySeriesName() {
void ArchiveCollector::populateByGenre(){
QSqlQuery genreIdQuery = QSqlQuery("SELECT igenres_id, tgenrename FROM genres ORDER BY tgenrename", mDb);
while(genreIdQuery.next()){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
QList<QVariant> genreIdData;
genreIdData << genreIdQuery.value(1) << genreIdQuery.value(0) << QVariant() << QVariant() << ArchiveModel::GenreNode << false << QVariant() << QVariant();
SmTreeItem *genreIdItem = new SmTreeItem(genreIdData, mRootItem);
@@ -939,7 +943,9 @@ void ArchiveCollector::populateByGenre(){
void ArchiveCollector::populateByActor(){
QSqlQuery actorIdQuery = QSqlQuery("SELECT iactors_id, tactorname FROM actors ORDER BY tactorname", mDb);
while(actorIdQuery.next()){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
QList<QVariant> actorIdData;
actorIdData << actorIdQuery.value(1) << actorIdQuery.value(0) << QVariant() << QVariant() << ArchiveModel::ActorNode << false << QVariant() << QVariant();
SmTreeItem *actorIdItem = new SmTreeItem(actorIdData, mRootItem);
@@ -950,7 +956,9 @@ void ArchiveCollector::populateByActor(){
void ArchiveCollector::fetchChildren(SmTreeItem *parent){
for(int i = 0; i < parent->childCount(); ++i){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
fetchSeries(parent->child(i)->data(ArchiveModel::GenericId), parent->child(i));
for(int j = 0; j < parent->child(i)->childCount(); ++j){
checkCancelled();
@@ -983,7 +991,9 @@ void ArchiveCollector::fetchSeries(const QVariant &id, SmTreeItem *parent){
return;
}
while(seriesIdQuery.next()){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
QList<QVariant> seriesData;
seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << ArchiveModel::SeriesNode << false << QVariant() << QVariant();
SmTreeItem *seriesItem = new SmTreeItem(seriesData, parent);
@@ -1009,7 +1019,9 @@ void ArchiveCollector::fetchParts(const QVariant &id, SmTreeItem *parent){
}
partsQuery.exec();
while(partsQuery.next()){
- checkCancelled();
+ if(checkCancelled()){
+ return;
+ }
QList<QVariant> partData;
partData << parent->data(ArchiveModel::Name) << parent->data(ArchiveModel::GenericId) << partsQuery.value(0) << partsQuery.value(1) << ArchiveModel::SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant();
SmTreeItem *partItem = new SmTreeItem(partData, parent);
@@ -1018,10 +1030,7 @@ void ArchiveCollector::fetchParts(const QVariant &id, SmTreeItem *parent){
parent->setData(ArchiveModel::Count, parent->childCount());
}
-void ArchiveCollector::checkCancelled(){
+bool ArchiveCollector::checkCancelled(){
QMutexLocker l(&mCancelledMx);
- if(mCancelled){
- mCancelled = false;
- quit();
- }
+ return mCancelled;
}