Changeset View
Changeset View
Standalone View
Standalone View
src/filescanner.cpp
Show All 13 Lines | |||||
14 | * You should have received a copy of the GNU Lesser General Public License | 14 | * You should have received a copy of the GNU Lesser General Public License | ||
15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | 15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
16 | */ | 16 | */ | ||
17 | 17 | | |||
18 | #include "filescanner.h" | 18 | #include "filescanner.h" | ||
19 | 19 | | |||
20 | #include "config-upnp-qt.h" | 20 | #include "config-upnp-qt.h" | ||
21 | 21 | | |||
22 | #include "abstractfile/indexercommon.h" | ||||
23 | | ||||
22 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | 24 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | ||
23 | 25 | | |||
24 | #include <KFileMetaData/ExtractorCollection> | 26 | #include <KFileMetaData/ExtractorCollection> | ||
25 | #include <KFileMetaData/Extractor> | 27 | #include <KFileMetaData/Extractor> | ||
26 | #include <KFileMetaData/SimpleExtractionResult> | 28 | #include <KFileMetaData/SimpleExtractionResult> | ||
27 | #include <KFileMetaData/UserMetaData> | 29 | #include <KFileMetaData/UserMetaData> | ||
28 | #include <KFileMetaData/Properties> | 30 | #include <KFileMetaData/Properties> | ||
29 | 31 | | |||
30 | #if defined KF5Baloo_FOUND && KF5Baloo_FOUND | 32 | #if defined KF5Baloo_FOUND && KF5Baloo_FOUND | ||
31 | 33 | | |||
32 | #include <Baloo/File> | 34 | #include <Baloo/File> | ||
33 | 35 | | |||
34 | #endif | 36 | #endif | ||
35 | 37 | | |||
36 | #endif | 38 | #endif | ||
37 | 39 | | |||
40 | #include <QLoggingCategory> | ||||
38 | #include <QFileInfo> | 41 | #include <QFileInfo> | ||
39 | #include <QLocale> | 42 | #include <QLocale> | ||
40 | 43 | | |||
41 | class FileScannerPrivate | 44 | class FileScannerPrivate | ||
42 | { | 45 | { | ||
43 | public: | 46 | public: | ||
44 | 47 | | |||
45 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | 48 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | ||
Show All 9 Lines | |||||
55 | FileScanner::FileScanner() : d(std::make_unique<FileScannerPrivate>()) | 58 | FileScanner::FileScanner() : d(std::make_unique<FileScannerPrivate>()) | ||
56 | { | 59 | { | ||
57 | } | 60 | } | ||
58 | 61 | | |||
59 | FileScanner::~FileScanner() = default; | 62 | FileScanner::~FileScanner() = default; | ||
60 | 63 | | |||
61 | MusicAudioTrack FileScanner::scanOneFile(const QUrl &scanFile, const QMimeDatabase &mimeDatabase) | 64 | MusicAudioTrack FileScanner::scanOneFile(const QUrl &scanFile, const QMimeDatabase &mimeDatabase) | ||
62 | { | 65 | { | ||
63 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | | |||
64 | MusicAudioTrack newTrack; | 66 | MusicAudioTrack newTrack; | ||
65 | 67 | | |||
66 | auto localFileName = scanFile.toLocalFile(); | 68 | auto localFileName = scanFile.toLocalFile(); | ||
67 | 69 | | |||
68 | QFileInfo scanFileInfo(localFileName); | 70 | QFileInfo scanFileInfo(localFileName); | ||
69 | newTrack.setFileModificationTime(scanFileInfo.fileTime(QFile::FileModificationTime)); | 71 | newTrack.setFileModificationTime(scanFileInfo.fileTime(QFile::FileModificationTime)); | ||
70 | newTrack.setResourceURI(scanFile); | 72 | newTrack.setResourceURI(scanFile); | ||
73 | newTrack.setRating(0); | ||||
71 | 74 | | |||
75 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | ||||
72 | const auto &fileMimeType = mimeDatabase.mimeTypeForFile(localFileName); | 76 | const auto &fileMimeType = mimeDatabase.mimeTypeForFile(localFileName); | ||
73 | if (!fileMimeType.name().startsWith(QStringLiteral("audio/"))) { | 77 | if (!fileMimeType.name().startsWith(QStringLiteral("audio/"))) { | ||
74 | return newTrack; | 78 | return newTrack; | ||
75 | } | 79 | } | ||
76 | 80 | | |||
77 | QString mimetype = fileMimeType.name(); | 81 | QString mimetype = fileMimeType.name(); | ||
78 | 82 | | |||
79 | QList<KFileMetaData::Extractor*> exList = d->mAllExtractors.fetchExtractors(mimetype); | 83 | QList<KFileMetaData::Extractor*> exList = d->mAllExtractors.fetchExtractors(mimetype); | ||
80 | 84 | | |||
81 | if (exList.isEmpty()) { | 85 | if (exList.isEmpty()) { | ||
82 | return newTrack; | 86 | return newTrack; | ||
83 | } | 87 | } | ||
84 | 88 | | |||
85 | KFileMetaData::Extractor* ex = exList.first(); | 89 | KFileMetaData::Extractor* ex = exList.first(); | ||
86 | KFileMetaData::SimpleExtractionResult result(localFileName, mimetype, | 90 | KFileMetaData::SimpleExtractionResult result(localFileName, mimetype, | ||
87 | KFileMetaData::ExtractionResult::ExtractMetaData); | 91 | KFileMetaData::ExtractionResult::ExtractMetaData); | ||
88 | 92 | | |||
89 | ex->extract(&result); | 93 | ex->extract(&result); | ||
90 | 94 | | |||
91 | d->mAllProperties = result.properties(); | 95 | d->mAllProperties = result.properties(); | ||
92 | 96 | | |||
93 | scanProperties(localFileName, newTrack); | 97 | scanProperties(localFileName, newTrack); | ||
94 | 98 | | |||
95 | return newTrack; | 99 | qCDebug(orgKdeElisaIndexer()) << "scanOneFile" << scanFile << "using KFileMetaData" << newTrack; | ||
96 | #else | 100 | #else | ||
97 | Q_UNUSED(scanFile) | | |||
98 | Q_UNUSED(mimeDatabase) | 101 | Q_UNUSED(mimeDatabase) | ||
99 | 102 | | |||
100 | return {}; | 103 | newTrack.setTitle(scanFileInfo.fileName()); | ||
104 | newTrack.setValid(true); | ||||
105 | | ||||
106 | qCDebug(orgKdeElisaIndexer()) << "scanOneFile" << scanFile << "no metadata provider" << newTrack; | ||||
101 | #endif | 107 | #endif | ||
108 | | ||||
109 | return newTrack; | ||||
102 | } | 110 | } | ||
103 | 111 | | |||
104 | void FileScanner::scanProperties(const Baloo::File &match, MusicAudioTrack &trackData) | 112 | void FileScanner::scanProperties(const Baloo::File &match, MusicAudioTrack &trackData) | ||
105 | { | 113 | { | ||
106 | #if defined KF5Baloo_FOUND && KF5Baloo_FOUND | 114 | #if defined KF5Baloo_FOUND && KF5Baloo_FOUND | ||
107 | d->mAllProperties = match.properties(); | 115 | d->mAllProperties = match.properties(); | ||
108 | scanProperties(match.path(), trackData); | 116 | scanProperties(match.path(), trackData); | ||
117 | | ||||
118 | qCDebug(orgKdeElisaIndexer()) << "scanProperties" << match.path() << "using Baloo" << trackData; | ||||
109 | #else | 119 | #else | ||
110 | Q_UNUSED(match) | 120 | Q_UNUSED(match) | ||
111 | Q_UNUSED(trackData) | 121 | Q_UNUSED(trackData) | ||
122 | | ||||
123 | qCDebug(orgKdeElisaIndexer()) << "scanProperties" << "no metadata provider" << trackData; | ||||
112 | #endif | 124 | #endif | ||
113 | } | 125 | } | ||
114 | 126 | | |||
115 | void FileScanner::scanProperties(const QString &localFileName, MusicAudioTrack &trackData) | 127 | void FileScanner::scanProperties(const QString &localFileName, MusicAudioTrack &trackData) | ||
116 | { | 128 | { | ||
117 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | 129 | #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND | ||
118 | auto artistString = d->checkForMultipleEntries(KFileMetaData::Property::Artist); | 130 | auto artistString = d->checkForMultipleEntries(KFileMetaData::Property::Artist); | ||
119 | auto albumArtistString = d->checkForMultipleEntries(KFileMetaData::Property::AlbumArtist); | 131 | auto albumArtistString = d->checkForMultipleEntries(KFileMetaData::Property::AlbumArtist); | ||
▲ Show 20 Lines • Show All 144 Lines • Show Last 20 Lines |