parent
95326620c3
commit
6f14921c9b
|
@ -125,7 +125,7 @@ proc init*(self: Controller) =
|
|||
self.delegate.onChatRenamed(args.newName)
|
||||
|
||||
self.events.on(SIGNAL_CHAT_UPDATE) do(e: Args):
|
||||
var args = ChatUpdateArgsNew(e)
|
||||
var args = ChatUpdateArgs(e)
|
||||
for chat in args.chats:
|
||||
if self.chatId == chat.id:
|
||||
self.delegate.onChatEdited(chat)
|
||||
|
|
|
@ -113,7 +113,7 @@ proc init*(self: Controller) =
|
|||
self.delegate.onChatMembersAdded(args.ids)
|
||||
|
||||
self.events.on(SIGNAL_CHAT_UPDATE) do(e: Args):
|
||||
var args = ChatUpdateArgsNew(e)
|
||||
var args = ChatUpdateArgs(e)
|
||||
for chat in args.chats:
|
||||
if (chat.id == self.chatId):
|
||||
self.delegate.onChatUpdated(chat)
|
||||
|
|
|
@ -105,13 +105,20 @@ proc init*(self: Controller) =
|
|||
self.delegate.onContactUnblocked(args.contactId)
|
||||
|
||||
self.events.on(SIGNAL_CHAT_UPDATE) do(e: Args):
|
||||
var args = ChatUpdateArgsNew(e)
|
||||
var args = ChatUpdateArgs(e)
|
||||
for chat in args.chats:
|
||||
let belongsToCommunity = chat.communityId.len > 0
|
||||
self.delegate.addChatIfDontExist(chat, belongsToCommunity, self.events, self.settingsService,
|
||||
self.contactService, self.chatService, self.communityService, self.messageService, self.gifService,
|
||||
self.mailserversService, setChatAsActive = false)
|
||||
|
||||
self.events.on(SIGNAL_CHAT_CREATED) do(e: Args):
|
||||
var args = CreatedChatArgs(e)
|
||||
let belongsToCommunity = args.chat.communityId.len > 0
|
||||
self.delegate.addChatIfDontExist(args.chat, belongsToCommunity, self.events, self.settingsService,
|
||||
self.contactService, self.chatService, self.communityService, self.messageService, self.gifService,
|
||||
self.mailserversService, setChatAsActive = true)
|
||||
|
||||
if (self.isCommunitySection):
|
||||
self.events.on(SIGNAL_COMMUNITY_CHANNEL_CREATED) do(e:Args):
|
||||
let args = CommunityChatArgs(e)
|
||||
|
|
|
@ -796,16 +796,14 @@ method addChatIfDontExist*(self: Module,
|
|||
gifService: gif_service.Service,
|
||||
mailserversService: mailservers_service.Service,
|
||||
setChatAsActive: bool = true) =
|
||||
|
||||
let sectionId = self.controller.getMySectionId()
|
||||
if(belongsToCommunity and sectionId != chat.communityId or
|
||||
not belongsToCommunity and sectionId != singletonInstance.userProfile.getPubKey()):
|
||||
return
|
||||
|
||||
if self.doesCatOrChatExist(chat.id):
|
||||
if chat.chatType != ChatType.OneToOne:
|
||||
if(chat.chatType != ChatType.OneToOne):
|
||||
self.onChatRenamed(chat.id, chat.name)
|
||||
return
|
||||
|
||||
self.addNewChat(chat, belongsToCommunity, events, settingsService, contactService, chatService,
|
||||
communityService, messageService, gifService, mailserversService, setChatAsActive)
|
||||
|
|
|
@ -75,7 +75,7 @@ proc init*(self: Controller) =
|
|||
self.delegate.removeItemWithId(args.chatId)
|
||||
|
||||
self.events.on(SIGNAL_CHAT_UPDATE) do(e: Args):
|
||||
var args = ChatUpdateArgsNew(e)
|
||||
var args = ChatUpdateArgs(e)
|
||||
for chat in args.chats:
|
||||
let belongsToCommunity = chat.communityId.len > 0
|
||||
self.delegate.addChat(chat)
|
||||
|
|
|
@ -186,7 +186,7 @@ QtObject:
|
|||
|
||||
let (chats, messages) = self.chatService.parseChatResponse(response)
|
||||
self.events.emit(chat_service.SIGNAL_CHAT_UPDATE,
|
||||
ChatUpdateArgsNew(messages: messages, chats: chats))
|
||||
ChatUpdateArgs(messages: messages, chats: chats))
|
||||
|
||||
except Exception as e:
|
||||
error "Error marking as accepted", msg = e.msg
|
||||
|
|
|
@ -24,8 +24,7 @@ logScope:
|
|||
include ../../common/json_utils
|
||||
|
||||
type
|
||||
# TODO remove New when refactored
|
||||
ChatUpdateArgsNew* = ref object of Args
|
||||
ChatUpdateArgs* = ref object of Args
|
||||
chats*: seq[ChatDto]
|
||||
messages*: seq[MessageDto]
|
||||
# TODO refactor that part
|
||||
|
@ -37,6 +36,9 @@ type
|
|||
# statusUpdates*: seq[StatusUpdate]
|
||||
# deletedMessages*: seq[RemovedMessage]
|
||||
|
||||
CreatedChatArgs* = ref object of Args
|
||||
chat*: ChatDto
|
||||
|
||||
ChatArgs* = ref object of Args
|
||||
communityId*: string # This param should be renamed to `sectionId`, that will avoid some confusions one may have.
|
||||
chatId*: string
|
||||
|
@ -86,6 +88,7 @@ const SIGNAL_CHAT_MEMBER_REMOVED* = "chatMemberRemoved"
|
|||
const SIGNAL_CHAT_MEMBER_UPDATED* = "chatMemberUpdated"
|
||||
const SIGNAL_CHAT_SWITCH_TO_OR_CREATE_1_1_CHAT* = "switchToOrCreateOneToOneChat"
|
||||
const SIGNAL_CHAT_ADDED_OR_UPDATED* = "chatAddedOrUpdated"
|
||||
const SIGNAL_CHAT_CREATED* = "chatCreated"
|
||||
|
||||
QtObject:
|
||||
type Service* = ref object of QObject
|
||||
|
@ -117,7 +120,7 @@ QtObject:
|
|||
if (chatDto.active):
|
||||
chats.add(chatDto)
|
||||
self.updateOrAddChat(chatDto)
|
||||
self.events.emit(SIGNAL_CHAT_UPDATE, ChatUpdateArgsNew(messages: receivedData.messages, chats: chats))
|
||||
self.events.emit(SIGNAL_CHAT_UPDATE, ChatUpdateArgs(messages: receivedData.messages, chats: chats))
|
||||
|
||||
if (receivedData.clearedHistories.len > 0):
|
||||
for clearedHistoryDto in receivedData.clearedHistories:
|
||||
|
@ -227,7 +230,7 @@ QtObject:
|
|||
|
||||
proc emitUpdate(self: Service, response: RpcResponse[JsonNode]) =
|
||||
var (chats, messages) = self.parseChatResponse(response)
|
||||
self.events.emit(SIGNAL_CHAT_UPDATE, ChatUpdateArgsNew(messages: messages, chats: chats))
|
||||
self.events.emit(SIGNAL_CHAT_UPDATE, ChatUpdateArgs(messages: messages, chats: chats))
|
||||
|
||||
proc getAllChats*(self: Service): seq[ChatDto] =
|
||||
return toSeq(self.chats.values)
|
||||
|
@ -283,6 +286,8 @@ QtObject:
|
|||
|
||||
let response = status_group_chat.createOneToOneChat(communityID, chatId, ensName)
|
||||
result = self.createChatFromResponse(response)
|
||||
if result.success:
|
||||
self.events.emit(SIGNAL_CHAT_CREATED, CreatedChatArgs(chat: result.chatDto))
|
||||
except Exception as e:
|
||||
let errDesription = e.msg
|
||||
error "error: ", errDesription
|
||||
|
@ -517,6 +522,8 @@ QtObject:
|
|||
try:
|
||||
let response = status_group_chat.createGroupChat(communityID, name, members)
|
||||
result = self.createChatFromResponse(response)
|
||||
if result.success:
|
||||
self.events.emit(SIGNAL_CHAT_CREATED, CreatedChatArgs(chat: result.chatDto))
|
||||
except Exception as e:
|
||||
error "error while creating group chat", msg = e.msg
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@ Item {
|
|||
|
||||
property var rootStore
|
||||
property var contactsStore
|
||||
property var chatSectionModule
|
||||
property var emojiPopup
|
||||
|
||||
property Component pinnedMessagesPopupComponent
|
||||
|
@ -166,12 +165,6 @@ Item {
|
|||
onShareChatKeyClicked: Global.openProfilePopup(userProfile.pubKey);
|
||||
}
|
||||
|
||||
CreateChatView {
|
||||
rootStore: root.rootStore
|
||||
emojiPopup: root.emojiPopup
|
||||
visible: mainModule.activeSection.sectionType === Constants.appSection.chat && root.rootStore.openCreateChat
|
||||
}
|
||||
|
||||
// This is kind of a solution for applying backend refactored changes with the minimal qml changes.
|
||||
// The best would be if we made qml to follow the struct we have on the backend side.
|
||||
Repeater {
|
||||
|
@ -288,7 +281,6 @@ Item {
|
|||
Component.onCompleted: {
|
||||
parentModule.prepareChatContentModuleForChatId(model.itemId)
|
||||
chatContentModule = parentModule.getChatContentModule()
|
||||
|
||||
root.checkForCreateChatOptions(model.itemId)
|
||||
}
|
||||
}
|
||||
|
@ -409,7 +401,7 @@ Item {
|
|||
height: root.height - 56 * 2 // TODO get screen size // Taken from old code top bar height was fixed there to 56
|
||||
y: 56
|
||||
store: root.rootStore
|
||||
chatSectionModule: root.chatSectionModule
|
||||
chatSectionModule: root.parentModule
|
||||
messageContextMenu: contextmenu
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,13 @@ StatusAppThreePanelLayout {
|
|||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Global
|
||||
onCloseCreateChatView: {
|
||||
root.rootStore.openCreateChat = false
|
||||
}
|
||||
}
|
||||
|
||||
leftPanel: Loader {
|
||||
id: contactColumnLoader
|
||||
sourceComponent: root.rootStore.chatCommunitySectionModule.isCommunity()?
|
||||
|
@ -65,7 +72,6 @@ StatusAppThreePanelLayout {
|
|||
parentModule: root.rootStore.chatCommunitySectionModule
|
||||
rootStore: root.rootStore
|
||||
contactsStore: root.contactsStore
|
||||
chatSectionModule: root.rootStore.chatCommunitySectionModule
|
||||
pinnedMessagesPopupComponent: root.pinnedMessagesListPopupComponent
|
||||
stickersLoaded: root.stickersLoaded
|
||||
emojiPopup: root.emojiPopup
|
||||
|
|
|
@ -4,10 +4,12 @@ import QtQuick.Dialogs 1.2
|
|||
import QtGraphicalEffects 1.13
|
||||
import QtQuick.Layouts 1.13
|
||||
|
||||
import StatusQ.Core 0.1
|
||||
import StatusQ.Core.Theme 0.1
|
||||
import StatusQ.Controls 0.1
|
||||
import StatusQ.Components 0.1
|
||||
import StatusQ.Popups 0.1
|
||||
|
||||
|
||||
import utils 1.0
|
||||
import shared 1.0
|
||||
import shared.popups 1.0
|
||||
|
@ -35,56 +37,49 @@ Item {
|
|||
signal infoButtonClicked
|
||||
signal manageButtonClicked
|
||||
|
||||
StatusChatInfoToolBar {
|
||||
StatusChatInfoButton {
|
||||
id: communityHeader
|
||||
anchors.top: parent.top
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
chatInfoButton.title: communityData.name
|
||||
chatInfoButton.subTitle: communityData.members.count <= 1 ?
|
||||
title: communityData.name
|
||||
subTitle: communityData.members.count <= 1 ?
|
||||
//% "1 Member"
|
||||
qsTrId("1-member") :
|
||||
//% "%1 Members"
|
||||
qsTrId("-1-members").arg(communityData.members.count)
|
||||
|
||||
chatInfoButton.image.source: communityData.image
|
||||
chatInfoButton.icon.color: communityData.color
|
||||
menuButton.visible: communityData.amISectionAdmin && communityData.canManageUsers
|
||||
chatInfoButton.onClicked: root.infoButtonClicked()
|
||||
|
||||
popupMenu: StatusPopupMenu {
|
||||
StatusMenuItem {
|
||||
//% "Create channel"
|
||||
text: qsTrId("create-channel")
|
||||
icon.name: "channel"
|
||||
enabled: communityData.amISectionAdmin
|
||||
onTriggered: Global.openPopup(createChannelPopup)
|
||||
image.source: communityData.image
|
||||
icon.color: communityData.color
|
||||
onClicked: root.infoButtonClicked()
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 5
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: Style.current.halfPadding
|
||||
anchors.right: (implicitWidth > parent.width - 50) ? adHocChatButton.left : undefined
|
||||
anchors.rightMargin: Style.current.halfPadding
|
||||
type: StatusChatInfoButton.Type.OneToOneChat
|
||||
}
|
||||
|
||||
StatusMenuItem {
|
||||
//% "Create category"
|
||||
text: qsTrId("create-category")
|
||||
icon.name: "channel-category"
|
||||
enabled: communityData.amISectionAdmin
|
||||
onTriggered: Global.openPopup(createCategoryPopup)
|
||||
}
|
||||
|
||||
StatusMenuSeparator {}
|
||||
|
||||
StatusMenuItem {
|
||||
//% "Invite people"
|
||||
text: qsTrId("invite-people")
|
||||
icon.name: "share-ios"
|
||||
enabled: communityData.canManageUsers
|
||||
onTriggered: Global.openPopup(inviteFriendsToCommunityPopup, {
|
||||
community: communityData,
|
||||
hasAddedContacts: root.hasAddedContacts,
|
||||
communitySectionModule: root.communitySectionModule
|
||||
})
|
||||
StatusIconTabButton {
|
||||
id: adHocChatButton
|
||||
icon.name: "edit"
|
||||
anchors.verticalCenter: communityHeader.verticalCenter
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 14
|
||||
checked: root.store.openCreateChat
|
||||
highlighted: root.store.openCreateChat
|
||||
onClicked: {
|
||||
root.store.openCreateChat = !root.store.openCreateChat;
|
||||
if (!root.store.openCreateChat) {
|
||||
Global.closeCreateChatView()
|
||||
} else {
|
||||
Global.openCreateChatView()
|
||||
}
|
||||
}
|
||||
|
||||
StatusToolTip {
|
||||
text: qsTr("Start chat")
|
||||
visible: parent.hovered
|
||||
}
|
||||
} // StatusChatInfoToolBar
|
||||
|
||||
Loader {
|
||||
id: membershipRequests
|
||||
|
||||
|
@ -111,7 +106,9 @@ Item {
|
|||
ScrollView {
|
||||
id: chatGroupsContainer
|
||||
anchors.top: membershipRequests.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.topMargin: Style.current.padding
|
||||
anchors.bottom: createChatOrCommunity.top
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
topPadding: Style.current.padding
|
||||
|
||||
|
@ -466,6 +463,53 @@ Item {
|
|||
} // Column
|
||||
} // ScrollView
|
||||
|
||||
Loader {
|
||||
id: createChatOrCommunity
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: Style.current.padding
|
||||
active: communityData.amISectionAdmin
|
||||
sourceComponent: Component {
|
||||
StatusBaseText {
|
||||
color: Theme.palette.baseColor1
|
||||
height: visible ? implicitHeight : 0
|
||||
text: qsTr("Create channel or category")
|
||||
font.underline: true
|
||||
font.pixelSize: 13
|
||||
textFormat: Text.RichText
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
if (createChatOrCatMenu.opened) {
|
||||
createChatOrCatMenu.close()
|
||||
return
|
||||
}
|
||||
createChatOrCatMenu.open()
|
||||
createChatOrCatMenu.y = - createChatOrCatMenu.height - 5
|
||||
}
|
||||
}
|
||||
|
||||
StatusPopupMenu {
|
||||
id: createChatOrCatMenu
|
||||
closePolicy: Popup.CloseOnPressOutsideParent
|
||||
StatusMenuItem {
|
||||
text: qsTr("Create channel")
|
||||
icon.name: "channel"
|
||||
onTriggered: Global.openPopup(createChannelPopup)
|
||||
}
|
||||
|
||||
StatusMenuItem {
|
||||
text: qsTrId("Create category")
|
||||
icon.name: "channel-category"
|
||||
onTriggered: Global.openPopup(createCategoryPopup)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: createChannelPopup
|
||||
CreateChannelPopup {
|
||||
|
|
|
@ -120,6 +120,11 @@ Item {
|
|||
highlighted: root.store.openCreateChat
|
||||
onClicked: {
|
||||
root.store.openCreateChat = !root.store.openCreateChat;
|
||||
if (!root.store.openCreateChat) {
|
||||
Global.closeCreateChatView()
|
||||
} else {
|
||||
Global.openCreateChatView()
|
||||
}
|
||||
}
|
||||
|
||||
StatusToolTip {
|
||||
|
|
|
@ -14,7 +14,6 @@ import shared.status 1.0
|
|||
|
||||
Page {
|
||||
id: root
|
||||
anchors.fill: parent
|
||||
Behavior on anchors.bottomMargin { NumberAnimation { duration: 30 }}
|
||||
|
||||
property ListModel contactsModel: ListModel { }
|
||||
|
@ -22,6 +21,7 @@ Page {
|
|||
property var emojiPopup: null
|
||||
|
||||
Keys.onEscapePressed: {
|
||||
Global.closeCreateChatView()
|
||||
root.rootStore.openCreateChat = false;
|
||||
}
|
||||
|
||||
|
@ -37,10 +37,8 @@ Page {
|
|||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: rootStore
|
||||
onOpenCreateChatChanged: {
|
||||
if (root.rootStore.openCreateChat) {
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
for (var i = 0; i < contactsModelListView.count; i ++) {
|
||||
var entry = contactsModelListView.itemAtIndex(i);
|
||||
contactsModel.insert(contactsModel.count,
|
||||
|
@ -53,7 +51,6 @@ Page {
|
|||
tagSelector.namesModel.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createChat() {
|
||||
if (tagSelector.namesModel.count === 1) {
|
||||
|
@ -66,22 +63,15 @@ Page {
|
|||
groupName += (tagSelector.namesModel.get(i).name + (i === tagSelector.namesModel.count - 1 ? "" : "&"));
|
||||
pubKeys.push(tagSelector.namesModel.get(i).pubKey);
|
||||
}
|
||||
root.rootStore.chatCommunitySectionModule.createGroupChat("",groupName, JSON.stringify(pubKeys));
|
||||
root.rootStore.chatCommunitySectionModule.createGroupChat("", groupName, JSON.stringify(pubKeys));
|
||||
}
|
||||
|
||||
chatInput.textInput.clear();
|
||||
chatInput.textInput.textFormat = TextEdit.PlainText;
|
||||
chatInput.textInput.textFormat = TextEdit.RichText;
|
||||
Global.changeAppSectionBySectionType(Constants.appSection.chat)
|
||||
}
|
||||
|
||||
visible: (opacity > 0.01)
|
||||
onVisibleChanged: {
|
||||
if (!visible) {
|
||||
tagSelector.namesModel.clear();
|
||||
}
|
||||
}
|
||||
|
||||
opacity: (root.rootStore.openCreateChat) ? 1.0 : 0.0
|
||||
Behavior on opacity { NumberAnimation {}}
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
|
@ -95,8 +85,6 @@ Page {
|
|||
height: tagSelector.height
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 8
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 8
|
||||
clip: true
|
||||
StatusTagSelector {
|
||||
id: tagSelector
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
CreateChatView 1.0 CreateChatView.qml
|
|
@ -11,6 +11,7 @@ import AppLayouts.Node 1.0
|
|||
import AppLayouts.Browser 1.0
|
||||
import AppLayouts.Chat 1.0
|
||||
import AppLayouts.Chat.popups 1.0
|
||||
import AppLayouts.Chat.views 1.0
|
||||
import AppLayouts.Profile 1.0
|
||||
import AppLayouts.Profile.popups 1.0
|
||||
import AppLayouts.CommunitiesPortal 1.0
|
||||
|
@ -441,11 +442,15 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
Item {
|
||||
width: parent.width
|
||||
Layout.fillHeight: true
|
||||
|
||||
StackLayout {
|
||||
id: appView
|
||||
width: parent.width
|
||||
|
||||
Layout.fillHeight: true
|
||||
anchors.fill: parent
|
||||
|
||||
currentIndex: {
|
||||
if(mainModule.activeSection.sectionType === Constants.appSection.chat) {
|
||||
|
@ -558,7 +563,6 @@ Item {
|
|||
globalStore: appMain.rootStore
|
||||
sendTransactionModal: sendModal
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loader {
|
||||
|
@ -638,6 +642,38 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
CreateChatView {
|
||||
property bool opened: false
|
||||
|
||||
id: createChatView
|
||||
rootStore: chatLayoutContainer.rootStore
|
||||
emojiPopup: statusEmojiPopup
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 8
|
||||
anchors.rightMargin: 8
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
width: chatLayoutContainer.chatView.width - chatLayoutContainer.chatView.leftPanel.width - anchors.rightMargin - anchors.leftMargin
|
||||
visible: createChatView.opened
|
||||
|
||||
Connections {
|
||||
target: Global
|
||||
onOpenCreateChatView: {
|
||||
createChatView.opened = true
|
||||
}
|
||||
onCloseCreateChatView: {
|
||||
createChatView.opened = false
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: mainModule
|
||||
onActiveSectionChanged: {
|
||||
Global.closeCreateChatView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: rootStore.mainModuleInst
|
||||
onMailserverNotWorking: {
|
||||
|
|
|
@ -26,6 +26,8 @@ QtObject {
|
|||
signal openDownloadModalRequested()
|
||||
signal settingsLoaded()
|
||||
signal openBackUpSeedPopup()
|
||||
signal openCreateChatView()
|
||||
signal closeCreateChatView()
|
||||
|
||||
signal openProfilePopupRequested(string publicKey, var parentPopup, bool openNicknamePopup)
|
||||
signal openChangeProfilePicPopup()
|
||||
|
|
Loading…
Reference in New Issue