fix[Chat] Jump to popup missing channel emojis

- add `emoji` to the channel list model
- WIP fix hiding unavailable channels due to permissions

Fixes #16623
This commit is contained in:
Lukáš Tinkl 2024-10-30 13:37:08 +01:00 committed by Lukáš Tinkl
parent 5aefbb8446
commit 3dd94f4b72
5 changed files with 40 additions and 4 deletions

View File

@ -8,8 +8,9 @@ type
sectionId: string sectionId: string
sectionName: string sectionName: string
colorHash: string colorHash: string
emoji: string
proc initItem*(chatId, name, color: string, colorId: int, icon, colorHash, sectionId, sectionName: string): Item = proc initItem*(chatId, name, color: string, colorId: int, icon, colorHash, sectionId, sectionName, emoji: string): Item =
result = Item() result = Item()
result.chatId = chatId result.chatId = chatId
result.name = name result.name = name
@ -19,6 +20,7 @@ proc initItem*(chatId, name, color: string, colorId: int, icon, colorHash, secti
result.colorHash = colorHash result.colorHash = colorHash
result.sectionId = sectionId result.sectionId = sectionId
result.sectionName = sectionName result.sectionName = sectionName
result.emoji = emoji
proc chatId*(self: Item): string = proc chatId*(self: Item): string =
self.chatId self.chatId
@ -43,3 +45,6 @@ proc sectionId*(self: Item): string =
proc sectionName*(self: Item): string = proc sectionName*(self: Item): string =
self.sectionName self.sectionName
proc emoji*(self: Item): string =
self.emoji

View File

@ -11,6 +11,7 @@ type
ColorHash ColorHash
SectionId SectionId
SectionName SectionName
Emoji
QtObject: QtObject:
type Model* = ref object of QAbstractListModel type Model* = ref object of QAbstractListModel
@ -45,6 +46,7 @@ QtObject:
ModelRole.ColorHash.int:"colorHash", ModelRole.ColorHash.int:"colorHash",
ModelRole.SectionId.int:"sectionId", ModelRole.SectionId.int:"sectionId",
ModelRole.SectionName.int:"sectionName", ModelRole.SectionName.int:"sectionName",
ModelRole.Emoji.int:"emoji",
}.toTable }.toTable
method data(self: Model, index: QModelIndex, role: int): QVariant = method data(self: Model, index: QModelIndex, role: int): QVariant =
@ -72,3 +74,5 @@ QtObject:
result = newQVariant(item.sectionId) result = newQVariant(item.sectionId)
of ModelRole.SectionName: of ModelRole.SectionName:
result = newQVariant(item.sectionName) result = newQVariant(item.sectionName)
of ModelRole.Emoji:
result = newQVariant(item.emoji)

View File

@ -989,6 +989,27 @@ method getCommunitySectionModule*[T](self: Module[T], communityId: string): QVar
method rebuildChatSearchModel*[T](self: Module[T]) = method rebuildChatSearchModel*[T](self: Module[T]) =
var items: seq[chat_search_item.Item] = @[] var items: seq[chat_search_item.Item] = @[]
for chat in self.controller.getAllChats(): for chat in self.controller.getAllChats():
let communityId = chat.communityId
# try to skip hidden chats
if chat.chatType == ChatType.CommunityChat and communityId != "":
let communityDto = self.controller.getCommunityById(communityId)
var chatId = chat.id
if not communityDto.hasCommunityChat(chatId):
# try with shortened chatId
warn "!!! main-module, unexisting communityId for chatId", communityId, chatId
chatId.removePrefix(communityId)
if not chatId.startsWith("0x"):
chatId = "0x" % chatId
if not communityDto.hasCommunityChat(chatId):
warn "!!! main-module, unexisting communityId for shortened chatId", communityId, chatId
#continue
else:
let communityChat = communityDto.getCommunityChat(chatId)
if communityChat.isHiddenChat:
continue
var chatName = chat.name var chatName = chat.name
var chatImage = chat.icon var chatImage = chat.icon
var colorHash: ColorHashDto = @[] var colorHash: ColorHashDto = @[]
@ -1003,7 +1024,7 @@ method rebuildChatSearchModel*[T](self: Module[T]) =
colorHash = self.controller.getColorHash(chat.id) colorHash = self.controller.getColorHash(chat.id)
colorId = self.controller.getColorId(chat.id) colorId = self.controller.getColorId(chat.id)
elif chat.chatType == ChatType.CommunityChat: elif chat.chatType == ChatType.CommunityChat:
sectionId = chat.communityId sectionId = communityId
sectionName = self.view.model().getItemById(sectionId).name() sectionName = self.view.model().getItemById(sectionId).name()
items.add(chat_search_item.initItem( items.add(chat_search_item.initItem(
chat.id, chat.id,
@ -1014,6 +1035,7 @@ method rebuildChatSearchModel*[T](self: Module[T]) =
colorHash.toJson(), colorHash.toJson(),
sectionId, sectionId,
sectionName, sectionName,
chat.emoji,
)) ))
self.view.chatSearchModel().setItems(items) self.view.chatSearchModel().setItems(items)

View File

@ -77,12 +77,12 @@ proc toImages(jsonObj: JsonNode): Images =
proc toContactRequestState*(value: int): ContactRequestState = proc toContactRequestState*(value: int): ContactRequestState =
result = ContactRequestState.None result = ContactRequestState.None
if value >= ord(low(ContactRequestState)) or value <= ord(high(ContactRequestState)): if value >= ord(low(ContactRequestState)) and value <= ord(high(ContactRequestState)):
result = ContactRequestState(value) result = ContactRequestState(value)
proc toTrustStatus*(value: int): TrustStatus = proc toTrustStatus*(value: int): TrustStatus =
result = TrustStatus.Unknown result = TrustStatus.Unknown
if value >= ord(low(TrustStatus)) or value <= ord(high(TrustStatus)): if value >= ord(low(TrustStatus)) and value <= ord(high(TrustStatus)):
result = TrustStatus(value) result = TrustStatus(value)
proc toContactsDto*(jsonObj: JsonNode): ContactsDto = proc toContactsDto*(jsonObj: JsonNode): ContactsDto =

View File

@ -109,6 +109,10 @@ Popup {
roleName: "name" roleName: "name"
searchPhrase: searchBox.text searchPhrase: searchBox.text
} }
enabled: !!searchBox.text
}
sorters: StringSorter {
roleName: "name"
} }
} }
@ -132,6 +136,7 @@ Popup {
asset.height: 30 asset.height: 30
asset.color: model ? model.color ? model.color : Utils.colorForColorId(model.colorId) : "" asset.color: model ? model.color ? model.color : Utils.colorForColorId(model.colorId) : ""
asset.name: model ? model.icon : "" asset.name: model ? model.icon : ""
asset.emoji: model ? model.emoji : ""
asset.charactersLen: 2 asset.charactersLen: 2
asset.letterSize: asset._twoLettersSize asset.letterSize: asset._twoLettersSize
ringSettings.ringSpecModel: model ? model.colorHash : undefined ringSettings.ringSpecModel: model ? model.colorHash : undefined