Krita Source Code Documentation
Loading...
Searching...
No Matches
KisStoragePlugin.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#include "KisStoragePlugin.h"
8#include <QFileInfo>
9#include <QDir>
10
11#include <KoResource.h>
12#include <KisMimeDatabase.h>
14
16{
17public:
18 QString location;
19 QDateTime timestamp;
20};
21
22KisStoragePlugin::KisStoragePlugin(const QString &location)
23 : d(new Private())
24{
25 d->location = location;
26
27 if (!QFileInfo(d->location).exists()) {
28 d->timestamp = QDateTime::currentDateTime();
29 }
30}
31
35
37{
38 if (!url.contains('/')) return nullptr;
39
40 QStringList parts = url.split('/', Qt::SkipEmptyParts);
41
42 if (parts.isEmpty()) return nullptr;
43
44 const QString resourceType = parts[0];
45 parts.removeFirst();
46 const QString resourceFilename = parts.join('/');
47
48 const QString mime = KisMimeDatabase::mimeTypeForSuffix(resourceFilename);
49
51 if (!loader) {
52 qWarning() << "Could not create loader for" << resourceType << resourceFilename << mime;
53 return nullptr;
54 }
55
56 KoResourceSP resource = loader->create(resourceFilename);
57 return loadVersionedResource(resource) ? resource : nullptr;
58}
59
60QString KisStoragePlugin::resourceMd5(const QString &url)
61{
62 // a fallback implementation for the storages with
63 // ephemeral resources
64 KoResourceSP res = resource(url);
65 if (res) {
66 return res->md5Sum();
67 } else {
68 return QString();
69 }
70}
71
72QString KisStoragePlugin::resourceFilePath(const QString &url)
73{
74 Q_UNUSED(url);
75 return QString();
76}
77
79{
80 return true;
81}
82
84{
85 if (d->timestamp.isNull()) {
86 return QFileInfo(d->location).lastModified();
87 }
88 return d->timestamp;
89}
90
92{
93 return d->location;
94}
95
97{
98 const QStringList result = parentDir.entryList({resource->filename()});
99
100 if (result.size() == 1) {
101 const QString realName = result.first();
102 if (realName != resource->filename()) {
103 resource->setFilename(result.first());
104 }
105 }
106}
107
109{
110 qWarning() << "Storage plugins should implement their own checks!";
111 return true;
112}
static QString mimeTypeForSuffix(const QString &suffix)
Find the mimetype for a given extension. The extension may have the form "*.xxx" or "xxx".
The KisResourceLoader class is an abstract interface class that must be implemented by actual resourc...
virtual KoResourceSP create(const QString &name)=0
static KisResourceLoaderRegistry * instance()
KisResourceLoaderBase * loader(const QString &resourceType, const QString &mimetype) const
QString location() const
KisStoragePlugin(const QString &location)
virtual QString resourceFilePath(const QString &url)
virtual bool supportsVersioning() const
virtual QString resourceMd5(const QString &url)
virtual bool isValid() const
virtual bool loadVersionedResource(KoResourceSP resource)=0
QScopedPointer< Private > d
virtual KoResourceSP resource(const QString &url)
void sanitizeResourceFileNameCase(KoResourceSP resource, const QDir &parentDir)