Krita Source Code Documentation
Loading...
Searching...
No Matches
KisStoragePlugin Class Referenceabstract

#include <KisStoragePlugin.h>

+ Inheritance diagram for KisStoragePlugin:

Classes

class  Private
 

Public Member Functions

virtual bool addResource (const QString &resourceType, KoResourceSP resource)
 
virtual bool exportResource (const QString &url, QIODevice *device)
 
virtual bool importResource (const QString &url, QIODevice *device)
 
virtual bool isValid () const
 
 KisStoragePlugin (const QString &location)
 
virtual bool loadVersionedResource (KoResourceSP resource)=0
 
virtual QVariant metaData (const QString &key) const
 
virtual QStringList metaDataKeys () const
 
virtual KoResourceSP resource (const QString &url)
 
virtual QString resourceFilePath (const QString &url)
 
virtual KisResourceStorage::ResourceItem resourceItem (const QString &url)=0
 
virtual QString resourceMd5 (const QString &url)
 
virtual QSharedPointer< KisResourceStorage::ResourceIteratorresources (const QString &resourceType)=0
 
virtual bool saveAsNewVersion (const QString &resourceType, KoResourceSP resource)
 
virtual void setMetaData (const QString &key, const QVariant &value)
 
virtual bool supportsVersioning () const
 
virtual QSharedPointer< KisResourceStorage::TagIteratortags (const QString &resourceType)=0
 
virtual QImage thumbnail () const
 
QDateTime timestamp ()
 
virtual ~KisStoragePlugin ()
 

Protected Member Functions

QString location () const
 
void sanitizeResourceFileNameCase (KoResourceSP resource, const QDir &parentDir)
 

Private Attributes

QScopedPointer< Privated
 

Friends

class TestBundleStorage
 

Detailed Description

The KisStoragePlugin class is the base class for storage plugins. A storage plugin is used by KisResourceStorage to locate resources and tags in a kind of storage, like a folder, a bundle or an adobe resource library.

Definition at line 25 of file KisStoragePlugin.h.

Constructor & Destructor Documentation

◆ KisStoragePlugin()

KisStoragePlugin::KisStoragePlugin ( const QString & location)

Definition at line 22 of file KisStoragePlugin.cpp.

23 : d(new Private())
24{
25 d->location = location;
26
27 if (!QFileInfo(d->location).exists()) {
28 d->timestamp = QDateTime::currentDateTime();
29 }
30}
QString location() const
QScopedPointer< Private > d

References d, and location().

◆ ~KisStoragePlugin()

KisStoragePlugin::~KisStoragePlugin ( )
virtual

Definition at line 32 of file KisStoragePlugin.cpp.

33{
34}

Member Function Documentation

◆ addResource()

virtual bool KisStoragePlugin::addResource ( const QString & resourceType,
KoResourceSP resource )
inlinevirtual

Reimplemented in KisAslStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 46 of file KisStoragePlugin.h.

46{Q_UNUSED(resourceType); Q_UNUSED(resource); return false;}
virtual KoResourceSP resource(const QString &url)

◆ exportResource()

virtual bool KisStoragePlugin::exportResource ( const QString & url,
QIODevice * device )
inlinevirtual

Reimplemented in KisBundleStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 45 of file KisStoragePlugin.h.

45{Q_UNUSED(url); Q_UNUSED(device); return false;}

◆ importResource()

virtual bool KisStoragePlugin::importResource ( const QString & url,
QIODevice * device )
inlinevirtual

Reimplemented in KisFolderStorage, and KisMemoryStorage.

Definition at line 44 of file KisStoragePlugin.h.

44{Q_UNUSED(url); Q_UNUSED(device); return false;}

◆ isValid()

bool KisStoragePlugin::isValid ( ) const
virtual

Reimplemented in KoFontStorage, and KisAslStorage.

Definition at line 108 of file KisStoragePlugin.cpp.

109{
110 qWarning() << "Storage plugins should implement their own checks!";
111 return true;
112}

◆ loadVersionedResource()

virtual bool KisStoragePlugin::loadVersionedResource ( KoResourceSP resource)
pure virtual

◆ location()

QString KisStoragePlugin::location ( ) const
protected

Definition at line 91 of file KisStoragePlugin.cpp.

92{
93 return d->location;
94}

References d.

◆ metaData()

virtual QVariant KisStoragePlugin::metaData ( const QString & key) const
inlinevirtual

Reimplemented in KisBundleStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 51 of file KisStoragePlugin.h.

51{ Q_UNUSED(key); return QString(); }

◆ metaDataKeys()

virtual QStringList KisStoragePlugin::metaDataKeys ( ) const
inlinevirtual

Reimplemented in KisBundleStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 50 of file KisStoragePlugin.h.

50{ return QStringList(); }
QList< QString > QStringList

◆ resource()

KoResourceSP KisStoragePlugin::resource ( const QString & url)
virtual

Retrieve the given resource. The url is the unique identifier of the resource, for instance resourcetype plus filename.

Reimplemented in KisAbrStorage, KoFontStorage, and KisAslStorage.

Definition at line 36 of file KisStoragePlugin.cpp.

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}
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
virtual bool loadVersionedResource(KoResourceSP resource)=0

References KisResourceLoaderBase::create(), KisResourceLoaderRegistry::instance(), KisResourceLoaderRegistry::loader(), loadVersionedResource(), KisMimeDatabase::mimeTypeForSuffix(), and resource().

◆ resourceFilePath()

QString KisStoragePlugin::resourceFilePath ( const QString & url)
virtual

Reimplemented in KisFolderStorage.

Definition at line 72 of file KisStoragePlugin.cpp.

73{
74 Q_UNUSED(url);
75 return QString();
76}

◆ resourceItem()

virtual KisResourceStorage::ResourceItem KisStoragePlugin::resourceItem ( const QString & url)
pure virtual

◆ resourceMd5()

QString KisStoragePlugin::resourceMd5 ( const QString & url)
virtual

Reimplemented in KisBundleStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 60 of file KisStoragePlugin.cpp.

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}

References resource().

◆ resources()

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

◆ sanitizeResourceFileNameCase()

void KisStoragePlugin::sanitizeResourceFileNameCase ( KoResourceSP resource,
const QDir & parentDir )
protected

On some systems, e.g. Windows, the file names are case-insensitive, therefore URLs will fetch the resource even when the casing is not the same. The storage, when returning such a resource should make sure that its filename is set to the real filename, not the one with incorrect casing.

Definition at line 96 of file KisStoragePlugin.cpp.

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}

References resource().

◆ saveAsNewVersion()

virtual bool KisStoragePlugin::saveAsNewVersion ( const QString & resourceType,
KoResourceSP resource )
inlinevirtual

Reimplemented in KisAslStorage, KisBundleStorage, KisFolderStorage, and KisMemoryStorage.

Definition at line 43 of file KisStoragePlugin.h.

43{Q_UNUSED(resourceType); Q_UNUSED(resource); return false;}

◆ setMetaData()

virtual void KisStoragePlugin::setMetaData ( const QString & key,
const QVariant & value )
inlinevirtual

Reimplemented in KisMemoryStorage.

Definition at line 49 of file KisStoragePlugin.h.

49{Q_UNUSED(key); Q_UNUSED(value);}
float value(const T *src, size_t ch)

References value().

◆ supportsVersioning()

bool KisStoragePlugin::supportsVersioning ( ) const
virtual

Reimplemented in KisAbrStorage, KoFontStorage, and KisAslStorage.

Definition at line 78 of file KisStoragePlugin.cpp.

79{
80 return true;
81}

◆ tags()

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

◆ thumbnail()

virtual QImage KisStoragePlugin::thumbnail ( ) const
inlinevirtual

Reimplemented in KisAbrStorage, and KisBundleStorage.

Definition at line 47 of file KisStoragePlugin.h.

47{ return QImage(); }

◆ timestamp()

QDateTime KisStoragePlugin::timestamp ( )

Definition at line 83 of file KisStoragePlugin.cpp.

84{
85 if (d->timestamp.isNull()) {
86 return QFileInfo(d->location).lastModified();
87 }
88 return d->timestamp;
89}

References d.

Friends And Related Symbol Documentation

◆ TestBundleStorage

friend class TestBundleStorage
friend

Definition at line 58 of file KisStoragePlugin.h.

Member Data Documentation

◆ d

QScopedPointer<Private> KisStoragePlugin::d
private

Definition at line 72 of file KisStoragePlugin.h.


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