File indexing completed on 2024-05-05 04:50:32
0001 /* 0002 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "abstractfilelistener.h" 0008 0009 #include "abstractfilelisting.h" 0010 #include "databaseinterface.h" 0011 0012 #include <QThread> 0013 0014 class AbstractFileListenerPrivate 0015 { 0016 public: 0017 0018 QThread mFileQueryThread; 0019 0020 AbstractFileListing *mFileListing = nullptr; 0021 0022 }; 0023 0024 AbstractFileListener::AbstractFileListener(QObject *parent) 0025 : QObject(parent), d(std::make_unique<AbstractFileListenerPrivate>()) 0026 { 0027 } 0028 0029 AbstractFileListener::~AbstractFileListener() 0030 { 0031 d->mFileQueryThread.quit(); 0032 d->mFileQueryThread.wait(); 0033 } 0034 0035 DatabaseInterface *AbstractFileListener::databaseInterface() const 0036 { 0037 return nullptr; 0038 } 0039 0040 void AbstractFileListener::setDatabaseInterface(DatabaseInterface *model) 0041 { 0042 if (model) { 0043 connect(this, &AbstractFileListener::newTrackFile, d->mFileListing, &AbstractFileListing::newTrackFile); 0044 connect(d->mFileListing, &AbstractFileListing::tracksList, model, &DatabaseInterface::insertTracksList); 0045 connect(d->mFileListing, &AbstractFileListing::removedTracksList, model, &DatabaseInterface::removeTracksList); 0046 connect(d->mFileListing, &AbstractFileListing::modifyTracksList, model, &DatabaseInterface::insertTracksList); 0047 connect(d->mFileListing, &AbstractFileListing::askRestoredTracks, 0048 model, &DatabaseInterface::askRestoredTracks); 0049 connect(model, &DatabaseInterface::restoredTracks, 0050 d->mFileListing, &AbstractFileListing::restoredTracks); 0051 connect(model, &DatabaseInterface::cleanedDatabase, 0052 d->mFileListing, &AbstractFileListing::refreshContent); 0053 connect(model, &DatabaseInterface::finishRemovingTracksList, 0054 d->mFileListing, &AbstractFileListing::databaseFinishedRemovingTracksList); 0055 connect(model, &DatabaseInterface::finishInsertingTracksList, 0056 d->mFileListing, &AbstractFileListing::databaseFinishedInsertingTracksList); 0057 } 0058 0059 Q_EMIT databaseInterfaceChanged(); 0060 } 0061 0062 void AbstractFileListener::applicationAboutToQuit() 0063 { 0064 d->mFileListing->applicationAboutToQuit(); 0065 0066 d->mFileQueryThread.exit(); 0067 d->mFileQueryThread.wait(); 0068 } 0069 0070 void AbstractFileListener::quitListener() 0071 { 0072 applicationAboutToQuit(); 0073 0074 Q_EMIT clearDatabase(); 0075 } 0076 0077 void AbstractFileListener::setAllRootPaths(const QStringList &allRootPaths) 0078 { 0079 d->mFileListing->setAllRootPaths(allRootPaths); 0080 } 0081 0082 void AbstractFileListener::setFileListing(AbstractFileListing *fileIndexer) 0083 { 0084 d->mFileListing = fileIndexer; 0085 d->mFileQueryThread.start(); 0086 d->mFileListing->moveToThread(&d->mFileQueryThread); 0087 connect(fileIndexer, &AbstractFileListing::indexingStarted, 0088 this, &AbstractFileListener::indexingStarted); 0089 connect(fileIndexer, &AbstractFileListing::indexingFinished, 0090 this, &AbstractFileListener::indexingFinished); 0091 } 0092 0093 AbstractFileListing *AbstractFileListener::fileListing() const 0094 { 0095 return d->mFileListing; 0096 } 0097 0098 bool AbstractFileListener::canHandleRootPaths() const 0099 { 0100 return d->mFileListing->canHandleRootPaths(); 0101 } 0102 0103 0104 #include "moc_abstractfilelistener.cpp"