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"