Warning, file /libraries/baloo-widgets/src/filefetchjob.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "filefetchjob.h" 0008 #include "filemetadatautil_p.h" 0009 #include "widgetsdebug.h" 0010 0011 #include <Baloo/File> 0012 #include <QFileInfo> 0013 #include <QTimer> 0014 0015 #include <KFileMetaData/UserMetaData> 0016 0017 using namespace Baloo; 0018 0019 FileFetchJob::FileFetchJob(const QStringList &urls, bool canEditAll, FileFetchJob::UseRealtimeIndexing useRealtime, QObject *parent) 0020 : KJob(parent) 0021 , m_urls(urls) 0022 , m_canEditAll(canEditAll) 0023 , m_useRealtime(useRealtime) 0024 { 0025 } 0026 0027 void FileFetchJob::start() 0028 { 0029 QTimer::singleShot(0, this, SLOT(doStart())); 0030 } 0031 0032 void FileFetchJob::doStart() 0033 { 0034 for (const QString &filePath : std::as_const(m_urls)) { 0035 bool extractorRunning = false; 0036 KFileMetaData::PropertyMultiMap fileProperties; 0037 0038 // UseRealtimeIndexing::Fallback: try DB first, then filesystem 0039 // UseRealtimeIndexing::Disabled: DB contents only 0040 // UseRealtimeIndexing::Only: DB disabled, use filesystem 0041 if (m_useRealtime != UseRealtimeIndexing::Only) { 0042 Baloo::File file(filePath); 0043 file.load(); 0044 fileProperties = file.properties(); 0045 qCDebug(WIDGETS) << filePath << "DB properties:" << fileProperties; 0046 } 0047 if (fileProperties.empty() && m_useRealtime != UseRealtimeIndexing::Disabled) { 0048 extractorRunning = true; 0049 m_extractor.process(filePath); 0050 } 0051 0052 QVariantMap prop; 0053 KFileMetaData::UserMetaData umd(filePath); 0054 0055 if (umd.isSupported()) { 0056 using Attribute = KFileMetaData::UserMetaData::Attribute; 0057 auto umdData = Baloo::Private::fetchUserMetaData(umd, Attribute::Tags | Attribute::Rating | Attribute::Comment | Attribute::OriginUrl); 0058 prop = Baloo::Private::convertUserMetaData(umdData); 0059 } else { 0060 m_canEditAll = false; 0061 } 0062 if (m_canEditAll) { 0063 m_canEditAll = QFileInfo(filePath).isWritable(); 0064 } 0065 0066 if (extractorRunning) { 0067 m_extractor.waitFinished(); 0068 fileProperties = m_extractor.properties(); 0069 qCDebug(WIDGETS) << filePath << " properties:" << fileProperties; 0070 } 0071 prop.insert(Baloo::Private::toNamedVariantMap(fileProperties)); 0072 0073 m_data << prop; 0074 } 0075 0076 emitResult(); 0077 } 0078 0079 QList<QVariantMap> Baloo::FileFetchJob::data() const 0080 { 0081 return m_data; 0082 } 0083 0084 bool FileFetchJob::canEditAll() const 0085 { 0086 return m_canEditAll; 0087 }