diff options
author | Arno <am@disconnect.de> | 2013-07-27 07:18:32 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-07-27 07:18:32 +0200 |
commit | 1b1d3a18a8fffdd61f533fd4b0bde4f75d683212 (patch) | |
tree | 51b60f6afbe4a5e1bd8617a7c18f08a30e971526 | |
parent | 8fba0fcb81e7b517804f34a5c8ad3741f92926da (diff) | |
download | SheMov-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...
-rw-r--r-- | archivemodel.cpp | 33 | ||||
-rw-r--r-- | archivemodel.h | 2 | ||||
-rw-r--r-- | filestreemodel.cpp | 12 | ||||
-rw-r--r-- | filestreemodel.h | 1 | ||||
-rw-r--r-- | mappingtableeditor.cpp | 5 | ||||
-rw-r--r-- | mappingtableeditor.h | 1 | ||||
-rw-r--r-- | mappingtablemodel.cpp | 12 | ||||
-rw-r--r-- | mappingtablemodel.h | 1 | ||||
-rw-r--r-- | mappingtreemodel.cpp | 14 | ||||
-rw-r--r-- | mappingtreemodel.h | 1 | ||||
-rw-r--r-- | newmoviewizard.h | 1 | ||||
-rw-r--r-- | newpicsdialog.cpp | 5 | ||||
-rw-r--r-- | newpicsdialog.h | 1 | ||||
-rw-r--r-- | picfilesmodel.cpp | 7 | ||||
-rw-r--r-- | picfilesmodel.h | 1 | ||||
-rw-r--r-- | seriesmetadatamodel.cpp | 8 | ||||
-rw-r--r-- | seriesmetadatamodel.h | 1 | ||||
-rw-r--r-- | seriestreemodel.cpp | 18 | ||||
-rw-r--r-- | seriestreemodel.h | 1 | ||||
-rw-r--r-- | shemov.cpp | 1 | ||||
-rw-r--r-- | smdirmodel.cpp | 6 | ||||
-rw-r--r-- | smdirmodel.h | 1 | ||||
-rw-r--r-- | smdirwatcher.cpp | 18 | ||||
-rw-r--r-- | smdirwatcher.h | 3 | ||||
-rw-r--r-- | statisticsdialog.h | 1 |
25 files changed, 50 insertions, 105 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; } diff --git a/archivemodel.h b/archivemodel.h index 8e0d853..f14dd30 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -131,7 +131,7 @@ class ArchiveCollector : public QThread { void fetchChildren(SmTreeItem *parent); void fetchSeries(const QVariant &id, SmTreeItem *parent); void fetchParts(const QVariant &id, SmTreeItem *parent); - void checkCancelled(); + bool checkCancelled(); QSqlDatabase mDb; SmTreeItem *mRootItem; QMutex mAccessMx; diff --git a/filestreemodel.cpp b/filestreemodel.cpp index b6738af..2b4ad6d 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -67,18 +67,6 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo mDvdSize = SmGlobals::instance()->dvdSize(); } -FilesTreeModel::~FilesTreeModel(){ - delete mUpdateDvdQuery; - delete mUpdateQualityQuery; - delete mUpdatePartNoQuery; - delete mUpdateFileTypeQuery; - delete mInsertFileQuery; - delete mFilesQuery; - delete mDeleteFileQuery; - delete mFileTypeQuery; - mDb = QSqlDatabase(); -} - void FilesTreeModel::setIds(const QList<int> &seriesPartIds){ mDisplayMode = Ids; mCurrentIds = seriesPartIds; diff --git a/filestreemodel.h b/filestreemodel.h index cce75fe..3b7924b 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -35,7 +35,6 @@ class FilesTreeModel : public SmTreeModel { void setMode(int mode) { mMode = mode; } int displayMode() const { return mDisplayMode; } void setDisplayMode(int mode) { mDisplayMode = mode; } - ~FilesTreeModel(); //data + flags void setIds(const QList<int> &seriesPartIds); diff --git a/mappingtableeditor.cpp b/mappingtableeditor.cpp index 1f6d19d..d1fe985 100644 --- a/mappingtableeditor.cpp +++ b/mappingtableeditor.cpp @@ -144,11 +144,6 @@ MappingTableEditorModel::MappingTableEditorModel(const QString &table, const QSt populate(); } -MappingTableEditorModel::~MappingTableEditorModel(){ - delete mDataQuery; - mDb = QSqlDatabase(); -} - Qt::ItemFlags MappingTableEditorModel::flags(const QModelIndex &index) const{ if(!index.isValid()){ return 0; diff --git a/mappingtableeditor.h b/mappingtableeditor.h index cbdacf9..f09483e 100644 --- a/mappingtableeditor.h +++ b/mappingtableeditor.h @@ -56,7 +56,6 @@ class MappingTableEditorModel : public SmTreeModel { enum Roles { NameRole = Qt::UserRole + 1, CountRole = Qt::UserRole +2, IdRole = Qt::UserRole + 3 }; enum Fields { Name = 0, Count = 1, Id = 2 }; explicit MappingTableEditorModel(const QString &table, const QStringList &headers, QObject *parent = 0); - virtual ~MappingTableEditorModel(); virtual Qt::ItemFlags flags(const QModelIndex &idx) const; virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &idx, const QVariant &value, int role); diff --git a/mappingtablemodel.cpp b/mappingtablemodel.cpp index 0724c00..8d3752f 100644 --- a/mappingtablemodel.cpp +++ b/mappingtablemodel.cpp @@ -50,18 +50,6 @@ MappingTableModel::MappingTableModel(QStringList &headers, const QString &table, populate(); } -MappingTableModel::~MappingTableModel(){ - delete mUpdateItemNameQuery; - delete mInsertItemQuery; - delete mDeleteItemQuery; - delete mAddMappingQuery; - delete mRemoveMappingQuery; - delete mMappingQuery; - delete mAllItemsQuery; - delete mItemCountQuery; - mDb = QSqlDatabase(); -} - Qt::ItemFlags MappingTableModel::flags(const QModelIndex &index) const{ if(!index.isValid()){ return 0; diff --git a/mappingtablemodel.h b/mappingtablemodel.h index 1c264ff..8f3793b 100644 --- a/mappingtablemodel.h +++ b/mappingtablemodel.h @@ -23,7 +23,6 @@ class MappingTableModel : public SmTreeModel{ enum CustomRoles { ItemNameRole = Qt::UserRole + 1, ItemIdRole = Qt::UserRole + 2 }; enum Fields { ItemName = 0, ItemId = 1 }; explicit MappingTableModel(QStringList &headers, const QString &table, QObject *parent = 0); - virtual ~MappingTableModel(); //data + flags virtual Qt::ItemFlags flags(const QModelIndex &index) const; diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp index 9c6be13..650a21d 100644 --- a/mappingtreemodel.cpp +++ b/mappingtreemodel.cpp @@ -43,20 +43,6 @@ MappingTreeModel::MappingTreeModel(QStringList &headers, QObject *parent) : SmTr mDescriptionQ->prepare("SELECT tdescription_name, idescription_id FROM mapping_description WHERE idescription_type = :type"); } -MappingTreeModel::~MappingTreeModel(){ - delete mTypesQ; - delete mUpdateTypeQ; - delete mUpdateChildQ; - delete mAddMappingTypeQ; - delete mDeleteMappingTypeQ; - delete mAddDescriptionQ; - delete mSelectDescriptionQ; - delete mAddParentQ; - delete mUpdateParentQ; - delete mDescriptionQ; - mDb = QSqlDatabase(); -} - QStringList MappingTreeModel::mappingTypeNames() const { QStringList retval; foreach(mappingType t, mMappingTypes){ diff --git a/mappingtreemodel.h b/mappingtreemodel.h index 247c96d..4665e07 100644 --- a/mappingtreemodel.h +++ b/mappingtreemodel.h @@ -25,7 +25,6 @@ class MappingTreeModel : public SmTreeModel { enum Fields { Name = 0, MappingId = 1, DescAdded = 2, DescId = 3, MappingParentId = 4 }; enum { NumFields = 5 }; MappingTreeModel(QStringList &headers, QObject *parent = 0); - ~MappingTreeModel(); //model type convenience functions QStringList mappingTypeNames() const; diff --git a/newmoviewizard.h b/newmoviewizard.h index 0aae2d2..5f4d385 100644 --- a/newmoviewizard.h +++ b/newmoviewizard.h @@ -117,7 +117,6 @@ class WizardTreeModel : public SmTreeModel { enum { NumFields = 5 }; enum Types { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 }; explicit WizardTreeModel(QStringList &headers, QObject *parent = 0); - virtual ~WizardTreeModel() {} //data + flags virtual QVariant data(const QModelIndex &index, int role) const; diff --git a/newpicsdialog.cpp b/newpicsdialog.cpp index 36fdfe1..31e14c4 100644 --- a/newpicsdialog.cpp +++ b/newpicsdialog.cpp @@ -173,11 +173,6 @@ NewPicFilesModel::NewPicFilesModel(const QStringList &header, QObject *parent) : mMd5Query->prepare("SELECT COUNT(*) FROM pics WHERE cmd5sum = :md5"); } -NewPicFilesModel::~NewPicFilesModel(){ - delete mMd5Query; - mDb = QSqlDatabase(); -} - Qt::ItemFlags NewPicFilesModel::flags(const QModelIndex &index) const{ Q_UNUSED(index); return (Qt::ItemIsSelectable | Qt::ItemIsEnabled); diff --git a/newpicsdialog.h b/newpicsdialog.h index 87db4f3..67068df 100644 --- a/newpicsdialog.h +++ b/newpicsdialog.h @@ -59,7 +59,6 @@ class NewPicFilesModel : public SmTreeModel { enum Fields { FileName = 0, Size = 1, Valid = 2, Md5Sum = 3, MimeType = 4, FullPath = 5 }; enum { NumFields = 6 }; explicit NewPicFilesModel(const QStringList &header, QObject *parent = 0); - ~NewPicFilesModel(); //data Qt::ItemFlags flags(const QModelIndex &index) const; diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index 6b8153f..cb54503 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -32,13 +32,6 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr } -PicFilesModel::~PicFilesModel(){ - delete mDeleteFileQ; - delete mDeleteMappingsQ; - delete mAddMappingsQ; - mDb = QSqlDatabase::database(); -} - void PicFilesModel::setMapping(int pMapId){ QList<QVariant> ids = mMappingTreeModel->childList(pMapId, MappingTreeModel::MappingId); mMappingIds.clear(); diff --git a/picfilesmodel.h b/picfilesmodel.h index a27372d..6a033c1 100644 --- a/picfilesmodel.h +++ b/picfilesmodel.h @@ -18,7 +18,6 @@ class PicFilesModel : public SmTreeModel { enum Fields { FileName = 0, Size = 1, MimeType = 2, FullPath = 3, Id = 4, Added = 5, Md5Sum = 6, SizeDisplay = 7 }; enum { NumFields = 8 }; explicit PicFilesModel(const QStringList &headers, QObject *parent = 0); - ~PicFilesModel(); void setMapping(int pMapId); //some data diff --git a/seriesmetadatamodel.cpp b/seriesmetadatamodel.cpp index 21a9c3d..383c77b 100644 --- a/seriesmetadatamodel.cpp +++ b/seriesmetadatamodel.cpp @@ -56,14 +56,6 @@ SeriesMetadataModel::SeriesMetadataModel(const QStringList &headers, QObject *pa mDisplayColumnNames.insert(Added, "Date added"); } -SeriesMetadataModel::~SeriesMetadataModel(){ - delete mPopulateQuery; - delete mPresentQuery; - delete mUpdateAllQuery; - delete mInsertQuery; - mDb = QSqlDatabase(); -} - QVariant SeriesMetadataModel::data(int column) const { if((column < 0 ) || (column >= mDataFields)){ return QVariant(); diff --git a/seriesmetadatamodel.h b/seriesmetadatamodel.h index 4aaa3e1..8c25c6b 100644 --- a/seriesmetadatamodel.h +++ b/seriesmetadatamodel.h @@ -28,7 +28,6 @@ class SeriesMetadataModel : public SmTreeModel { public: enum Fields { ReleaseYear = 0, SourceMedium = 1, Subject = 2, ReleaseGroup = 3, EncoderOpts = 4, Comment = 5, Passes = 6, Added = 7 }; explicit SeriesMetadataModel(const QStringList &headers, QObject *parent = 0); - virtual ~SeriesMetadataModel(); //data int currentId() const { return mCurrentId; } diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index 4ec9f3f..ac1a381 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -56,24 +56,6 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree populate(); } -SeriesTreeModel::~SeriesTreeModel(){ - delete mSeriesPartsQuery; - delete mUpdateSeriesIdQuery; - delete mUpdateSeriesNameQuery; - delete mDeleteSeriesQuery; - delete mDeleteSeriesPartQuery; - delete mSeriesInsertQuery; - delete mSeriesFilesQuery; - delete mSeriesPartFilesQuery; - delete mSeriesPartInsertQuery; - delete mSortedMovieListQuery; - delete mNextDvdNoQuery; - delete mGenreFilterQuery; - delete mFavoriteSeriesIdQuery; - delete mFavoriteSeriesPartsQuery; - mDb = QSqlDatabase(); -} - Qt::ItemFlags SeriesTreeModel::flags(const QModelIndex &index) const{ if(!index.isValid()){ return 0; diff --git a/seriestreemodel.h b/seriestreemodel.h index 55add52..19b496f 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -27,7 +27,6 @@ class SeriesTreeModel : public SmTreeModel { enum { NumFields = 8 }; enum RowFilter { All = 0, Archived = 1, Local = 2 }; explicit SeriesTreeModel(QStringList &headers, QObject *parent = 0); - ~SeriesTreeModel(); //data + flags Qt::ItemFlags flags(const QModelIndex &index) const; @@ -162,6 +162,7 @@ void SheMov::closeEvent(QCloseEvent *event){ writeSettings(); SmGlobals *globals = SmGlobals::instance(); delete globals; + QSqlDatabase::database("treedb").close(); event->accept(); } diff --git a/smdirmodel.cpp b/smdirmodel.cpp index 16caf02..23e76fa 100644 --- a/smdirmodel.cpp +++ b/smdirmodel.cpp @@ -30,6 +30,12 @@ SmDirModel::SmDirModel(const QStringList &headers, QObject *parent) : SmTreeMode connect(mCollector, SIGNAL(newData(QList<QVariant>,int)), this, SLOT(dirEvent(QList<QVariant>,int)), Qt::BlockingQueuedConnection); } +SmDirModel::~SmDirModel(){ + if(mWatch->isRunning()){ + mWatch->stop(); + } +} + QVariant SmDirModel::data(const QModelIndex &index, int role) const{ if(!index.isValid()){ return QVariant(); diff --git a/smdirmodel.h b/smdirmodel.h index 8522662..21aab40 100644 --- a/smdirmodel.h +++ b/smdirmodel.h @@ -27,6 +27,7 @@ class SmDirModel : public SmTreeModel { enum { NumFields = 9 }; enum FileDate { Access, Modified, Status }; explicit SmDirModel(const QStringList &headers, QObject *parent = 0); + virtual ~SmDirModel(); virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); bool isDir(const QModelIndex &idx) const; diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index a6163c2..371e7cf 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -86,7 +86,17 @@ void SmDirWatcher::run(){ } } -SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true) { +void SmDirWatcher::stop(){ + mSemFree->acquire(); + mCollector->stop(); + mSemUsed->release(); + if(mCollector->isRunning()){ + mCollector->wait(); + } + quit(); +} + +SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true), mCancel(false) { QSqlDatabase db = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "collectordb"); db.open(); mPicPresentQ = new QSqlQuery(db); @@ -109,6 +119,11 @@ void SmDataColletor::setCheckForPresent(bool present){ void SmDataColletor::run(){ forever { mSemUsed->acquire(); + if(mCancel){ + QSqlDatabase::database("collectordb").close(); + mSemFree->release(); + break; + } QPair<QString, SmDirWatcher::DWEvent> cur = mDataQueue->dequeue(); if(cur.second == SmDirWatcher::Populate){ SmTreeItem *i = populate(cur.first); @@ -123,6 +138,7 @@ void SmDataColletor::run(){ emit newData(fd, cur.second); mSemFree->release(); } + quit(); } SmTreeItem * SmDataColletor::populate(const QString &dir){ diff --git a/smdirwatcher.h b/smdirwatcher.h index b0edd2f..77d0d97 100644 --- a/smdirwatcher.h +++ b/smdirwatcher.h @@ -34,6 +34,7 @@ class SmDirWatcher : public QThread { public slots: void run(); + void stop(); void setDir(const QString &dir); private: @@ -57,6 +58,7 @@ class SmDataColletor : public QThread { public slots: void setCheckForPresent(bool present); void run(); + void stop() { mCancel = true; } signals: void newData(const QList<QVariant>,int); @@ -73,6 +75,7 @@ class SmDataColletor : public QThread { int mMode; const int mNumFields; bool mCheckForPresent; + bool mCancel; QMutex mCheckForPresentMx; QSqlQuery *mPicPresentQ; QSqlQuery *mMovPresentQ; diff --git a/statisticsdialog.h b/statisticsdialog.h index 27de9fa..c9441c3 100644 --- a/statisticsdialog.h +++ b/statisticsdialog.h @@ -22,7 +22,6 @@ class StatisticsDialog : public SmDialog { Q_OBJECT public: StatisticsDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); - ~StatisticsDialog() {} private: QList<QList<QVariant> > queryData(const QString &query) const; |