diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 58 | ||||
-rw-r--r-- | examples/maildirresource/maildirresource.h | 1 |
2 files changed, 55 insertions, 4 deletions
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index 2ad45cd..7ac4b08 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp | |||
@@ -49,22 +49,72 @@ | |||
49 | #undef DEBUG_AREA | 49 | #undef DEBUG_AREA |
50 | #define DEBUG_AREA "resource.maildir" | 50 | #define DEBUG_AREA "resource.maildir" |
51 | 51 | ||
52 | class FolderUpdater : public Sink::Preprocessor | ||
53 | { | ||
54 | public: | ||
55 | FolderUpdater(const QByteArray &drafts) : mDraftsFolder(drafts) {} | ||
56 | |||
57 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | ||
58 | { | ||
59 | if (newEntity.getProperty("draft").toBool()) { | ||
60 | newEntity.setProperty("folder", mDraftsFolder); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, | ||
65 | Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | ||
66 | { | ||
67 | } | ||
68 | |||
69 | void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | ||
70 | { | ||
71 | } | ||
72 | QByteArray mDraftsFolder; | ||
73 | }; | ||
74 | |||
52 | MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) | 75 | MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) |
53 | : Sink::GenericResource(instanceIdentifier, pipeline), | 76 | : Sink::GenericResource(instanceIdentifier, pipeline), |
54 | mMailAdaptorFactory(QSharedPointer<MaildirMailAdaptorFactory>::create()), | 77 | mMailAdaptorFactory(QSharedPointer<MaildirMailAdaptorFactory>::create()), |
55 | mFolderAdaptorFactory(QSharedPointer<MaildirFolderAdaptorFactory>::create()) | 78 | mFolderAdaptorFactory(QSharedPointer<MaildirFolderAdaptorFactory>::create()) |
56 | { | 79 | { |
57 | addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory, | ||
58 | QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); | ||
59 | addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory, | ||
60 | QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | ||
61 | auto config = ResourceConfig::getConfiguration(instanceIdentifier); | 80 | auto config = ResourceConfig::getConfiguration(instanceIdentifier); |
62 | mMaildirPath = QDir::cleanPath(QDir::fromNativeSeparators(config.value("path").toString())); | 81 | mMaildirPath = QDir::cleanPath(QDir::fromNativeSeparators(config.value("path").toString())); |
63 | //Chop a trailing slash if necessary | 82 | //Chop a trailing slash if necessary |
64 | if (mMaildirPath.endsWith("/")) { | 83 | if (mMaildirPath.endsWith("/")) { |
65 | mMaildirPath.chop(1); | 84 | mMaildirPath.chop(1); |
66 | } | 85 | } |
86 | |||
87 | auto folderUpdater = new FolderUpdater(QByteArray()); | ||
88 | addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory, | ||
89 | QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail> << folderUpdater); | ||
90 | addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory, | ||
91 | QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | ||
92 | |||
93 | KPIM::Maildir dir(mMaildirPath, true); | ||
94 | mDraftsFolder = dir.addSubFolder("drafts"); | ||
67 | Trace() << "Started maildir resource for maildir: " << mMaildirPath; | 95 | Trace() << "Started maildir resource for maildir: " << mMaildirPath; |
96 | auto mainStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier, Sink::Storage::ReadOnly); | ||
97 | auto syncStore = QSharedPointer<Sink::Storage>::create(Sink::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Sink::Storage::ReadWrite); | ||
98 | auto transaction = mainStore->createTransaction(Sink::Storage::ReadOnly); | ||
99 | auto synchronizationTransaction = syncStore->createTransaction(Sink::Storage::ReadWrite); | ||
100 | |||
101 | auto folderPath = mDraftsFolder; | ||
102 | auto remoteId = folderPath.toUtf8(); | ||
103 | auto bufferType = ENTITY_TYPE_FOLDER; | ||
104 | KPIM::Maildir md(folderPath, folderPath == mMaildirPath); | ||
105 | Sink::ApplicationDomain::Folder folder; | ||
106 | folder.setProperty("name", md.name()); | ||
107 | folder.setProperty("icon", "folder"); | ||
108 | |||
109 | if (!md.isRoot()) { | ||
110 | folder.setProperty("parent", resolveRemoteId(ENTITY_TYPE_FOLDER, md.parent().path().toUtf8(), synchronizationTransaction)); | ||
111 | } | ||
112 | createOrModify(transaction, synchronizationTransaction, *mFolderAdaptorFactory, bufferType, remoteId, folder); | ||
113 | |||
114 | auto draftsFolderLocalId = resolveRemoteId(ENTITY_TYPE_FOLDER, mDraftsFolder.toUtf8(), synchronizationTransaction); | ||
115 | synchronizationTransaction.commit(); | ||
116 | |||
117 | folderUpdater->mDraftsFolder = draftsFolderLocalId; | ||
68 | } | 118 | } |
69 | 119 | ||
70 | static QStringList listRecursive( const QString &root, const KPIM::Maildir &dir ) | 120 | static QStringList listRecursive( const QString &root, const KPIM::Maildir &dir ) |
diff --git a/examples/maildirresource/maildirresource.h b/examples/maildirresource/maildirresource.h index 32eb88c..2afd0ed 100644 --- a/examples/maildirresource/maildirresource.h +++ b/examples/maildirresource/maildirresource.h | |||
@@ -56,6 +56,7 @@ private: | |||
56 | void synchronizeMails(Sink::Storage::Transaction &transaction, Sink::Storage::Transaction &synchronizationTransaction, const QString &folder); | 56 | void synchronizeMails(Sink::Storage::Transaction &transaction, Sink::Storage::Transaction &synchronizationTransaction, const QString &folder); |
57 | QStringList listAvailableFolders(); | 57 | QStringList listAvailableFolders(); |
58 | QString mMaildirPath; | 58 | QString mMaildirPath; |
59 | QString mDraftsFolder; | ||
59 | QSharedPointer<MaildirMailAdaptorFactory> mMailAdaptorFactory; | 60 | QSharedPointer<MaildirMailAdaptorFactory> mMailAdaptorFactory; |
60 | QSharedPointer<MaildirFolderAdaptorFactory> mFolderAdaptorFactory; | 61 | QSharedPointer<MaildirFolderAdaptorFactory> mFolderAdaptorFactory; |
61 | }; | 62 | }; |