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 83 of file KisFolderStorage.cpp.

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

◆ ~KisFolderStorage()

KisFolderStorage::~KisFolderStorage ( )
virtual

Definition at line 88 of file KisFolderStorage.cpp.

89{
90}

Member Function Documentation

◆ addResource()

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

Reimplemented from KisStoragePlugin.

Definition at line 239 of file KisFolderStorage.cpp.

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

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

References KisStoragePlugin::location().

◆ importResource()

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

Reimplemented from KisStoragePlugin.

Definition at line 190 of file KisFolderStorage.cpp.

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

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

◆ loadVersionedResource()

bool KisFolderStorage::loadVersionedResource ( KoResourceSP resource)
overridevirtual

Implements KisStoragePlugin.

Definition at line 107 of file KisFolderStorage.cpp.

108{
109 QFileInfo fi(location() + '/' + resource->resourceType().first + '/' + resource->filename());
110
111 QFile f(fi.absoluteFilePath());
112 if (!f.open(QFile::ReadOnly)) {
113 qWarning() << "Could not open" << fi.absoluteFilePath() << "for reading";
114 return false;
115 }
116
117 bool r = resource->loadFromDevice(&f, KisGlobalResourcesInterface::instance());
118
119 // Check for the thumbnail
120 if (r) {
122
123 if ((resource->image().isNull() || resource->thumbnail().isNull()) && !resource->thumbnailPath().isNull()) {
124 QImage img(location() + '/' + resource->resourceType().first + '/' + resource->thumbnailPath());
125 resource->setImage(img);
126 resource->updateThumbnail();
127 }
128 }
129
130 return r;
131}
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 275 of file KisFolderStorage.cpp.

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

References KisResourceStorage::s_meta_name.

◆ metaDataKeys()

QStringList KisFolderStorage::metaDataKeys ( ) const
overridevirtual

Reimplemented from KisStoragePlugin.

Definition at line 270 of file KisFolderStorage.cpp.

271{
273}
QList< QString > QStringList

References KisResourceStorage::s_meta_name.

◆ resourceFilePath()

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

Reimplemented from KisStoragePlugin.

Definition at line 145 of file KisFolderStorage.cpp.

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

References KisStoragePlugin::location().

◆ resourceItem()

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

Implements KisStoragePlugin.

Definition at line 97 of file KisFolderStorage.cpp.

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

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 133 of file KisFolderStorage.cpp.

134{
135 QString result;
136
137 QFile file(location() + "/" + url);
138 if (file.exists() && file.open(QIODevice::ReadOnly)) {
139 result = KoMD5Generator::generateHash(file.readAll());
140 }
141
142 return result;
143}
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 151 of file KisFolderStorage.cpp.

152{
154
155 const QString resourcesSaveLocation = location() + "/" + resourceType;
156
157 QDirIterator it(resourcesSaveLocation,
158 KisResourceLoaderRegistry::instance()->filters(resourceType),
159 QDir::Files | QDir::Readable,
160 QDirIterator::Subdirectories);;
161
162 while (it.hasNext()) {
163 it.next();
164 QFileInfo info(it.fileInfo());
165
167 entry.filename = it.filePath().mid(resourcesSaveLocation.size() + 1);
168
169 // Don't load 4.x backup resources
170 if (entry.filename.contains("backup")) {
171 continue;
172 }
173
174 entry.lastModified = info.lastModified();
175 entry.tagList = {}; // TODO
176 entry.resourceType = resourceType;
177 entries.append(entry);
178 }
179
181
182 return toQShared(new KisVersionedStorageIterator(entries, this));
183}
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 92 of file KisFolderStorage.cpp.

93{
94 return KisStorageVersioningHelper::addVersionedResource(location() + "/" + resourceType, _resource, 0);
95}
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: