2024-08-27 14:35:52 +00:00
|
|
|
import QtQuick 2.15
|
|
|
|
import QtQuick.Controls 2.15
|
|
|
|
import QtQuick.Layouts 1.15
|
2021-09-15 10:59:01 +00:00
|
|
|
import Qt.labs.platform 1.1
|
2021-09-28 15:04:06 +00:00
|
|
|
|
2024-08-27 14:35:52 +00:00
|
|
|
import StatusQ 0.1
|
2021-07-06 09:42:51 +00:00
|
|
|
import StatusQ.Popups 0.1
|
|
|
|
|
2023-06-23 06:17:04 +00:00
|
|
|
import AppLayouts.Communities.popups 1.0
|
2024-08-27 14:35:52 +00:00
|
|
|
import shared.controls.chat.menuItems 1.0
|
|
|
|
import shared.popups 1.0
|
|
|
|
import utils 1.0
|
2021-10-25 09:57:09 +00:00
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusMenu {
|
2021-10-21 22:39:53 +00:00
|
|
|
id: root
|
2021-12-09 12:53:40 +00:00
|
|
|
|
|
|
|
property string currentFleet: ""
|
|
|
|
property bool isCommunityChat: false
|
2022-01-05 15:50:03 +00:00
|
|
|
property bool amIChatAdmin: false
|
2021-12-09 12:53:40 +00:00
|
|
|
property string chatId: ""
|
|
|
|
property string chatName: ""
|
2021-12-21 09:26:13 +00:00
|
|
|
property string chatDescription: ""
|
2022-03-07 14:56:05 +00:00
|
|
|
property string chatEmoji: ""
|
2022-03-10 19:28:37 +00:00
|
|
|
property string chatColor: ""
|
2021-12-09 12:53:40 +00:00
|
|
|
property string chatIcon: ""
|
|
|
|
property int chatType: -1
|
|
|
|
property bool chatMuted: false
|
2022-01-31 18:57:05 +00:00
|
|
|
property int channelPosition: -1
|
|
|
|
property string chatCategoryId: ""
|
2024-03-13 19:13:41 +00:00
|
|
|
property bool viewersCanPostReactions: true
|
2024-02-07 12:38:46 +00:00
|
|
|
property bool showDebugOptions: false
|
2024-02-06 09:31:36 +00:00
|
|
|
property alias deleteChatConfirmationDialog: deleteChatConfirmationDialogComponent
|
2024-03-18 17:33:07 +00:00
|
|
|
property bool hideIfPermissionsNotMet: false
|
2021-12-09 12:53:40 +00:00
|
|
|
|
2022-01-05 15:50:03 +00:00
|
|
|
signal displayProfilePopup(string publicKey)
|
2024-02-06 09:31:36 +00:00
|
|
|
signal displayEditChannelPopup(string chatId)
|
2021-12-21 09:26:13 +00:00
|
|
|
signal requestAllHistoricMessages(string chatId)
|
|
|
|
signal unmuteChat(string chatId)
|
2023-05-26 12:54:10 +00:00
|
|
|
signal muteChat(string chatId, int interval)
|
2021-12-21 09:26:13 +00:00
|
|
|
signal markAllMessagesRead(string chatId)
|
|
|
|
signal clearChatHistory(string chatId)
|
2021-12-09 12:53:40 +00:00
|
|
|
signal downloadMessages(string file)
|
2022-01-25 12:09:27 +00:00
|
|
|
signal deleteCommunityChat(string chatId)
|
2021-12-21 09:26:13 +00:00
|
|
|
signal leaveChat(string chatId)
|
2022-07-12 08:27:35 +00:00
|
|
|
signal updateGroupChatDetails(string chatId, string groupName, string groupColor, string groupImage)
|
2021-12-21 09:26:13 +00:00
|
|
|
|
2023-11-29 09:55:03 +00:00
|
|
|
signal requestMoreMessages(string chatId)
|
2022-02-15 21:00:05 +00:00
|
|
|
signal addRemoveGroupMember()
|
2021-07-06 09:42:51 +00:00
|
|
|
|
2022-05-13 17:11:02 +00:00
|
|
|
width: root.amIChatAdmin && (root.chatType === Constants.chatType.privateGroupChat) ? 207 : implicitWidth
|
|
|
|
|
2022-06-10 11:12:03 +00:00
|
|
|
ViewProfileMenuItem {
|
|
|
|
enabled: root.chatType === Constants.chatType.oneToOne
|
|
|
|
onTriggered: root.displayProfilePopup(root.chatId)
|
|
|
|
}
|
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2022-08-29 14:33:14 +00:00
|
|
|
text: root.amIChatAdmin ? qsTr("Add / remove from group") : qsTr("Add to group")
|
2022-05-13 17:11:02 +00:00
|
|
|
icon.name: "add-to-dm"
|
2022-08-29 14:33:14 +00:00
|
|
|
enabled: (root.chatType === Constants.chatType.privateGroupChat)
|
2022-05-13 17:11:02 +00:00
|
|
|
onTriggered: { root.addRemoveGroupMember() }
|
|
|
|
}
|
2022-02-15 21:00:05 +00:00
|
|
|
|
2023-10-24 15:13:25 +00:00
|
|
|
StatusAction {
|
|
|
|
text: qsTr("Copy channel link")
|
|
|
|
icon.name: "copy"
|
|
|
|
enabled: root.isCommunityChat
|
|
|
|
onTriggered: {
|
|
|
|
const link = Utils.getCommunityChannelShareLinkWithChatId(root.chatId)
|
2024-08-27 14:35:52 +00:00
|
|
|
ClipboardUtils.setText(link)
|
2023-10-24 15:13:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-06 09:42:51 +00:00
|
|
|
StatusMenuSeparator {
|
2023-10-24 15:13:25 +00:00
|
|
|
visible: root.chatType === Constants.chatType.oneToOne || root.chatType === Constants.chatType.privateGroupChat || root.isCommunityChat
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2022-09-01 07:53:22 +00:00
|
|
|
objectName: "editNameAndImageMenuItem"
|
2022-07-12 08:27:35 +00:00
|
|
|
text: qsTr("Edit name and image")
|
|
|
|
icon.name: "edit_pencil"
|
2022-03-21 20:51:54 +00:00
|
|
|
enabled: root.chatType === Constants.chatType.privateGroupChat
|
2022-02-15 21:00:05 +00:00
|
|
|
onTriggered: {
|
2022-04-12 18:54:01 +00:00
|
|
|
Global.openPopup(renameGroupPopupComponent, {
|
2022-07-12 08:27:35 +00:00
|
|
|
activeGroupName: root.chatName,
|
2022-08-11 10:58:09 +00:00
|
|
|
activeGroupColor: root.chatColor,
|
|
|
|
activeGroupImageData: root.chatIcon
|
2022-02-15 21:00:05 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-12 18:54:01 +00:00
|
|
|
Component {
|
|
|
|
id: renameGroupPopupComponent
|
|
|
|
RenameGroupPopup {
|
2022-07-12 08:27:35 +00:00
|
|
|
onUpdateGroupChatDetails: {
|
|
|
|
root.updateGroupChatDetails(root.chatId, groupName, groupColor, groupImage)
|
2022-04-12 18:54:01 +00:00
|
|
|
close()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-10 11:12:03 +00:00
|
|
|
MuteChatMenuItem {
|
2023-05-26 12:54:10 +00:00
|
|
|
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"
|
2021-07-06 09:42:51 +00:00
|
|
|
onTriggered: {
|
2023-05-26 12:54:10 +00:00
|
|
|
root.unmuteChat(root.chatId)
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2022-07-28 20:14:29 +00:00
|
|
|
objectName: "chatMarkAsReadMenuItem"
|
2022-04-04 11:26:30 +00:00
|
|
|
text: qsTr("Mark as Read")
|
2021-07-06 09:42:51 +00:00
|
|
|
icon.name: "checkmark-circle"
|
2021-12-09 12:53:40 +00:00
|
|
|
onTriggered: {
|
2021-12-08 11:10:34 +00:00
|
|
|
root.markAllMessagesRead(root.chatId)
|
2021-12-09 12:53:40 +00:00
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2024-03-12 14:24:55 +00:00
|
|
|
|
|
|
|
StatusMenu {
|
|
|
|
title: qsTr("Debug actions")
|
2024-02-07 12:38:46 +00:00
|
|
|
enabled: root.showDebugOptions
|
2024-03-12 14:24:55 +00:00
|
|
|
|
|
|
|
StatusAction {
|
|
|
|
text: root.isCommunityChat ? qsTr("Copy channel ID") : qsTr("Copy chat ID")
|
|
|
|
icon.name: "copy"
|
2024-08-27 14:35:52 +00:00
|
|
|
onTriggered: ClipboardUtils.setText(root.chatId)
|
2024-03-12 14:24:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
StatusAction {
|
|
|
|
objectName: "chatFetchMessagesMenuItem"
|
|
|
|
text: qsTr("Fetch messages")
|
|
|
|
icon.name: "download"
|
|
|
|
onTriggered: {
|
|
|
|
root.requestMoreMessages(root.chatId)
|
|
|
|
}
|
2023-11-29 09:55:03 +00:00
|
|
|
}
|
|
|
|
}
|
2022-02-15 21:00:05 +00:00
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2022-07-25 17:15:02 +00:00
|
|
|
objectName: "editChannelMenuItem"
|
2022-04-04 11:26:30 +00:00
|
|
|
text: qsTr("Edit Channel")
|
2021-07-06 09:42:51 +00:00
|
|
|
icon.name: "edit"
|
2022-01-05 15:50:03 +00:00
|
|
|
enabled: root.isCommunityChat && root.amIChatAdmin
|
2021-12-21 09:26:13 +00:00
|
|
|
onTriggered: {
|
2024-02-06 09:31:36 +00:00
|
|
|
root.displayEditChannelPopup(root.chatId);
|
2021-12-21 09:26:13 +00:00
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2021-09-15 10:59:01 +00:00
|
|
|
text: qsTr("Download")
|
2021-10-20 09:50:50 +00:00
|
|
|
enabled: localAccountSensitiveSettings.downloadChannelMessagesEnabled
|
2021-09-15 10:59:01 +00:00
|
|
|
icon.name: "download"
|
2022-08-01 18:34:31 +00:00
|
|
|
onTriggered: downloadDialog.open()
|
2021-09-15 10:59:01 +00:00
|
|
|
}
|
|
|
|
|
2021-07-06 09:42:51 +00:00
|
|
|
StatusMenuSeparator {
|
2023-08-22 18:24:06 +00:00
|
|
|
visible: clearHistoryMenuItem.enabled || deleteOrLeaveMenuItem.enabled
|
|
|
|
}
|
|
|
|
|
|
|
|
StatusAction {
|
2023-08-31 12:16:29 +00:00
|
|
|
id: clearHistoryMenuItem
|
2023-08-22 18:24:06 +00:00
|
|
|
objectName: "clearHistoryMenuItem"
|
|
|
|
text: qsTr("Clear History")
|
|
|
|
icon.name: "close-circle"
|
|
|
|
type: deleteOrLeaveMenuItem.enabled ? StatusAction.Type.Normal : StatusAction.Type.Danger
|
|
|
|
onTriggered: {
|
|
|
|
Global.openPopup(clearChatConfirmationDialogComponent);
|
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
StatusAction {
|
2021-07-06 09:42:51 +00:00
|
|
|
id: deleteOrLeaveMenuItem
|
2023-08-31 12:16:29 +00:00
|
|
|
objectName: "deleteOrLeaveMenuItem"
|
2021-07-30 16:14:10 +00:00
|
|
|
text: {
|
2021-12-21 09:26:13 +00:00
|
|
|
if (root.isCommunityChat) {
|
2021-07-30 16:14:10 +00:00
|
|
|
return qsTr("Delete Channel")
|
|
|
|
}
|
2022-02-15 21:00:05 +00:00
|
|
|
if (root.chatType === Constants.chatType.privateGroupChat) {
|
|
|
|
return qsTr("Leave group")
|
|
|
|
}
|
2021-12-09 12:53:40 +00:00
|
|
|
return root.chatType === Constants.chatType.oneToOne ?
|
2023-11-16 18:45:01 +00:00
|
|
|
qsTr("Close Chat") :
|
2022-09-22 22:01:29 +00:00
|
|
|
qsTr("Leave Chat")
|
2021-07-30 16:14:10 +00:00
|
|
|
}
|
2022-09-22 22:01:29 +00:00
|
|
|
icon.name: root.chatType === Constants.chatType.oneToOne || root.isCommunityChat ? "delete" : "arrow-left"
|
2021-12-21 09:26:13 +00:00
|
|
|
icon.width: root.chatType === Constants.chatType.oneToOne || root.isCommunityChat ? 18 : 14
|
2021-07-06 09:42:51 +00:00
|
|
|
|
2022-12-01 16:58:37 +00:00
|
|
|
type: StatusAction.Type.Danger
|
2021-07-06 09:42:51 +00:00
|
|
|
onTriggered: {
|
2022-02-15 21:00:05 +00:00
|
|
|
if (root.chatType === Constants.chatType.privateGroupChat) {
|
2023-08-31 13:42:51 +00:00
|
|
|
Global.openPopup(leaveGroupConfirmationDialogComponent);
|
2022-02-15 21:00:05 +00:00
|
|
|
} else {
|
|
|
|
Global.openPopup(deleteChatConfirmationDialogComponent);
|
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2022-01-05 15:50:03 +00:00
|
|
|
enabled: !root.isCommunityChat || root.amIChatAdmin
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
|
2021-09-15 10:59:01 +00:00
|
|
|
FileDialog {
|
2022-08-01 18:34:31 +00:00
|
|
|
id: downloadDialog
|
2021-09-15 10:59:01 +00:00
|
|
|
acceptLabel: qsTr("Save")
|
|
|
|
fileMode: FileDialog.SaveFile
|
|
|
|
title: qsTr("Download messages")
|
|
|
|
currentFile: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) + "/messages.json"
|
|
|
|
defaultSuffix: "json"
|
2021-12-09 12:53:40 +00:00
|
|
|
|
2021-09-15 10:59:01 +00:00
|
|
|
onAccepted: {
|
2022-08-01 18:34:31 +00:00
|
|
|
root.downloadMessages(downloadDialog.currentFile)
|
2021-09-15 10:59:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-22 18:24:06 +00:00
|
|
|
Component {
|
|
|
|
id: clearChatConfirmationDialogComponent
|
|
|
|
ConfirmationDialog {
|
|
|
|
confirmButtonObjectName: "clearChatConfirmationDialogClearButton"
|
|
|
|
headerSettings.title: qsTr("Clear chat history")
|
|
|
|
confirmationText: qsTr("Are you sure you want to clear chat history for <b>%1</b>?").arg(root.chatName)
|
|
|
|
confirmButtonLabel: qsTr("Clear")
|
|
|
|
showCancelButton: true
|
|
|
|
cancelBtnType: "normal"
|
|
|
|
|
|
|
|
onClosed: {
|
|
|
|
destroy()
|
|
|
|
}
|
|
|
|
onCancelButtonClicked: {
|
|
|
|
close()
|
|
|
|
}
|
|
|
|
onConfirmButtonClicked: {
|
|
|
|
root.clearChatHistory(root.chatId)
|
|
|
|
close()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-31 13:42:51 +00:00
|
|
|
Component {
|
|
|
|
id: leaveGroupConfirmationDialogComponent
|
|
|
|
ConfirmationDialog {
|
|
|
|
confirmButtonObjectName: "leaveGroupConfirmationDialogLeaveButton"
|
|
|
|
headerSettings.title: qsTr("Leave group")
|
|
|
|
confirmationText: qsTr("Are you sure you want to leave group chat <b>%1</b>?").arg(root.chatName)
|
|
|
|
confirmButtonLabel: qsTr("Leave")
|
|
|
|
showCancelButton: true
|
|
|
|
cancelBtnType: "normal"
|
|
|
|
|
|
|
|
onClosed: {
|
|
|
|
destroy()
|
|
|
|
}
|
|
|
|
onCancelButtonClicked: {
|
|
|
|
close()
|
|
|
|
}
|
|
|
|
onConfirmButtonClicked: {
|
|
|
|
root.leaveChat(root.chatId)
|
|
|
|
close()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-06 09:42:51 +00:00
|
|
|
Component {
|
|
|
|
id: deleteChatConfirmationDialogComponent
|
|
|
|
ConfirmationDialog {
|
2022-08-01 18:34:31 +00:00
|
|
|
confirmButtonObjectName: "deleteChatConfirmationDialogDeleteButton"
|
2023-05-23 12:46:16 +00:00
|
|
|
headerSettings.title: root.isCommunityChat ? qsTr("Delete #%1").arg(root.chatName) :
|
2021-12-09 12:53:40 +00:00
|
|
|
root.chatType === Constants.chatType.oneToOne ?
|
2023-11-16 18:45:01 +00:00
|
|
|
qsTr("Close chat") :
|
2022-04-04 11:26:30 +00:00
|
|
|
qsTr("Leave chat")
|
2023-07-13 13:24:01 +00:00
|
|
|
confirmButtonLabel: root.isCommunityChat ? qsTr("Delete") : headerSettings.title
|
2021-12-21 09:26:13 +00:00
|
|
|
confirmationText: root.isCommunityChat ? qsTr("Are you sure you want to delete #%1 channel?").arg(root.chatName) :
|
2021-12-09 12:53:40 +00:00
|
|
|
root.chatType === Constants.chatType.oneToOne ?
|
2023-11-16 18:45:01 +00:00
|
|
|
qsTr("Are you sure you want to close this chat?"):
|
2021-07-30 16:14:10 +00:00
|
|
|
qsTr("Are you sure you want to leave this chat?")
|
2023-08-22 18:24:06 +00:00
|
|
|
showCancelButton: true
|
|
|
|
cancelBtnType: "normal"
|
2021-09-14 09:58:20 +00:00
|
|
|
|
2021-07-06 09:42:51 +00:00
|
|
|
onClosed: {
|
|
|
|
destroy()
|
|
|
|
}
|
2021-09-14 09:58:20 +00:00
|
|
|
onCancelButtonClicked: {
|
|
|
|
close()
|
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
onConfirmButtonClicked: {
|
2022-01-18 15:56:57 +00:00
|
|
|
if(root.isCommunityChat)
|
2022-01-25 12:09:27 +00:00
|
|
|
root.deleteCommunityChat(root.chatId)
|
2021-12-21 09:26:13 +00:00
|
|
|
else
|
|
|
|
root.leaveChat(root.chatId)
|
2021-12-09 12:53:40 +00:00
|
|
|
|
2021-12-21 09:26:13 +00:00
|
|
|
close()
|
|
|
|
}
|
2021-07-06 09:42:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|