From 634772c6da51c1d69f804bd45bbedaeb88789cd6 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 13 Apr 2016 09:26:16 +0200 Subject: Identity Support --- accounts/maildir/maildirsettings.cpp | 33 ++++++++++++++++++++++ accounts/maildir/maildirsettings.h | 6 ++++ .../package/contents/ui/MaildirAccountSettings.qml | 16 +++++++++++ accounts/maildir/tests/settingstest.cpp | 13 +++++++-- 4 files changed, 65 insertions(+), 3 deletions(-) (limited to 'accounts') diff --git a/accounts/maildir/maildirsettings.cpp b/accounts/maildir/maildirsettings.cpp index fa30851c..e47b834f 100644 --- a/accounts/maildir/maildirsettings.cpp +++ b/accounts/maildir/maildirsettings.cpp @@ -82,6 +82,18 @@ void MaildirSettings::setAccountIdentifier(const QByteArray &id) [](int errorCode, const QString &errorMessage) { qWarning() << "Failed to find the maildir resource: " << errorMessage; }).exec(); + + //FIXME this assumes that we only ever have one identity per account + Sink::Store::fetchOne(Sink::Query::PropertyFilter("account", QVariant::fromValue(id))) + .then([this](const Sink::ApplicationDomain::Identity &identity) { + mIdentityIdentifier = identity.identifier(); + mUsername = identity.getProperty("username").toString(); + mEmailAddress = identity.getProperty("address").toString(); + emit identityChanged(); + }, + [](int errorCode, const QString &errorMessage) { + qWarning() << "Failed to find the identity resource: " << errorMessage; + }).exec(); } QByteArray MaildirSettings::accountIdentifier() const @@ -207,6 +219,27 @@ void MaildirSettings::save() }) .exec(); } + + if (!mIdentityIdentifier.isEmpty()) { + Sink::ApplicationDomain::Identity identity(mMailtransportIdentifier); + identity.setProperty("username", mUsername); + identity.setProperty("address", mEmailAddress); + Sink::Store::modify(identity).then([](){}, [](int errorCode, const QString &errorMessage) { + qWarning() << "Error while modifying identity: " << errorMessage; + }) + .exec(); + } else { + auto identity = Sink::ApplicationDomain::ApplicationDomainType::createEntity(); + mIdentityIdentifier = identity.identifier(); + identity.setProperty("account", mAccountIdentifier); + identity.setProperty("username", mUsername); + identity.setProperty("address", mEmailAddress); + Sink::Store::create(identity).then([]() {}, + [](int errorCode, const QString &errorMessage) { + qWarning() << "Error while creating identity: " << errorMessage; + }) + .exec(); + } } void MaildirSettings::remove() diff --git a/accounts/maildir/maildirsettings.h b/accounts/maildir/maildirsettings.h index be69ffb8..a02944d9 100644 --- a/accounts/maildir/maildirsettings.h +++ b/accounts/maildir/maildirsettings.h @@ -29,6 +29,8 @@ class MaildirSettings : public QObject Q_PROPERTY(QValidator* pathValidator READ pathValidator CONSTANT) Q_PROPERTY(QString icon MEMBER mIcon NOTIFY changed) Q_PROPERTY(QString accountName MEMBER mName NOTIFY changed) + Q_PROPERTY(QString userName MEMBER mUsername NOTIFY identityChanged) + Q_PROPERTY(QString emailAddress MEMBER mEmailAddress NOTIFY identityChanged) Q_PROPERTY(QString smtpServer MEMBER mSmtpServer NOTIFY smtpResourceChanged) Q_PROPERTY(QValidator* smtpServerValidator READ smtpServerValidator CONSTANT) Q_PROPERTY(QString smtpUsername MEMBER mSmtpUsername NOTIFY smtpResourceChanged) @@ -52,15 +54,19 @@ public: signals: void pathChanged(); void smtpResourceChanged(); + void identityChanged(); void changed(); private: QByteArray mIdentifier; QByteArray mAccountIdentifier; QByteArray mMailtransportIdentifier; + QByteArray mIdentityIdentifier; QString mPath; QString mIcon; QString mName; + QString mUsername; + QString mEmailAddress; QString mSmtpServer; QString mSmtpUsername; QString mSmtpPassword; diff --git a/accounts/maildir/package/contents/ui/MaildirAccountSettings.qml b/accounts/maildir/package/contents/ui/MaildirAccountSettings.qml index e508a475..d9d0741d 100644 --- a/accounts/maildir/package/contents/ui/MaildirAccountSettings.qml +++ b/accounts/maildir/package/contents/ui/MaildirAccountSettings.qml @@ -53,6 +53,22 @@ Rectangle { onTextChanged: { maildirSettings.accountName = text; } } + Label { text: "User Name" } + TextField { + placeholderText: "Your Name" + Layout.fillWidth: true + text: maildirSettings.userName + onTextChanged: { maildirSettings.userName = text; } + } + + Label { text: "Email Address" } + TextField { + placeholderText: "Your EMail Address" + Layout.fillWidth: true + text: maildirSettings.emailAddress + onTextChanged: { maildirSettings.emailAddress = text; } + } + Text { Layout.columnSpan: 2 Layout.fillWidth: true diff --git a/accounts/maildir/tests/settingstest.cpp b/accounts/maildir/tests/settingstest.cpp index 07665c24..1967bcfc 100644 --- a/accounts/maildir/tests/settingstest.cpp +++ b/accounts/maildir/tests/settingstest.cpp @@ -26,6 +26,8 @@ private slots: auto smtpServer = QString("smtpserver"); auto smtpUsername = QString("username"); auto smtpPassword = QString("password"); + auto username = QString("username"); + auto emailAddress = QString("emailAddress"); MaildirSettings settings; settings.setAccountIdentifier(accountId); @@ -33,6 +35,8 @@ private slots: settings.setProperty("smtpServer", smtpServer); settings.setProperty("smtpUsername", smtpUsername); settings.setProperty("smtpPassword", smtpPassword); + settings.setProperty("username", username); + settings.setProperty("emailAddress", emailAddress); settings.save(); Sink::Store::fetchAll(Sink::Query()).then>([](const QList &resources) { @@ -46,20 +50,23 @@ private slots: QSignalSpy spy(&readSettings, &MaildirSettings::pathChanged); QSignalSpy spy1(&readSettings, &MaildirSettings::smtpResourceChanged); readSettings.setAccountIdentifier(accountId); - QTRY_VERIFY(spy.count()); - QTRY_VERIFY(spy1.count()); + //Once for clear and once for once for the new setting + QTRY_COMPARE(spy.count(), 2); + QTRY_COMPARE(spy1.count(), 2); QVERIFY(!readSettings.accountIdentifier().isEmpty()); QCOMPARE(readSettings.path().toString(), maildirPath); QCOMPARE(readSettings.property("smtpServer").toString(), smtpServer); QCOMPARE(readSettings.property("smtpUsername").toString(), smtpUsername); QCOMPARE(readSettings.property("smtpPassword").toString(), smtpPassword); + QCOMPARE(readSettings.property("username").toString(), smtpUsername); + QCOMPARE(readSettings.property("emailAddress").toString(), smtpPassword); } { MaildirSettings settings; QSignalSpy spy(&settings, &MaildirSettings::pathChanged); settings.setAccountIdentifier(accountId); - QTRY_VERIFY(spy.count()); + QTRY_COMPARE(spy.count(), 2); settings.remove(); } -- cgit v1.2.3