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

#include <KisResourceStorage.h>

Classes

class  Private
 
struct  ResourceItem
 A resource item is simply an entry in the storage,. More...
 
class  ResourceIterator
 
class  TagIterator
 

Public Types

enum class  StorageType : int {
  Unknown = 1 , Folder = 2 , Bundle = 3 , AdobeBrushLibrary = 4 ,
  AdobeStyleLibrary = 5 , Memory = 6 , FontStorage = 7
}
 

Public Member Functions

bool addResource (KoResourceSP resource)
 
bool addTag (const QString &resourceType, KisTagSP tag)
 
KisResourceStorageSP clone () const
 
bool exportResource (const QString &url, QIODevice *device)
 
bool importResource (const QString &url, QIODevice *device)
 
 KisResourceStorage (const KisResourceStorage &rhs)
 
 KisResourceStorage (const QString &location)
 
bool loadVersionedResource (KoResourceSP resource)
 Reloads the given resource from the persistent storage.
 
QString location () const
 The absolute location of the storage.
 
QVariant metaData (const QString &key) const
 
QStringList metaDataKeys () const
 
QString name () const
 
KisResourceStorageoperator= (const KisResourceStorage &rhs)
 
KoResourceSP resource (const QString &url)
 The loaded resource for an entry in the storage.
 
QString resourceFilePath (const QString &url)
 
ResourceItem resourceItem (const QString &url)
 And entry in the storage; this is not the loaded resource.
 
QString resourceMd5 (const QString &url)
 The MD5 checksum of the resource in the storage.
 
QSharedPointer< ResourceIteratorresources (const QString &resourceType) const
 An iterator over all the resources in the storage.
 
bool saveAsNewVersion (KoResourceSP resource)
 Creates a new version of the given resource.
 
void setMetaData (const QString &key, const QVariant &value)
 
bool supportsVersioning () const
 
QSharedPointer< TagIteratortags (const QString &resourceType) const
 An iterator over all the tags in the resource.
 
QImage thumbnail () const
 The icond for the storage.
 
QDateTime timestamp () const
 
QDateTime timeStampForResource (const QString &resourceType, const QString &filename) const
 
StorageType type () const
 The type of the storage.
 
bool valid () const
 true if the storage exists and can be used
 
 ~KisResourceStorage ()
 

Static Public Member Functions

static QString storageTypeToString (StorageType storageType)
 
static QString storageTypeToUntranslatedString (StorageType storageType)
 

Static Public Attributes

static const QString s_meta_author
 
static const QString s_meta_creation_date
 
static const QString s_meta_creator
 
static const QString s_meta_dc_date
 
static const QString s_meta_description
 
static const QString s_meta_email
 
static const QString s_meta_generator
 
static const QString s_meta_initial_creator
 
static const QString s_meta_license
 
static const QString s_meta_name
 
static const QString s_meta_title
 
static const QString s_meta_user_defined
 
static const QString s_meta_value
 
static const QString s_meta_version
 
static const QString s_meta_website
 
static const QString s_xmlns_dc
 
static const QString s_xmlns_meta
 

Private Member Functions

void setStorageId (int storageId)
 
int storageId ()
 
KisStoragePlugintestingGetStoragePlugin ()
 

Private Attributes

QScopedPointer< Privated
 

Friends

class KisResourceCacheDb
 
class KisResourceLocator
 
class KisStorageModel
 
class TestResourceLocator
 

Detailed Description

The KisResourceStorage class is the base class for places where resources can be stored. Examples are folders, bundles or Adobe resource libraries like ABR files.

Definition at line 51 of file KisResourceStorage.h.

Member Enumeration Documentation

◆ StorageType

enum class KisResourceStorage::StorageType : int
strong
Enumerator
Unknown 
Folder 
Bundle 
AdobeBrushLibrary 
AdobeStyleLibrary 
Memory 
FontStorage 

Definition at line 104 of file KisResourceStorage.h.

Constructor & Destructor Documentation

◆ KisResourceStorage() [1/2]

KisResourceStorage::KisResourceStorage ( const QString & location)

Definition at line 88 of file KisResourceStorage.cpp.

89 : d(new Private())
90{
91 d->location = location;
92 d->name = QFileInfo(d->location).fileName();
93
94 QFileInfo fi(d->location);
95 if (fi.isDir()) {
96 d->storagePlugin.reset(KisStoragePluginRegistry::instance()->m_storageFactoryMap[StorageType::Folder]->create(location));
97 d->storageType = StorageType::Folder;
98 d->valid = fi.isWritable();
99 }
100 else if (d->name.endsWith(".bundle", Qt::CaseInsensitive)) {
101 d->storagePlugin.reset(KisStoragePluginRegistry::instance()->m_storageFactoryMap[StorageType::Bundle]->create(location));
102 d->storageType = StorageType::Bundle;
103 // XXX: should we also check whether there's a valid metadata entry? Or is this enough?
104 d->valid = (fi.isReadable() && QuaZip(d->location).open(QuaZip::mdUnzip));
105 }
106 else if (d->name.endsWith(".abr", Qt::CaseInsensitive)) {
108 d->storageType = StorageType::AdobeBrushLibrary;
109 d->valid = fi.isReadable();
110 }
111 else if (d->name.endsWith(".asl", Qt::CaseInsensitive)) {
113 d->storageType = StorageType::AdobeStyleLibrary;
114 d->valid = d->storagePlugin->isValid();
115 }
116 else if (d->location == "fontregistry") {
118 if (factory) {
119 auto storage = factory->create(location);
120 d->storagePlugin.reset(storage);
121 d->valid = true;
122 }
123 else {
124 d->valid = false;
125 }
126 d->name = location;
127 d->storageType = StorageType::FontStorage;
128
129 }
130 else if (d->location == "memory" || !QUuid::fromString(d->location).isNull() || (!d->location.isEmpty() && !fi.exists())) {
131 d->storagePlugin.reset(KisStoragePluginRegistry::instance()->m_storageFactoryMap[StorageType::Memory]->create(location));
132 d->name = location;
133 d->storageType = StorageType::Memory;
134 d->valid = true;
135 } else {
136 // we create a fake memory storage to make sure methods like `timestamp()` still work
137 d->storagePlugin.reset(KisStoragePluginRegistry::instance()->m_storageFactoryMap[StorageType::Memory]->create(location));
138 d->valid = false;
139 }
140}
QString location() const
The absolute location of the storage.
QScopedPointer< Private > d
static KisStoragePluginRegistry * instance()
QMap< KisResourceStorage::StorageType, KisStoragePluginFactoryBase * > m_storageFactoryMap
QPainterPath create(const char32_t codepoint, double height)
Creates a tofu missing glyph indicator representing the provided Unicode codepoint.

References AdobeBrushLibrary, AdobeStyleLibrary, Bundle, d, Folder, FontStorage, KisStoragePluginRegistry::instance(), location(), KisStoragePluginRegistry::m_storageFactoryMap, and Memory.

◆ ~KisResourceStorage()

KisResourceStorage::~KisResourceStorage ( )

Definition at line 142 of file KisResourceStorage.cpp.

143{
144}

◆ KisResourceStorage() [2/2]

KisResourceStorage::KisResourceStorage ( const KisResourceStorage & rhs)

Definition at line 146 of file KisResourceStorage.cpp.

147 : d(new Private)
148{
149 *this = rhs;
150}

Member Function Documentation

◆ addResource()

bool KisResourceStorage::addResource ( KoResourceSP resource)

Adds the given resource to the storage. If there is already a resource with the given filename of the given type, this should return false and saveAsNewVersion should be used.

Definition at line 252 of file KisResourceStorage.cpp.

253{
254 if (!resource) return false;
255
256 return d->storagePlugin->addResource(resource->resourceType().first, resource);
257}
KoResourceSP resource(const QString &url)
The loaded resource for an entry in the storage.

References d, and resource().

◆ addTag()

bool KisResourceStorage::addTag ( const QString & resourceType,
KisTagSP tag )

Adds a tag to the storage, however, it does not store the links between tags and resources.

◆ clone()

KisResourceStorageSP KisResourceStorage::clone ( ) const

Definition at line 171 of file KisResourceStorage.cpp.

172{
173 return KisResourceStorageSP(new KisResourceStorage(*this));
174}
QSharedPointer< KisResourceStorage > KisResourceStorageSP
KisResourceStorage(const QString &location)

References KisResourceStorage().

◆ exportResource()

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

Copies the given resource from the storage into device

Parameters
urlis the URL of the resource inside the storage, which is usually resource_type/resource_filename.ext

Definition at line 264 of file KisResourceStorage.cpp.

265{
266 return d->storagePlugin->exportResource(url, device);
267}

References d.

◆ importResource()

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

Copies the given file into this storage. Implementations should not overwrite an existing resource with the same filename, but return false.

Parameters
urlis the URL of the resource inside the storage, which is usually resource_type/resource_filename.ext

Definition at line 259 of file KisResourceStorage.cpp.

260{
261 return d->storagePlugin->importResource(url, device);
262}

References d.

◆ loadVersionedResource()

bool KisResourceStorage::loadVersionedResource ( KoResourceSP resource)

Reloads the given resource from the persistent storage.

Definition at line 274 of file KisResourceStorage.cpp.

275{
276 return d->storagePlugin->loadVersionedResource(resource);
277}

References d, and resource().

◆ location()

QString KisResourceStorage::location ( ) const

The absolute location of the storage.

Definition at line 181 of file KisResourceStorage.cpp.

182{
183 return d->location;
184}

References d.

◆ metaData()

QVariant KisResourceStorage::metaData ( const QString & key) const

Definition at line 294 of file KisResourceStorage.cpp.

295{
296 return d->storagePlugin->metaData(key);
297}

References d.

◆ metaDataKeys()

QStringList KisResourceStorage::metaDataKeys ( ) const

Definition at line 289 of file KisResourceStorage.cpp.

290{
291 return d->storagePlugin->metaDataKeys();
292}

References d.

◆ name()

QString KisResourceStorage::name ( ) const

The filename of the storage if it's a bundle or Adobe Library. This can also be empty (for the folder storage) or "memory" for the storage for temporary resources, a UUID for storages associated with documents.

Definition at line 176 of file KisResourceStorage.cpp.

177{
178 return d->name;
179}

References d.

◆ operator=()

KisResourceStorage & KisResourceStorage::operator= ( const KisResourceStorage & rhs)

Definition at line 152 of file KisResourceStorage.cpp.

153{
154 if (this != &rhs) {
155 d->name = rhs.d->name;
156 d->location = rhs.d->location;
157 d->storageType = rhs.d->storageType;
158 if (d->storageType == StorageType::Memory) {
159 const QSharedPointer<KisMemoryStorage> memoryStorage = rhs.d->storagePlugin.dynamicCast<KisMemoryStorage>();
160 KIS_ASSERT(memoryStorage);
161 d->storagePlugin = QSharedPointer<KisMemoryStorage>(new KisMemoryStorage(*memoryStorage));
162 }
163 else {
164 d->storagePlugin = rhs.d->storagePlugin;
165 }
166 d->valid = false;
167 }
168 return *this;
169}
The KisMemoryStorage class stores the temporary resources that are not saved to disk or bundle....
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References d, KIS_ASSERT, Memory, and name().

◆ resource()

KoResourceSP KisResourceStorage::resource ( const QString & url)

The loaded resource for an entry in the storage.

Definition at line 220 of file KisResourceStorage.cpp.

221{
222 return d->storagePlugin->resource(url);
223}

References d.

◆ resourceFilePath()

QString KisResourceStorage::resourceFilePath ( const QString & url)

If the resource is present on the filesystem as a distinct fine, returns the full file path of it, otherwise returns an empty string.

Never manipulate the file in any way directly! It will destroy the resources database. Use this file path only for informational purposes.

Definition at line 230 of file KisResourceStorage.cpp.

231{
232 return d->storagePlugin->resourceFilePath(url);
233}

References d.

◆ resourceItem()

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

And entry in the storage; this is not the loaded resource.

Definition at line 215 of file KisResourceStorage.cpp.

216{
217 return d->storagePlugin->resourceItem(url);
218}

References d.

◆ resourceMd5()

QString KisResourceStorage::resourceMd5 ( const QString & url)

The MD5 checksum of the resource in the storage.

Definition at line 225 of file KisResourceStorage.cpp.

226{
227 return d->storagePlugin->resourceMd5(url);
228}

References d.

◆ resources()

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

An iterator over all the resources in the storage.

Definition at line 235 of file KisResourceStorage.cpp.

236{
237 return d->storagePlugin->resources(resourceType);
238}

References d.

◆ saveAsNewVersion()

bool KisResourceStorage::saveAsNewVersion ( KoResourceSP resource)

Creates a new version of the given resource.

Definition at line 245 of file KisResourceStorage.cpp.

246{
247 if (!resource) return false;
248
249 return d->storagePlugin->saveAsNewVersion(resource->resourceType().first, resource);
250}

References d, and resource().

◆ setMetaData()

void KisResourceStorage::setMetaData ( const QString & key,
const QVariant & value )

Definition at line 279 of file KisResourceStorage.cpp.

280{
281 d->storagePlugin->setMetaData(key, value);
282}
float value(const T *src, size_t ch)

References d, and value().

◆ setStorageId()

void KisResourceStorage::setStorageId ( int storageId)
private

Definition at line 299 of file KisResourceStorage.cpp.

300{
301 d->storageId = storageId;
302}

References d, and storageId().

◆ storageId()

int KisResourceStorage::storageId ( )
private

Definition at line 304 of file KisResourceStorage.cpp.

305{
306 return d->storageId;
307}

References d.

◆ storageTypeToString()

static QString KisResourceStorage::storageTypeToString ( StorageType storageType)
inlinestatic

Definition at line 114 of file KisResourceStorage.h.

114 {
115 switch (storageType) {
117 return i18n("Unknown");
119 return i18n("Folder");
121 return i18n("Bundle");
123 return i18n("Adobe Brush Library");
125 return i18n("Adobe Style Library");
127 return i18n("Font Storage");
129 return i18n("Memory");
130 default:
131 return i18n("Invalid");
132 }
133 }

◆ storageTypeToUntranslatedString()

static QString KisResourceStorage::storageTypeToUntranslatedString ( StorageType storageType)
inlinestatic

Definition at line 136 of file KisResourceStorage.h.

136 {
137 switch (storageType) {
139 return ("Unknown");
141 return ("Folder");
143 return ("Bundle");
145 return ("Adobe Brush Library");
147 return ("Adobe Style Library");
149 return ("Font Storage");
151 return ("Memory");
152 default:
153 return ("Invalid");
154 }
155 }

◆ supportsVersioning()

bool KisResourceStorage::supportsVersioning ( ) const

Returns true if the storage supports versioning of the resources. It enables loadVersionedResource() call.

Definition at line 269 of file KisResourceStorage.cpp.

270{
271 return d->storagePlugin->supportsVersioning();
272}

References d.

◆ tags()

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

An iterator over all the tags in the resource.

Definition at line 240 of file KisResourceStorage.cpp.

241{
242 return d->storagePlugin->tags(resourceType);
243}

References d.

◆ testingGetStoragePlugin()

KisStoragePlugin * KisResourceStorage::testingGetStoragePlugin ( )
private

Definition at line 309 of file KisResourceStorage.cpp.

310{
311 return d->storagePlugin.data();
312}

References d.

◆ thumbnail()

QImage KisResourceStorage::thumbnail ( ) const

The icond for the storage.

Definition at line 191 of file KisResourceStorage.cpp.

192{
193 return d->storagePlugin->thumbnail();
194}

References d.

◆ timestamp()

QDateTime KisResourceStorage::timestamp ( ) const

The time and date when the storage was last modified, or created for memory storages.

Definition at line 196 of file KisResourceStorage.cpp.

197{
198 return d->storagePlugin->timestamp();
199}

References d.

◆ timeStampForResource()

QDateTime KisResourceStorage::timeStampForResource ( const QString & resourceType,
const QString & filename ) const

The time and date when the resource was last modified For filestorage

Definition at line 201 of file KisResourceStorage.cpp.

202{
203 QFileInfo li(d->location);
204 if (li.suffix().toLower() == "bundle") {
205 QFileInfo bf(d->location + "_modified/" + resourceType + "/" + filename);
206 if (bf.exists()) {
207 return bf.lastModified();
208 }
209 } else if (QFileInfo(d->location + "/" + resourceType + "/" + filename).exists()) {
210 return QFileInfo(d->location + "/" + resourceType + "/" + filename).lastModified();
211 }
212 return this->timestamp();
213}
QDateTime timestamp() const

References d, and timestamp().

◆ type()

KisResourceStorage::StorageType KisResourceStorage::type ( ) const

The type of the storage.

Definition at line 186 of file KisResourceStorage.cpp.

187{
188 return d->storageType;
189}

References d.

◆ valid()

bool KisResourceStorage::valid ( ) const

true if the storage exists and can be used

Definition at line 284 of file KisResourceStorage.cpp.

285{
286 return d->valid;
287}

References d.

Friends And Related Symbol Documentation

◆ KisResourceCacheDb

friend class KisResourceCacheDb
friend

Definition at line 274 of file KisResourceStorage.h.

◆ KisResourceLocator

friend class KisResourceLocator
friend

Definition at line 273 of file KisResourceStorage.h.

◆ KisStorageModel

friend class KisStorageModel
friend

Definition at line 272 of file KisResourceStorage.h.

◆ TestResourceLocator

friend class TestResourceLocator
friend

Definition at line 275 of file KisResourceStorage.h.

Member Data Documentation

◆ d

QScopedPointer<Private> KisResourceStorage::d
private

Definition at line 283 of file KisResourceStorage.h.

◆ s_meta_author

const QString KisResourceStorage::s_meta_author
static

Definition at line 251 of file KisResourceStorage.h.

◆ s_meta_creation_date

const QString KisResourceStorage::s_meta_creation_date
static

Definition at line 256 of file KisResourceStorage.h.

◆ s_meta_creator

const QString KisResourceStorage::s_meta_creator
static

Definition at line 255 of file KisResourceStorage.h.

◆ s_meta_dc_date

const QString KisResourceStorage::s_meta_dc_date
static

Definition at line 257 of file KisResourceStorage.h.

◆ s_meta_description

const QString KisResourceStorage::s_meta_description
static

Definition at line 253 of file KisResourceStorage.h.

◆ s_meta_email

const QString KisResourceStorage::s_meta_email
static

Definition at line 263 of file KisResourceStorage.h.

◆ s_meta_generator

const QString KisResourceStorage::s_meta_generator
static

Definition at line 250 of file KisResourceStorage.h.

◆ s_meta_initial_creator

const QString KisResourceStorage::s_meta_initial_creator
static

Definition at line 254 of file KisResourceStorage.h.

◆ s_meta_license

const QString KisResourceStorage::s_meta_license
static

Definition at line 262 of file KisResourceStorage.h.

◆ s_meta_name

const QString KisResourceStorage::s_meta_name
static

Definition at line 259 of file KisResourceStorage.h.

◆ s_meta_title

const QString KisResourceStorage::s_meta_title
static

Definition at line 252 of file KisResourceStorage.h.

◆ s_meta_user_defined

const QString KisResourceStorage::s_meta_user_defined
static

Definition at line 258 of file KisResourceStorage.h.

◆ s_meta_value

const QString KisResourceStorage::s_meta_value
static

Definition at line 260 of file KisResourceStorage.h.

◆ s_meta_version

const QString KisResourceStorage::s_meta_version
static

Definition at line 261 of file KisResourceStorage.h.

◆ s_meta_website

const QString KisResourceStorage::s_meta_website
static

Definition at line 264 of file KisResourceStorage.h.

◆ s_xmlns_dc

const QString KisResourceStorage::s_xmlns_dc
static

Definition at line 248 of file KisResourceStorage.h.

◆ s_xmlns_meta

const QString KisResourceStorage::s_xmlns_meta
static

Definition at line 247 of file KisResourceStorage.h.


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