From 7dd9132176d94574810746e478f2db80052681c4 Mon Sep 17 00:00:00 2001 From: Black Hat Date: Thu, 19 Jul 2018 16:04:09 +0800 Subject: [PATCH] Init desktop notifications. --- matrique.pro | 2 +- qml/Room.qml | 2 +- qml/form/RoomForm.qml | 1 + qml/main.qml | 21 ++++++++++----------- src/main.cpp | 4 ++-- src/roomlistmodel.cpp | 19 ++++++++++++++++--- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/matrique.pro b/matrique.pro index a774be8..10eab4e 100644 --- a/matrique.pro +++ b/matrique.pro @@ -1,4 +1,4 @@ -QT += quick +QT += quick widgets CONFIG += c++14 CONFIG += object_parallel_to_source diff --git a/qml/Room.qml b/qml/Room.qml index 819a269..917ff9a 100644 --- a/qml/Room.qml +++ b/qml/Room.qml @@ -15,7 +15,7 @@ Page { connection: matriqueController.isLogin ? page.connection : undefined - onNewMessage: console.log("New message in room " + room.displayName) + onNewMessage: trayIcon.showMessage("New message", "New message for room " + room.displayName) } RowLayout { diff --git a/qml/form/RoomForm.qml b/qml/form/RoomForm.qml index 121aada..c36980b 100644 --- a/qml/form/RoomForm.qml +++ b/qml/form/RoomForm.qml @@ -98,6 +98,7 @@ Item { delegate: MessageDelegate {} onAtYBeginningChanged: atYBeginning && currentRoom ? currentRoom.getPreviousContent(50) : {} + onAtYEndChanged: atYEnd && currentRoom ? currentRoom.markAllMessagesAsRead() : {} ScrollBar.vertical: ScrollBar {} diff --git a/qml/main.qml b/qml/main.qml index 1472d7b..92d6e14 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -28,18 +28,18 @@ ApplicationWindow { property alias token: matriqueController.token } -// Platform.SystemTrayIcon { -// id: trayIcon + Platform.SystemTrayIcon { + id: trayIcon -// visible: true -// iconSource: "qrc:/asset/img/icon.png" + visible: true + iconSource: "qrc:/asset/img/icon.png" -// onActivated: { -// window.show() -// window.raise() -// window.requestActivate() -// } -// } + onActivated: { + window.show() + window.raise() + window.requestActivate() + } + } Controller { id: matriqueController @@ -163,7 +163,6 @@ ApplicationWindow { Component.onCompleted: { imageProvider.connection = matriqueController.connection - console.log(matriqueController.homeserver, matriqueController.userID, matriqueController.token) if (matriqueController.userID && matriqueController.token) { console.log("Perform auto-login."); matriqueController.login(); diff --git a/src/main.cpp b/src/main.cpp index 2dfa117..22d95fb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif - QGuiApplication app(argc, argv); + QApplication app(argc, argv); // Enable this if you need proxy. // QNetworkProxy proxy; diff --git a/src/roomlistmodel.cpp b/src/roomlistmodel.cpp index f3e27c5..2c0129b 100644 --- a/src/roomlistmodel.cpp +++ b/src/roomlistmodel.cpp @@ -1,5 +1,7 @@ #include "roomlistmodel.h" +#include "events/roomevent.h" + #include #include #include @@ -62,9 +64,20 @@ void RoomListModel::connectRoomSignals(QMatrixClient::Room* room) { connect(room, &QMatrixClient::Room::avatarChanged, this, [=] { refresh(room, {AvatarRole}); }); - connect( - room, &QMatrixClient::Room::aboutToAddNewMessages, this, - [=](QMatrixClient::RoomEventsRange events) { emit newMessage(room); }); + connect(room, &QMatrixClient::Room::unreadMessagesChanged, this, + [=](QMatrixClient::Room* r) { + if (r->hasUnreadMessages()) emit newMessage(r); + }); + // connect( + // room, &QMatrixClient::Room::aboutToAddNewMessages, this, + // [=](QMatrixClient::RoomEventsRange eventsRange) { + // for (QMatrixClient::RoomEvents events : eventsRange.const_iterator) { + // for (QMatrixClient::RoomEvent event : events) { + // qDebug() << event.fullJson(); + // } + // } + // emit newMessage(room); + // }); } void RoomListModel::updateRoom(QMatrixClient::Room* room,