From fc7aafe08f922fb15d077304b130071bb9e69392 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Mon, 26 Feb 2018 14:38:03 +0100 Subject: Finishing test log view + proper message display in log view --- framework/src/domain/maillistmodel.cpp | 33 ++++++++ framework/src/domain/maillistmodel.h | 4 + tests/teststore.cpp | 15 ++++ views/log/main.qml | 18 ++++- views/log/main.qml.bak | 139 +++++++++++++++++++++++++++++++++ views/log/qml/View.qml | 72 +++++++++++------ 6 files changed, 257 insertions(+), 24 deletions(-) create mode 100644 views/log/main.qml.bak diff --git a/framework/src/domain/maillistmodel.cpp b/framework/src/domain/maillistmodel.cpp index e2f52d13..64621d2c 100644 --- a/framework/src/domain/maillistmodel.cpp +++ b/framework/src/domain/maillistmodel.cpp @@ -400,3 +400,36 @@ bool MailListModel::showInbox() const { return false; } + +void MailListModel::setEntityId(const QString &id) +{ + qDebug() << "Fixing mail ID: " << id << " and running mail query"; + using namespace Sink::ApplicationDomain; + Sink::Query query; + query.setFlags(Sink::Query::LiveQuery); + query.filter(id.toUtf8()); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + query.request(); + mFetchMails = true; + mFetchedMails.clear(); + // Latest mail at the top + sort(0, Qt::DescendingOrder); + runQuery(query); +} + +QString MailListModel::entityId() const +{ + return {}; +} diff --git a/framework/src/domain/maillistmodel.h b/framework/src/domain/maillistmodel.h index f83656b9..a6965915 100644 --- a/framework/src/domain/maillistmodel.h +++ b/framework/src/domain/maillistmodel.h @@ -33,6 +33,7 @@ class MailListModel : public QSortFilterProxyModel Q_PROPERTY (QVariant mail READ mail WRITE setMail) Q_PROPERTY (bool showDrafts READ showDrafts WRITE setShowDrafts) Q_PROPERTY (bool showInbox READ showInbox WRITE setShowInbox) + Q_PROPERTY (QString entityId READ entityId WRITE setEntityId) Q_PROPERTY (QString filter READ filter WRITE setFilter) @@ -93,6 +94,9 @@ public: void setShowInbox(bool); bool showInbox() const; + void setEntityId(const QString &id); + QString entityId() const; + private: void fetchMail(Sink::ApplicationDomain::Mail::Ptr mail); diff --git a/tests/teststore.cpp b/tests/teststore.cpp index e5a3ea88..24067f4f 100644 --- a/tests/teststore.cpp +++ b/tests/teststore.cpp @@ -160,6 +160,9 @@ QVariant TestStore::load(const QByteArray &type, const QVariantMap &filter) using namespace Sink::ApplicationDomain; const auto list = loadList(type, filter); if (!list.isEmpty()) { + if(list.size() > 1) { + qWarning() << "While loading" << type << "with filter" << filter << "; got multiple elements, but returning the first one."; + } return list.first(); } return {}; @@ -183,6 +186,17 @@ QVariantList TestStore::loadList(const QByteArray &type, const QVariantMap &filt if (filter.contains("resource")) { query.resourceFilter(filter.value("resource").toByteArray()); } + + for(QVariantMap::const_iterator it = filter.begin(); it != filter.end(); ++it) { + if(it.key() == "messageId") { + query.filter(it.value()); + } else if(it.key() == "draft") { + query.filter(it.value()); + } else if(it.key() == "subject") { + query.filter(it.value()); + } + } + if (type == "mail") { return toVariantList(Sink::Store::read(query)); } @@ -205,6 +219,7 @@ QVariantMap TestStore::read(const QVariant &object) using namespace Sink::ApplicationDomain; QVariantMap map; if (auto mail = object.value()) { + map.insert("uid", mail->identifier()); map.insert("subject", mail->getSubject()); map.insert("draft", mail->getDraft()); return map; diff --git a/views/log/main.qml b/views/log/main.qml index e33d7945..f4f20582 100644 --- a/views/log/main.qml +++ b/views/log/main.qml @@ -111,6 +111,8 @@ ApplicationWindow { entities: [] } ) + var mail = TestStore.load("mail", {messageId: "msg1@test.com"}) + var mail_uid = TestStore.read(mail).uid Kube.Fabric.postMessage( Kube.Messages.notification, { @@ -118,7 +120,19 @@ ApplicationWindow { "subtype": Kube.Notifications.transmissionError, message: "merge1", resource: "resource1", - entities: [""] + entities: [mail_uid] + } + ) + var mail2 = TestStore.load("mail", {messageId: "msg2@test.com"}) + var mail2_uid = TestStore.read(mail2).uid + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": Kube.Notifications.transmissionError, + message: "merge1", + resource: "resource1", + entities: [mail2_uid] } ) Kube.Fabric.postMessage( @@ -128,7 +142,7 @@ ApplicationWindow { "subtype": "customSubType", message: "merge1", resource: "resource1", - entities: ["entity1", "entity2"] + entities: [] } ) } diff --git a/views/log/main.qml.bak b/views/log/main.qml.bak new file mode 100644 index 00000000..fbe47238 --- /dev/null +++ b/views/log/main.qml.bak @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2018 Christian Mollekopf, + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Window 2.0 + +import org.kube.framework 1.0 as Kube +import org.kube.test 1.0 +import "qml" + +ApplicationWindow { + id: app + height: Screen.desktopAvailableHeight * 0.8 + width: Screen.desktopAvailableWidth * 0.8 + + Component.onCompleted: { + var initialState = { + accounts: [{ + id: "account1", + name: "Test Account" + }], + identities: [{ + account: "account1", + name: "Test Identity", + address: "identity@example.org" + }], + resources: [{ + id: "resourceaccount1", + account: "account1", + type: "dummy" + }, + { + id: "resourceaccount2", + account: "account1", + type: "mailtransport" + }], + folders: [{ + id: "folder1", + resource: "resourcefolder1", + name: "Folder 1", + specialpurpose: ["drafts"], + mails: [{ + resource: "resourcemail1", + messageId: "", + date: "2017-07-24T15:46:29", + subject: "subject1", + body: "body", + to: ["to@example.org"], + cc: ["cc@example.org"], + bcc: ["bcc@example.org"], + draft: true + }, + { + resource: "resourcemail2", + messageId: "", + date: "2017-07-23T15:46:29", + subject: "LooooooooooooooooooooooooooooooooooooooooooooooooooooooooonggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggEnd", + body: "LooooooooooooooooooooooooooooooooooooooooooooooooooooooooonggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggEnd\nbody\nbody\n\n\nbody\n\n\nbody\n\n\nbody\n\n\nbody\nbody\n\n\nbody\n\n\nbody\n\n\nbody\n\n\nbody\n\n\n\n\n\n\n\n\nbody\nbody\n\n\nbody\n\n\nbody\n\n\nbody\n\n\nbody\n\n\nbody", + to: ["toLoooooooooooooooooooooooooooooooooooooooooooooooooong@example.org"], + cc: ["ccLoooooooooooooooooooooooooooooooooooooooooooooooooong@example.org"], + bcc: ["bccLoooooooooooooooooooooooooooooooooooooooooooooooooong@example.org"], + draft: true + } + ] + }], + } + TestStore.setup(initialState) + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": Kube.Notifications.loginError, + message: "merge1", + resource: "resourceaccount1", + entities: [] + } + ); + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": Kube.Notifications.hostNotFoundError, + message: "merge1", + resource: "resourceaccount1", + entities: [] + } + ) + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": Kube.Notifications.connectionError, + message: "merge1", + resource: "resource1account", + entities: [] + } + ) + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": Kube.Notifications.transmissionError, + message: "merge1", + resource: "resourceaccount1", + entities: ["resourcemail1"] + } + ) + Kube.Fabric.postMessage( + Kube.Messages.notification, + { + "type": Kube.Notifications.error, + "subtype": "customSubType", + message: "merge1", + resource: "resource1", + entities: [] + } + ) + } + + View { + anchors.fill: parent + } +} diff --git a/views/log/qml/View.qml b/views/log/qml/View.qml index 0dbf3b5e..7e95e20f 100644 --- a/views/log/qml/View.qml +++ b/views/log/qml/View.qml @@ -46,14 +46,16 @@ Controls.SplitView { root.pendingError = true } - console.log("Message: " + message.message) - console.log("Type: " + message.type) - console.log("SubType: " + message.subtype) - console.log("Entities: " + message.entities) - - var error = {timestamp: new Date(), message: message.message, details: message.details, resource: message.resource, entities: message.entities} - - console.log("Error: " + JSON.stringify(error)) + var error = { + timestamp: new Date(), + message: message.message, + details: message.details, + resource: message.resource, + // TODO: if we passed entities as a list, it would get + // converted to a ListModel, in all likelihood because of + // ListDelegate, which we should rewrite in C++ + entities: {elements: message.entities} + } if (logModel.count > 0) { var lastEntry = logModel.get(0) @@ -88,7 +90,6 @@ Controls.SplitView { onCurrentItemChanged: { var error = currentItem.currentData.errors.get(0) - console.log("Current error: " + JSON.stringify(error)); if (!!error.resource) { details.resourceId = error.resource } @@ -100,9 +101,6 @@ Controls.SplitView { details.subtype = "" } - console.log("Setting resource to: " + error.resource) - console.log("Setting entities to: " + error.entities) - details.entities = error.entities } @@ -357,19 +355,49 @@ Controls.SplitView { right: parent.right } spacing: Kube.Units.largeSpacing + + Kube.Heading { + id: heading + text: qsTr("Failed to send the message.") + color: Kube.Colors.warningColor + } + Column { - Kube.Heading { - id: heading - text: qsTr("Failed to send the message.") - color: Kube.Colors.warningColor - } - Kube.Label { - id: subHeadline - text: "Account: " + accountName + "\nMessage-Id: " + entities; - color: Kube.Colors.disabledTextColor - wrapMode: Text.Wrap + spacing: Kube.Units.largeSpacing + + Repeater { + model: Kube.MailListModel { + entityId: entities.elements[0] + } + delegate: Column { + id: subHeadline + + Kube.Label { + text: qsTr("Account") + ": " + accountName + color: Kube.Colors.disabledTextColor + wrapMode: Text.Wrap + } + Kube.Label { + text: qsTr("Subject") + ": " + model.subject + color: Kube.Colors.disabledTextColor + wrapMode: Text.Wrap + } + Kube.Label { + text: qsTr("To") + ": " + model.to + color: Kube.Colors.disabledTextColor + wrapMode: Text.Wrap + } + Kube.Label { + visible: !!model.cc + text: qsTr("Cc") + ": " + model.cc; + color: Kube.Colors.disabledTextColor + wrapMode: Text.Wrap + } + + } } } + Kube.Button { text: qsTr("Try again") onClicked: { -- cgit v1.2.3