From 795b999ad8407f506f34b4ae8aa04c9d2dab15ad Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Tue, 9 Apr 2024 19:01:24 +0100 Subject: [PATCH] chore: extract move gifs module (#14315) --- src/app/boot/app_controller.nim | 2 - .../chat_content/input_area/controller.nim | 60 -------- .../chat_content/input_area/module.nim | 63 +------- .../chat_content/input_area/view.nim | 126 --------------- .../main/chat_section/chat_content/module.nim | 7 +- .../modules/main/chat_section/controller.nim | 18 +-- .../main/chat_section/io_interface.nim | 3 - src/app/modules/main/chat_section/module.nim | 20 +-- src/app/modules/main/controller.nim | 6 - src/app/modules/main/gifs/controller.nim | 81 ++++++++++ .../input_area => gifs}/gif_column_model.nim | 2 +- src/app/modules/main/gifs/io_interface.nim | 67 ++++++++ src/app/modules/main/gifs/module.nim | 107 +++++++++++++ src/app/modules/main/gifs/view.nim | 143 ++++++++++++++++++ src/app/modules/main/io_interface.nim | 8 +- src/app/modules/main/module.nim | 18 ++- storybook/pages/ContactsListAndSearchPage.qml | 2 +- ui/imports/shared/stores/RootStore.qml | 35 +++-- 18 files changed, 445 insertions(+), 323 deletions(-) create mode 100644 src/app/modules/main/gifs/controller.nim rename src/app/modules/main/{chat_section/chat_content/input_area => gifs}/gif_column_model.nim (96%) create mode 100644 src/app/modules/main/gifs/io_interface.nim create mode 100644 src/app/modules/main/gifs/module.nim create mode 100644 src/app/modules/main/gifs/view.nim diff --git a/src/app/boot/app_controller.nim b/src/app/boot/app_controller.nim index 395e42d2e0..04fa921c05 100644 --- a/src/app/boot/app_controller.nim +++ b/src/app/boot/app_controller.nim @@ -342,7 +342,6 @@ proc delete*(self: AppController) = self.generalService.delete self.ensService.delete self.tokensService.delete - self.gifService.delete self.keycardService.delete self.networkConnectionService.delete @@ -467,7 +466,6 @@ proc load(self: AppController) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, ) diff --git a/src/app/modules/main/chat_section/chat_content/input_area/controller.nim b/src/app/modules/main/chat_section/chat_content/input_area/controller.nim index 9961e4e411..fc6fca5675 100644 --- a/src/app/modules/main/chat_section/chat_content/input_area/controller.nim +++ b/src/app/modules/main/chat_section/chat_content/input_area/controller.nim @@ -6,8 +6,6 @@ import ../../../../../../app_service/service/message/service as message_service import ../../../../../../app_service/service/contacts/service as contact_service import ../../../../../../app_service/service/community/service as community_service import ../../../../../../app_service/service/chat/service as chat_service -import ../../../../../../app_service/service/gif/service as gif_service -import ../../../../../../app_service/service/gif/dto import ../../../../../../app_service/service/message/dto/link_preview import ../../../../../../app_service/service/message/dto/urls_unfurling_plan import ../../../../../../app_service/service/settings/dto/settings @@ -25,7 +23,6 @@ type communityService: community_service.Service contactService: contact_service.Service chatService: chat_service.Service - gifService: gif_service.Service messageService: message_service.Service settingsService: settings_service.Service linkPreviewCache: LinkPreviewCache @@ -45,7 +42,6 @@ proc newController*( chatService: chat_service.Service, communityService: community_service.Service, contactService: contact_service.Service, - gifService: gif_service.Service, messageService: message_service.Service, settingsService: settings_service.Service ): Controller = @@ -58,7 +54,6 @@ proc newController*( result.chatService = chatService result.communityService = communityService result.contactService = contactService - result.gifService = gifService result.messageService = messageService result.settingsService = settingsService result.linkPreviewCache = newLinkPreiewCache() @@ -79,34 +74,6 @@ proc delete*(self: Controller) = self.events.disconnect() proc init*(self: Controller) = - self.events.on(SIGNAL_LOAD_RECENT_GIFS_DONE) do(e:Args): - let args = GifsArgs(e) - self.delegate.loadRecentGifsDone(args.gifs) - - self.events.on(SIGNAL_LOAD_FAVORITE_GIFS_DONE) do(e:Args): - let args = GifsArgs(e) - self.delegate.loadFavoriteGifsDone(args.gifs) - - self.events.on(SIGNAL_LOAD_TRENDING_GIFS_STARTED) do(e:Args): - self.delegate.loadTrendingGifsStarted() - - self.events.on(SIGNAL_LOAD_TRENDING_GIFS_DONE) do(e:Args): - let args = GifsArgs(e) - self.delegate.loadTrendingGifsDone(args.gifs) - - self.events.on(SIGNAL_LOAD_TRENDING_GIFS_ERROR) do(e:Args): - self.delegate.loadTrendingGifsError() - - self.events.on(SIGNAL_SEARCH_GIFS_STARTED) do(e:Args): - self.delegate.searchGifsStarted() - - self.events.on(SIGNAL_SEARCH_GIFS_DONE) do(e:Args): - let args = GifsArgs(e) - self.delegate.serachGifsDone(args.gifs) - - self.events.on(SIGNAL_SEARCH_GIFS_ERROR) do(e:Args): - self.delegate.searchGifsError() - self.events.on(SIGNAL_URLS_UNFURLED) do(e:Args): let args = LinkPreviewDataArgs(e) if not self.unfurlRequests.contains(args.requestUuid): @@ -191,33 +158,6 @@ proc acceptRequestAddressForTransaction*(self: Controller, messageId: string, ad proc acceptRequestTransaction*(self: Controller, transactionHash: string, messageId: string, signature: string) = self.chatService.acceptRequestTransaction(transactionHash, messageId, signature) -proc searchGifs*(self: Controller, query: string) = - self.gifService.search(query) - -proc getTrendingsGifs*(self: Controller) = - self.gifService.getTrending() - -proc getRecentsGifs*(self: Controller): seq[GifDto] = - return self.gifService.getRecents() - -proc loadRecentGifs*(self: Controller) = - self.gifService.asyncLoadRecentGifs() - -proc loadFavoriteGifs*(self: Controller) = - self.gifService.asyncLoadFavoriteGifs() - -proc getFavoritesGifs*(self: Controller): seq[GifDto] = - return self.gifService.getFavorites() - -proc toggleFavoriteGif*(self: Controller, item: GifDto) = - self.gifService.toggleFavorite(item) - -proc addToRecentsGif*(self: Controller, item: GifDto) = - self.gifService.addToRecents(item) - -proc isFavorite*(self: Controller, item: GifDto): bool = - return self.gifService.isFavorite(item) - proc getLinkPreviewEnabled*(self: Controller): bool = return self.linkPreviewPersistentSetting == UrlUnfurlingMode.Enabled or self.linkPreviewCurrentMessageSetting == UrlUnfurlingMode.Enabled diff --git a/src/app/modules/main/chat_section/chat_content/input_area/module.nim b/src/app/modules/main/chat_section/chat_content/input_area/module.nim index dd3c869093..0db83695a9 100644 --- a/src/app/modules/main/chat_section/chat_content/input_area/module.nim +++ b/src/app/modules/main/chat_section/chat_content/input_area/module.nim @@ -11,9 +11,6 @@ import ../../../../../../app_service/service/message/dto/link_preview import ../../../../../../app_service/service/chat/service as chat_service import ../../../../../../app_service/service/community/service as community_service import ../../../../../../app_service/service/contacts/service as contact_service -import ../../../../../../app_service/service/gif/service as gif_service -import ../../../../../../app_service/service/gif/dto - export io_interface type @@ -33,7 +30,6 @@ proc newModule*( chatService: chat_service.Service, communityService: community_service.Service, contactService: contact_service.Service, - gifService: gif_service.Service, messageService: message_service.Service, settingsService: settings_service.Service ): @@ -42,7 +38,7 @@ proc newModule*( result.delegate = delegate result.view = view.newView(result) result.viewVariant = newQVariant(result.view) - result.controller = controller.newController(result, events, sectionId, chatId, belongsToCommunity, chatService, communityService, contactService, gifService, messageService, settingsService) + result.controller = controller.newController(result, events, sectionId, chatId, belongsToCommunity, chatService, communityService, contactService, messageService, settingsService) result.moduleLoaded = false method delete*(self: Module) = @@ -99,63 +95,6 @@ method acceptRequestAddressForTransaction*(self: Module, messageId: string, addr method acceptRequestTransaction*(self: Module, transactionHash: string, messageId: string, signature: string) = self.controller.acceptRequestTransaction(transactionHash, messageId, signature) -method searchGifs*(self: Module, query: string) = - self.controller.searchGifs(query) - -method getTrendingsGifs*(self: Module) = - self.controller.getTrendingsGifs() - -method getRecentsGifs*(self: Module): seq[GifDto] = - return self.controller.getRecentsGifs() - -method loadRecentGifs*(self: Module) = - self.controller.loadRecentGifs() - -method loadRecentGifsDone*(self: Module, gifs: seq[GifDto]) = - self.view.updateGifColumns(gifs) - -method loadTrendingGifsStarted*(self: Module) = - self.view.updateGifColumns(@[]) - self.view.setGifLoading(true) - -method loadTrendingGifsError*(self: Module) = - # Just setting loading to false works because the UI shows an error when there are no gifs - self.view.setGifLoading(false) - -method loadTrendingGifsDone*(self: Module, gifs: seq[GifDto]) = - self.view.setGifLoading(false) - self.view.updateGifColumns(gifs) - -method searchGifsStarted*(self: Module) = - self.view.updateGifColumns(@[]) - self.view.setGifLoading(true) - -method searchGifsError*(self: Module) = - # Just setting loading to false works because the UI shows an error when there are no gifs - self.view.setGifLoading(false) - -method serachGifsDone*(self: Module, gifs: seq[GifDto]) = - self.view.setGifLoading(false) - self.view.updateGifColumns(gifs) - -method getFavoritesGifs*(self: Module): seq[GifDto] = - return self.controller.getFavoritesGifs() - -method loadFavoriteGifs*(self: Module) = - self.controller.loadFavoriteGifs() - -method loadFavoriteGifsDone*(self: Module, gifs: seq[GifDto]) = - self.view.updateGifColumns(gifs) - -method toggleFavoriteGif*(self: Module, item: GifDto) = - self.controller.toggleFavoriteGif(item) - -method addToRecentsGif*(self: Module, item: GifDto) = - self.controller.addToRecentsGif(item) - -method isFavorite*(self: Module, item: GifDto): bool = - return self.controller.isFavorite(item) - method setText*(self: Module, text: string, unfurlNewUrls: bool) = self.controller.setText(text, unfurlNewUrls) diff --git a/src/app/modules/main/chat_section/chat_content/input_area/view.nim b/src/app/modules/main/chat_section/chat_content/input_area/view.nim index 16fb59c7e6..049732456f 100644 --- a/src/app/modules/main/chat_section/chat_content/input_area/view.nim +++ b/src/app/modules/main/chat_section/chat_content/input_area/view.nim @@ -1,20 +1,14 @@ import NimQml, sets import ./io_interface -import ./gif_column_model import ./preserved_properties import ./urls_model import ../../../../../../app/modules/shared_models/link_preview_model as link_preview_model import ../../../../../../app/modules/shared_models/emoji_reactions_model as emoji_reactions_model -import ../../../../../../app_service/service/gif/dto QtObject: type View* = ref object of QObject delegate: io_interface.AccessInterface - gifColumnAModel: GifColumnModel - gifColumnBModel: GifColumnModel - gifColumnCModel: GifColumnModel - gifLoading: bool preservedProperties: PreservedProperties preservedPropertiesVariant: QVariant linkPreviewModel: link_preview_model.Model @@ -27,9 +21,6 @@ QtObject: proc delete*(self: View) = self.QObject.delete - self.gifColumnAModel.delete - self.gifColumnBModel.delete - self.gifColumnCModel.delete self.preservedPropertiesVariant.delete self.preservedProperties.delete self.linkPreviewModelVariant.delete @@ -43,10 +34,6 @@ QtObject: new(result, delete) result.QObject.setup result.delegate = delegate - result.gifColumnAModel = newGifColumnModel() - result.gifColumnBModel = newGifColumnModel() - result.gifColumnCModel = newGifColumnModel() - result.gifLoading = false result.preservedProperties = newPreservedProperties() result.preservedPropertiesVariant = newQVariant(result.preservedProperties) result.linkPreviewModel = newLinkPreviewModel() @@ -92,119 +79,6 @@ QtObject: proc acceptRequestTransaction*(self: View, transactionHash: string, messageId: string, signature: string) {.slot.} = self.delegate.acceptRequestTransaction(transactionHash, messageId, signature) - proc gifLoaded*(self: View) {.signal.} - - proc getGifColumnA*(self: View): QVariant {.slot.} = - result = newQVariant(self.gifColumnAModel) - - QtProperty[QVariant] gifColumnA: - read = getGifColumnA - notify = gifLoaded - - proc getGifColumnB*(self: View): QVariant {.slot.} = - result = newQVariant(self.gifColumnBModel) - - QtProperty[QVariant] gifColumnB: - read = getGifColumnB - notify = gifLoaded - - proc getGifColumnC*(self: View): QVariant {.slot.} = - result = newQVariant(self.gifColumnCModel) - - QtProperty[QVariant] gifColumnC: - read = getGifColumnC - notify = gifLoaded - - proc updateGifColumns*(self: View, data: seq[GifDto]) = - var columnAData: seq[GifDto] = @[] - var columnAHeight = 0 - var columnBData: seq[GifDto] = @[] - var columnBHeight = 0 - var columnCData: seq[GifDto] = @[] - var columnCHeight = 0 - - for item in data: - if columnAHeight <= columnBHeight: - columnAData.add(item) - columnAHeight += item.height - elif columnBHeight <= columnCHeight: - columnBData.add(item) - columnBHeight += item.height - else: - columnCData.add(item) - columnCHeight += item.height - - - self.gifColumnAModel.setNewData(columnAData) - self.gifColumnBModel.setNewData(columnBData) - self.gifColumnCModel.setNewData(columnCData) - self.gifLoaded() - - proc gifLoadingChanged*(self: View) {.signal.} - proc setGifLoading*(self: View, value: bool) = - self.gifLoading = value - self.gifLoadingChanged() - proc getGifLoading*(self: View): bool {.slot.} = - result = self.gifLoading - - QtProperty[bool] gifLoading: - read = getGifLoading - notify = gifLoadingChanged - - proc searchGifs*(self: View, query: string) {.slot.} = - self.delegate.searchGifs(query) - - proc getTrendingsGifs*(self: View) {.slot.} = - self.delegate.getTrendingsGifs() - - proc getRecentsGifs*(self: View) {.slot.} = - let data = self.delegate.getRecentsGifs() - if data.len > 0: - self.updateGifColumns(data) - return - - # recent gifs were not loaded yet, so we do it now - self.delegate.loadRecentGifs() - - proc getFavoritesGifs*(self: View) {.slot.} = - let data = self.delegate.getFavoritesGifs() - if data.len > 0: - self.updateGifColumns(data) - return - - # favorite gifs were not loaded yet, so we do it now - self.delegate.loadFavoriteGifs() - - proc findGifDto(self: View, id: string): GifDto = - for item in self.gifColumnAModel.gifs: - if item.id == id: - return item - - for item in self.gifColumnBModel.gifs: - if item.id == id: - return item - - for item in self.gifColumnCModel.gifs: - if item.id == id: - return item - - raise newException(ValueError, "Invalid id " & $id) - - proc toggleFavoriteGif*(self: View, id: string, reload: bool = false) {.slot.} = - let gifItem = self.findGifDto(id) - self.delegate.toggleFavoriteGif(gifItem) - - if reload: - self.getFavoritesGifs() - - proc addToRecentsGif*(self: View, id: string) {.slot.} = - let gifItem = self.findGifDto(id) - self.delegate.addToRecentsGif(gifItem) - - proc isFavorite*(self: View, id: string): bool {.slot.} = - let gifItem = self.findGifDto(id) - return self.delegate.isFavorite(gifItem) - proc getPreservedProperties(self: View): QVariant {.slot.} = return self.preservedPropertiesVariant 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 12854287fd..512c05848e 100644 --- a/src/app/modules/main/chat_section/chat_content/module.nim +++ b/src/app/modules/main/chat_section/chat_content/module.nim @@ -20,7 +20,6 @@ import ../../../../../app_service/service/node_configuration/service as node_con import ../../../../../app_service/service/contacts/service as contact_service import ../../../../../app_service/service/chat/service as chat_service import ../../../../../app_service/service/community/service as community_service -import ../../../../../app_service/service/gif/service as gif_service import ../../../../../app_service/service/message/service as message_service import ../../../../../app_service/service/mailservers/service as mailservers_service import ../../../../../app_service/service/shared_urls/service as shared_urls_service @@ -46,7 +45,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, + messageService: message_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service): Module = result = Module() @@ -59,7 +58,7 @@ proc newModule*(delegate: delegate_interface.AccessInterface, events: EventEmitt result.moduleLoaded = false result.inputAreaModule = input_area_module.newModule(result, events, sectionId, chatId, belongsToCommunity, - chatService, communityService, contactService, gifService, messageService, settingsService) + chatService, communityService, contactService, messageService, settingsService) result.messagesModule = messages_module.newModule(result, events, sectionId, chatId, belongsToCommunity, contactService, communityService, chatService, messageService, mailserversService, sharedUrlsService) result.usersModule = users_module.newModule(events, sectionId, chatId, belongsToCommunity, @@ -428,4 +427,4 @@ method getPermissionsCheckOngoing*(self: Module): bool = self.view.getPermissionsCheckOngoing() method scrollToMessage*(self: Module, messageId: string) = - self.messagesModule.scrollToMessage(messageId) \ No newline at end of file + self.messagesModule.scrollToMessage(messageId) diff --git a/src/app/modules/main/chat_section/controller.nim b/src/app/modules/main/chat_section/controller.nim index fe682b60fc..8cc38fb9c3 100644 --- a/src/app/modules/main/chat_section/controller.nim +++ b/src/app/modules/main/chat_section/controller.nim @@ -9,7 +9,6 @@ import ../../../../app_service/service/chat/service as chat_service import ../../../../app_service/service/network/service as network_service import ../../../../app_service/service/community/service as community_service import ../../../../app_service/service/message/service as message_service -import ../../../../app_service/service/gif/service as gif_service import ../../../../app_service/service/mailservers/service as mailservers_service import ../../../../app_service/service/wallet_account/service as wallet_account_service import ../../../../app_service/service/token/service as token_service @@ -38,7 +37,6 @@ type chatService: chat_service.Service communityService: community_service.Service messageService: message_service.Service - gifService: gif_service.Service mailserversService: mailservers_service.Service walletAccountService: wallet_account_service.Service tokenService: token_service.Service @@ -53,7 +51,7 @@ proc newController*(delegate: io_interface.AccessInterface, sectionId: string, i 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, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, communityTokensService: community_tokens_service.Service, sharedUrlsService: shared_urls_service.Service, networkService: network_service.Service): Controller = @@ -69,7 +67,6 @@ proc newController*(delegate: io_interface.AccessInterface, sectionId: string, i result.chatService = chatService result.communityService = communityService result.messageService = messageService - result.gifService = gifService result.mailserversService = mailserversService result.walletAccountService = walletAccountService result.tokenService = tokenService @@ -176,14 +173,14 @@ proc init*(self: Controller) = for chat in args.chats: let belongsToCommunity = chat.communityId.len > 0 discard self.delegate.addOrUpdateChat(chat, belongsToCommunity, self.events, self.settingsService, self.nodeConfigurationService, - self.contactService, self.chatService, self.communityService, self.messageService, self.gifService, + self.contactService, self.chatService, self.communityService, self.messageService, self.mailserversService, self.sharedUrlsService, setChatAsActive = false) self.events.on(SIGNAL_CHAT_CREATED) do(e: Args): var args = CreatedChatArgs(e) let belongsToCommunity = args.chat.communityId.len > 0 discard self.delegate.addOrUpdateChat(args.chat, belongsToCommunity, self.events, self.settingsService, self.nodeConfigurationService, - self.contactService, self.chatService, self.communityService, self.messageService, self.gifService, + self.contactService, self.chatService, self.communityService, self.messageService, self.mailserversService, self.sharedUrlsService, setChatAsActive = true) if (self.isCommunitySection): @@ -192,7 +189,7 @@ proc init*(self: Controller) = let belongsToCommunity = args.chat.communityId.len > 0 discard self.delegate.addOrUpdateChat(args.chat, belongsToCommunity, self.events, self.settingsService, self.nodeConfigurationService, self.contactService, self.chatService, self.communityService, - self.messageService, self.gifService, self.mailserversService, self.sharedUrlsService, setChatAsActive = true) + self.messageService, self.mailserversService, self.sharedUrlsService, setChatAsActive = true) self.events.on(SIGNAL_COMMUNITY_METRICS_UPDATED) do(e: Args): let args = CommunityMetricsArgs(e) @@ -457,7 +454,6 @@ proc getChatsAndBuildUI*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.sharedUrlsService, ) @@ -504,7 +500,7 @@ proc createOneToOneChat*(self: Controller, communityID: string, chatId: string, if(response.success): discard self.delegate.addOrUpdateChat(response.chatDto, false, self.events, self.settingsService, self.nodeConfigurationService, self.contactService, self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.sharedUrlsService) + self.mailserversService, self.sharedUrlsService) proc switchToOrCreateOneToOneChat*(self: Controller, chatId: string, ensName: string) = self.chatService.switchToOrCreateOneToOneChat(chatId, ensName) @@ -577,14 +573,14 @@ proc createGroupChat*(self: Controller, communityID: string, groupName: string, if(response.success): discard self.delegate.addOrUpdateChat(response.chatDto, false, self.events, self.settingsService, self.nodeConfigurationService, self.contactService, self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.sharedUrlsService) + self.mailserversService, self.sharedUrlsService) proc joinGroupChatFromInvitation*(self: Controller, groupName: string, chatId: string, adminPK: string) = let response = self.chatService.createGroupChatFromInvitation(groupName, chatId, adminPK) if(response.success): discard self.delegate.addOrUpdateChat(response.chatDto, false, self.events, self.settingsService, self.nodeConfigurationService, self.contactService, self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.sharedUrlsService) + self.mailserversService, self.sharedUrlsService) proc acceptRequestToJoinCommunity*(self: Controller, requestId: string, communityId: string) = self.communityService.asyncAcceptRequestToJoinCommunity(communityId, requestId) diff --git a/src/app/modules/main/chat_section/io_interface.nim b/src/app/modules/main/chat_section/io_interface.nim index f0cbe916a8..d0dd4c118c 100644 --- a/src/app/modules/main/chat_section/io_interface.nim +++ b/src/app/modules/main/chat_section/io_interface.nim @@ -6,7 +6,6 @@ import ../../../../app_service/service/contacts/service as contact_service import ../../../../app_service/service/chat/service as chat_service import ../../../../app_service/service/community/service as community_service import ../../../../app_service/service/message/service as message_service -import ../../../../app_service/service/gif/service as gif_service import ../../../../app_service/service/mailservers/service as mailservers_service import ../../../../app_service/service/shared_urls/service as shared_urls_service import ../../../../app_service/common/types @@ -34,7 +33,6 @@ method onChatsLoaded*(self: AccessInterface, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, ) {.base.} = @@ -77,7 +75,6 @@ method addOrUpdateChat*(self: AccessInterface, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, setChatAsActive: bool = true, diff --git a/src/app/modules/main/chat_section/module.nim b/src/app/modules/main/chat_section/module.nim index 0033938e8c..01afcefa94 100644 --- a/src/app/modules/main/chat_section/module.nim +++ b/src/app/modules/main/chat_section/module.nim @@ -31,7 +31,6 @@ import ../../../../app_service/service/network/service as network_service import ../../../../app_service/service/community/service as community_service import ../../../../app_service/service/message/service as message_service import ../../../../app_service/service/mailservers/service as mailservers_service -import ../../../../app_service/service/gif/service as gif_service import ../../../../app_service/service/wallet_account/service as wallet_account_service import ../../../../app_service/service/token/service as token_service import ../../../../app_service/service/community_tokens/service as community_tokens_service @@ -65,7 +64,6 @@ proc buildChatSectionUI( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, ) @@ -85,7 +83,6 @@ proc addOrUpdateChat(self: Module, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, setChatAsActive: bool = true, @@ -103,7 +100,6 @@ proc newModule*( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -114,7 +110,7 @@ proc newModule*( result = Module() result.delegate = delegate result.controller = controller.newController(result, sectionId, isCommunity, events, settingsService, - nodeConfigurationService, contactService, chatService, communityService, messageService, gifService, + nodeConfigurationService, contactService, chatService, communityService, messageService, mailserversService, walletAccountService, tokenService, communityTokensService, sharedUrlsService, networkService) result.view = view.newView(result) result.viewVariant = newQVariant(result.view) @@ -244,13 +240,12 @@ proc addSubmodule( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_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, sharedUrlsService) + messageService, mailserversService, sharedUrlsService) proc removeSubmodule(self: Module, chatId: string) = if(not self.chatContentModules.contains(chatId)): @@ -295,7 +290,6 @@ proc buildChatSectionUI( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, ) = @@ -335,7 +329,6 @@ proc buildChatSectionUI( chatService, communityService, messageService, - gifService, mailserversService, sharedUrlsService, setChatAsActive = false, @@ -429,13 +422,12 @@ method onChatsLoaded*( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, ) = self.chatsLoaded = true self.buildChatSectionUI(channelGroup, events, settingsService, nodeConfigurationService, - contactService, chatService, communityService, messageService, gifService, mailserversService, sharedUrlsService) + contactService, chatService, communityService, messageService, mailserversService, sharedUrlsService) if(not self.controller.isCommunity()): # we do this only in case of chat section (not in case of communities) @@ -641,7 +633,6 @@ proc addNewChat( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, setChatAsActive: bool = true, @@ -750,7 +741,6 @@ proc addNewChat( chatService, communityService, messageService, - gifService, mailserversService, sharedUrlsService, ) @@ -1387,7 +1377,6 @@ proc addOrUpdateChat(self: Module, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, setChatAsActive: bool = true, @@ -1434,7 +1423,6 @@ proc addOrUpdateChat(self: Module, chatService, communityService, messageService, - gifService, mailserversService, sharedUrlsService, setChatAsActive, @@ -1451,7 +1439,6 @@ method addOrUpdateChat*(self: Module, chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, sharedUrlsService: shared_urls_service.Service, setChatAsActive: bool = true, @@ -1468,7 +1455,6 @@ method addOrUpdateChat*(self: Module, chatService, communityService, messageService, - gifService, mailserversService, sharedUrlsService, setChatAsActive, diff --git a/src/app/modules/main/controller.nim b/src/app/modules/main/controller.nim index 7b2d351115..32099eec1c 100644 --- a/src/app/modules/main/controller.nim +++ b/src/app/modules/main/controller.nim @@ -120,7 +120,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, @@ -138,7 +137,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, @@ -175,7 +173,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, @@ -196,7 +193,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, @@ -223,7 +219,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, @@ -246,7 +241,6 @@ proc init*(self: Controller) = self.chatService, self.communityService, self.messageService, - self.gifService, self.mailserversService, self.walletAccountService, self.tokenService, diff --git a/src/app/modules/main/gifs/controller.nim b/src/app/modules/main/gifs/controller.nim new file mode 100644 index 0000000000..5dcc2e8799 --- /dev/null +++ b/src/app/modules/main/gifs/controller.nim @@ -0,0 +1,81 @@ +import io_interface + +import ../../../../app_service/service/gif/service as gif_service +import ../../../../app_service/service/gif/dto +import ../../../core/eventemitter +import ../../../core/unique_event_emitter + +type + Controller* = ref object of RootObj + delegate: io_interface.AccessInterface + events: UniqueUUIDEventEmitter + gifService: gif_service.Service + +proc newController*( + delegate: io_interface.AccessInterface, + events: EventEmitter, + gifService: gif_service.Service, + ): Controller = + result = Controller() + result.delegate = delegate + result.events = initUniqueUUIDEventEmitter(events) + result.gifService = gifService + +proc delete*(self: Controller) = + self.events.disconnect() + +proc init*(self: Controller) = + self.events.on(SIGNAL_LOAD_RECENT_GIFS_DONE) do(e:Args): + let args = GifsArgs(e) + self.delegate.loadRecentGifsDone(args.gifs) + + self.events.on(SIGNAL_LOAD_FAVORITE_GIFS_DONE) do(e:Args): + let args = GifsArgs(e) + self.delegate.loadFavoriteGifsDone(args.gifs) + + self.events.on(SIGNAL_LOAD_TRENDING_GIFS_STARTED) do(e:Args): + self.delegate.loadTrendingGifsStarted() + + self.events.on(SIGNAL_LOAD_TRENDING_GIFS_DONE) do(e:Args): + let args = GifsArgs(e) + self.delegate.loadTrendingGifsDone(args.gifs) + + self.events.on(SIGNAL_LOAD_TRENDING_GIFS_ERROR) do(e:Args): + self.delegate.loadTrendingGifsError() + + self.events.on(SIGNAL_SEARCH_GIFS_STARTED) do(e:Args): + self.delegate.searchGifsStarted() + + self.events.on(SIGNAL_SEARCH_GIFS_DONE) do(e:Args): + let args = GifsArgs(e) + self.delegate.serachGifsDone(args.gifs) + + self.events.on(SIGNAL_SEARCH_GIFS_ERROR) do(e:Args): + self.delegate.searchGifsError() + +proc searchGifs*(self: Controller, query: string) = + self.gifService.search(query) + +proc getTrendingsGifs*(self: Controller) = + self.gifService.getTrending() + +proc getRecentsGifs*(self: Controller): seq[GifDto] = + return self.gifService.getRecents() + +proc loadRecentGifs*(self: Controller) = + self.gifService.asyncLoadRecentGifs() + +proc loadFavoriteGifs*(self: Controller) = + self.gifService.asyncLoadFavoriteGifs() + +proc getFavoritesGifs*(self: Controller): seq[GifDto] = + return self.gifService.getFavorites() + +proc toggleFavoriteGif*(self: Controller, item: GifDto) = + self.gifService.toggleFavorite(item) + +proc addToRecentsGif*(self: Controller, item: GifDto) = + self.gifService.addToRecents(item) + +proc isFavorite*(self: Controller, item: GifDto): bool = + return self.gifService.isFavorite(item) diff --git a/src/app/modules/main/chat_section/chat_content/input_area/gif_column_model.nim b/src/app/modules/main/gifs/gif_column_model.nim similarity index 96% rename from src/app/modules/main/chat_section/chat_content/input_area/gif_column_model.nim rename to src/app/modules/main/gifs/gif_column_model.nim index d22aa2819e..dbd9cb77c9 100644 --- a/src/app/modules/main/chat_section/chat_content/input_area/gif_column_model.nim +++ b/src/app/modules/main/gifs/gif_column_model.nim @@ -1,6 +1,6 @@ import NimQml, Tables, sequtils -import ../../../../../../app_service/service/gif/dto +import ../../../../app_service/service/gif/dto type GifRoles {.pure.} = enum diff --git a/src/app/modules/main/gifs/io_interface.nim b/src/app/modules/main/gifs/io_interface.nim new file mode 100644 index 0000000000..903e43c57c --- /dev/null +++ b/src/app/modules/main/gifs/io_interface.nim @@ -0,0 +1,67 @@ +import ../../../../app_service/service/gif/dto + +type + AccessInterface* {.pure inheritable.} = ref object of RootObj + +method delete*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method load*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method isLoaded*(self: AccessInterface): bool {.base.} = + raise newException(ValueError, "No implementation available") + +method viewDidLoad*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method searchGifs*(self: AccessInterface, query: string) {.base.} = + raise newException(ValueError, "No implementation available") + +method getTrendingsGifs*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method getRecentsGifs*(self: AccessInterface): seq[GifDto] {.base.} = + raise newException(ValueError, "No implementation available") + +method loadRecentGifs*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method loadRecentGifsDone*(self: AccessInterface, gifs: seq[GifDto]) {.base.} = + raise newException(ValueError, "No implementation available") + +method loadTrendingGifsStarted*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method loadTrendingGifsError*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method loadTrendingGifsDone*(self: AccessInterface, gifs: seq[GifDto]) {.base.} = + raise newException(ValueError, "No implementation available") + +method searchGifsStarted*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method searchGifsError*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method serachGifsDone*(self: AccessInterface, gifs: seq[GifDto]) {.base.} = + raise newException(ValueError, "No implementation available") + +method getFavoritesGifs*(self: AccessInterface): seq[GifDto] {.base.} = + raise newException(ValueError, "No implementation available") + +method loadFavoriteGifs*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method loadFavoriteGifsDone*(self: AccessInterface, gifs: seq[GifDto]) {.base.} = + raise newException(ValueError, "No implementation available") + +method toggleFavoriteGif*(self: AccessInterface, item: GifDto) {.base.} = + raise newException(ValueError, "No implementation available") + +method addToRecentsGif*(self: AccessInterface, item: GifDto) {.base.} = + raise newException(ValueError, "No implementation available") + +method isFavorite*(self: AccessInterface, item: GifDto): bool {.base.} = + raise newException(ValueError, "No implementation available") diff --git a/src/app/modules/main/gifs/module.nim b/src/app/modules/main/gifs/module.nim new file mode 100644 index 0000000000..9f4c7e7cc5 --- /dev/null +++ b/src/app/modules/main/gifs/module.nim @@ -0,0 +1,107 @@ +import NimQml +import io_interface +import ../io_interface as delegate_interface +import view, controller +import ../../../global/global_singleton +import ../../../core/eventemitter + +import ../../../../app_service/service/gif/service as gif_service +import ../../../../app_service/service/gif/dto + +export io_interface + +type + Module* = ref object of io_interface.AccessInterface + delegate: delegate_interface.AccessInterface + view: View + viewVariant: QVariant + controller: Controller + moduleLoaded: bool + +proc newModule*( + delegate: delegate_interface.AccessInterface, + events: EventEmitter, + gifService: gif_service.Service, + ): + Module = + result = Module() + result.delegate = delegate + result.view = view.newView(result) + result.viewVariant = newQVariant(result.view) + result.controller = controller.newController(result, events, gifService) + result.moduleLoaded = false + +method delete*(self: Module) = + self.view.delete + self.viewVariant.delete + self.controller.delete + +method load*(self: Module) = + singletonInstance.engine.setRootContextProperty("gifsModule", self.viewVariant) + + self.controller.init() + self.view.load() + +method isLoaded*(self: Module): bool = + return self.moduleLoaded + +method viewDidLoad*(self: Module) = + self.moduleLoaded = true + self.delegate.gifsDidLoad() + +method searchGifs*(self: Module, query: string) = + self.controller.searchGifs(query) + +method getTrendingsGifs*(self: Module) = + self.controller.getTrendingsGifs() + +method getRecentsGifs*(self: Module): seq[GifDto] = + return self.controller.getRecentsGifs() + +method loadRecentGifs*(self: Module) = + self.controller.loadRecentGifs() + +method loadRecentGifsDone*(self: Module, gifs: seq[GifDto]) = + self.view.updateGifColumns(gifs) + +method loadTrendingGifsStarted*(self: Module) = + self.view.updateGifColumns(@[]) + self.view.setGifLoading(true) + +method loadTrendingGifsError*(self: Module) = + # Just setting loading to false works because the UI shows an error when there are no gifs + self.view.setGifLoading(false) + +method loadTrendingGifsDone*(self: Module, gifs: seq[GifDto]) = + self.view.setGifLoading(false) + self.view.updateGifColumns(gifs) + +method searchGifsStarted*(self: Module) = + self.view.updateGifColumns(@[]) + self.view.setGifLoading(true) + +method searchGifsError*(self: Module) = + # Just setting loading to false works because the UI shows an error when there are no gifs + self.view.setGifLoading(false) + +method serachGifsDone*(self: Module, gifs: seq[GifDto]) = + self.view.setGifLoading(false) + self.view.updateGifColumns(gifs) + +method getFavoritesGifs*(self: Module): seq[GifDto] = + return self.controller.getFavoritesGifs() + +method loadFavoriteGifs*(self: Module) = + self.controller.loadFavoriteGifs() + +method loadFavoriteGifsDone*(self: Module, gifs: seq[GifDto]) = + self.view.updateGifColumns(gifs) + +method toggleFavoriteGif*(self: Module, item: GifDto) = + self.controller.toggleFavoriteGif(item) + +method addToRecentsGif*(self: Module, item: GifDto) = + self.controller.addToRecentsGif(item) + +method isFavorite*(self: Module, item: GifDto): bool = + return self.controller.isFavorite(item) diff --git a/src/app/modules/main/gifs/view.nim b/src/app/modules/main/gifs/view.nim new file mode 100644 index 0000000000..8f7b6d990f --- /dev/null +++ b/src/app/modules/main/gifs/view.nim @@ -0,0 +1,143 @@ +import NimQml +import ./io_interface +import ./gif_column_model +import ../../../../app_service/service/gif/dto + +QtObject: + type + View* = ref object of QObject + delegate: io_interface.AccessInterface + gifColumnAModel: GifColumnModel + gifColumnBModel: GifColumnModel + gifColumnCModel: GifColumnModel + gifLoading: bool + + proc delete*(self: View) = + self.QObject.delete + self.gifColumnAModel.delete + self.gifColumnBModel.delete + self.gifColumnCModel.delete + + proc newView*(delegate: io_interface.AccessInterface): View = + new(result, delete) + result.QObject.setup + result.delegate = delegate + result.gifColumnAModel = newGifColumnModel() + result.gifColumnBModel = newGifColumnModel() + result.gifColumnCModel = newGifColumnModel() + result.gifLoading = false + + proc load*(self: View) = + self.delegate.viewDidLoad() + + proc gifLoaded*(self: View) {.signal.} + + proc getGifColumnA*(self: View): QVariant {.slot.} = + result = newQVariant(self.gifColumnAModel) + + QtProperty[QVariant] gifColumnA: + read = getGifColumnA + notify = gifLoaded + + proc getGifColumnB*(self: View): QVariant {.slot.} = + result = newQVariant(self.gifColumnBModel) + + QtProperty[QVariant] gifColumnB: + read = getGifColumnB + notify = gifLoaded + + proc getGifColumnC*(self: View): QVariant {.slot.} = + result = newQVariant(self.gifColumnCModel) + + QtProperty[QVariant] gifColumnC: + read = getGifColumnC + notify = gifLoaded + + proc updateGifColumns*(self: View, data: seq[GifDto]) = + var columnAData: seq[GifDto] = @[] + var columnAHeight = 0 + var columnBData: seq[GifDto] = @[] + var columnBHeight = 0 + var columnCData: seq[GifDto] = @[] + var columnCHeight = 0 + + for item in data: + if columnAHeight <= columnBHeight: + columnAData.add(item) + columnAHeight += item.height + elif columnBHeight <= columnCHeight: + columnBData.add(item) + columnBHeight += item.height + else: + columnCData.add(item) + columnCHeight += item.height + + self.gifColumnAModel.setNewData(columnAData) + self.gifColumnBModel.setNewData(columnBData) + self.gifColumnCModel.setNewData(columnCData) + self.gifLoaded() + + proc gifLoadingChanged*(self: View) {.signal.} + proc setGifLoading*(self: View, value: bool) = + self.gifLoading = value + self.gifLoadingChanged() + proc getGifLoading*(self: View): bool {.slot.} = + result = self.gifLoading + + QtProperty[bool] gifLoading: + read = getGifLoading + notify = gifLoadingChanged + + proc searchGifs*(self: View, query: string) {.slot.} = + self.delegate.searchGifs(query) + + proc getTrendingsGifs*(self: View) {.slot.} = + self.delegate.getTrendingsGifs() + + proc getRecentsGifs*(self: View) {.slot.} = + let data = self.delegate.getRecentsGifs() + if data.len > 0: + self.updateGifColumns(data) + return + + # recent gifs were not loaded yet, so we do it now + self.delegate.loadRecentGifs() + + proc getFavoritesGifs*(self: View) {.slot.} = + let data = self.delegate.getFavoritesGifs() + if data.len > 0: + self.updateGifColumns(data) + return + + # favorite gifs were not loaded yet, so we do it now + self.delegate.loadFavoriteGifs() + + proc findGifDto(self: View, id: string): GifDto = + for item in self.gifColumnAModel.gifs: + if item.id == id: + return item + + for item in self.gifColumnBModel.gifs: + if item.id == id: + return item + + for item in self.gifColumnCModel.gifs: + if item.id == id: + return item + + raise newException(ValueError, "Invalid id " & $id) + + proc toggleFavoriteGif*(self: View, id: string, reload: bool = false) {.slot.} = + let gifItem = self.findGifDto(id) + self.delegate.toggleFavoriteGif(gifItem) + + if reload: + self.getFavoritesGifs() + + proc addToRecentsGif*(self: View, id: string) {.slot.} = + let gifItem = self.findGifDto(id) + self.delegate.addToRecentsGif(gifItem) + + proc isFavorite*(self: View, id: string): bool {.slot.} = + let gifItem = self.findGifDto(id) + return self.delegate.isFavorite(gifItem) diff --git a/src/app/modules/main/io_interface.nim b/src/app/modules/main/io_interface.nim index fe1c9c9aa3..c810cefc1f 100644 --- a/src/app/modules/main/io_interface.nim +++ b/src/app/modules/main/io_interface.nim @@ -6,7 +6,6 @@ import app_service/service/contacts/service as contacts_service import app_service/service/chat/service as chat_service import app_service/service/community/service as community_service import app_service/service/message/service as message_service -import app_service/service/gif/service as gif_service import app_service/service/mailservers/service as mailservers_service import app_service/service/community_tokens/service as community_token_service import app_service/service/wallet_account/service as wallet_account_service @@ -39,7 +38,6 @@ method load*( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service) {.base.} = raise newException(ValueError, "No implementation available") @@ -59,6 +57,9 @@ method appSearchDidLoad*(self: AccessInterface) {.base.} = method stickersDidLoad*(self: AccessInterface) {.base.} = raise newException(ValueError, "No implementation available") +method gifsDidLoad*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + method activityCenterDidLoad*(self: AccessInterface) {.base.} = raise newException(ValueError, "No implementation available") @@ -93,7 +94,6 @@ method onChannelGroupsLoaded*( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -112,7 +112,6 @@ method onCommunityDataLoaded*( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -164,7 +163,6 @@ method communityJoined*(self: AccessInterface, community: CommunityDto, events: chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, diff --git a/src/app/modules/main/module.nim b/src/app/modules/main/module.nim index 5f5311bb12..546939ea81 100644 --- a/src/app/modules/main/module.nim +++ b/src/app/modules/main/module.nim @@ -20,6 +20,7 @@ import browser_section/module as browser_section_module import profile_section/module as profile_section_module import app_search/module as app_search_module import stickers/module as stickers_module +import gifs/module as gifs_module import activity_center/module as activity_center_module import communities/module as communities_module import node_section/module as node_section_module @@ -105,6 +106,7 @@ type browserSectionModule: browser_section_module.AccessInterface profileSectionModule: profile_section_module.AccessInterface stickersModule: stickers_module.AccessInterface + gifsModule: gifs_module.AccessInterface activityCenterModule: activity_center_module.AccessInterface communitiesModule: communities_module.AccessInterface appSearchModule: app_search_module.AccessInterface @@ -226,6 +228,7 @@ proc newModule*[T]( ) result.stickersModule = stickers_module.newModule(result, events, stickersService, settingsService, walletAccountService, networkService, tokenService, keycardService) + result.gifsModule = gifs_module.newModule(result, events, gifService) result.activityCenterModule = activity_center_module.newModule(result, events, activityCenterService, contactsService, messageService, chatService, communityService) result.communitiesModule = communities_module.newModule(result, events, communityService, contactsService, communityTokensService, @@ -240,6 +243,7 @@ method delete*[T](self: Module[T]) = self.controller.delete self.profileSectionModule.delete self.stickersModule.delete + self.gifsModule.delete self.activityCenterModule.delete self.communitiesModule.delete for cModule in self.channelGroupModules.values: @@ -468,7 +472,6 @@ method load*[T]( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, ) = singletonInstance.engine.setRootContextProperty("mainModule", self.viewVariant) @@ -587,6 +590,7 @@ method load*[T]( self.browserSectionModule.load() self.profileSectionModule.load() self.stickersModule.load() + self.gifsModule.load() self.activityCenterModule.load() self.communitiesModule.load() self.appSearchModule.load() @@ -629,7 +633,6 @@ method onChannelGroupsLoaded*[T]( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -657,7 +660,6 @@ method onChannelGroupsLoaded*[T]( chatService, communityService, messageService, - gifService, mailserversService, walletAccountService, tokenService, @@ -692,7 +694,6 @@ method onCommunityDataLoaded*[T]( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -713,7 +714,6 @@ method onCommunityDataLoaded*[T]( chatService, communityService, messageService, - gifService, mailserversService, walletAccountService, tokenService, @@ -751,6 +751,9 @@ proc checkIfModuleDidLoad [T](self: Module[T]) = if(not self.stickersModule.isLoaded()): return + if not self.gifsModule.isLoaded(): + return + if(not self.activityCenterModule.isLoaded()): return @@ -778,6 +781,9 @@ method appSearchDidLoad*[T](self: Module[T]) = method stickersDidLoad*[T](self: Module[T]) = self.checkIfModuleDidLoad() +method gifsDidLoad*[T](self: Module[T]) = + self.checkIfModuleDidLoad() + method activityCenterDidLoad*[T](self: Module[T]) = self.checkIfModuleDidLoad() @@ -971,7 +977,6 @@ method communityJoined*[T]( chatService: chat_service.Service, communityService: community_service.Service, messageService: message_service.Service, - gifService: gif_service.Service, mailserversService: mailservers_service.Service, walletAccountService: wallet_account_service.Service, tokenService: token_service.Service, @@ -997,7 +1002,6 @@ method communityJoined*[T]( chatService, communityService, messageService, - gifService, mailserversService, walletAccountService, tokenService, diff --git a/storybook/pages/ContactsListAndSearchPage.qml b/storybook/pages/ContactsListAndSearchPage.qml index 3bc467f93e..08e789d491 100644 --- a/storybook/pages/ContactsListAndSearchPage.qml +++ b/storybook/pages/ContactsListAndSearchPage.qml @@ -14,7 +14,7 @@ Pane { } QtObject { - id: chatSectionChatContentInputArea + id: gifsModule } QtObject { diff --git a/ui/imports/shared/stores/RootStore.qml b/ui/imports/shared/stores/RootStore.qml index 5876b72e66..129c3343a9 100644 --- a/ui/imports/shared/stores/RootStore.qml +++ b/ui/imports/shared/stores/RootStore.qml @@ -73,50 +73,49 @@ QtObject { globalUtils.copyToClipboard(text) } - property var chatSectionChatContentInputAreaInst: typeof chatSectionChatContentInputArea !== "undefined" ? chatSectionChatContentInputArea - : null - property var gifColumnA: chatSectionChatContentInputAreaInst ? chatSectionChatContentInputArea.gifColumnA + property var gifsModuleInst: typeof gifsModule !== "undefined" ? gifsModule : null + property var gifColumnA: gifsModuleInst ? gifsModuleInst.gifColumnA : null - property var gifColumnB: chatSectionChatContentInputAreaInst ? chatSectionChatContentInputArea.gifColumnB + property var gifColumnB: gifsModuleInst ? gifsModuleInst.gifColumnB : null - property var gifColumnC: chatSectionChatContentInputAreaInst ? chatSectionChatContentInputArea.gifColumnC + property var gifColumnC: gifsModuleInst ? gifsModuleInst.gifColumnC : null - property bool gifLoading: chatSectionChatContentInputAreaInst ? chatSectionChatContentInputArea.gifLoading + property bool gifLoading: gifsModuleInst ? gifsModuleInst.gifLoading : false function searchGifs(query) { - if (chatSectionChatContentInputAreaInst) - chatSectionChatContentInputAreaInst.searchGifs(query) + if (gifsModuleInst) + gifsModuleInst.searchGifs(query) } function getTrendingsGifs() { - if (chatSectionChatContentInputAreaInst) - chatSectionChatContentInputAreaInst.getTrendingsGifs() + if (gifsModuleInst) + gifsModuleInst.getTrendingsGifs() } function getRecentsGifs() { - if (chatSectionChatContentInputAreaInst) - chatSectionChatContentInputAreaInst.getRecentsGifs() + if (gifsModuleInst) + gifsModuleInst.getRecentsGifs() } function getFavoritesGifs() { - return chatSectionChatContentInputAreaInst ? chatSectionChatContentInputAreaInst.getFavoritesGifs() + return gifsModuleInst ? gifsModuleInst.getFavoritesGifs() : null } function isFavorite(id) { - return chatSectionChatContentInputAreaInst ? chatSectionChatContentInputAreaInst.isFavorite(id) + return gifsModuleInst ? gifsModuleInst.isFavorite(id) : null } function toggleFavoriteGif(id, reload) { - if (chatSectionChatContentInputAreaInst) - chatSectionChatContentInputAreaInst.toggleFavoriteGif(id, reload) + if (gifsModuleInst) + gifsModuleInst.toggleFavoriteGif(id, reload) } function addToRecentsGif(id) { - if (chatSectionChatContentInputAreaInst) - chatSectionChatContentInputAreaInst.addToRecentsGif(id) + if (gifsModuleInst) + gifsModuleInst.addToRecentsGif(id) } function getPasswordStrengthScore(password) {