diff options
-rw-r--r-- | common/facade.cpp | 23 | ||||
-rw-r--r-- | common/resourceaccess.h | 2 |
2 files changed, 24 insertions, 1 deletions
diff --git a/common/facade.cpp b/common/facade.cpp index 1d6b9a7..ab41f96 100644 --- a/common/facade.cpp +++ b/common/facade.cpp | |||
@@ -28,6 +28,27 @@ | |||
28 | 28 | ||
29 | using namespace Akonadi2; | 29 | using namespace Akonadi2; |
30 | 30 | ||
31 | class ResourceAccessFactory { | ||
32 | public: | ||
33 | static ResourceAccessFactory &instance() | ||
34 | { | ||
35 | static ResourceAccessFactory *instance = 0; | ||
36 | if (!instance) { | ||
37 | instance = new ResourceAccessFactory; | ||
38 | } | ||
39 | return *instance; | ||
40 | } | ||
41 | |||
42 | Akonadi2::ResourceAccess::Ptr getAccess(const QByteArray &instanceIdentifier) | ||
43 | { | ||
44 | if (!mCache.contains(instanceIdentifier)) { | ||
45 | mCache.insert(instanceIdentifier, Akonadi2::ResourceAccess::Ptr::create(instanceIdentifier)); | ||
46 | } | ||
47 | return mCache.value(instanceIdentifier); | ||
48 | } | ||
49 | |||
50 | QHash<QByteArray, Akonadi2::ResourceAccess::Ptr> mCache; | ||
51 | }; | ||
31 | 52 | ||
32 | template<class DomainType> | 53 | template<class DomainType> |
33 | GenericFacade<DomainType>::GenericFacade(const QByteArray &resourceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &adaptorFactory , const QSharedPointer<Akonadi2::ResourceAccessInterface> resourceAccess) | 54 | GenericFacade<DomainType>::GenericFacade(const QByteArray &resourceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &adaptorFactory , const QSharedPointer<Akonadi2::ResourceAccessInterface> resourceAccess) |
@@ -37,7 +58,7 @@ GenericFacade<DomainType>::GenericFacade(const QByteArray &resourceIdentifier, c | |||
37 | mResourceInstanceIdentifier(resourceIdentifier) | 58 | mResourceInstanceIdentifier(resourceIdentifier) |
38 | { | 59 | { |
39 | if (!mResourceAccess) { | 60 | if (!mResourceAccess) { |
40 | mResourceAccess = QSharedPointer<Akonadi2::ResourceAccess>::create(resourceIdentifier); | 61 | mResourceAccess = ResourceAccessFactory::instance().getAccess(resourceIdentifier); |
41 | } | 62 | } |
42 | } | 63 | } |
43 | 64 | ||
diff --git a/common/resourceaccess.h b/common/resourceaccess.h index e87a1f7..527cfa3 100644 --- a/common/resourceaccess.h +++ b/common/resourceaccess.h | |||
@@ -63,6 +63,8 @@ class ResourceAccess : public ResourceAccessInterface | |||
63 | { | 63 | { |
64 | Q_OBJECT | 64 | Q_OBJECT |
65 | public: | 65 | public: |
66 | typedef QSharedPointer<ResourceAccess> Ptr; | ||
67 | |||
66 | ResourceAccess(const QByteArray &resourceName); | 68 | ResourceAccess(const QByteArray &resourceName); |
67 | ~ResourceAccess(); | 69 | ~ResourceAccess(); |
68 | 70 | ||