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