|
Krita Source Code Documentation
|
The KisAllresourcesModel class provides access to the cache database for a particular resource type. Instances should be retrieved using KisResourceModelProvider. All resources are part of this model, active and inactive, from all storages, active and inactive. More...
#include <KisResourceModel.h>
Inheritance diagram for KisAllResourcesModel:Classes | |
| struct | Private |
Public Member Functions | |
| bool | addResource (KoResourceSP resource, const QString &storageId=QString("")) override |
| addResource adds the given resource to the database and storage. If the resource already exists in the given storage with md5, filename or name, the existing resource will be updated instead. If the existing resource was inactive, it will be active (undeleted). | |
| int | columnCount (const QModelIndex &parent=QModelIndex()) const override |
| QVariant | data (const QModelIndex &index, int role) const override |
| bool | exportResource (KoResourceSP resource, QIODevice *device) override |
| exportResource exports a resource into a QIODevice | |
| Qt::ItemFlags | flags (const QModelIndex &index) const override |
| QVariant | headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override |
| KoResourceSP | importResource (const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId=QString("")) override |
| importResource imports a resource from a QIODevice | |
| KoResourceSP | importResourceFile (const QString &filename, const bool allowOverwrite, const QString &storageId=QString("")) override |
| importResourceFile | |
| bool | importWillOverwriteResource (const QString &fileName, const QString &storageLocation=QString()) const override |
| importWillOverwriteResource checks is importing a resource with this filename will overwrite anything | |
| QModelIndex | indexForResource (KoResourceSP resource) const override |
| indexFromResource | |
| QModelIndex | indexForResourceId (int resourceId) const override |
| indexFromResource | |
| bool | reloadResource (KoResourceSP resource) override |
| reloadResource | |
| bool | renameResource (KoResourceSP resource, const QString &name) override |
| renameResource name the given resource. The resource will have its name field reset, will be saved to the storage and there will be a new version created in the database. | |
| bool | resourceExists (const QString &md5, const QString &filename, const QString &name) |
| resourceExists checks whether there is a resource with, in order, the given md5, the filename or the resource name. | |
| KoResourceSP | resourceForId (int id) const |
| KoResourceSP | resourceForIndex (QModelIndex index=QModelIndex()) const override |
| resourceForIndex returns a properly versioned and id'ed resource object | |
| QVector< KoResourceSP > | resourcesForFilename (QString filename) const |
| QVector< KoResourceSP > | resourcesForMD5 (const QString &md5sum) const |
| QVector< KoResourceSP > | resourcesForName (const QString &name) const |
| QHash< int, QByteArray > | roleNames () const override |
| int | rowCount (const QModelIndex &parent=QModelIndex()) const override |
| bool | setData (const QModelIndex &index, const QVariant &value, int role) override |
| bool | setResourceActive (const QModelIndex &index, bool value) override |
| setResourceActive changes 'active' state of the resource | |
| bool | setResourceMetaData (KoResourceSP resource, QMap< QString, QVariant > metadata) override |
| setResourceMetaData | |
| QVector< KisTagSP > | tagsForResource (int resourceId) const |
| bool | updateResource (KoResourceSP resource) override |
| updateResource creates a new version of the resource in the storage and in the database. This will also set the resource to active if it was inactive. | |
| ~KisAllResourcesModel () override | |
Public Member Functions inherited from KisAbstractResourceModel | |
| bool | setResourceInactive (const QModelIndex &index) |
| virtual | ~KisAbstractResourceModel () |
Private Slots | |
| void | beginExternalResourceImport (const QString &resourceType, int numResources) |
| void | beginExternalResourceRemove (const QString &resourceType, const QVector< int > &resourceId) |
| void | endExternalResourceImport (const QString &resourceType) |
| void | endExternalResourceRemove (const QString &resourceType) |
| void | slotResourceActiveStateChanged (const QString &resourceType, int resourceId) |
| void | storageActiveStateChanged (const QString &location) |
| void | storageResynchronized (const QString &storage, bool isBulkResynchronization) |
| void | storagesBulkSynchronizationFinished () |
Private Member Functions | |
| void | closeQuery () |
| KisAllResourcesModel (const QString &resourceType, QObject *parent=0) | |
| bool | prepareQuery () |
| bool | resetQuery () |
Private Attributes | |
| Private *const | d |
Friends | |
| class | KisResourceModel |
| class | KisResourceModelProvider |
| class | KisResourceQueryMapper |
Additional Inherited Members | |
Public Types inherited from KisAbstractResourceModel | |
| enum | Columns { Id = 0 , StorageId , Name , Filename , Tooltip , Thumbnail , Status , Location , ResourceType , Tags , MD5 , LargeThumbnail , Dirty , MetaData , ResourceActive , StorageActive , BrokenStatus , BrokenStatusMessage } |
| The Columns enum indexes the columns in the model. To get the thumbnail for a particular resource, create the index with QModelIndex(row, Thumbnail). More... | |
The KisAllresourcesModel class provides access to the cache database for a particular resource type. Instances should be retrieved using KisResourceModelProvider. All resources are part of this model, active and inactive, from all storages, active and inactive.
Definition at line 236 of file KisResourceModel.h.
|
private |
we don't handle KisResourceLocator::storage{Added,Removed} signals here, we use per-resource notifications from KisResourceLocator instead
Definition at line 33 of file KisResourceModel.cpp.
References KisResourceLocator::beginExternalResourceImport(), beginExternalResourceImport(), beginExternalResourceRemove(), KisResourceLocator::beginExternalResourceRemove(), connect(), d, KisResourceLocator::endExternalResourceImport(), endExternalResourceImport(), KisResourceLocator::endExternalResourceRemove(), endExternalResourceRemove(), KisResourceLocator::instance(), KisStorageModel::instance(), prepareQuery(), resetQuery(), KisResourceLocator::resourceActiveStateChanged(), KisAllResourcesModel::Private::resourceType, slotResourceActiveStateChanged(), storageActiveStateChanged(), KisStorageModel::storageDisabled(), KisStorageModel::storageEnabled(), storageResynchronized(), KisStorageModel::storageResynchronized(), storagesBulkSynchronizationFinished(), and KisStorageModel::storagesBulkSynchronizationFinished().
|
override |
|
overridevirtual |
addResource adds the given resource to the database and storage. If the resource already exists in the given storage with md5, filename or name, the existing resource will be updated instead. If the existing resource was inactive, it will be active (undeleted).
| resource | the resource itself |
| storageId | the id of the storage (could be "memory" for temporary resources, the document's storage id for document storages or empty to save to the default resources folder |
Implements KisAbstractResourceModel.
Definition at line 468 of file KisResourceModel.cpp.
References addResource(), d, KisResourceLocator::instance(), resetQuery(), KisAllResourcesModel::Private::resourceType, and rowCount().
|
privateslot |
A special connection for KisResourceLocator, which can import a resource on its own (all other places are supposed to do that via KisResourceModel). This call is needed to make sure the internal query in the model is reset.
WARNING: the resource is expected to be added to the end of the model, that is, its resourceId is expected to be greater than any existing resource.
Definition at line 721 of file KisResourceModel.cpp.
References d, KisAllResourcesModel::Private::resourceType, and rowCount().
|
privateslot |
A special connection for KisResourceLocator, which can remove the resource while importing something with overwrite. In such a case the locator will Q_EMIT both, remove and insert signals for both the resources.
Definition at line 736 of file KisResourceModel.cpp.
References d, dbgResources, KisAllResourcesModel::Private::externalResourcesRemovedCount, indexForResourceId(), and KisAllResourcesModel::Private::resourceType.
|
private |
Definition at line 585 of file KisResourceModel.cpp.
References d, and KisAllResourcesModel::Private::resourcesQuery.
|
override |
Definition at line 63 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::columnCount, and d.
|
override |
Definition at line 72 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::columnCount, d, KisAllResourcesModel::Private::resourcesQuery, rowCount(), v, and KisResourceQueryMapper::variantFromResourceQuery().
|
privateslot |
Definition at line 728 of file KisResourceModel.cpp.
References d, resetQuery(), and KisAllResourcesModel::Private::resourceType.
|
privateslot |
Definition at line 753 of file KisResourceModel.cpp.
References d, KisAllResourcesModel::Private::externalResourcesRemovedCount, resetQuery(), and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
exportResource exports a resource into a QIODevice
Exporting a resource as a binary blob is the only way to guarantee that its MD5 checksum is kept persistent. The underlying storage will just copy bytes into the device without doing any conversions
| resource | the resource to be exported |
| device | device where the resource should be written to |
Implements KisAbstractResourceModel.
Definition at line 459 of file KisResourceModel.cpp.
References KisResourceLocator::exportResource(), and KisResourceLocator::instance().
|
override |
Definition at line 151 of file KisResourceModel.cpp.
|
override |
Definition at line 90 of file KisResourceModel.cpp.
References KisAbstractResourceModel::BrokenStatus, KisAbstractResourceModel::BrokenStatusMessage, KisAbstractResourceModel::Dirty, KisAbstractResourceModel::Filename, KisAbstractResourceModel::Id, KisAbstractResourceModel::LargeThumbnail, KisAbstractResourceModel::Location, KisAbstractResourceModel::MD5, KisAbstractResourceModel::MetaData, KisAbstractResourceModel::Name, KisAbstractResourceModel::ResourceActive, KisAbstractResourceModel::ResourceType, KisAbstractResourceModel::Status, KisAbstractResourceModel::StorageActive, KisAbstractResourceModel::StorageId, KisAbstractResourceModel::Tags, KisAbstractResourceModel::Thumbnail, and KisAbstractResourceModel::Tooltip.
|
overridevirtual |
importResource imports a resource from a QIODevice
Importing a resource from a binary blob is the only way to guarantee that its MD5 checksum is kept persistent. The underlying storage will just copy bytes into its location.
| filename | file name of the resource if preset. File name may be used for addressing the resource, so it is usually preferred to preserve it. |
| device | device where the resource should be read from |
Implements KisAbstractResourceModel.
Definition at line 442 of file KisResourceModel.cpp.
References d, KisResourceLocator::importResource(), KisResourceLocator::instance(), resetQuery(), and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
importResourceFile
| filename |
Implements KisAbstractResourceModel.
Definition at line 430 of file KisResourceModel.cpp.
References d, KisResourceLocator::importResourceFromFile(), KisResourceLocator::instance(), resetQuery(), and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
importWillOverwriteResource checks is importing a resource with this filename will overwrite anything
If this function returns true, then importResource() is guaranteed to fail with 'allowOverwrite' set to false.
| filename | file name of the resource if preset. File name may be used for addressing the resource, so it is usually preferred to preserve it. |
Implements KisAbstractResourceModel.
Definition at line 454 of file KisResourceModel.cpp.
References d, KisResourceLocator::importWillOverwriteResource(), KisResourceLocator::instance(), and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
indexFromResource
| resource |
Implements KisAbstractResourceModel.
Definition at line 392 of file KisResourceModel.cpp.
References indexForResourceId().
|
overridevirtual |
indexFromResource
| resourceId | resource id for which we want to get an index |
Implements KisAbstractResourceModel.
Definition at line 400 of file KisResourceModel.cpp.
References d, and KisAllResourcesModel::Private::resourcesQuery.
|
private |
Definition at line 551 of file KisResourceModel.cpp.
References d, KisAllResourcesModel::Private::resourcesQuery, and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
reloadResource
| resource |
We don't have to call reset query here, because reloading a resource doesn't change any database content.
Implements KisAbstractResourceModel.
Definition at line 504 of file KisResourceModel.cpp.
References d, indexForResource(), KisResourceLocator::instance(), reloadResource(), and KisAllResourcesModel::Private::resourceType.
|
overridevirtual |
renameResource name the given resource. The resource will have its name field reset, will be saved to the storage and there will be a new version created in the database.
| resource | The resource to rename |
| name | The new name |
Implements KisAbstractResourceModel.
Definition at line 526 of file KisResourceModel.cpp.
References d, indexForResource(), KisResourceLocator::instance(), resetQuery(), KisAllResourcesModel::Private::resourceType, and updateResource().
|
private |
In case the query has been previously closed, try to restart it (used in unittests mostly)
Definition at line 590 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::cachedRowCount, d, prepareQuery(), KisAllResourcesModel::Private::resourcesQuery, and KisAllResourcesModel::Private::resourceType.
| bool KisAllResourcesModel::resourceExists | ( | const QString & | md5, |
| const QString & | filename, | ||
| const QString & | name ) |
resourceExists checks whether there is a resource with, in order, the given md5, the filename or the resource name.
Definition at line 205 of file KisResourceModel.cpp.
| KoResourceSP KisAllResourcesModel::resourceForId | ( | int | id | ) | const |
Definition at line 200 of file KisResourceModel.cpp.
References KisResourceLocator::instance(), and KisResourceLocator::resourceForId().
|
overridevirtual |
resourceForIndex returns a properly versioned and id'ed resource object
Implements KisAbstractResourceModel.
Definition at line 184 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::columnCount, d, resourceForId(), KisAllResourcesModel::Private::resourcesQuery, and rowCount().
| QVector< KoResourceSP > KisAllResourcesModel::resourcesForFilename | ( | QString | filename | ) | const |
resourceForFilename returns the first resource with the given filename that is active and is in an active store. Note that the filename does not include a path to the storage, and if there are resources with the same filename in several active storages, only one resource is returned.
| filename | the filename we're looking for |
| checkDependentResources | check whether we should try to find a resource embedded in a resource that's not been loaded yet in the metadata table. |
Definition at line 285 of file KisResourceModel.cpp.
References d, KisResourceLocator::instance(), KisResourceLocator::resourceForId(), and KisAllResourcesModel::Private::resourceType.
| QVector< KoResourceSP > KisAllResourcesModel::resourcesForMD5 | ( | const QString & | md5sum | ) | const |
Definition at line 360 of file KisResourceModel.cpp.
References d, KisResourceLocator::instance(), KisResourceLocator::resourceForId(), and KisAllResourcesModel::Private::resourceType.
| QVector< KoResourceSP > KisAllResourcesModel::resourcesForName | ( | const QString & | name | ) | const |
resourceForName returns the first resource with the given name that is active and is in an active store. Note that if there are resources with the same name in several active storages, only one resource is returned.
Definition at line 321 of file KisResourceModel.cpp.
References d, KisResourceLocator::instance(), KisResourceLocator::resourceForId(), and KisAllResourcesModel::Private::resourceType.
|
override |
Definition at line 159 of file KisResourceModel.cpp.
References KisAbstractResourceModel::BrokenStatus, KisAbstractResourceModel::BrokenStatusMessage, KisAbstractResourceModel::Dirty, KisAbstractResourceModel::Filename, KisAbstractResourceModel::Id, KisAbstractResourceModel::LargeThumbnail, KisAbstractResourceModel::Location, KisAbstractResourceModel::MD5, KisAbstractResourceModel::MetaData, KisAbstractResourceModel::Name, KisAbstractResourceModel::ResourceActive, KisAbstractResourceModel::ResourceType, KisAbstractResourceModel::Status, KisAbstractResourceModel::StorageActive, KisAbstractResourceModel::StorageId, KisAbstractResourceModel::Tags, and KisAbstractResourceModel::Thumbnail.
|
override |
SQLite doesn't support COUNT(DISTINCT ...) over multiple columns, so we need to concatenate them manually on the fly. But SQLite doesn't support CONCAT function either, therefore we should use concatenation operator it provides.
Definition at line 646 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::cachedRowCount, d, and KisAllResourcesModel::Private::resourceType.
|
override |
Definition at line 140 of file KisResourceModel.cpp.
References setResourceActive(), and value().
|
overridevirtual |
setResourceActive changes 'active' state of the resource
| index | the index of the resource |
| value | new 'active' state of the resource |
Implements KisAbstractResourceModel.
Definition at line 415 of file KisResourceModel.cpp.
References KisAllResourcesModel::Private::columnCount, d, KisAbstractResourceModel::Id, KisResourceLocator::instance(), rowCount(), setResourceActive(), and value().
|
overridevirtual |
setResourceMetaData
| metadata |
Implements KisAbstractResourceModel.
Definition at line 545 of file KisResourceModel.cpp.
References KisResourceLocator::instance(), and KisResourceLocator::setMetaDataForResource().
|
privateslot |
A special connection for KisResourceLocator, which is triggered when the resource changes its 'active' state
Definition at line 767 of file KisResourceModel.cpp.
References d, indexForResourceId(), resetQuery(), KisAbstractResourceModel::ResourceActive, and KisAllResourcesModel::Private::resourceType.
|
privateslot |
Definition at line 684 of file KisResourceModel.cpp.
References d, indexForResourceId(), resetQuery(), KisResourceCacheDb::resourcesForStorage(), KisAllResourcesModel::Private::resourceType, and KisAbstractResourceModel::StorageActive.
|
privateslot |
Definition at line 700 of file KisResourceModel.cpp.
References resetQuery().
|
privateslot |
Definition at line 714 of file KisResourceModel.cpp.
References resetQuery().
Definition at line 610 of file KisResourceModel.cpp.
References d, KisResourceLocator::instance(), KisAllResourcesModel::Private::resourceType, and KisResourceLocator::tagForUrl().
|
overridevirtual |
updateResource creates a new version of the resource in the storage and in the database. This will also set the resource to active if it was inactive.
Note: if the storage does not support versioning, updating the resource will fail.
| resource |
Implements KisAbstractResourceModel.
Definition at line 487 of file KisResourceModel.cpp.
References d, indexForResource(), KisResourceLocator::instance(), resetQuery(), KisAllResourcesModel::Private::resourceType, and updateResource().
|
friend |
Definition at line 242 of file KisResourceModel.h.
|
friend |
Definition at line 241 of file KisResourceModel.h.
|
friend |
Definition at line 243 of file KisResourceModel.h.
|
private |
Definition at line 359 of file KisResourceModel.h.