Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFolderStorage Class Reference

#include <KisFolderStorage.h>

+ Inheritance diagram for KisFolderStorage:

Public Member Functions

bool addResource (const QString &resourceType, KoResourceSP resource) override
 
bool exportResource (const QString &url, QIODevice *device) override
 
bool importResource (const QString &url, QIODevice *device) override
 
 KisFolderStorage (const QString &location)
 
bool loadVersionedResource (KoResourceSP resource) override
 
QVariant metaData (const QString &key) const override
 
QStringList metaDataKeys () const override
 
QString resourceFilePath (const QString &url) override
 
KisResourceStorage::ResourceItem resourceItem (const QString &url) override
 
QString resourceMd5 (const QString &url) override
 
QSharedPointer< KisResourceStorage::ResourceIteratorresources (const QString &resourceType) override
 
bool saveAsNewVersion (const QString &resourceType, KoResourceSP resource) override
 Adds or updates this resource to the storage.
 
QSharedPointer< KisResourceStorage::TagIteratortags (const QString &resourceType) override
 
virtual ~KisFolderStorage ()
 
- Public Member Functions inherited from KisStoragePlugin
virtual bool isValid () const
 
 KisStoragePlugin (const QString &location)
 
virtual KoResourceSP resource (const QString &url)
 
virtual void setMetaData (const QString &key, const QVariant &value)
 
virtual bool supportsVersioning () const
 
virtual QImage thumbnail () const
 
QDateTime timestamp ()
 
virtual ~KisStoragePlugin ()
 

Friends

class FolderIterator
 

Additional Inherited Members

- Protected Member Functions inherited from KisStoragePlugin
QString location () const
 
void sanitizeResourceFileNameCase (KoResourceSP resource, const QDir &parentDir)
 

Detailed Description

KisFolderStorage is a KisStoragePlugin which handles resources stored in the user's resource folder. On initial startup, every resource that comes as a folder resource is copied to the user's resource folder. This is also the default location where the resources the user creates are stored.

Definition at line 21 of file KisFolderStorage.h.

Constructor & Destructor Documentation

◆ KisFolderStorage()

KisFolderStorage::KisFolderStorage ( const QString & location)

Definition at line 82 of file KisFolderStorage.cpp.

84{
85}
QString location() const
KisStoragePlugin(const QString &location)

◆ ~KisFolderStorage()

KisFolderStorage::~KisFolderStorage ( )
virtual

Definition at line 87 of file KisFolderStorage.cpp.

88{
89}

Member Function Documentation

◆ addResource()

bool KisFolderStorage::addResource ( const QString & resourceType,
KoResourceSP resource )
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 238 of file KisFolderStorage.cpp.

239{
240 if (!resource || !resource->valid()) return false;
241
242 const QString resourcesSaveLocation = location() + "/" + resourceType;
243
244 QFileInfo fi(resourcesSaveLocation + "/" + resource->filename());
245 if (fi.exists()) {
246 qWarning() << "Resource" << resourceType << resource->filename() << "already exists in" << resourcesSaveLocation;
247 return false;
248 }
249
250 QFile resourceFile(fi.absoluteFilePath());
251 if (!resourceFile.open(QFile::WriteOnly)) {
252 qWarning() << "Could not open" << fi.absoluteFilePath() << "for writing.";
253 return false;
254 }
255
256 if (!resource->saveToDevice(&resourceFile)) {
257 qWarning() << "Could not save resource to" << fi.absoluteFilePath();
258 resourceFile.close();
259 return false;
260 }
261 resourceFile.close();
262
263
264
265
266 return true;
267}
virtual KoResourceSP resource(const QString &url)

References KisStoragePlugin::location(), and KisStoragePlugin::resource().

◆ exportResource()

bool KisFolderStorage::exportResource ( const QString & url,
QIODevice * device )
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 217 of file KisFolderStorage.cpp.

218{
219 bool result = false;
220
221 const QString resourcesLocation = location() + "/" + url;
222
223 QFile f(resourcesLocation);
224
225 if (!f.exists()) return result;
226
227 if (f.open(QFile::ReadOnly)) {
228 device->write(f.readAll());
229 f.close();
230 result = true;
231 } else {
232 qWarning() << "Cannot open" << resourcesLocation << "for reading";
233 }
234
235 return result;
236}

References KisStoragePlugin::location().

◆ importResource()

bool KisFolderStorage::importResource ( const QString & url,
QIODevice * device )
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 189 of file KisFolderStorage.cpp.

190{
191 bool result = false;
192
193 const QString resourcesLocation = location() + "/" + url;
194
195 QFile f(resourcesLocation);
196
197 if (f.exists()) return result;
198
199 if (f.open(QFile::WriteOnly)) {
200 qint64 writtenBytes = f.write(device->readAll());
201 f.close();
202 result = (writtenBytes == device->size());
203 } else {
204 qWarning() << "Cannot open" << resourcesLocation << "for writing";
205 }
206
207 KoResourceSP resourceAfterLoading = resource(url);
208
209 if (resourceAfterLoading.isNull()) {
210 f.remove();
211 return false;
212 }
213
214 return result;
215}

References KisStoragePlugin::location(), and KisStoragePlugin::resource().

◆ loadVersionedResource()

bool KisFolderStorage::loadVersionedResource ( KoResourceSP resource)
overridevirtual

Implements KisStoragePlugin.

Definition at line 106 of file KisFolderStorage.cpp.

107{
108 QFileInfo fi(location() + '/' + resource->resourceType().first + '/' + resource->filename());
109
110 QFile f(fi.absoluteFilePath());
111 if (!f.open(QFile::ReadOnly)) {
112 qWarning() << "Could not open" << fi.absoluteFilePath() << "for reading";
113 return false;
114 }
115
116 bool r = resource->loadFromDevice(&f, KisGlobalResourcesInterface::instance());
117
118 // Check for the thumbnail
119 if (r) {
121
122 if ((resource->image().isNull() || resource->thumbnail().isNull()) && !resource->thumbnailPath().isNull()) {
123 QImage img(location() + '/' + resource->resourceType().first + '/' + resource->thumbnailPath());
124 resource->setImage(img);
125 resource->updateThumbnail();
126 }
127 }
128
129 return r;
130}
static KisResourcesInterfaceSP instance()
void sanitizeResourceFileNameCase(KoResourceSP resource, const QDir &parentDir)

References KisGlobalResourcesInterface::instance(), KisStoragePlugin::location(), KisStoragePlugin::resource(), and KisStoragePlugin::sanitizeResourceFileNameCase().

◆ metaData()

QVariant KisFolderStorage::metaData ( const QString & key) const
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 274 of file KisFolderStorage.cpp.

275{
277 return i18n("Local Resources");
278 }
279 return QVariant();
280
281}
static const QString s_meta_name

References KisResourceStorage::s_meta_name.

◆ metaDataKeys()

QStringList KisFolderStorage::metaDataKeys ( ) const
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 269 of file KisFolderStorage.cpp.

270{
272}
QList< QString > QStringList

References KisResourceStorage::s_meta_name.

◆ resourceFilePath()

QString KisFolderStorage::resourceFilePath ( const QString & url)
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 144 of file KisFolderStorage.cpp.

145{
146 QFileInfo file(location() + "/" + url);
147 return file.exists() ? file.absoluteFilePath() : QString();
148}

References KisStoragePlugin::location().

◆ resourceItem()

KisResourceStorage::ResourceItem KisFolderStorage::resourceItem ( const QString & url)
overridevirtual

Implements KisStoragePlugin.

Definition at line 96 of file KisFolderStorage.cpp.

97{
98 QFileInfo fi(url);
99 FolderItem item;
100 item.url = url;
101 item.folder = fi.path().split("/").last();
102 item.lastModified = fi.lastModified();
103 return item;
104}

References KisResourceStorage::ResourceItem::folder, KisResourceStorage::ResourceItem::lastModified, and KisResourceStorage::ResourceItem::url.

◆ resourceMd5()

QString KisFolderStorage::resourceMd5 ( const QString & url)
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 132 of file KisFolderStorage.cpp.

133{
134 QString result;
135
136 QFile file(location() + "/" + url);
137 if (file.exists() && file.open(QIODevice::ReadOnly)) {
138 result = KoMD5Generator::generateHash(file.readAll());
139 }
140
141 return result;
142}
static QString generateHash(const QString &filename)
generateHash reads the given file and generates a hex-encoded md5sum for the file.

References KoMD5Generator::generateHash(), and KisStoragePlugin::location().

◆ resources()

QSharedPointer< KisResourceStorage::ResourceIterator > KisFolderStorage::resources ( const QString & resourceType)
overridevirtual

Implements KisStoragePlugin.

Definition at line 150 of file KisFolderStorage.cpp.

151{
153
154 const QString resourcesSaveLocation = location() + "/" + resourceType;
155
156 QDirIterator it(resourcesSaveLocation,
157 KisResourceLoaderRegistry::instance()->filters(resourceType),
158 QDir::Files | QDir::Readable,
159 QDirIterator::Subdirectories);;
160
161 while (it.hasNext()) {
162 it.next();
163 QFileInfo info(it.fileInfo());
164
166 entry.filename = it.filePath().mid(resourcesSaveLocation.size() + 1);
167
168 // Don't load 4.x backup resources
169 if (entry.filename.contains("backup")) {
170 continue;
171 }
172
173 entry.lastModified = info.lastModified();
174 entry.tagList = {}; // TODO
175 entry.resourceType = resourceType;
176 entries.append(entry);
177 }
178
180
181 return toQShared(new KisVersionedStorageIterator(entries, this));
182}
static KisResourceLoaderRegistry * instance()
static void detectFileVersions(QVector< VersionedResourceEntry > &allFiles)
QSharedPointer< T > toQShared(T *ptr)

References KisStorageVersioningHelper::detectFileVersions(), VersionedResourceEntry::filename, KisResourceLoaderRegistry::instance(), VersionedResourceEntry::lastModified, KisStoragePlugin::location(), VersionedResourceEntry::resourceType, VersionedResourceEntry::tagList, and toQShared().

◆ saveAsNewVersion()

bool KisFolderStorage::saveAsNewVersion ( const QString & resourceType,
KoResourceSP resource )
overridevirtual

Adds or updates this resource to the storage.

Reimplemented from KisStoragePlugin.

Definition at line 91 of file KisFolderStorage.cpp.

92{
93 return KisStorageVersioningHelper::addVersionedResource(location() + "/" + resourceType, _resource, 0);
94}
static bool addVersionedResource(const QString &saveLocation, KoResourceSP resource, int minVersion)

References KisStorageVersioningHelper::addVersionedResource(), and KisStoragePlugin::location().

◆ tags()

QSharedPointer< KisResourceStorage::TagIterator > KisFolderStorage::tags ( const QString & resourceType)
overridevirtual

Friends And Related Symbol Documentation

◆ FolderIterator

friend class FolderIterator
friend

Definition at line 44 of file KisFolderStorage.h.


The documentation for this class was generated from the following files: