From 08d2fbd8270efd50a1ebb2567f8b1d74e7269232 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 3 Aug 2018 09:55:45 +0200 Subject: People main.qml --- tests/teststore.cpp | 45 +++++++++++++++++++++++++++++++++++ views/people/main.qml | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 views/people/main.qml diff --git a/tests/teststore.cpp b/tests/teststore.cpp index c69588ef..ad494d52 100644 --- a/tests/teststore.cpp +++ b/tests/teststore.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -186,6 +187,46 @@ static void createCalendar(const QVariantMap &object) [calendarId](const QVariantMap &object) { createEvent(object, calendarId); }); } +static void createContact(const QVariantMap &object, const QByteArray &addressbookId = {}) +{ + using Sink::ApplicationDomain::ApplicationDomainType; + using Sink::ApplicationDomain::Contact; + + QString uid; + if (object.contains("uid")) { + uid = object["uid"].toString(); + } else { + uid = QUuid::createUuid().toString(); + } + + auto sinkContact = ApplicationDomainType::createEntity(object["resource"].toByteArray()); + + KContacts::Addressee addressee; + addressee.setUid(uid); + addressee.setGivenName(object["givenname"].toString()); + addressee.setFamilyName(object["familyname"].toString()); + + KContacts::VCardConverter converter; + + auto contact = ApplicationDomainType::createEntity(object["resource"].toByteArray()); + contact.setVcard(converter.createVCard(addressee, KContacts::VCardConverter::v3_0)); + contact.setAddressbook(addressbookId); + + Sink::Store::create(contact).exec().waitForFinished(); +} + +static void createAddressbook(const QVariantMap &object) +{ + using namespace Sink::ApplicationDomain; + auto addressbook = ApplicationDomainType::createEntity(object["resource"].toByteArray()); + addressbook.setName(object["name"].toString()); + Sink::Store::create(addressbook).exec().waitForFinished(); + + iterateOverObjects(object.value("contacts").toList(), [=](const QVariantMap &object) { + createContact(object, addressbook.identifier()); + }); +} + void TestStore::setup(const QVariantMap &map) { using namespace Sink::ApplicationDomain; @@ -215,6 +256,9 @@ void TestStore::setup(const QVariantMap &map) } else if (object["type"] == "caldav") { resource.setResourceType("sink.caldav"); resource.setProperty("testmode", true); + } else if (object["type"] == "carddav") { + resource.setResourceType("sink.carddav"); + resource.setProperty("testmode", true); } else { Q_ASSERT(false); } @@ -239,6 +283,7 @@ void TestStore::setup(const QVariantMap &map) }); iterateOverObjects(map.value("calendars").toList(), createCalendar); + iterateOverObjects(map.value("addressbooks").toList(), createAddressbook); Sink::ResourceControl::flushMessageQueue(resources).exec().waitForFinished(); } diff --git a/views/people/main.qml b/views/people/main.qml new file mode 100644 index 00000000..0ff35db3 --- /dev/null +++ b/views/people/main.qml @@ -0,0 +1,66 @@ +/* + * 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: "carddavresource", + account: "account1", + type: "carddav", + }], + addressbooks: [{ + id: "addressbook1", + resource: "carddavresource", + name: "Default Addressbook", + contacts: [{ + resource: "carddavresource", + uid: "uid1", + givenname: "John", + familyname: "Doe" + }], + }], + } + TestStore.setup(initialState) + } + + View { + anchors.fill: parent + } +} -- cgit v1.2.3