1 /*
2    SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3 
4    SPDX-License-Identifier: LGPL-3.0-or-later
5  */
6 
7 #include "localfilelisting.h"
8 
9 #include "filescanner.h"
10 #include "abstractfile/indexercommon.h"
11 
12 #include <QThread>
13 #include <QHash>
14 #include <QStandardPaths>
15 
16 
17 #include <algorithm>
18 
19 class LocalFileListingPrivate
20 {
21 public:
22 
23 };
24 
LocalFileListing(QObject * parent)25 LocalFileListing::LocalFileListing(QObject *parent) : AbstractFileListing(parent), d(std::make_unique<LocalFileListingPrivate>())
26 {
27 }
28 
29 LocalFileListing::~LocalFileListing()
30 = default;
31 
executeInit(QHash<QUrl,QDateTime> allFiles)32 void LocalFileListing::executeInit(QHash<QUrl, QDateTime> allFiles)
33 {
34     if (!isActive()) {
35         qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::executeInit is inactive";
36         return;
37     }
38 
39     qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::executeInit" << "with" << allFiles.size() << "files";
40     AbstractFileListing::executeInit(std::move(allFiles));
41 }
42 
triggerRefreshOfContent()43 void LocalFileListing::triggerRefreshOfContent()
44 {
45     qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::triggerRefreshOfContent";
46 
47     if (!isActive()) {
48         qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::triggerRefreshOfContent is inactive";
49         return;
50     }
51 
52     Q_EMIT indexingStarted();
53 
54     qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::triggerRefreshOfContent" << allRootPaths();
55 
56     AbstractFileListing::triggerRefreshOfContent();
57 
58     const auto &rootPaths = allRootPaths();
59     for (const auto &onePath : rootPaths) {
60         scanDirectoryTree(onePath);
61     }
62 
63     setWaitEndTrackRemoval(false);
64 
65     checkFilesToRemove();
66 
67     if (!waitEndTrackRemoval()) {
68         Q_EMIT indexingFinished();
69     }
70 }
71 
triggerStop()72 void LocalFileListing::triggerStop()
73 {
74     qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::triggerStop";
75     AbstractFileListing::triggerStop();
76 }
77 
scanOneFile(const QUrl & scanFile,const QFileInfo & scanFileInfo,FileSystemWatchingModes watchForFileSystemChanges)78 DataTypes::TrackDataType LocalFileListing::scanOneFile(const QUrl &scanFile, const QFileInfo &scanFileInfo, FileSystemWatchingModes watchForFileSystemChanges)
79 {
80     auto trackData = fileScanner().scanOneBalooFile(scanFile, scanFileInfo);
81 
82     if (!trackData.isValid()) {
83         qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::scanOneFile" << scanFile << "falling back to plain file metadata analysis";
84         trackData = AbstractFileListing::scanOneFile(scanFile, scanFileInfo, watchForFileSystemChanges);
85     }
86 
87     if (trackData.isValid()) {
88         addCover(trackData);
89     } else {
90         qCDebug(orgKdeElisaIndexer()) << "LocalFileListing::scanOneFile" << scanFile << "invalid track";
91     }
92 
93     return trackData;
94 }
95 
96 
97 #include "moc_localfilelisting.cpp"
98