From 763041dab5968866c2dd1d02bf9d59e8bd2bb639 Mon Sep 17 00:00:00 2001 From: mprakhov Date: Mon, 23 Jan 2023 03:45:09 +0200 Subject: [PATCH] refactor(@desktop/channel): refactor members list to only have one list per community --- .../main/chat_section/chat_content/module.nim | 14 ++++++++------ .../chat_section/chat_content/users/module.nim | 14 +++++++------- src/app/modules/main/chat_section/module.nim | 16 +++++++++++++--- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/app/modules/main/chat_section/chat_content/module.nim b/src/app/modules/main/chat_section/chat_content/module.nim index a88920f04ff..ccae3f93dd8 100644 --- a/src/app/modules/main/chat_section/chat_content/module.nim +++ b/src/app/modules/main/chat_section/chat_content/module.nim @@ -42,7 +42,7 @@ proc newModule*(delegate: delegate_interface.AccessInterface, events: EventEmitt belongsToCommunity: bool, isUsersListAvailable: bool, settingsService: settings_service.Service, nodeConfigurationService: node_configuration_service.Service, contactService: contact_service.Service, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, gifService: gif_service.Service, - mailserversService: mailservers_service.Service): + mailserversService: mailservers_service.Service, communityUsersModule: users_module.AccessInterface): Module = result = Module() result.delegate = delegate @@ -55,10 +55,11 @@ proc newModule*(delegate: delegate_interface.AccessInterface, events: EventEmitt result.inputAreaModule = input_area_module.newModule(result, sectionId, chatId, belongsToCommunity, chatService, communityService, gifService) result.messagesModule = messages_module.newModule(result, events, sectionId, chatId, belongsToCommunity, contactService, communityService, chatService, messageService, mailserversService) - result.usersModule = users_module.newModule( - result, events, sectionId, chatId, belongsToCommunity, isUsersListAvailable, - contactService, chat_service, communityService, messageService - ) + result.usersModule = + if communityUsersModule == nil: + users_module.newModule( events, sectionId, chatId, belongsToCommunity, + isUsersListAvailable, contactService, chat_service, communityService, messageService) + else: communityUsersModule method delete*(self: Module) = self.inputAreaModule.delete @@ -86,6 +87,8 @@ method load*(self: Module) = if(contactDto.image.thumbnail.len > 0): chatImage = contactDto.image.thumbnail + self.usersModule.load() + self.view.load(chatDto.id, chatDto.chatType.int, self.controller.belongsToCommunity(), self.controller.isUsersListAvailable(), chatName, chatImage, chatDto.color, chatDto.description, chatDto.emoji, hasNotification, notificationsCount, @@ -94,7 +97,6 @@ method load*(self: Module) = self.inputAreaModule.load() self.messagesModule.load() - self.usersModule.load() proc checkIfModuleDidLoad(self: Module) = if self.moduleLoaded: diff --git a/src/app/modules/main/chat_section/chat_content/users/module.nim b/src/app/modules/main/chat_section/chat_content/users/module.nim index 00180115d4f..ed4932b8558 100644 --- a/src/app/modules/main/chat_section/chat_content/users/module.nim +++ b/src/app/modules/main/chat_section/chat_content/users/module.nim @@ -1,6 +1,5 @@ import NimQml, strutils, sequtils, sugar import io_interface -import ../io_interface as delegate_interface import view, controller import ../../../../shared_models/[member_model, member_item] import ../../../../../global/global_singleton @@ -17,7 +16,6 @@ export io_interface type Module* = ref object of io_interface.AccessInterface - delegate: delegate_interface.AccessInterface view: View viewVariant: QVariant controller: Controller @@ -27,13 +25,12 @@ type method addChatMember*(self: Module, member: ChatMember) proc newModule*( - delegate: delegate_interface.AccessInterface, events: EventEmitter, sectionId: string, chatId: string, + events: EventEmitter, sectionId: string, chatId: string, belongsToCommunity: bool, isUsersListAvailable: bool, contactService: contact_service.Service, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, ): Module = result = Module() - result.delegate = delegate result.view = view.newView(result) result.viewVariant = newQVariant(result.view) result.controller = controller.newController( @@ -48,8 +45,9 @@ method delete*(self: Module) = self.controller.delete method load*(self: Module) = - self.controller.init() - self.view.load() + if not self.moduleLoaded: + self.controller.init() + self.view.load() method isLoaded*(self: Module): bool = return self.moduleLoaded @@ -60,7 +58,6 @@ method viewDidLoad*(self: Module) = self.addChatMember(member) self.moduleLoaded = true - self.delegate.usersDidLoad() method getModuleAsVariant*(self: Module): QVariant = return self.viewVariant @@ -140,6 +137,9 @@ method addChatMember*(self: Module, member: ChatMember) = )) method onChatMembersAdded*(self: Module, ids: seq[string]) = + if ids.len() == 0: + return + let members = self.controller.getChatMembers() for id in ids: for member in members: diff --git a/src/app/modules/main/chat_section/module.nim b/src/app/modules/main/chat_section/module.nim index abe53ebadee..215c507ab51 100644 --- a/src/app/modules/main/chat_section/module.nim +++ b/src/app/modules/main/chat_section/module.nim @@ -8,6 +8,7 @@ import ../../shared_models/user_item as user_item import ../../shared_models/user_model as user_model import chat_content/module as chat_content_module +import chat_content/users/module as users_module import ../../../global/app_sections_config as conf import ../../../global/global_singleton @@ -38,6 +39,7 @@ type controller: Controller chatContentModules: OrderedTable[string, chat_content_module.AccessInterface] moduleLoaded: bool + usersModule: users_module.AccessInterface # Forward declaration proc buildChatSectionUI(self: Module, @@ -77,6 +79,12 @@ proc newModule*( result.chatContentModules = initOrderedTable[string, chat_content_module.AccessInterface]() + # Simple community channels uses comminity usersModule while chats uses their own usersModule + if isCommunity: + result.usersModule = users_module.newModule( + events, sectionId, chatId = "", belongsToCommunity = true, isUsersListAvailable = true, + contactService, chat_service, communityService, messageService) + method delete*(self: Module) = for cModule in self.chatContentModules.values: cModule.delete @@ -84,6 +92,8 @@ method delete*(self: Module) = self.view.delete self.viewVariant.delete self.controller.delete + if self.usersModule != nil: + self.usersModule.delete method isCommunity*(self: Module): bool = return self.controller.isCommunity() @@ -108,7 +118,7 @@ proc addSubmodule(self: Module, chatId: string, belongToCommunity: bool, isUsers mailserversService: mailservers_service.Service) = self.chatContentModules[chatId] = chat_content_module.newModule(self, events, self.controller.getMySectionId(), chatId, belongToCommunity, isUsersListAvailable, settingsService, nodeConfigurationService, contactService, chatService, communityService, - messageService, gifService, mailserversService) + messageService, gifService, mailserversService, self.usersModule) proc removeSubmodule(self: Module, chatId: string) = if(not self.chatContentModules.contains(chatId)): @@ -135,7 +145,6 @@ proc buildChatSectionUI( for chatDto in channelGroup.chats: if (chatDto.categoryId != ""): continue - let hasNotification = not chatDto.muted and (chatDto.unviewedMessagesCount > 0 or chatDto.unviewedMentionsCount > 0) let notificationsCount = chatDto.unviewedMentionsCount @@ -186,7 +195,6 @@ proc buildChatSectionUI( let categoryChats = channelGroup.chats.filter(c => c.categoryId == cat.id) for chatDto in categoryChats: - let hasNotification = chatDto.unviewedMessagesCount > 0 or chatDto.unviewedMentionsCount > 0 let notificationsCount = chatDto.unviewedMentionsCount @@ -284,6 +292,8 @@ method load*( if(not self.controller.isCommunity()): # we do this only in case of chat section (not in case of communities) self.initContactRequestsModel() + else: + self.usersModule.load() let activeChatId = self.controller.getActiveChatId() for chatId, cModule in self.chatContentModules: