diff --git a/src/chatlog/content/filetransferwidget.h b/src/chatlog/content/filetransferwidget.h
index fff5ea6ba..717548252 100644
--- a/src/chatlog/content/filetransferwidget.h
+++ b/src/chatlog/content/filetransferwidget.h
@@ -44,6 +44,7 @@ public:
virtual ~FileTransferWidget();
void autoAcceptTransfer(const QString& path);
bool isActive() const;
+ static QString getHumanReadableSize(qint64 size);
protected slots:
void onFileTransferInfo(ToxFile file);
@@ -56,7 +57,6 @@ protected slots:
void fileTransferBrokenUnbroken(ToxFile file, bool broken);
protected:
- QString getHumanReadableSize(qint64 size);
void updateWidgetColor(ToxFile const& file);
void updateWidgetText(ToxFile const& file);
void updateFileProgress(ToxFile const& file);
diff --git a/src/persistence/settings.cpp b/src/persistence/settings.cpp
index c3dba19b5..c25053147 100644
--- a/src/persistence/settings.cpp
+++ b/src/persistence/settings.cpp
@@ -154,6 +154,7 @@ void Settings::loadGlobal()
autoAwayTime = s.value("autoAwayTime", 10).toInt();
checkUpdates = s.value("checkUpdates", true).toBool();
notifySound = s.value("notifySound", true).toBool(); // note: notifySound and busySound UI elements are now under UI settings
+ notifyHide = s.value("notifyHide", false).toBool();
busySound = s.value("busySound", false).toBool(); // page, but kept under General in settings file to be backwards compatible
fauxOfflineMessaging = s.value("fauxOfflineMessaging", true).toBool();
autoSaveEnabled = s.value("autoSaveEnabled", false).toBool();
@@ -435,6 +436,7 @@ void Settings::saveGlobal()
s.setValue("autoAwayTime", autoAwayTime);
s.setValue("checkUpdates", checkUpdates);
s.setValue("notifySound", notifySound);
+ s.setValue("notifyHide", notifyHide);
s.setValue("busySound", busySound);
s.setValue("fauxOfflineMessaging", fauxOfflineMessaging);
s.setValue("autoSaveEnabled", autoSaveEnabled);
@@ -1005,6 +1007,22 @@ void Settings::setNotifySound(bool newValue)
}
}
+bool Settings::getNotifyHide() const
+{
+ QMutexLocker locker{&bigLock};
+ return notifyHide;
+}
+
+void Settings::setNotifyHide(bool newValue)
+{
+ QMutexLocker locker{&bigLock};
+
+ if (newValue != notifyHide) {
+ notifyHide = newValue;
+ emit notifyHideChanged(notifyHide);
+ }
+}
+
bool Settings::getBusySound() const
{
QMutexLocker locker{&bigLock};
diff --git a/src/persistence/settings.h b/src/persistence/settings.h
index 0d0ad0005..45d10614d 100644
--- a/src/persistence/settings.h
+++ b/src/persistence/settings.h
@@ -181,6 +181,7 @@ signals:
void makeToxPortableChanged(bool enabled);
void busySoundChanged(bool enabled);
void notifySoundChanged(bool enabled);
+ void notifyHideChanged(bool enabled);
void groupAlwaysNotifyChanged(bool enabled);
void translationChanged(const QString& translation);
void toxmeInfoChanged(const QString& info);
@@ -337,6 +338,9 @@ public:
bool getNotifySound() const;
void setNotifySound(bool newValue);
+ bool getNotifyHide() const;
+ void setNotifyHide(bool newValue);
+
bool getBusySound() const;
void setBusySound(bool newValue);
@@ -620,6 +624,7 @@ private:
bool desktopNotify;
bool showWindow;
bool notifySound;
+ bool notifyHide;
bool busySound;
bool groupAlwaysNotify;
bool nameColors;
diff --git a/src/platform/desktop_notifications/desktopnotify.cpp b/src/platform/desktop_notifications/desktopnotify.cpp
index 3784f61b0..60f306b01 100644
--- a/src/platform/desktop_notifications/desktopnotify.cpp
+++ b/src/platform/desktop_notifications/desktopnotify.cpp
@@ -19,37 +19,40 @@ DesktopNotify::DesktopNotify()
notifyCore.registerApplication(snoreApp);
}
-void DesktopNotify::createNotification(const QString& title)
+void DesktopNotify::createNotification(const QString& title, const QString& text, Snore::Icon& icon)
{
const Settings& s = Settings::getInstance();
if(!(s.getNotify() && s.getDesktopNotify())) {
return;
}
- Snore::Notification notify{snoreApp, Snore::Alert(), title, {}, snoreIcon};
+ Snore::Notification notify{snoreApp, Snore::Alert(), title, text, icon};
+
notifyCore.broadcastNotification(notify);
}
-void DesktopNotify::notifyGroupMessage()
+void DesktopNotify::notifyMessage(const QString& title, const QString& message)
{
- const QString title = tr("New group message received");
- createNotification(title);
+ createNotification(title, message, snoreIcon);
}
-void DesktopNotify::notifyFriendRequest()
+void DesktopNotify::notifyMessagePixmap(const QString& title, const QString& message, QPixmap avatar)
{
- const QString title = tr("New friend request received");
- createNotification(title);
+ Snore::Icon new_icon(avatar);
+ createNotification(title, message, new_icon);
}
-void DesktopNotify::notifyGroupInvite()
+void DesktopNotify::notifyMessageSimple(const MessageType type)
{
- const QString title = tr("New group invite received");
- createNotification(title);
-}
+ QString message;
+ switch (type) {
+ case MessageType::FRIEND: message = tr("New message"); break;
+ case MessageType::FRIEND_FILE: message = tr("Incoming file transfer"); break;
+ case MessageType::FRIEND_REQUEST: message = tr("Friend request received"); break;
+ case MessageType::GROUP: message = tr("New group message"); break;
+ case MessageType::GROUP_INVITE: message = tr("Group invite received"); break;
+ default: break;
+ }
-void DesktopNotify::notifyFriendMessage()
-{
- const QString title = tr("New message received");
- createNotification(title);
+ createNotification(message, {}, snoreIcon);
}
diff --git a/src/platform/desktop_notifications/desktopnotify.h b/src/platform/desktop_notifications/desktopnotify.h
index 4f2db7c45..82ab70350 100644
--- a/src/platform/desktop_notifications/desktopnotify.h
+++ b/src/platform/desktop_notifications/desktopnotify.h
@@ -12,14 +12,21 @@ class DesktopNotify : public QObject
public:
DesktopNotify();
+ enum class MessageType {
+ FRIEND,
+ FRIEND_FILE,
+ FRIEND_REQUEST,
+ GROUP,
+ GROUP_INVITE
+ };
+
public slots:
- void notifyFriendMessage();
- void notifyGroupMessage();
- void notifyFriendRequest();
- void notifyGroupInvite();
+ void notifyMessage(const QString& title, const QString& message);
+ void notifyMessagePixmap(const QString& title, const QString& message, QPixmap avatar);
+ void notifyMessageSimple(const MessageType type);
private:
- void createNotification(const QString& title);
+ void createNotification(const QString& title, const QString& text, Snore::Icon& icon);
private:
Snore::SnoreCore& notifyCore;
diff --git a/src/widget/form/chatform.cpp b/src/widget/form/chatform.cpp
index f2e296c3a..ef6b94ebc 100644
--- a/src/widget/form/chatform.cpp
+++ b/src/widget/form/chatform.cpp
@@ -338,7 +338,10 @@ void ChatForm::onFileRecvRequest(ToxFile file)
return;
}
- Widget::getInstance()->newFriendMessageAlert(f->getPublicKey());
+ Widget::getInstance()->newFriendMessageAlert(f->getPublicKey(),
+ file.fileName +
+ " (" + FileTransferWidget::getHumanReadableSize(file.filesize) + ")",
+ true, true);
QString name;
ToxPk friendId = f->getPublicKey();
if (friendId != previousId) {
diff --git a/src/widget/form/settings/userinterfaceform.cpp b/src/widget/form/settings/userinterfaceform.cpp
index ee9d0860e..442e15d16 100644
--- a/src/widget/form/settings/userinterfaceform.cpp
+++ b/src/widget/form/settings/userinterfaceform.cpp
@@ -78,6 +78,7 @@ UserInterfaceForm::UserInterfaceForm(SettingsWidget* myParent)
bodyUI->groupOnlyNotfiyWhenMentioned->setChecked(!s.getGroupAlwaysNotify());
bodyUI->groupOnlyNotfiyWhenMentioned->setEnabled(s.getNotify());
bodyUI->notifySound->setChecked(s.getNotifySound());
+ bodyUI->notifyHide->setChecked(s.getNotifyHide());
bodyUI->notifySound->setEnabled(s.getNotify());
bodyUI->busySound->setChecked(s.getBusySound());
bodyUI->busySound->setEnabled(s.getNotifySound() && s.getNotify());
@@ -391,3 +392,9 @@ void UserInterfaceForm::on_useNameColors_stateChanged(int value)
{
Settings::getInstance().setEnableGroupChatsColor(value);
}
+
+void UserInterfaceForm::on_notifyHide_stateChanged(int value)
+{
+ Settings::getInstance().setNotifyHide(value);
+}
+
diff --git a/src/widget/form/settings/userinterfaceform.h b/src/widget/form/settings/userinterfaceform.h
index e51894f6a..2ed432f31 100644
--- a/src/widget/form/settings/userinterfaceform.h
+++ b/src/widget/form/settings/userinterfaceform.h
@@ -51,6 +51,7 @@ private slots:
void on_notify_stateChanged();
void on_desktopNotify_stateChanged();
void on_notifySound_stateChanged();
+ void on_notifyHide_stateChanged(int);
void on_busySound_stateChanged();
void on_showWindow_stateChanged();
void on_groupOnlyNotfiyWhenMentioned_stateChanged();
@@ -60,7 +61,6 @@ private slots:
void on_cbGroupchatPosition_stateChanged();
void on_themeColorCBox_currentIndexChanged(int);
void on_cbShowIdenticons_stateChanged();
-
void on_txtChatFont_currentFontChanged(const QFont& f);
void on_txtChatFontSize_valueChanged(int arg1);
void on_useNameColors_stateChanged(int value);
diff --git a/src/widget/form/settings/userinterfacesettings.ui b/src/widget/form/settings/userinterfacesettings.ui
index cf0ac58b5..1f664468d 100644
--- a/src/widget/form/settings/userinterfacesettings.ui
+++ b/src/widget/form/settings/userinterfacesettings.ui
@@ -40,7 +40,7 @@
0
0
650
- 892
+ 950
@@ -221,6 +221,13 @@
+ -
+
+
+ Hide message sender and contents
+
+
+
-
diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp
index 7c1a3ef1f..8ee6fe007 100644
--- a/src/widget/widget.cpp
+++ b/src/widget/widget.cpp
@@ -964,7 +964,7 @@ void Widget::cleanupNotificationSound()
void Widget::incomingNotification(uint32_t friendnumber)
{
const auto& friendId = FriendList::id2Key(friendnumber);
- newFriendMessageAlert(friendId, false);
+ newFriendMessageAlert(friendId, {}, false);
// loop until call answered or rejected
playNotificationSound(IAudioSink::Sound::IncomingCall, true);
@@ -1238,7 +1238,7 @@ void Widget::onFriendMessageReceived(uint32_t friendnumber, const QString& messa
profile->getHistory()->addNewMessage(publicKey, text, publicKey, timestamp, true, name);
}
- newFriendMessageAlert(friendId);
+ newFriendMessageAlert(friendId, message);
}
void Widget::addFriendDialog(const Friend* frnd, ContentDialog* dialog)
@@ -1344,7 +1344,7 @@ void Widget::addGroupDialog(Group* group, ContentDialog* dialog)
emit widget->chatroomWidgetClicked(widget);
}
-bool Widget::newFriendMessageAlert(const ToxPk& friendId, bool sound)
+bool Widget::newFriendMessageAlert(const ToxPk& friendId, const QString& text, bool sound, bool file)
{
bool hasActive;
QWidget* currentWindow;
@@ -1381,7 +1381,15 @@ bool Widget::newFriendMessageAlert(const ToxPk& friendId, bool sound)
widget->updateStatusLight();
ui->friendList->trackWidget(widget);
#if DESKTOP_NOTIFICATIONS
- notifier.notifyFriendMessage();
+ if (settings.getNotifyHide()) {
+ notifier.notifyMessageSimple(file ? DesktopNotify::MessageType::FRIEND_FILE : DesktopNotify::MessageType::FRIEND);
+ } else {
+ QString title = f->getDisplayedName();
+ if (file) {
+ title += " - " + tr("File sent");
+ }
+ notifier.notifyMessagePixmap(title, text, Nexus::getProfile()->loadAvatar(f->getPublicKey()));
+ }
#endif
if (contentDialog == nullptr) {
@@ -1398,7 +1406,7 @@ bool Widget::newFriendMessageAlert(const ToxPk& friendId, bool sound)
return false;
}
-bool Widget::newGroupMessageAlert(const GroupId& groupId, bool notify)
+bool Widget::newGroupMessageAlert(const GroupId& groupId, const ToxPk& authorPk, const QString& message, bool notify)
{
bool hasActive;
QWidget* currentWindow;
@@ -1421,7 +1429,17 @@ bool Widget::newGroupMessageAlert(const GroupId& groupId, bool notify)
g->setEventFlag(true);
widget->updateStatusLight();
#if DESKTOP_NOTIFICATIONS
- notifier.notifyGroupMessage();
+ if (settings.getNotifyHide()) {
+ notifier.notifyMessageSimple(DesktopNotify::MessageType::GROUP);
+ } else {
+ Friend *f = FriendList::findFriend(authorPk);
+ QString title = g->getPeerList().value(authorPk) + " (" + g->getDisplayedName() + ")";
+ if (!f) {
+ notifier.notifyMessage(title, message);
+ } else {
+ notifier.notifyMessagePixmap(title, message, Nexus::getProfile()->loadAvatar(f->getPublicKey()));
+ }
+ }
#endif
if (contentDialog == nullptr) {
@@ -1497,7 +1515,11 @@ void Widget::onFriendRequestReceived(const ToxPk& friendPk, const QString& messa
friendRequestsUpdate();
newMessageAlert(window(), isActiveWindow(), true, true);
#if DESKTOP_NOTIFICATIONS
- notifier.notifyFriendRequest();
+ if (settings.getNotifyHide()) {
+ notifier.notifyMessageSimple(DesktopNotify::MessageType::FRIEND_REQUEST);
+ } else {
+ notifier.notifyMessage(friendPk.toString() + tr(" sent you a friend request."), message);
+ }
#endif
}
}
@@ -1736,7 +1758,11 @@ void Widget::onGroupInviteReceived(const GroupInvite& inviteInfo)
groupInvitesUpdate();
newMessageAlert(window(), isActiveWindow(), true, true);
#if DESKTOP_NOTIFICATIONS
- notifier.notifyGroupInvite();
+ if (settings.getNotifyHide()) {
+ notifier.notifyMessageSimple(DesktopNotify::MessageType::GROUP_INVITE);
+ } else {
+ notifier.notifyMessagePixmap(f->getDisplayedName() + tr(" invites you to join a group."), {}, Nexus::getProfile()->loadAvatar(f->getPublicKey()));
+ }
#endif
}
} else {
@@ -1781,7 +1807,7 @@ void Widget::onGroupMessageReceived(int groupnumber, int peernumber, const QStri
form->addMessage(author, message, date, isAction, true);
}
- newGroupMessageAlert(groupId, targeted || settings.getGroupAlwaysNotify());
+ newGroupMessageAlert(groupId, author, message, targeted || settings.getGroupAlwaysNotify());
}
void Widget::onGroupPeerlistChanged(uint32_t groupnumber)
diff --git a/src/widget/widget.h b/src/widget/widget.h
index 1a6a4ef8f..6e5148247 100644
--- a/src/widget/widget.h
+++ b/src/widget/widget.h
@@ -123,8 +123,8 @@ public:
void showUpdateDownloadProgress();
void addFriendDialog(const Friend* frnd, ContentDialog* dialog);
void addGroupDialog(Group* group, ContentDialog* dialog);
- bool newFriendMessageAlert(const ToxPk& friendId, bool sound = true);
- bool newGroupMessageAlert(const GroupId& groupId, bool notify);
+ bool newFriendMessageAlert(const ToxPk& friendId, const QString& text, bool sound = true, bool file = false);
+ bool newGroupMessageAlert(const GroupId& groupId, const ToxPk& authorPk, const QString& message, bool notify);
bool getIsWindowMinimized();
void updateIcons();