Mute/unmute chats both from list and in chat

This commit is contained in:
Sebastian J. Wolf 2020-09-16 20:43:36 +02:00
parent 1a5aa9de3f
commit 9070caa2a3
14 changed files with 99 additions and 7 deletions

View file

@ -223,6 +223,30 @@ Page {
contentWidth: parent.width contentWidth: parent.width
anchors.fill: parent anchors.fill: parent
PullDownMenu {
MenuItem {
id: muteChatMenuItem
onClicked: {
var newNotificationSettings = chatInformation.notification_settings;
if (newNotificationSettings.mute_for > 0) {
newNotificationSettings.mute_for = 0;
} else {
newNotificationSettings.mute_for = 6666666;
}
tdLibWrapper.setChatNotificationSettings(chatInformation.id, newNotificationSettings);
}
text: chatInformation.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat")
}
}
Connections {
target: chatModel
onNotificationSettingsUpdated: {
chatInformation = chatModel.getChatInformation();
muteChatMenuItem.text = chatInformation.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat");
}
}
Column { Column {
id: chatColumn id: chatColumn
width: parent.width width: parent.width

View file

@ -230,7 +230,7 @@ Page {
if (newNotificationSettings.mute_for > 0) { if (newNotificationSettings.mute_for > 0) {
newNotificationSettings.mute_for = 0; newNotificationSettings.mute_for = 0;
} else { } else {
newNotificationSettings.mute_for = 666666; newNotificationSettings.mute_for = 6666666;
} }
tdLibWrapper.setChatNotificationSettings(display.id, newNotificationSettings); tdLibWrapper.setChatNotificationSettings(display.id, newNotificationSettings);
} }
@ -246,7 +246,7 @@ Page {
chatListPictureThumbnail.photoData = (typeof display.photo !== "undefined") ? display.photo.small : ""; chatListPictureThumbnail.photoData = (typeof display.photo !== "undefined") ? display.photo.small : "";
chatUnreadMessagesCountBackground.visible = display.unread_count > 0; chatUnreadMessagesCountBackground.visible = display.unread_count > 0;
chatUnreadMessagesCount.text = display.unread_count > 99 ? "99+" : display.unread_count; chatUnreadMessagesCount.text = display.unread_count > 99 ? "99+" : display.unread_count;
chatListNameText.text = display.title !== "" ? Emoji.emojify(display.title, Theme.fontSizeMedium) : qsTr("Unknown"); chatListNameText.text = display.title !== "" ? Emoji.emojify(display.title, Theme.fontSizeMedium) + ( display.notification_settings.mute_for > 0 ? Emoji.emojify(" 🔇", Theme.fontSizeMedium) : "" ) : qsTr("Unknown")
chatListLastMessageText.text = (typeof display.last_message !== "undefined") ? Emoji.emojify(Functions.getMessageText(display.last_message, true), Theme.fontSizeExtraSmall) : qsTr("Unknown"); chatListLastMessageText.text = (typeof display.last_message !== "undefined") ? Emoji.emojify(Functions.getMessageText(display.last_message, true), Theme.fontSizeExtraSmall) : qsTr("Unknown");
messageContactTimeElapsedText.text = (typeof display.last_message !== "undefined") ? Functions.getDateTimeElapsed(display.last_message.date) : qsTr("Unknown"); messageContactTimeElapsedText.text = (typeof display.last_message !== "undefined") ? Functions.getDateTimeElapsed(display.last_message.date) : qsTr("Unknown");
} }
@ -318,7 +318,7 @@ Page {
Text { Text {
id: chatListNameText id: chatListNameText
text: display.title !== "" ? Emoji.emojify(display.title, font.pixelSize) + ( display.notification_settings.mute_for > 0 ? Emoji.emojify(" 🔇", font.pixelSize) : "" ) : qsTr("Unknown") text: display.title !== "" ? Emoji.emojify(display.title, Theme.fontSizeMedium) + ( display.notification_settings.mute_for > 0 ? Emoji.emojify(" 🔇", Theme.fontSizeMedium) : "" ) : qsTr("Unknown")
textFormat: Text.StyledText textFormat: Text.StyledText
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Theme.primaryColor color: Theme.primaryColor

View file

@ -12,7 +12,7 @@ Name: harbour-fernschreiber
Summary: Fernschreiber is a Telegram client for Sailfish OS Summary: Fernschreiber is a Telegram client for Sailfish OS
Version: 0.1 Version: 0.1
Release: 4 Release: 5
Group: Qt/Qt Group: Qt/Qt
License: LICENSE License: LICENSE
URL: http://werkwolf.eu/ URL: http://werkwolf.eu/

View file

@ -1,7 +1,7 @@
Name: harbour-fernschreiber Name: harbour-fernschreiber
Summary: Fernschreiber is a Telegram client for Sailfish OS Summary: Fernschreiber is a Telegram client for Sailfish OS
Version: 0.1 Version: 0.1
Release: 4 Release: 5
# The contents of the Group field should be one of the groups listed here: # The contents of the Group field should be one of the groups listed here:
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS # https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
Group: Qt/Qt Group: Qt/Qt

View file

@ -31,6 +31,7 @@ ChatListModel::ChatListModel(TDLibWrapper *tdLibWrapper)
connect(this->tdLibWrapper, SIGNAL(chatReadInboxUpdated(QString, QString, int)), this, SLOT(handleChatReadInboxUpdated(QString, QString, int))); connect(this->tdLibWrapper, SIGNAL(chatReadInboxUpdated(QString, QString, int)), this, SLOT(handleChatReadInboxUpdated(QString, QString, int)));
connect(this->tdLibWrapper, SIGNAL(chatReadOutboxUpdated(QString, QString)), this, SLOT(handleChatReadOutboxUpdated(QString, QString))); connect(this->tdLibWrapper, SIGNAL(chatReadOutboxUpdated(QString, QString)), this, SLOT(handleChatReadOutboxUpdated(QString, QString)));
connect(this->tdLibWrapper, SIGNAL(messageSendSucceeded(QString, QString, QVariantMap)), this, SLOT(handleMessageSendSucceeded(QString, QString, QVariantMap))); connect(this->tdLibWrapper, SIGNAL(messageSendSucceeded(QString, QString, QVariantMap)), this, SLOT(handleMessageSendSucceeded(QString, QString, QVariantMap)));
connect(this->tdLibWrapper, SIGNAL(chatNotificationSettingsUpdated(QString, QVariantMap)), this, SLOT(handleChatNotificationSettingsUpdated(QString, QVariantMap)));
} }
ChatListModel::~ChatListModel() ChatListModel::~ChatListModel()
@ -170,6 +171,20 @@ void ChatListModel::handleMessageSendSucceeded(const QString &messageId, const Q
this->chatListMutex.unlock(); this->chatListMutex.unlock();
} }
void ChatListModel::handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings)
{
this->chatListMutex.lock();
int chatIndex = this->chatIndexMap.value(chatId).toInt();
qDebug() << "[ChatListModel] Updating notification settings for chat " << chatId << " at index " << chatIndex;
QVariantMap currentChat = this->chatList.value(chatIndex).toMap();
currentChat.insert("notification_settings", chatNotificationSettings);
this->chatList.replace(chatIndex, currentChat);
emit dataChanged(this->index(chatIndex), this->index(chatIndex));
emit chatChanged(chatId);
this->chatListMutex.unlock();
}
void ChatListModel::updateChatOrder(const int &currentChatIndex, const QVariantMap &updatedChat) void ChatListModel::updateChatOrder(const int &currentChatIndex, const QVariantMap &updatedChat)
{ {
// Finding the new position manually as information is needed by beginMoveRows() // Finding the new position manually as information is needed by beginMoveRows()

View file

@ -48,6 +48,7 @@ public slots:
void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, const int &unreadCount); void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, const int &unreadCount);
void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId); void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId);
void handleMessageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message); void handleMessageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message);
void handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings);
private: private:
TDLibWrapper *tdLibWrapper; TDLibWrapper *tdLibWrapper;

View file

@ -33,6 +33,7 @@ ChatModel::ChatModel(TDLibWrapper *tdLibWrapper)
connect(this->tdLibWrapper, SIGNAL(chatReadInboxUpdated(QString, QString, int)), this, SLOT(handleChatReadInboxUpdated(QString, QString, int))); connect(this->tdLibWrapper, SIGNAL(chatReadInboxUpdated(QString, QString, int)), this, SLOT(handleChatReadInboxUpdated(QString, QString, int)));
connect(this->tdLibWrapper, SIGNAL(chatReadOutboxUpdated(QString, QString)), this, SLOT(handleChatReadOutboxUpdated(QString, QString))); connect(this->tdLibWrapper, SIGNAL(chatReadOutboxUpdated(QString, QString)), this, SLOT(handleChatReadOutboxUpdated(QString, QString)));
connect(this->tdLibWrapper, SIGNAL(messageSendSucceeded(QString, QString, QVariantMap)), this, SLOT(handleMessageSendSucceeded(QString, QString, QVariantMap))); connect(this->tdLibWrapper, SIGNAL(messageSendSucceeded(QString, QString, QVariantMap)), this, SLOT(handleMessageSendSucceeded(QString, QString, QVariantMap)));
connect(this->tdLibWrapper, SIGNAL(chatNotificationSettingsUpdated(QString, QVariantMap)), this, SLOT(handleChatNotificationSettingsUpdated(QString, QVariantMap)));
} }
ChatModel::~ChatModel() ChatModel::~ChatModel()
@ -85,6 +86,11 @@ void ChatModel::triggerLoadMoreHistory()
} }
} }
QVariantMap ChatModel::getChatInformation()
{
return this->chatInformation;
}
bool compareMessages(const QVariant &message1, const QVariant &message2) bool compareMessages(const QVariant &message1, const QVariant &message2)
{ {
QVariantMap messageMap1 = message1.toMap(); QVariantMap messageMap1 = message1.toMap();
@ -199,6 +205,15 @@ void ChatModel::handleMessageSendSucceeded(const QString &messageId, const QStri
} }
} }
void ChatModel::handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings)
{
if (chatId == this->chatId) {
this->chatInformation.insert("notification_settings", chatNotificationSettings);
qDebug() << "[ChatModel] Notification settings updated";
emit notificationSettingsUpdated();
}
}
void ChatModel::insertMessages() void ChatModel::insertMessages()
{ {
if (this->messages.isEmpty()) { if (this->messages.isEmpty()) {

View file

@ -38,6 +38,7 @@ public:
Q_INVOKABLE void initialize(const QVariantMap &chatInformation); Q_INVOKABLE void initialize(const QVariantMap &chatInformation);
Q_INVOKABLE void triggerLoadMoreHistory(); Q_INVOKABLE void triggerLoadMoreHistory();
Q_INVOKABLE QVariantMap getChatInformation();
signals: signals:
void messagesReceived(const int &modelIndex, const int &lastReadSentIndex); void messagesReceived(const int &modelIndex, const int &lastReadSentIndex);
@ -45,6 +46,7 @@ signals:
void newMessageReceived(); void newMessageReceived();
void unreadCountUpdated(const int &unreadCount, const QString &lastReadInboxMessageId); void unreadCountUpdated(const int &unreadCount, const QString &lastReadInboxMessageId);
void lastReadSentMessageUpdated(const int &lastReadSentIndex); void lastReadSentMessageUpdated(const int &lastReadSentIndex);
void notificationSettingsUpdated();
public slots: public slots:
void handleMessagesReceived(const QVariantList &messages); void handleMessagesReceived(const QVariantList &messages);
@ -52,6 +54,7 @@ public slots:
void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, const int &unreadCount); void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, const int &unreadCount);
void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId); void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId);
void handleMessageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message); void handleMessageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message);
void handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings);
private: private:

View file

@ -77,6 +77,7 @@ void TDLibReceiver::processReceivedDocument(const QJsonDocument &receivedJsonDoc
if (objectTypeName == "updateMessageSendSucceeded") { this->processMessageSendSucceeded(receivedInformation); } if (objectTypeName == "updateMessageSendSucceeded") { this->processMessageSendSucceeded(receivedInformation); }
if (objectTypeName == "updateActiveNotifications") { this->processUpdateActiveNotifications(receivedInformation); } if (objectTypeName == "updateActiveNotifications") { this->processUpdateActiveNotifications(receivedInformation); }
if (objectTypeName == "updateNotificationGroup") { this->processUpdateNotificationGroup(receivedInformation); } if (objectTypeName == "updateNotificationGroup") { this->processUpdateNotificationGroup(receivedInformation); }
if (objectTypeName == "updateChatNotificationSettings") { this->processUpdateChatNotificationSettings(receivedInformation); }
} }
void TDLibReceiver::processUpdateOption(const QVariantMap &receivedInformation) void TDLibReceiver::processUpdateOption(const QVariantMap &receivedInformation)
@ -258,3 +259,10 @@ void TDLibReceiver::processUpdateNotification(const QVariantMap &receivedInforma
qDebug() << "[TDLibReceiver] Received notification update"; qDebug() << "[TDLibReceiver] Received notification update";
emit notificationUpdated(receivedInformation); emit notificationUpdated(receivedInformation);
} }
void TDLibReceiver::processUpdateChatNotificationSettings(const QVariantMap &receivedInformation)
{
QString chatId = receivedInformation.value("chat_id").toString();
qDebug() << "[TDLibReceiver] Received new notification settings for chat " << chatId;
emit chatNotificationSettingsUpdated(chatId, receivedInformation.value("notification_settings").toMap());
}

View file

@ -60,6 +60,7 @@ signals:
void activeNotificationsUpdated(const QVariantList notificationGroups); void activeNotificationsUpdated(const QVariantList notificationGroups);
void notificationGroupUpdated(const QVariantMap notificationGroupUpdate); void notificationGroupUpdated(const QVariantMap notificationGroupUpdate);
void notificationUpdated(const QVariantMap updatedNotification); void notificationUpdated(const QVariantMap updatedNotification);
void chatNotificationSettingsUpdated(const QString &chatId, const QVariantMap updatedChatNotificationSettings);
private: private:
void *tdLibClient; void *tdLibClient;
@ -91,6 +92,7 @@ private:
void processUpdateActiveNotifications(const QVariantMap &receivedInformation); void processUpdateActiveNotifications(const QVariantMap &receivedInformation);
void processUpdateNotificationGroup(const QVariantMap &receivedInformation); void processUpdateNotificationGroup(const QVariantMap &receivedInformation);
void processUpdateNotification(const QVariantMap &receivedInformation); void processUpdateNotification(const QVariantMap &receivedInformation);
void processUpdateChatNotificationSettings(const QVariantMap &receivedInformation);
}; };
#endif // TDLIBRECEIVER_H #endif // TDLIBRECEIVER_H

View file

@ -69,6 +69,7 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
connect(this->tdLibReceiver, SIGNAL(activeNotificationsUpdated(QVariantList)), this, SLOT(handleUpdateActiveNotifications(QVariantList))); connect(this->tdLibReceiver, SIGNAL(activeNotificationsUpdated(QVariantList)), this, SLOT(handleUpdateActiveNotifications(QVariantList)));
connect(this->tdLibReceiver, SIGNAL(notificationGroupUpdated(QVariantMap)), this, SLOT(handleUpdateNotificationGroup(QVariantMap))); connect(this->tdLibReceiver, SIGNAL(notificationGroupUpdated(QVariantMap)), this, SLOT(handleUpdateNotificationGroup(QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(notificationUpdated(QVariantMap)), this, SLOT(handleUpdateNotification(QVariantMap))); connect(this->tdLibReceiver, SIGNAL(notificationUpdated(QVariantMap)), this, SLOT(handleUpdateNotification(QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(chatNotificationSettingsUpdated(QString, QVariantMap)), this, SLOT(handleChatNotificationSettingsUpdated(QString, QVariantMap)));
this->tdLibReceiver->start(); this->tdLibReceiver->start();
@ -550,6 +551,11 @@ void TDLibWrapper::handleUpdateNotification(const QVariantMap updatedNotificatio
emit notificationUpdated(updatedNotification); emit notificationUpdated(updatedNotification);
} }
void TDLibWrapper::handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings)
{
emit chatNotificationSettingsUpdated(chatId, chatNotificationSettings);
}
void TDLibWrapper::setInitialParameters() void TDLibWrapper::setInitialParameters()
{ {
qDebug() << "[TDLibWrapper] Sending initial parameters to TD Lib"; qDebug() << "[TDLibWrapper] Sending initial parameters to TD Lib";

View file

@ -118,6 +118,7 @@ signals:
void activeNotificationsUpdated(const QVariantList notificationGroups); void activeNotificationsUpdated(const QVariantList notificationGroups);
void notificationGroupUpdated(const QVariantMap notificationGroupUpdate); void notificationGroupUpdated(const QVariantMap notificationGroupUpdate);
void notificationUpdated(const QVariantMap updatedNotification); void notificationUpdated(const QVariantMap updatedNotification);
void chatNotificationSettingsUpdated(const QString &chatId, const QVariantMap chatNotificationSettings);
public slots: public slots:
void handleVersionDetected(const QString &version); void handleVersionDetected(const QString &version);
@ -144,6 +145,7 @@ public slots:
void handleUpdateActiveNotifications(const QVariantList notificationGroups); void handleUpdateActiveNotifications(const QVariantList notificationGroups);
void handleUpdateNotificationGroup(const QVariantMap notificationGroupUpdate); void handleUpdateNotificationGroup(const QVariantMap notificationGroupUpdate);
void handleUpdateNotification(const QVariantMap updatedNotification); void handleUpdateNotification(const QVariantMap updatedNotification);
void handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings);
private: private:
void *tdLibClient; void *tdLibClient;

View file

@ -153,6 +153,14 @@
<source>Loading messages...</source> <source>Loading messages...</source>
<translation>Lade Nachrichten...</translation> <translation>Lade Nachrichten...</translation>
</message> </message>
<message>
<source>Unmute Chat</source>
<translation>Stummschaltung des Chats aufheben</translation>
</message>
<message>
<source>Mute Chat</source>
<translation>Chat stummschalten</translation>
</message>
</context> </context>
<context> <context>
<name>CoverPage</name> <name>CoverPage</name>
@ -360,11 +368,11 @@
</message> </message>
<message> <message>
<source>Unmute Chat</source> <source>Unmute Chat</source>
<translation type="unfinished"></translation> <translation>Stummschaltung des Chats aufheben</translation>
</message> </message>
<message> <message>
<source>Mute Chat</source> <source>Mute Chat</source>
<translation type="unfinished"></translation> <translation>Chat stummschalten</translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -153,6 +153,14 @@
<source>Loading messages...</source> <source>Loading messages...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Unmute Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mute Chat</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CoverPage</name> <name>CoverPage</name>