feat(mute): Adds intervals for muting channels and chats

Part of: #9369
This commit is contained in:
Boris Melnik 2023-05-26 15:54:10 +03:00
parent 8098775280
commit 91bdb5824b
17 changed files with 92 additions and 35 deletions

View File

@ -210,8 +210,8 @@ proc isUsersListAvailable*(self: Controller): bool =
proc getMyMutualContacts*(self: Controller): seq[ContactsDto] = proc getMyMutualContacts*(self: Controller): seq[ContactsDto] =
return self.contactService.getContactsByGroup(ContactsGroup.MyMutualContacts) return self.contactService.getContactsByGroup(ContactsGroup.MyMutualContacts)
proc muteChat*(self: Controller) = proc muteChat*(self: Controller, interval: int) =
self.chatService.muteChat(self.chatId) self.chatService.muteChat(self.chatId, interval)
proc unmuteChat*(self: Controller) = proc unmuteChat*(self: Controller) =
self.chatService.unmuteChat(self.chatId) self.chatService.unmuteChat(self.chatId)

View File

@ -89,7 +89,7 @@ method getMyChatId*(self: AccessInterface): string {.base.} =
method isMyContact*(self: AccessInterface, contactId: string): bool {.base.} = method isMyContact*(self: AccessInterface, contactId: string): bool {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")
method muteChat*(self: AccessInterface) {.base.} = method muteChat*(self: AccessInterface, interval: int) {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")
method unmuteChat*(self: AccessInterface) {.base.} = method unmuteChat*(self: AccessInterface) {.base.} =

View File

@ -260,8 +260,8 @@ method getMyChatId*(self: Module): string =
method isMyContact*(self: Module, contactId: string): bool = method isMyContact*(self: Module, contactId: string): bool =
self.controller.getMyMutualContacts().filter(x => x.id == contactId).len > 0 self.controller.getMyMutualContacts().filter(x => x.id == contactId).len > 0
method muteChat*(self: Module) = method muteChat*(self: Module, interval: int) =
self.controller.muteChat() self.controller.muteChat(interval)
method unmuteChat*(self: Module) = method unmuteChat*(self: Module) =
self.controller.unmuteChat() self.controller.unmuteChat()

View File

@ -74,8 +74,8 @@ QtObject:
proc isMyContact*(self: View, contactId: string): bool {.slot.} = proc isMyContact*(self: View, contactId: string): bool {.slot.} =
return self.delegate.isMyContact(contactId) return self.delegate.isMyContact(contactId)
proc muteChat*(self: View) {.slot.} = proc muteChat*(self: View, interval: int) {.slot.} =
self.delegate.muteChat() self.delegate.muteChat(interval)
proc unmuteChat*(self: View) {.slot.} = proc unmuteChat*(self: View) {.slot.} =
self.delegate.unmuteChat() self.delegate.unmuteChat()

View File

@ -440,8 +440,8 @@ proc switchToOrCreateOneToOneChat*(self: Controller, chatId: string, ensName: st
proc leaveChat*(self: Controller, chatId: string) = proc leaveChat*(self: Controller, chatId: string) =
self.chatService.leaveChat(chatId) self.chatService.leaveChat(chatId)
proc muteChat*(self: Controller, chatId: string) = proc muteChat*(self: Controller, chatId: string, interval: int) =
self.chatService.muteChat(chatId) self.chatService.muteChat(chatId, interval)
proc unmuteChat*(self: Controller, chatId: string) = proc unmuteChat*(self: Controller, chatId: string) =
self.chatService.unmuteChat(chatId) self.chatService.unmuteChat(chatId)

View File

@ -198,7 +198,7 @@ method removeCommunityChat*(self: AccessInterface, chatId: string) {.base.} =
method getActiveChatId*(self: AccessInterface): string {.base.} = method getActiveChatId*(self: AccessInterface): string {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")
method muteChat*(self: AccessInterface, chatId: string) {.base.} = method muteChat*(self: AccessInterface, chatId: string, interval: int) {.base.} =
raise newException(ValueError, "No implementation available") raise newException(ValueError, "No implementation available")
method unmuteChat*(self: AccessInterface, chatId: string) {.base.} = method unmuteChat*(self: AccessInterface, chatId: string) {.base.} =

View File

@ -763,8 +763,8 @@ method createOneToOneChat*(self: Module, communityID: string, chatId: string, en
method leaveChat*(self: Module, chatId: string) = method leaveChat*(self: Module, chatId: string) =
self.controller.leaveChat(chatId) self.controller.leaveChat(chatId)
method muteChat*(self: Module, chatId: string) = method muteChat*(self: Module, chatId: string, interval: int) =
self.controller.muteChat(chatId) self.controller.muteChat(chatId, interval)
method unmuteChat*(self: Module, chatId: string) = method unmuteChat*(self: Module, chatId: string) =
self.controller.unmuteChat(chatId) self.controller.unmuteChat(chatId)

View File

@ -194,8 +194,8 @@ QtObject:
return return
return $jsonObj return $jsonObj
proc muteChat*(self: View, chatId: string) {.slot.} = proc muteChat*(self: View, chatId: string, interval: int) {.slot.} =
self.delegate.muteChat(chatId) self.delegate.muteChat(chatId, interval)
proc unmuteChat*(self: View, chatId: string) {.slot.} = proc unmuteChat*(self: View, chatId: string) {.slot.} =
self.delegate.unmuteChat(chatId) self.delegate.unmuteChat(chatId)

View File

@ -573,13 +573,13 @@ QtObject:
except Exception as e: except Exception as e:
error "Error requesting transaction", msg = e.msg error "Error requesting transaction", msg = e.msg
proc muteChat*(self: Service, chatId: string) = proc muteChat*(self: Service, chatId: string, interval: int) =
try: try:
if(chatId.len == 0): if(chatId.len == 0):
error "error trying to mute chat with an empty id" error "error trying to mute chat with an empty id"
return return
let response = status_chat.muteChat(chatId) let response = status_chat.muteChat(chatId, interval)
if(not response.error.isNil): if(not response.error.isNil):
let msg = response.error.message & " chatId=" & chatId let msg = response.error.message & " chatId=" & chatId
error "error while mute chat ", msg error "error while mute chat ", msg

View File

@ -93,9 +93,13 @@ proc sendImages*(chatId: string, images: var seq[string], msg: string, replyTo:
) )
callPrivateRPC("sendChatMessages".prefix, %* [imagesJson]) callPrivateRPC("sendChatMessages".prefix, %* [imagesJson])
proc muteChat*(chatId: string): RpcResponse[JsonNode] {.raises: [Exception].} = proc muteChat*(chatId: string, interval: int): RpcResponse[JsonNode] {.raises: [Exception].} =
let payload = %* [chatId] result = callPrivateRPC("muteChatV2".prefix, %* [
result = callPrivateRPC("muteChat".prefix, payload) {
"chatId": chatId,
"mutedType": interval,
}
])
proc unmuteChat*(chatId: string): RpcResponse[JsonNode] {.raises: [Exception].} = proc unmuteChat*(chatId: string): RpcResponse[JsonNode] {.raises: [Exception].} =
let payload = %* [chatId] let payload = %* [chatId]

View File

@ -84,9 +84,12 @@ MenuItem {
rotation: 0 rotation: 0
// Link to standard Qt properties. Not because it's a good idea, // Link to standard Qt properties. Not because it's a good idea,
// but because it we use it in some places and it will make refactor easier. // but because it we use it in some places and it will make refactor easier.
name: d.isSubMenu ? "" : (d.hasAction ? root.action.icon.name : root.icon.name) name: d.isSubMenu ? (d.isStatusSubMenu ? root.subMenu.assetSettings.name : "")
source: d.isSubMenu ? "" : (d.hasAction ? root.action.icon.source : root.icon.source) : (d.hasAction ? root.action.icon.name : root.icon.name)
color: d.isSubMenu ? "" : (d.hasAction ? root.action.icon.color : root.icon.color) source: d.isSubMenu ? (d.isStatusSubMenu ? root.subMenu.assetSettings.source : "")
: (d.hasAction ? root.action.icon.source : root.icon.source)
color: d.isSubMenu ? (d.isStatusSubMenu ? root.subMenu.assetSettings.color : "")
: (d.hasAction ? root.action.icon.color : root.icon.color)
} }
readonly property StatusFontSettings defaultFontSettings: StatusFontSettings { readonly property StatusFontSettings defaultFontSettings: StatusFontSettings {

View File

@ -32,7 +32,7 @@ StatusMenu {
signal displayProfilePopup(string publicKey) signal displayProfilePopup(string publicKey)
signal requestAllHistoricMessages(string chatId) signal requestAllHistoricMessages(string chatId)
signal unmuteChat(string chatId) signal unmuteChat(string chatId)
signal muteChat(string chatId) signal muteChat(string chatId, int interval)
signal markAllMessagesRead(string chatId) signal markAllMessagesRead(string chatId)
signal clearChatHistory(string chatId) signal clearChatHistory(string chatId)
signal downloadMessages(string file) signal downloadMessages(string file)
@ -89,12 +89,20 @@ StatusMenu {
} }
MuteChatMenuItem { MuteChatMenuItem {
muted: root.chatMuted enabled: !root.chatMuted
isCommunityChat: root.isCommunityChat
onMuteTriggered: {
root.muteChat(root.chatId, interval)
}
}
StatusAction {
enabled: root.chatMuted
text: root.isCommunityChat ? qsTr("Unmute Channel") : qsTr("Unmute Chat")
icon.name: "notification"
onTriggered: { onTriggered: {
if(root.chatMuted) root.unmuteChat(root.chatId)
root.unmuteChat(root.chatId)
else
root.muteChat(root.chatId)
} }
} }

View File

@ -163,7 +163,7 @@ Item {
console.debug("error on mute chat from context menu - chat content module is not set") console.debug("error on mute chat from context menu - chat content module is not set")
return return
} }
chatContentModule.muteChat() chatContentModule.muteChat(interval)
} }
onUnmuteChat: { onUnmuteChat: {

View File

@ -344,7 +344,7 @@ Item {
} }
onMuteChat: { onMuteChat: {
root.communitySectionModule.muteChat(chatId) root.communitySectionModule.muteChat(chatId, interval)
} }
onUnmuteChat: { onUnmuteChat: {

View File

@ -162,7 +162,7 @@ Item {
} }
onMuteChat: { onMuteChat: {
root.chatSectionModule.muteChat(chatId) root.chatSectionModule.muteChat(chatId, interval)
} }
onUnmuteChat: { onUnmuteChat: {

View File

@ -1,10 +1,43 @@
import QtQuick 2.14 import QtQuick 2.14
import QtQuick.Controls 2.14
import utils 1.0
import StatusQ.Popups 0.1 import StatusQ.Popups 0.1
import shared.controls.chat.menuItems 1.0
StatusAction {
property bool muted: false
text: muted ? qsTr("Unmute Chat") : qsTr("Mute Chat") StatusMenu {
icon.name: "notification" property bool isCommunityChat: false
signal muteTriggered(interval: int)
title: isCommunityChat ? qsTr("Mute Channel") : qsTr("Mute Chat")
assetSettings.name: "notification"
StatusAction {
text: qsTr("For 15 mins")
onTriggered: muteTriggered(Constants.MutingVariations.For15min)
}
StatusAction {
text: qsTr("For 1 hour")
onTriggered: muteTriggered(Constants.MutingVariations.For1hr)
}
StatusAction {
text: qsTr("For 8 hours")
onTriggered: muteTriggered(Constants.MutingVariations.For8hr)
}
StatusAction {
text: qsTr("For 7 days")
onTriggered: muteTriggered(Constants.MutingVariations.For1week)
}
StatusAction {
text: qsTr("Until you turn it back on")
onTriggered: muteTriggered(Constants.MutingVariations.TillUnmuted)
}
} }

View File

@ -997,4 +997,13 @@ QtObject {
RejectedMembers, RejectedMembers,
BannedMembers BannedMembers
} }
enum MutingVariations {
For15min = 1,
For1hr = 2,
For8hr = 3,
For1week = 4,
TillUnmuted = 5,
For1min = 6
}
} }