From eae09f8f14c046e12ff6d4123d9a09ed00a82dc0 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Thu, 4 Feb 2021 18:41:00 -0500 Subject: Fix bug on logout of non-default profile --- src/ChatPage.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'src/ChatPage.cpp') diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index db80ecd5..ac327b82 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -448,15 +448,13 @@ void ChatPage::deleteConfigs() { QSettings settings; + + QString profilePrefix = (UserSettings::instance()->profile() == "default" ? "" : QString("profile/%1").arg(UserSettings::instance()->profile())); + settings.beginGroup(profilePrefix); settings.beginGroup("auth"); settings.remove(""); - settings.endGroup(); - settings.beginGroup("client"); - settings.remove(""); - settings.endGroup(); - settings.beginGroup("notifications"); - settings.remove(""); - settings.endGroup(); + settings.endGroup(); // auth + settings.endGroup(); // profilePrefix http::client()->shutdown(); cache::deleteData(); -- cgit 1.5.1 From 343c9c811630b1321f3f15458c5c802d0c5094eb Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Thu, 4 Feb 2021 19:01:48 -0500 Subject: Don't attempt to begin group "" --- src/ChatPage.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/ChatPage.cpp') diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index ac327b82..d8907740 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -449,12 +449,14 @@ ChatPage::deleteConfigs() { QSettings settings; - QString profilePrefix = (UserSettings::instance()->profile() == "default" ? "" : QString("profile/%1").arg(UserSettings::instance()->profile())); - settings.beginGroup(profilePrefix); + if (UserSettings::instance()->profile() != "") + { + settings.beginGroup("profile"); + settings.beginGroup(UserSettings::instance()->profile()); + } settings.beginGroup("auth"); settings.remove(""); settings.endGroup(); // auth - settings.endGroup(); // profilePrefix http::client()->shutdown(); cache::deleteData(); -- cgit 1.5.1 From 974c336c5e95fc3a51b473d5e1899c49817ab704 Mon Sep 17 00:00:00 2001 From: trilene Date: Sun, 7 Feb 2021 13:58:32 -0500 Subject: make lint --- resources/qml/MessageView.qml | 5 +++-- resources/qml/UserProfile.qml | 13 +++++++++---- src/ChatPage.cpp | 7 +++---- src/Utils.cpp | 3 ++- 4 files changed, 17 insertions(+), 11 deletions(-) (limited to 'src/ChatPage.cpp') diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index 29115b00..dafca0f6 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -102,6 +102,7 @@ ListView { Avatar { id: messageUserAvatar + width: avatarSize height: avatarSize url: modelData ? chat.model.avatarUrl(modelData.userId).replace("mxc://", "image://MxcImage/") : "" @@ -112,8 +113,8 @@ ListView { Connections { target: chat.model - onRoomAvatarUrlChanged: { - messageUserAvatar.url = modelData ? chat.model.avatarUrl(modelData.userId).replace("mxc://", "image://MxcImage/") : "" + onRoomAvatarUrlChanged: { + messageUserAvatar.url = modelData ? chat.model.avatarUrl(modelData.userId).replace("mxc://", "image://MxcImage/") : ""; } } diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index 37ae6de8..4797a38e 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -49,6 +49,7 @@ ApplicationWindow { Text { id: errorText + text: "Error Text" color: "red" visible: opacity > 0 @@ -58,24 +59,28 @@ ApplicationWindow { SequentialAnimation { id: hideErrorAnimation + running: false + PauseAnimation { duration: 4000 } + NumberAnimation { target: errorText property: 'opacity' to: 0 duration: 1000 } + } - Connections{ + Connections { target: profile onDisplayError: { - errorText.text = errorMessage - errorText.opacity = 1 - hideErrorAnimation.restart() + errorText.text = errorMessage; + errorText.opacity = 1; + hideErrorAnimation.restart(); } } diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index d8907740..6d67e6f2 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -449,10 +449,9 @@ ChatPage::deleteConfigs() { QSettings settings; - if (UserSettings::instance()->profile() != "") - { - settings.beginGroup("profile"); - settings.beginGroup(UserSettings::instance()->profile()); + if (UserSettings::instance()->profile() != "") { + settings.beginGroup("profile"); + settings.beginGroup(UserSettings::instance()->profile()); } settings.beginGroup("auth"); settings.remove(""); diff --git a/src/Utils.cpp b/src/Utils.cpp index 1b2808b3..f90e5049 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -70,7 +70,8 @@ utils::replaceEmoji(const QString &body) for (auto &code : utf32_string) { if (utils::codepointIsEmoji(code)) { if (!insideFontBlock) { - fmtBody += QString("font() + "\">"); + fmtBody += QString("font() + "\">"); insideFontBlock = true; } -- cgit 1.5.1 From 299c486a2bd1aff872fcf0b2e76300b569920fc5 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 12 Feb 2021 11:28:41 -0500 Subject: Display notifications for emote messages properly --- src/ChatPage.cpp | 9 ++++++++- src/notifications/Manager.h | 3 ++- src/notifications/ManagerLinux.cpp | 18 ++++++++++++------ src/notifications/ManagerMac.mm | 8 ++++++-- src/notifications/ManagerWin.cpp | 11 +++++++++-- 5 files changed, 37 insertions(+), 12 deletions(-) (limited to 'src/ChatPage.cpp') diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 6d67e6f2..656ddab0 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -691,13 +691,20 @@ ChatPage::sendNotifications(const mtx::responses::Notifications &res) this, [this, room_id, event_id, item, user_id, info]( QPixmap image) { + bool isEmote = false; + auto ev = cache::client()->getEvent( + room_id.toStdString(), event_id); + if (ev && mtx::accessors::msg_type(ev->data) == + mtx::events::MessageType::Emote) + isEmote = true; notificationsManager.postNotification( room_id, QString::fromStdString(event_id), QString::fromStdString(info.name), cache::displayName(room_id, user_id), utils::event_body(item.event), - image.toImage()); + image.toImage(), + isEmote); }); } } diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index 2b869efc..46f398d7 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -32,7 +32,8 @@ public: const QString &roomName, const QString &senderName, const QString &text, - const QImage &icon); + const QImage &icon, + const bool &isEmoteMsg = false); signals: void notificationClicked(const QString roomId, const QString eventId); diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp index 8f7261e6..7dbf663d 100644 --- a/src/notifications/ManagerLinux.cpp +++ b/src/notifications/ManagerLinux.cpp @@ -50,17 +50,23 @@ NotificationsManager::postNotification(const QString &roomid, const QString &roomname, const QString &sender, const QString &text, - const QImage &icon) + const QImage &icon, + const bool &isEmoteMessage) { QVariantMap hints; hints["image-data"] = icon; hints["sound-name"] = "message-new-instant"; QList argumentList; - argumentList << "nheko"; // app_name - argumentList << (uint)0; // replace_id - argumentList << ""; // app_icon - argumentList << roomname; // summary - argumentList << sender + ": " + text; // body + argumentList << "nheko"; // app_name + argumentList << (uint)0; // replace_id + argumentList << ""; // app_icon + argumentList << roomname; // summary + + // body + if (isEmoteMessage) + argumentList << "* " + sender + " " + text; + else + argumentList << sender + ": " + text; // The list of actions has always the action name and then a localized version of that // action. Currently we just use an empty string for that. // TODO(Nico): Look into what to actually put there. diff --git a/src/notifications/ManagerMac.mm b/src/notifications/ManagerMac.mm index c09e894c..e21cc904 100644 --- a/src/notifications/ManagerMac.mm +++ b/src/notifications/ManagerMac.mm @@ -19,7 +19,8 @@ NotificationsManager::postNotification( const QString &roomName, const QString &senderName, const QString &text, - const QImage &icon) + const QImage &icon, + const bool &isEmoteMessage) { Q_UNUSED(roomId); Q_UNUSED(eventId); @@ -29,7 +30,10 @@ NotificationsManager::postNotification( notif.title = roomName.toNSString(); notif.subtitle = QString("%1 sent a message").arg(senderName).toNSString(); - notif.informativeText = text.toNSString(); + if (isEmoteMessage) + notif.informativeText = QString("* ").append(senderName).append(" ").append(text).toNSString(); + else + notif.informativeText = text.toNSString(); notif.soundName = NSUserNotificationDefaultSoundName; [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification: notif]; diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp index cc61c645..43e6517b 100644 --- a/src/notifications/ManagerWin.cpp +++ b/src/notifications/ManagerWin.cpp @@ -37,7 +37,8 @@ NotificationsManager::postNotification(const QString &room_id, const QString &room_name, const QString &sender, const QString &text, - const QImage &icon) + const QImage &icon, + const bool &isEmoteMessage) { Q_UNUSED(room_id) Q_UNUSED(event_id) @@ -53,7 +54,13 @@ NotificationsManager::postNotification(const QString &room_id, else templ.setTextField(QString("%1").arg(sender).toStdWString(), WinToastTemplate::FirstLine); - templ.setTextField(QString("%1").arg(text).toStdWString(), WinToastTemplate::SecondLine); + if (isEmoteMessage) + templ.setTextField( + QString("* ").append(sender).append(" ").append(text).toStdWString(), + WinToastTemplate::SecondLine); + else + templ.setTextField(QString("%1").arg(text).toStdWString(), + WinToastTemplate::SecondLine); // TODO: implement room or user avatar // templ.setImagePath(L"C:/example.png"); -- cgit 1.5.1 From 567b2d05effd32c8804e3039250e3b44d4e7c91e Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 13 Feb 2021 12:10:49 -0500 Subject: Move notification parsing into postNotification --- src/ChatPage.cpp | 19 ++----------------- src/notifications/Manager.h | 10 +++------- src/notifications/ManagerLinux.cpp | 37 +++++++++++++++++++++++-------------- src/notifications/ManagerMac.mm | 29 +++++++++++++++-------------- src/notifications/ManagerWin.cpp | 26 ++++++++++++++++---------- 5 files changed, 59 insertions(+), 62 deletions(-) (limited to 'src/ChatPage.cpp') diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 656ddab0..45802789 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -668,8 +668,6 @@ ChatPage::sendNotifications(const mtx::responses::Notifications &res) if (!cache::isNotificationSent(event_id)) { const auto room_id = QString::fromStdString(item.room_id); - const auto user_id = - QString::fromStdString(mtx::accessors::sender(item.event)); // We should only sent one notification per event. cache::markSentNotification(event_id); @@ -689,22 +687,9 @@ ChatPage::sendNotifications(const mtx::responses::Notifications &res) QString::fromStdString(info.avatar_url), 96, this, - [this, room_id, event_id, item, user_id, info]( - QPixmap image) { - bool isEmote = false; - auto ev = cache::client()->getEvent( - room_id.toStdString(), event_id); - if (ev && mtx::accessors::msg_type(ev->data) == - mtx::events::MessageType::Emote) - isEmote = true; + [this, item](QPixmap image) { notificationsManager.postNotification( - room_id, - QString::fromStdString(event_id), - QString::fromStdString(info.name), - cache::displayName(room_id, user_id), - utils::event_body(item.event), - image.toImage(), - isEmote); + item, image.toImage()); }); } } diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index 46f398d7..e2f9f431 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -4,6 +4,8 @@ #include #include +#include + #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_HAIKU) #include #include @@ -27,13 +29,7 @@ class NotificationsManager : public QObject public: NotificationsManager(QObject *parent = nullptr); - void postNotification(const QString &roomId, - const QString &eventId, - const QString &roomName, - const QString &senderName, - const QString &text, - const QImage &icon, - const bool &isEmoteMsg = false); + void postNotification(const mtx::responses::Notification ¬ification, const QImage &icon); signals: void notificationClicked(const QString roomId, const QString eventId); diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp index 7dbf663d..66592c99 100644 --- a/src/notifications/ManagerLinux.cpp +++ b/src/notifications/ManagerLinux.cpp @@ -8,6 +8,12 @@ #include #include +#include "Cache.h" +#include "EventAccessors.h" +#include "MatrixClient.h" +#include "Utils.h" +#include + NotificationsManager::NotificationsManager(QObject *parent) : QObject(parent) , dbus("org.freedesktop.Notifications", @@ -45,28 +51,31 @@ NotificationsManager::NotificationsManager(QObject *parent) * Licensed under the GNU General Public License, version 3 */ void -NotificationsManager::postNotification(const QString &roomid, - const QString &eventid, - const QString &roomname, - const QString &sender, - const QString &text, - const QImage &icon, - const bool &isEmoteMessage) +NotificationsManager::postNotification(const mtx::responses::Notification ¬ification, + const QImage &icon) { + const auto room_id = QString::fromStdString(notification.room_id); + const auto event_id = QString::fromStdString(mtx::accessors::event_id(notification.event)); + const auto sender = cache::displayName( + room_id, QString::fromStdString(mtx::accessors::sender(notification.event))); + const auto text = utils::event_body(notification.event); + QVariantMap hints; hints["image-data"] = icon; hints["sound-name"] = "message-new-instant"; QList argumentList; - argumentList << "nheko"; // app_name - argumentList << (uint)0; // replace_id - argumentList << ""; // app_icon - argumentList << roomname; // summary + argumentList << "nheko"; // app_name + argumentList << (uint)0; // replace_id + argumentList << ""; // app_icon + argumentList << QString::fromStdString( + cache::singleRoomInfo(notification.room_id).name); // summary // body - if (isEmoteMessage) + if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) argumentList << "* " + sender + " " + text; else argumentList << sender + ": " + text; + // The list of actions has always the action name and then a localized version of that // action. Currently we just use an empty string for that. // TODO(Nico): Look into what to actually put there. @@ -82,12 +91,12 @@ NotificationsManager::postNotification(const QString &roomid, QDBusPendingCall call = notifyApp.asyncCallWithArgumentList("Notify", argumentList); auto watcher = new QDBusPendingCallWatcher{call, this}; connect( - watcher, &QDBusPendingCallWatcher::finished, this, [watcher, this, roomid, eventid]() { + watcher, &QDBusPendingCallWatcher::finished, this, [watcher, this, room_id, event_id]() { if (watcher->reply().type() == QDBusMessage::ErrorMessage) qDebug() << "D-Bus Error:" << watcher->reply().errorMessage(); else notificationIds[watcher->reply().arguments().first().toUInt()] = - roomEventId{roomid, eventid}; + roomEventId{room_id, event_id}; watcher->deleteLater(); }); } diff --git a/src/notifications/ManagerMac.mm b/src/notifications/ManagerMac.mm index e21cc904..e50bee89 100644 --- a/src/notifications/ManagerMac.mm +++ b/src/notifications/ManagerMac.mm @@ -3,6 +3,12 @@ #include #include +#include "Cache.h" +#include "EventAccessors.h" +#include "MatrixClient.h" +#include "Utils.h" +#include + @interface NSUserNotification (CFIPrivate) - (void)set_identityImage:(NSImage *)image; @end @@ -13,25 +19,20 @@ NotificationsManager::NotificationsManager(QObject *parent): QObject(parent) } void -NotificationsManager::postNotification( - const QString &roomId, - const QString &eventId, - const QString &roomName, - const QString &senderName, - const QString &text, - const QImage &icon, - const bool &isEmoteMessage) +NotificationsManager::postNotification(const mtx::responses::Notification ¬ification, + const QImage &icon) { - Q_UNUSED(roomId); - Q_UNUSED(eventId); Q_UNUSED(icon); + const auto sender = cache::displayName(QString::fromStdString(notification.room_id), QString::fromStdString(mtx::accessors::sender(notification.event))); + const auto text = utils::event_body(notification.event); + NSUserNotification * notif = [[NSUserNotification alloc] init]; - notif.title = roomName.toNSString(); - notif.subtitle = QString("%1 sent a message").arg(senderName).toNSString(); - if (isEmoteMessage) - notif.informativeText = QString("* ").append(senderName).append(" ").append(text).toNSString(); + notif.title = QString::fromStdString(cache::singleRoomInfo(notification.room_id).name).toNSString(); + notif.subtitle = QString("%1 sent a message").arg(sender).toNSString(); + if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) + notif.informativeText = QString("* ").append(sender).append(" ").append(text).toNSString(); else notif.informativeText = text.toNSString(); notif.soundName = NSUserNotificationDefaultSoundName; diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp index 1a4058b3..7df11308 100644 --- a/src/notifications/ManagerWin.cpp +++ b/src/notifications/ManagerWin.cpp @@ -1,6 +1,12 @@ #include "notifications/Manager.h" #include "wintoastlib.h" +#include "Cache.h" +#include "EventAccessors.h" +#include "MatrixClient.h" +#include "Utils.h" +#include + using namespace WinToastLib; class CustomHandler : public IWinToastHandler @@ -32,18 +38,18 @@ NotificationsManager::NotificationsManager(QObject *parent) {} void -NotificationsManager::postNotification(const QString &room_id, - const QString &event_id, - const QString &room_name, - const QString &sender, - const QString &text, - const QImage &icon, - const bool &isEmoteMessage) +NotificationsManager::postNotification(const mtx::responses::Notification ¬ification, + const QImage &icon) { - Q_UNUSED(room_id) - Q_UNUSED(event_id) Q_UNUSED(icon) + const auto room_name = + QString::fromStdString(cache::singleRoomInfo(notification.room_id).name); + const auto sender = + cache::displayName(QString::fromStdString(notification.room_id), + QString::fromStdString(mtx::accessors::sender(notification.event))); + const auto text = utils::event_body(notification.event); + if (!isInitialized) init(); @@ -54,7 +60,7 @@ NotificationsManager::postNotification(const QString &room_id, else templ.setTextField(QString("%1").arg(sender).toStdWString(), WinToastTemplate::FirstLine); - if (isEmoteMessage) + if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Emote) templ.setTextField( QString("* ").append(sender).append(" ").append(text).toStdWString(), WinToastTemplate::SecondLine); -- cgit 1.5.1