summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-08 12:15:47 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-08 12:15:47 +0200
commit7abd447ee1b9b5dcfaa60e1e94f79b81aaeab444 (patch)
tree3fd25bbc8b4443195f130cc5e4457de860ed5e5d /examples
parent21b991f23f41fb1625ad2b53e0d118474d30a947 (diff)
downloadsink-7abd447ee1b9b5dcfaa60e1e94f79b81aaeab444.tar.gz
sink-7abd447ee1b9b5dcfaa60e1e94f79b81aaeab444.zip
Create a drafts folder on start, and then move any draft in there.
Diffstat (limited to 'examples')
-rw-r--r--examples/maildirresource/maildirresource.cpp58
-rw-r--r--examples/maildirresource/maildirresource.h1
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
52class FolderUpdater : public Sink::Preprocessor
53{
54public:
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
52MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) 75MaildirResource::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
70static QStringList listRecursive( const QString &root, const KPIM::Maildir &dir ) 120static 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};