summaryrefslogtreecommitdiffstats
path: root/framework/domain
diff options
context:
space:
mode:
Diffstat (limited to 'framework/domain')
-rw-r--r--framework/domain/actions/sinkactions.cpp15
-rw-r--r--framework/domain/composercontroller.cpp229
-rw-r--r--framework/domain/composercontroller.h64
-rw-r--r--framework/domain/identitiesmodel.cpp25
-rw-r--r--framework/domain/settings/accountsettings.cpp29
5 files changed, 143 insertions, 219 deletions
diff --git a/framework/domain/actions/sinkactions.cpp b/framework/domain/actions/sinkactions.cpp
index f996b91d..39b39a0a 100644
--- a/framework/domain/actions/sinkactions.cpp
+++ b/framework/domain/actions/sinkactions.cpp
@@ -98,10 +98,9 @@ static ActionHandlerHelper synchronizeHandler("org.kde.kube.actions.synchronize"
98static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail", 98static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail",
99 [](Context *context) -> bool { 99 [](Context *context) -> bool {
100 auto accountId = context->property("accountId").value<QByteArray>(); 100 auto accountId = context->property("accountId").value<QByteArray>();
101 auto message = context->property("message").value<KMime::Message::Ptr>(); 101 return !accountId.isEmpty();
102 return !accountId.isEmpty() && message;
103 }, 102 },
104 [](Context *context) { 103 ActionHandlerHelper::JobHandler{[](Context *context) -> KAsync::Job<void> {
105 auto accountId = context->property("accountId").value<QByteArray>(); 104 auto accountId = context->property("accountId").value<QByteArray>();
106 auto message = context->property("message").value<KMime::Message::Ptr>(); 105 auto message = context->property("message").value<KMime::Message::Ptr>();
107 SinkLog() << "Sending a mail: "; 106 SinkLog() << "Sending a mail: ";
@@ -109,7 +108,7 @@ static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail",
109 Query query; 108 Query query;
110 query.containsFilter<ApplicationDomain::SinkResource::Capabilities>(ApplicationDomain::ResourceCapabilities::Mail::transport); 109 query.containsFilter<ApplicationDomain::SinkResource::Capabilities>(ApplicationDomain::ResourceCapabilities::Mail::transport);
111 query.filter<SinkResource::Account>(accountId); 110 query.filter<SinkResource::Account>(accountId);
112 Store::fetchAll<ApplicationDomain::SinkResource>(query) 111 return Store::fetchAll<ApplicationDomain::SinkResource>(query)
113 .then<void, QList<ApplicationDomain::SinkResource::Ptr>>([=](const QList<ApplicationDomain::SinkResource::Ptr> &resources) -> KAsync::Job<void> { 112 .then<void, QList<ApplicationDomain::SinkResource::Ptr>>([=](const QList<ApplicationDomain::SinkResource::Ptr> &resources) -> KAsync::Job<void> {
114 if (!resources.isEmpty()) { 113 if (!resources.isEmpty()) {
115 auto resourceId = resources[0]->identifier(); 114 auto resourceId = resources[0]->identifier();
@@ -120,18 +119,18 @@ static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail",
120 } 119 }
121 SinkWarning() << "Failed to find a mailtransport resource"; 120 SinkWarning() << "Failed to find a mailtransport resource";
122 return KAsync::error<void>(0, "Failed to find a MailTransport resource."); 121 return KAsync::error<void>(0, "Failed to find a MailTransport resource.");
123 }).exec(); 122 });
124 } 123 }}
125); 124);
126 125
127static ActionHandlerHelper saveAsDraft("org.kde.kube.actions.save-as-draft", 126static ActionHandlerHelper saveAsDraft("org.kde.kube.actions.save-as-draft",
128 [](Context *context) -> bool { 127 [](Context *context) -> bool {
129 auto accountId = context->property("accountId").value<QByteArray>(); 128 auto accountId = context->property("accountId").value<QByteArray>();
130 auto message = context->property("message").value<KMime::Message::Ptr>(); 129 return !accountId.isEmpty();
131 return !accountId.isEmpty() && message;
132 }, 130 },
133 ActionHandlerHelper::JobHandler([](Context *context) -> KAsync::Job<void> { 131 ActionHandlerHelper::JobHandler([](Context *context) -> KAsync::Job<void> {
134 SinkLog() << "Executing the save-as-draft action"; 132 SinkLog() << "Executing the save-as-draft action";
133 SinkLog() << *context;
135 const auto accountId = context->property("accountId").value<QByteArray>(); 134 const auto accountId = context->property("accountId").value<QByteArray>();
136 const auto message = context->property("message").value<KMime::Message::Ptr>(); 135 const auto message = context->property("message").value<KMime::Message::Ptr>();
137 auto existingMail = context->property("existingMail").value<Mail>(); 136 auto existingMail = context->property("existingMail").value<Mail>();
diff --git a/framework/domain/composercontroller.cpp b/framework/domain/composercontroller.cpp
index 7fd2593d..18ebc4c4 100644
--- a/framework/domain/composercontroller.cpp
+++ b/framework/domain/composercontroller.cpp
@@ -21,6 +21,7 @@
21#include "composercontroller.h" 21#include "composercontroller.h"
22#include <actions/context.h> 22#include <actions/context.h>
23#include <actions/action.h> 23#include <actions/action.h>
24#include <actions/actionhandler.h>
24#include <settings/settings.h> 25#include <settings/settings.h>
25#include <KMime/Message> 26#include <KMime/Message>
26#include <KCodecs/KEmailAddress> 27#include <KCodecs/KEmailAddress>
@@ -39,78 +40,25 @@
39 40
40SINK_DEBUG_AREA("composercontroller"); 41SINK_DEBUG_AREA("composercontroller");
41 42
42ComposerController::ComposerController(QObject *parent) : QObject(parent) 43Q_DECLARE_METATYPE(KMime::Types::Mailbox)
43{
44}
45
46QString ComposerController::to() const
47{
48 return m_to;
49}
50
51void ComposerController::setTo(const QString &to)
52{
53 if(m_to != to) {
54 m_to = to;
55 emit toChanged();
56 }
57}
58
59QString ComposerController::cc() const
60{
61 return m_cc;
62}
63
64void ComposerController::setCc(const QString &cc)
65{
66 if(m_cc != cc) {
67 m_cc = cc;
68 emit ccChanged();
69 }
70}
71
72QString ComposerController::bcc() const
73{
74 return m_bcc;
75}
76
77void ComposerController::setBcc(const QString &bcc)
78{
79 if(m_bcc != bcc) {
80 m_bcc = bcc;
81 emit bccChanged();
82 }
83}
84 44
85QString ComposerController::subject() const 45ComposerController::ComposerController(QObject *parent) : QObject(parent)
86{
87 return m_subject;
88}
89
90void ComposerController::setSubject(const QString &subject)
91{ 46{
92 if(m_subject != subject) {
93 m_subject = subject;
94 emit subjectChanged();
95 }
96} 47}
97 48
98QString ComposerController::body() const 49QString ComposerController::recepientSearchString() const
99{ 50{
100 return m_body; 51 return QString();
101} 52}
102 53
103void ComposerController::setBody(const QString &body) 54Kube::Context* ComposerController::mailContext() const
104{ 55{
105 if(m_body != body) { 56 return mContext;
106 m_body = body;
107 emit bodyChanged();
108 }
109} 57}
110 58
111QString ComposerController::recepientSearchString() const 59void ComposerController::setMailContext(Kube::Context *context)
112{ 60{
113 return QString(); 61 mContext = context;
114} 62}
115 63
116void ComposerController::setRecepientSearchString(const QString &s) 64void ComposerController::setRecepientSearchString(const QString &s)
@@ -134,24 +82,13 @@ QAbstractItemModel *ComposerController::recepientAutocompletionModel() const
134 return model; 82 return model;
135} 83}
136 84
137QStringList ComposerController::attachemts() const
138{
139 return m_attachments;
140}
141
142void ComposerController::addAttachment(const QUrl &fileUrl)
143{
144 m_attachments.append(fileUrl.toString());
145 emit attachmentsChanged();
146}
147
148void ComposerController::setMessage(const KMime::Message::Ptr &msg) 85void ComposerController::setMessage(const KMime::Message::Ptr &msg)
149{ 86{
150 setTo(msg->to(true)->asUnicodeString()); 87 mContext->setProperty("to", msg->to(true)->asUnicodeString());
151 setCc(msg->cc(true)->asUnicodeString()); 88 mContext->setProperty("cc", msg->cc(true)->asUnicodeString());
152 setSubject(msg->subject(true)->asUnicodeString()); 89 mContext->setProperty("subject", msg->subject(true)->asUnicodeString());
153 setBody(msg->body()); 90 mContext->setProperty("body", msg->body());
154 m_msg = QVariant::fromValue(msg); 91 mContext->setProperty("existingMessage", QVariant::fromValue(msg));
155} 92}
156 93
157void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft) 94void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft)
@@ -159,7 +96,7 @@ void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft)
159 Sink::Query query(*message.value<Sink::ApplicationDomain::Mail::Ptr>()); 96 Sink::Query query(*message.value<Sink::ApplicationDomain::Mail::Ptr>());
160 query.request<Sink::ApplicationDomain::Mail::MimeMessage>(); 97 query.request<Sink::ApplicationDomain::Mail::MimeMessage>();
161 Sink::Store::fetchOne<Sink::ApplicationDomain::Mail>(query).syncThen<void, Sink::ApplicationDomain::Mail>([this, loadAsDraft](const Sink::ApplicationDomain::Mail &mail) { 98 Sink::Store::fetchOne<Sink::ApplicationDomain::Mail>(query).syncThen<void, Sink::ApplicationDomain::Mail>([this, loadAsDraft](const Sink::ApplicationDomain::Mail &mail) {
162 m_existingMail = mail; 99 mContext->setProperty("existingMail", QVariant::fromValue(mail));
163 const auto mailData = KMime::CRLFtoLF(mail.getMimeMessage()); 100 const auto mailData = KMime::CRLFtoLF(mail.getMimeMessage());
164 if (!mailData.isEmpty()) { 101 if (!mailData.isEmpty()) {
165 KMime::Message::Ptr mail(new KMime::Message); 102 KMime::Message::Ptr mail(new KMime::Message);
@@ -196,84 +133,88 @@ void applyAddresses(const QString &list, std::function<void(const QByteArray &,
196 } 133 }
197} 134}
198 135
199bool ComposerController::identityIsSet() const 136void ComposerController::clear()
200{ 137{
201 return (identityModel()->rowCount() > 0) && (m_currentAccountIndex >= 0); 138 mContext->setProperty("subject", QVariant());
139 mContext->setProperty("body", QVariant());
140 mContext->setProperty("to", QVariant());
141 mContext->setProperty("cc", QVariant());
142 mContext->setProperty("bcc", QVariant());
202} 143}
203 144
204KMime::Message::Ptr ComposerController::assembleMessage() 145
146Kube::ActionHandler *ComposerController::messageHandler()
205{ 147{
206 auto mail = m_msg.value<KMime::Message::Ptr>(); 148 return new Kube::ActionHandlerHelper(
207 if (!mail) { 149 [](Kube::Context *context) {
208 mail = KMime::Message::Ptr::create(); 150 auto identity = context->property("identity");
209 } 151 return identity.isValid();
210 applyAddresses(m_to, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 152 },
211 mail->to(true)->addAddress(addrSpec, displayName); 153 [this](Kube::Context *context) {
212 recordForAutocompletion(addrSpec, displayName); 154 auto mail = context->property("existingMessage").value<KMime::Message::Ptr>();
213 }); 155 if (!mail) {
214 applyAddresses(m_cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 156 mail = KMime::Message::Ptr::create();
215 mail->cc(true)->addAddress(addrSpec, displayName); 157 }
216 recordForAutocompletion(addrSpec, displayName); 158 applyAddresses(context->property("to").toString(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
217 }); 159 mail->to(true)->addAddress(addrSpec, displayName);
218 applyAddresses(m_bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 160 recordForAutocompletion(addrSpec, displayName);
219 mail->bcc(true)->addAddress(addrSpec, displayName); 161 });
220 recordForAutocompletion(addrSpec, displayName); 162 applyAddresses(context->property("cc").toString(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
221 }); 163 mail->cc(true)->addAddress(addrSpec, displayName);
222 if (!identityIsSet()) { 164 recordForAutocompletion(addrSpec, displayName);
223 SinkWarning() << "We don't have an identity to send the mail with."; 165 });
224 } else { 166 applyAddresses(context->property("bcc").toString(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
225 auto currentIndex = identityModel()->index(m_currentAccountIndex, 0); 167 mail->bcc(true)->addAddress(addrSpec, displayName);
226 KMime::Types::Mailbox mb; 168 recordForAutocompletion(addrSpec, displayName);
227 mb.setName(currentIndex.data(IdentitiesModel::Username).toString()); 169 });
228 mb.setAddress(currentIndex.data(IdentitiesModel::Address).toString().toUtf8()); 170
229 mail->from(true)->addAddress(mb); 171 mail->from(true)->addAddress(context->property("identity").value<KMime::Types::Mailbox>());
230 mail->subject(true)->fromUnicodeString(m_subject, "utf-8"); 172
231 mail->setBody(m_body.toUtf8()); 173 mail->subject(true)->fromUnicodeString(context->property("subject").toString(), "utf-8");
232 mail->assemble(); 174 mail->setBody(context->property("body").toString().toUtf8());
233 return mail; 175 mail->assemble();
234 } 176
235 return KMime::Message::Ptr(); 177 context->setProperty("message", QVariant::fromValue(mail));
178 }
179 );
236} 180}
237 181
238void ComposerController::send() 182Kube::Action* ComposerController::saveAsDraftAction()
239{ 183{
240 auto mail = assembleMessage(); 184 auto action = new Kube::Action("org.kde.kube.actions.save-as-draft", *mContext);
241 185 action->addPreHandler(messageHandler());
242 //TODO deactivate action if we don't have the identiy set 186 return action;
243 if (!identityIsSet()) {
244 SinkWarning() << "We don't have an identity to send the mail with.";
245 } else {
246 auto currentAccountId = identityModel()->index(m_currentAccountIndex, 0).data(IdentitiesModel::AccountId).toByteArray();
247
248 Kube::Context context;
249 context.setProperty("message", QVariant::fromValue(mail));
250 context.setProperty("accountId", QVariant::fromValue(currentAccountId));
251
252 qDebug() << "Current account " << currentAccountId;
253
254 Kube::Action("org.kde.kube.actions.sendmail", context).execute();
255 clear();
256 }
257} 187}
258 188
259void ComposerController::saveAsDraft() 189Kube::Action* ComposerController::sendAction()
260{ 190{
261 auto mail = assembleMessage(); 191 qWarning() << "send action";
262 auto currentAccountId = identityModel()->index(m_currentAccountIndex, 0).data(IdentitiesModel::AccountId).toByteArray(); 192 auto action = new Kube::Action("org.kde.kube.actions.sendmail", *mContext);
193 // action->addPreHandler(identityHandler());
194 action->addPreHandler(messageHandler());
195 // action->addPreHandler(encryptionHandler());
196 return action;
197}
263 198
264 Kube::Context context; 199void ComposerController::setCurrentIdentityIndex(int index)
265 context.setProperty("message", QVariant::fromValue(mail)); 200{
266 context.setProperty("accountId", QVariant::fromValue(currentAccountId)); 201 m_currentAccountIndex = index;
267 context.setProperty("existingMail", QVariant::fromValue(m_existingMail)); 202 auto currentIndex = identityModel()->index(m_currentAccountIndex, 0);
268 Kube::Action("org.kde.kube.actions.save-as-draft", context).execute(); 203 if (currentIndex.isValid()) {
269 clear(); 204 auto currentAccountId = currentIndex.data(IdentitiesModel::AccountId).toByteArray();
205 SinkWarning() << "valid identity for index: " << index << " out of available in model: " << identityModel()->rowCount();
206 KMime::Types::Mailbox mb;
207 mb.setName(currentIndex.data(IdentitiesModel::Username).toString());
208 mb.setAddress(currentIndex.data(IdentitiesModel::Address).toString().toUtf8());
209 SinkLog() << "Setting current identity: " << mb.prettyAddress() << "Account: " << currentAccountId;
210 mContext->setProperty("identity", QVariant::fromValue(mb));
211 mContext->setProperty("accountId", QVariant::fromValue(currentAccountId));
212 } else {
213 SinkWarning() << "No valid identity for index: " << index << " out of available in model: " << identityModel()->rowCount();
214 }
270} 215}
271 216
272void ComposerController::clear() 217int ComposerController::currentIdentityIndex() const
273{ 218{
274 setSubject(""); 219 return m_currentAccountIndex;
275 setBody("");
276 setTo("");
277 setCc("");
278 setBcc("");
279} 220}
diff --git a/framework/domain/composercontroller.h b/framework/domain/composercontroller.h
index aa2ae0d7..6fad0685 100644
--- a/framework/domain/composercontroller.h
+++ b/framework/domain/composercontroller.h
@@ -26,6 +26,9 @@
26#include <QAbstractItemModel> 26#include <QAbstractItemModel>
27#include <sink/applicationdomaintype.h> 27#include <sink/applicationdomaintype.h>
28 28
29#include <actions/context.h>
30#include <actions/action.h>
31
29namespace KMime { 32namespace KMime {
30class Message; 33class Message;
31} 34}
@@ -33,34 +36,21 @@ class Message;
33class ComposerController : public QObject 36class ComposerController : public QObject
34{ 37{
35 Q_OBJECT 38 Q_OBJECT
36 Q_PROPERTY (QString to READ to WRITE setTo NOTIFY toChanged) 39 Q_PROPERTY (Kube::Context* mailContext READ mailContext WRITE setMailContext)
37 Q_PROPERTY (QString cc READ cc WRITE setCc NOTIFY ccChanged) 40 Q_PROPERTY (int currentIdentityIndex READ currentIdentityIndex WRITE setCurrentIdentityIndex)
38 Q_PROPERTY (QString bcc READ bcc WRITE setBcc NOTIFY bccChanged) 41
39 Q_PROPERTY (QString subject READ subject WRITE setSubject NOTIFY subjectChanged)
40 Q_PROPERTY (QString body READ body WRITE setBody NOTIFY bodyChanged)
41 Q_PROPERTY (QString recepientSearchString READ recepientSearchString WRITE setRecepientSearchString) 42 Q_PROPERTY (QString recepientSearchString READ recepientSearchString WRITE setRecepientSearchString)
42 Q_PROPERTY (QAbstractItemModel* recepientAutocompletionModel READ recepientAutocompletionModel CONSTANT) 43 Q_PROPERTY (QAbstractItemModel* recepientAutocompletionModel READ recepientAutocompletionModel CONSTANT)
43 Q_PROPERTY (QAbstractItemModel* identityModel READ identityModel CONSTANT) 44 Q_PROPERTY (QAbstractItemModel* identityModel READ identityModel CONSTANT)
44 Q_PROPERTY (int currentIdentityIndex MEMBER m_currentAccountIndex) 45
45 Q_PROPERTY (QStringList attachments READ attachemts NOTIFY attachmentsChanged) 46 Q_PROPERTY (Kube::Action* sendAction READ sendAction)
47 Q_PROPERTY (Kube::Action* saveAsDraftAction READ saveAsDraftAction)
46 48
47public: 49public:
48 explicit ComposerController(QObject *parent = Q_NULLPTR); 50 explicit ComposerController(QObject *parent = Q_NULLPTR);
49 51
50 QString to() const; 52 Kube::Context* mailContext() const;
51 void setTo(const QString &to); 53 void setMailContext(Kube::Context *context);
52
53 QString cc() const;
54 void setCc(const QString &cc);
55
56 QString bcc() const;
57 void setBcc(const QString &bcc);
58
59 QString subject() const;
60 void setSubject(const QString &subject);
61
62 QString body() const;
63 void setBody(const QString &body);
64 54
65 QString recepientSearchString() const; 55 QString recepientSearchString() const;
66 void setRecepientSearchString(const QString &body); 56 void setRecepientSearchString(const QString &body);
@@ -68,36 +58,22 @@ public:
68 QAbstractItemModel *identityModel() const; 58 QAbstractItemModel *identityModel() const;
69 QAbstractItemModel *recepientAutocompletionModel() const; 59 QAbstractItemModel *recepientAutocompletionModel() const;
70 60
71 QStringList attachemts() const;
72 Q_INVOKABLE void loadMessage(const QVariant &draft, bool loadAsDraft); 61 Q_INVOKABLE void loadMessage(const QVariant &draft, bool loadAsDraft);
73 62
74signals: 63 Kube::Action* sendAction();
75 void subjectChanged(); 64 Kube::Action* saveAsDraftAction();
76 void bodyChanged(); 65
77 void toChanged(); 66 void setCurrentIdentityIndex(int index);
78 void ccChanged(); 67 int currentIdentityIndex() const;
79 void bccChanged();
80 void fromIndexChanged();
81 void attachmentsChanged();
82 68
83public slots: 69public slots:
84 void send();
85 void saveAsDraft();
86 void clear(); 70 void clear();
87 void addAttachment(const QUrl &fileUrl);
88 71
89private: 72private:
90 bool identityIsSet() const; 73 Kube::ActionHandler *messageHandler();
91 void recordForAutocompletion(const QByteArray &addrSpec, const QByteArray &displayName); 74 void recordForAutocompletion(const QByteArray &addrSpec, const QByteArray &displayName);
92 void setMessage(const QSharedPointer<KMime::Message> &msg); 75 void setMessage(const QSharedPointer<KMime::Message> &msg);
93 QSharedPointer<KMime::Message> assembleMessage(); 76
94 QString m_to; 77 int m_currentAccountIndex = -1;
95 QString m_cc; 78 Kube::Context *mContext;
96 QString m_bcc;
97 QString m_subject;
98 QString m_body;
99 QStringList m_attachments;
100 Sink::ApplicationDomain::Mail m_existingMail;
101 QVariant m_msg;
102 int m_currentAccountIndex;
103}; 79};
diff --git a/framework/domain/identitiesmodel.cpp b/framework/domain/identitiesmodel.cpp
index 8f5c4963..33cc191c 100644
--- a/framework/domain/identitiesmodel.cpp
+++ b/framework/domain/identitiesmodel.cpp
@@ -18,12 +18,17 @@
18*/ 18*/
19#include "identitiesmodel.h" 19#include "identitiesmodel.h"
20#include <sink/store.h> 20#include <sink/store.h>
21#include <sink/log.h>
22
23using namespace Sink;
21 24
22IdentitiesModel::IdentitiesModel(QObject *parent) : QIdentityProxyModel() 25IdentitiesModel::IdentitiesModel(QObject *parent) : QIdentityProxyModel()
23{ 26{
24 Sink::Query query; 27 Sink::Query query;
25 query.setFlags(Sink::Query::LiveQuery); 28 query.setFlags(Sink::Query::LiveQuery);
26 query.requestedProperties << "name" << "username" << "address" << "account"; 29 query.request<Sink::ApplicationDomain::Identity::Name>()
30 .request<Sink::ApplicationDomain::Identity::Address>()
31 .request<Sink::ApplicationDomain::Identity::Account>();
27 runQuery(query); 32 runQuery(query);
28} 33}
29 34
@@ -53,21 +58,21 @@ QVariant IdentitiesModel::data(const QModelIndex &idx, int role) const
53 auto srcIdx = mapToSource(idx); 58 auto srcIdx = mapToSource(idx);
54 switch (role) { 59 switch (role) {
55 case Name: 60 case Name:
56 return srcIdx.sibling(srcIdx.row(), 0).data(Qt::DisplayRole).toString(); 61 return srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getName();
57 case Username: 62 case Username:
58 return srcIdx.sibling(srcIdx.row(), 1).data(Qt::DisplayRole).toString(); 63 return srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getName();
59 case Address: 64 case Address:
60 return srcIdx.sibling(srcIdx.row(), 2).data(Qt::DisplayRole).toString(); 65 return srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getAddress();
61 case IdentityId: 66 case IdentityId:
62 return srcIdx.data(Sink::Store::DomainObjectBaseRole).value<Sink::ApplicationDomain::ApplicationDomainType::Ptr>()->identifier(); 67 return srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->identifier();
63 case AccountId: 68 case AccountId:
64 return srcIdx.data(Sink::Store::DomainObjectBaseRole).value<Sink::ApplicationDomain::ApplicationDomainType::Ptr>()->getProperty("account").toByteArray(); 69 return srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getAccount();
65 case AccountName: { 70 case AccountName: {
66 const auto accountId = srcIdx.sibling(srcIdx.row(), 3).data(Qt::DisplayRole).toByteArray(); 71 const auto accountId = srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getAccount();
67 return mAccountNames.value(accountId); 72 return mAccountNames.value(accountId);
68 } 73 }
69 case AccountIcon: { 74 case AccountIcon: {
70 const auto accountId = srcIdx.sibling(srcIdx.row(), 3).data(Qt::DisplayRole).toByteArray(); 75 const auto accountId = srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Identity::Ptr>()->getAccount();
71 return mAccountIcons.value(accountId); 76 return mAccountIcons.value(accountId);
72 } 77 }
73 case DisplayName: { 78 case DisplayName: {
@@ -85,8 +90,8 @@ void IdentitiesModel::runQuery(const Sink::Query &query)
85 Sink::Store::fetchAll<Sink::ApplicationDomain::SinkAccount>(Sink::Query()) 90 Sink::Store::fetchAll<Sink::ApplicationDomain::SinkAccount>(Sink::Query())
86 .syncThen<void, QList<Sink::ApplicationDomain::SinkAccount::Ptr> >([this](const QList<Sink::ApplicationDomain::SinkAccount::Ptr> &accounts) { 91 .syncThen<void, QList<Sink::ApplicationDomain::SinkAccount::Ptr> >([this](const QList<Sink::ApplicationDomain::SinkAccount::Ptr> &accounts) {
87 for (const auto &account : accounts) { 92 for (const auto &account : accounts) {
88 mAccountNames.insert(account->identifier(), account->getProperty("name").toString()); 93 mAccountNames.insert(account->identifier(), account->getName());
89 mAccountIcons.insert(account->identifier(), account->getProperty("icon").toString()); 94 mAccountIcons.insert(account->identifier(), account->getIcon());
90 } 95 }
91 emit layoutChanged(); 96 emit layoutChanged();
92 }).exec(); 97 }).exec();
diff --git a/framework/domain/settings/accountsettings.cpp b/framework/domain/settings/accountsettings.cpp
index f2c5a66f..067d1d79 100644
--- a/framework/domain/settings/accountsettings.cpp
+++ b/framework/domain/settings/accountsettings.cpp
@@ -19,6 +19,7 @@
19#include "accountsettings.h" 19#include "accountsettings.h"
20 20
21#include <sink/store.h> 21#include <sink/store.h>
22#include <sink/log.h>
22#include <QDebug> 23#include <QDebug>
23#include <QDir> 24#include <QDir>
24#include <QUrl> 25#include <QUrl>
@@ -26,6 +27,8 @@
26using namespace Sink; 27using namespace Sink;
27using namespace Sink::ApplicationDomain; 28using namespace Sink::ApplicationDomain;
28 29
30SINK_DEBUG_AREA("accountsettings")
31
29AccountSettings::AccountSettings(QObject *parent) 32AccountSettings::AccountSettings(QObject *parent)
30 : QObject(parent) 33 : QObject(parent)
31{ 34{
@@ -181,7 +184,7 @@ void AccountSettings::loadMaildirResource()
181 emit pathChanged(); 184 emit pathChanged();
182 } 185 }
183 }).onError([](const KAsync::Error &error) { 186 }).onError([](const KAsync::Error &error) {
184 qWarning() << "Failed to find the maildir resource: " << error.errorMessage; 187 SinkWarning() << "Failed to find the maildir resource: " << error.errorMessage;
185 }).exec(); 188 }).exec();
186} 189}
187 190
@@ -195,7 +198,7 @@ void AccountSettings::loadMailtransportResource()
195 mSmtpPassword = resource.getProperty("password").toString(); 198 mSmtpPassword = resource.getProperty("password").toString();
196 emit smtpResourceChanged(); 199 emit smtpResourceChanged();
197 }).onError([](const KAsync::Error &error) { 200 }).onError([](const KAsync::Error &error) {
198 qWarning() << "Failed to find the smtp resource: " << error.errorMessage; 201 SinkWarning() << "Failed to find the smtp resource: " << error.errorMessage;
199 }).exec(); 202 }).exec();
200} 203}
201 204
@@ -209,7 +212,7 @@ void AccountSettings::loadIdentity()
209 mEmailAddress = identity.getAddress(); 212 mEmailAddress = identity.getAddress();
210 emit identityChanged(); 213 emit identityChanged();
211 }).onError([](const KAsync::Error &error) { 214 }).onError([](const KAsync::Error &error) {
212 qWarning() << "Failed to find the identity resource: " << error.errorMessage; 215 SinkWarning() << "Failed to find the identity resource: " << error.errorMessage;
213 }).exec(); 216 }).exec();
214} 217}
215 218
@@ -225,7 +228,7 @@ static QByteArray saveResource(const QByteArray &accountIdentifier, const QByteA
225 } 228 }
226 Store::modify(resource) 229 Store::modify(resource)
227 .onError([](const KAsync::Error &error) { 230 .onError([](const KAsync::Error &error) {
228 qWarning() << "Error while modifying resource: " << error.errorMessage; 231 SinkWarning() << "Error while modifying resource: " << error.errorMessage;
229 }) 232 })
230 .exec(); 233 .exec();
231 } else { 234 } else {
@@ -236,7 +239,7 @@ static QByteArray saveResource(const QByteArray &accountIdentifier, const QByteA
236 } 239 }
237 Store::create(resource) 240 Store::create(resource)
238 .onError([](const KAsync::Error &error) { 241 .onError([](const KAsync::Error &error) {
239 qWarning() << "Error while creating resource: " << error.errorMessage; 242 SinkWarning() << "Error while creating resource: " << error.errorMessage;
240 }) 243 })
241 .exec(); 244 .exec();
242 return newIdentifier; 245 return newIdentifier;
@@ -277,7 +280,7 @@ void AccountSettings::saveIdentity()
277 identity.setAddress(mEmailAddress); 280 identity.setAddress(mEmailAddress);
278 Store::modify(identity) 281 Store::modify(identity)
279 .onError([](const KAsync::Error &error) { 282 .onError([](const KAsync::Error &error) {
280 qWarning() << "Error while modifying identity: " << error.errorMessage; 283 SinkWarning() << "Error while modifying identity: " << error.errorMessage;
281 }) 284 })
282 .exec(); 285 .exec();
283 } else { 286 } else {
@@ -288,7 +291,7 @@ void AccountSettings::saveIdentity()
288 identity.setAddress(mEmailAddress); 291 identity.setAddress(mEmailAddress);
289 Store::create(identity) 292 Store::create(identity)
290 .onError([](const KAsync::Error &error) { 293 .onError([](const KAsync::Error &error) {
291 qWarning() << "Error while creating identity: " << error.errorMessage; 294 SinkWarning() << "Error while creating identity: " << error.errorMessage;
292 }) 295 })
293 .exec(); 296 .exec();
294 } 297 }
@@ -297,12 +300,12 @@ void AccountSettings::saveIdentity()
297void AccountSettings::removeResource(const QByteArray &identifier) 300void AccountSettings::removeResource(const QByteArray &identifier)
298{ 301{
299 if (identifier.isEmpty()) { 302 if (identifier.isEmpty()) {
300 qWarning() << "We're missing an identifier"; 303 SinkWarning() << "We're missing an identifier";
301 } else { 304 } else {
302 SinkResource resource(identifier); 305 SinkResource resource(identifier);
303 Store::remove(resource) 306 Store::remove(resource)
304 .onError([](const KAsync::Error &error) { 307 .onError([](const KAsync::Error &error) {
305 qWarning() << "Error while removing resource: " << error.errorMessage; 308 SinkWarning() << "Error while removing resource: " << error.errorMessage;
306 }) 309 })
307 .exec(); 310 .exec();
308 } 311 }
@@ -311,12 +314,12 @@ void AccountSettings::removeResource(const QByteArray &identifier)
311void AccountSettings::removeAccount() 314void AccountSettings::removeAccount()
312{ 315{
313 if (mAccountIdentifier.isEmpty()) { 316 if (mAccountIdentifier.isEmpty()) {
314 qWarning() << "We're missing an identifier"; 317 SinkWarning() << "We're missing an identifier";
315 } else { 318 } else {
316 SinkAccount account(mAccountIdentifier); 319 SinkAccount account(mAccountIdentifier);
317 Store::remove(account) 320 Store::remove(account)
318 .onError([](const KAsync::Error &error) { 321 .onError([](const KAsync::Error &error) {
319 qWarning() << "Error while removing account: " << error.errorMessage; 322 SinkWarning() << "Error while removing account: " << error.errorMessage;
320 }) 323 })
321 .exec(); 324 .exec();
322 } 325 }
@@ -325,12 +328,12 @@ void AccountSettings::removeAccount()
325void AccountSettings::removeIdentity() 328void AccountSettings::removeIdentity()
326{ 329{
327 if (mIdentityIdentifier.isEmpty()) { 330 if (mIdentityIdentifier.isEmpty()) {
328 qWarning() << "We're missing an identifier"; 331 SinkWarning() << "We're missing an identifier";
329 } else { 332 } else {
330 Identity identity(mIdentityIdentifier); 333 Identity identity(mIdentityIdentifier);
331 Store::remove(identity) 334 Store::remove(identity)
332 .onError([](const KAsync::Error &error) { 335 .onError([](const KAsync::Error &error) {
333 qWarning() << "Error while removing identity: " << error.errorMessage; 336 SinkWarning() << "Error while removing identity: " << error.errorMessage;
334 }) 337 })
335 .exec(); 338 .exec();
336 } 339 }