From dd09ca9ef4bb9780b953d6dd2999dbefe50bd1ff Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 3 Jan 2016 20:31:10 +0100 Subject: Instead of using controllers, directly use the models ...and connect components via properties --- framework/mail/CMakeLists.txt | 4 ++-- framework/mail/folderlistmodel.cpp | 3 +++ framework/mail/folderlistmodel.h | 5 ++-- framework/mail/maillistmodel.cpp | 48 ++++++++++++++++++++++++++++++++++++++ framework/mail/maillistmodel.h | 8 +++++++ framework/mail/mailplugin.cpp | 15 +++--------- framework/mail/qmldir | 4 ++-- 7 files changed, 69 insertions(+), 18 deletions(-) (limited to 'framework') diff --git a/framework/mail/CMakeLists.txt b/framework/mail/CMakeLists.txt index 7d7569a7..38ba3935 100644 --- a/framework/mail/CMakeLists.txt +++ b/framework/mail/CMakeLists.txt @@ -14,5 +14,5 @@ qt5_use_modules(mailplugin Core Quick Qml) target_link_libraries(mailplugin /work/install/lib64/libakonadi2common.so) #target_link_libraries(mailplugin /home/mike/projects/_install/lib/x86_64-linux-gnu/libakonadi2common.so) -install(TARGETS mailplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/akonadi2/mail) -install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/akonadi2/mail) \ No newline at end of file +install(TARGETS mailplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/kube/mail) +install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/kube/mail) diff --git a/framework/mail/folderlistmodel.cpp b/framework/mail/folderlistmodel.cpp index 0240d95a..0f66c46f 100644 --- a/framework/mail/folderlistmodel.cpp +++ b/framework/mail/folderlistmodel.cpp @@ -25,6 +25,7 @@ QHash< int, QByteArray > FolderListModel::roleNames() const roles[Name] = "name"; roles[Icon] = "icon"; roles[Id] = "id"; + roles[DomainObject] = "domainObject"; return roles; } @@ -39,6 +40,8 @@ QVariant FolderListModel::data(const QModelIndex &idx, int role) const return srcIdx.sibling(srcIdx.row(), 1).data(Qt::DisplayRole).toString(); case Id: return srcIdx.data(Akonadi2::Store::DomainObjectBaseRole).value()->identifier(); + case DomainObject: + return srcIdx.data(Akonadi2::Store::DomainObjectRole); } return QIdentityProxyModel::data(idx, role); } diff --git a/framework/mail/folderlistmodel.h b/framework/mail/folderlistmodel.h index 829bebff..9ce3ee79 100644 --- a/framework/mail/folderlistmodel.h +++ b/framework/mail/folderlistmodel.h @@ -17,8 +17,9 @@ public: enum Roles { Name = Qt::UserRole + 1, - Icon, - Id + Icon, + Id, + DomainObject }; QHash roleNames() const; diff --git a/framework/mail/maillistmodel.cpp b/framework/mail/maillistmodel.cpp index 80fb661f..e6a9c218 100644 --- a/framework/mail/maillistmodel.cpp +++ b/framework/mail/maillistmodel.cpp @@ -25,6 +25,7 @@ QHash< int, QByteArray > MailListModel::roleNames() const roles[Important] = "important"; roles[Id] = "id"; roles[MimeMessage] = "mimeMessage"; + roles[DomainObject] = "domainObject"; return roles; } @@ -70,3 +71,50 @@ void MailListModel::runQuery(const Akonadi2::Query &query) setSourceModel(m_model.data()); } +void MailListModel::setParentFolder(const QVariant &parentFolder) +{ + auto folder = parentFolder.value(); + if (!folder) { + qWarning() << "No folder: " << parentFolder; + return; + } + Akonadi2::Query query; + query.syncOnDemand = false; + query.processAll = false; + query.liveQuery = true; + query.requestedProperties << "subject" << "sender" << "senderName" << "date" << "unread" << "important" << "folder"; + query.propertyFilter.insert("folder", folder->identifier()); + query.resources << folder->resourceInstanceIdentifier(); + qWarning() << "Running folder query: " << folder->resourceInstanceIdentifier() << folder->identifier(); + runQuery(query); +} + +QVariant MailListModel::parentFolder() const +{ + return QVariant(); +} + +void MailListModel::setMail(const QVariant &variant) +{ + auto mail = variant.value(); + if (!mail) { + qWarning() << "No mail: " << mail; + return; + } + Akonadi2::Query query; + query.syncOnDemand = false; + query.processAll = false; + query.liveQuery = false; + query.requestedProperties << "subject" << "sender" << "senderName" << "date" << "unread" << "important" << "mimeMessage"; + query.ids << mail->identifier(); + query.resources << mail->resourceInstanceIdentifier(); + qWarning() << "Running mail query: " << mail->resourceInstanceIdentifier() << mail->identifier(); + runQuery(query); +} + +QVariant MailListModel::mail() const +{ + return QVariant(); +} + + diff --git a/framework/mail/maillistmodel.h b/framework/mail/maillistmodel.h index b5fa7c57..7718477c 100644 --- a/framework/mail/maillistmodel.h +++ b/framework/mail/maillistmodel.h @@ -9,6 +9,8 @@ class MailListModel : public QIdentityProxyModel { Q_OBJECT + Q_PROPERTY (QVariant parentFolder READ parentFolder WRITE setParentFolder) + Q_PROPERTY (QVariant mail READ mail WRITE setMail) public: MailListModel(QObject *parent = Q_NULLPTR); @@ -31,6 +33,12 @@ public: QHash roleNames() const; void runQuery(const Akonadi2::Query &query); + + void setParentFolder(const QVariant &parentFolder); + QVariant parentFolder() const; + + void setMail(const QVariant &mail); + QVariant mail() const; private: QSharedPointer m_model; }; diff --git a/framework/mail/mailplugin.cpp b/framework/mail/mailplugin.cpp index b2939acf..bf92f4e7 100644 --- a/framework/mail/mailplugin.cpp +++ b/framework/mail/mailplugin.cpp @@ -1,23 +1,14 @@ #include "mailplugin.h" -#include "maillistcontroller.h" #include "maillistmodel.h" -#include "singlemailcontroller.h" -#include "folderlistcontroller.h" #include "folderlistmodel.h" -#include #include void MailPlugin::registerTypes (const char *uri) { - Q_ASSERT(uri == QLatin1String("org.kde.akonadi2.mail")); + Q_ASSERT(uri == QLatin1String("org.kde.kube.mail")); - qmlRegisterType(); - qmlRegisterType(uri, 1, 0, "FolderList"); - - qmlRegisterType(); - qmlRegisterType(uri, 1, 0, "MailList"); - - qmlRegisterType(uri, 1, 0, "SingleMail"); + qmlRegisterType(uri, 1, 0, "FolderListModel"); + qmlRegisterType(uri, 1, 0, "MailListModel"); } diff --git a/framework/mail/qmldir b/framework/mail/qmldir index 7ca3151b..fd54e5ee 100644 --- a/framework/mail/qmldir +++ b/framework/mail/qmldir @@ -1,3 +1,3 @@ -module org.kde.akonadi2.mail +module org.kde.kube.mail -plugin mailplugin \ No newline at end of file +plugin mailplugin -- cgit v1.2.3