1/*
2 This file is part of the KDE Baloo Project
3 SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7
8#include "file.h"
9#include "global.h"
10#include "database.h"
11#include "transaction.h"
12#include "idutils.h"
13#include "propertydata.h"
14
15#include <QJsonDocument>
16#include <QFileInfo>
17#include <QJsonObject>
18
19using namespace Baloo;
20
21class BALOO_CORE_NO_EXPORT File::Private {
22public:
23 QString url;
24 KFileMetaData::PropertyMultiMap propertyMap;
25};
26
27File::File()
28 : d(new Private)
29{
30}
31
32File::File(const File& f)
33 : d(new Private(*f.d))
34{
35}
36
37File::File(const QString& url)
38 : d(new Private)
39{
40 d->url = QFileInfo(url).canonicalFilePath();
41}
42
43File::~File() = default;
44
45const File& File::operator=(const File& f)
46{
47 if (&f != this) {
48 *d = *f.d;
49 }
50 return *this;
51}
52
53QString File::path() const
54{
55 return d->url;
56}
57
58KFileMetaData::PropertyMultiMap File::properties() const
59{
60 return d->propertyMap;
61}
62
63QVariant File::property(KFileMetaData::Property::Property property) const
64{
65 return d->propertyMap.value(key: property);
66}
67
68bool File::load(const QString& url)
69{
70 d->url = QFileInfo(url).canonicalFilePath();
71 d->propertyMap.clear();
72 return load();
73}
74
75bool File::load()
76{
77 const QString& url = d->url;
78 if (url.isEmpty() || !QFile::exists(fileName: url)) {
79 return false;
80 }
81
82 Database *db = globalDatabaseInstance();
83 if (!db->open(mode: Database::ReadOnlyDatabase)) {
84 return false;
85 }
86
87 quint64 id = filePathToId(filePath: QFile::encodeName(fileName: d->url));
88 if (!id) {
89 return false;
90 }
91
92 QByteArray arr;
93 {
94 Transaction tr(db, Transaction::ReadOnly);
95 arr = tr.documentData(id);
96 }
97 // Ignore empty JSON documents, i.e. "" or "{}"
98 if (arr.isEmpty() || arr.size() <= 2) {
99 return false;
100 }
101
102 const QJsonDocument jdoc = QJsonDocument::fromJson(json: arr);
103 d->propertyMap = Baloo::jsonToPropertyMap(properties: jdoc.object());
104
105 return true;
106}
107

source code of baloo/src/lib/file.cpp