fix(Chat): ensure local nicknames are propagated properly

Fixes #1120
This commit is contained in:
Pascal Precht 2020-10-09 12:17:35 +02:00 committed by Iuri Matias
parent 8a7d6d3f7e
commit 1c2a7b0569
4 changed files with 42 additions and 6 deletions

View File

@ -11,6 +11,7 @@ proc handleChatEvents(self: ChatController) =
self.status.events.on("contactUpdate") do(e: Args): self.status.events.on("contactUpdate") do(e: Args):
var evArgs = ContactUpdateArgs(e) var evArgs = ContactUpdateArgs(e)
self.view.updateUsernames(evArgs.contacts) self.view.updateUsernames(evArgs.contacts)
self.view.updateChannelForContacts(evArgs.contacts)
self.status.events.on("chatUpdate") do(e: Args): self.status.events.on("chatUpdate") do(e: Args):
var evArgs = ChatUpdateArgs(e) var evArgs = ChatUpdateArgs(e)

View File

@ -402,6 +402,20 @@ QtObject:
for k in self.messageList.keys: for k in self.messageList.keys:
self.messageList[k].updateUsernames(contacts) self.messageList[k].updateUsernames(contacts)
proc updateChannelForContacts*(self: ChatsView, contacts: seq[Profile]) =
for contact in contacts:
let channel = self.chats.getChannelById(contact.id)
if not channel.isNil:
if contact.localNickname == "":
channel.name = contact.username
else:
channel.name = contact.localNickname
self.chats.updateChat(channel, false)
if (self.activeChannel.id == channel.id):
self.activeChannel.setChatItem(channel)
self.activeChannelChanged()
proc markMessageAsSent*(self:ChatsView, chat: string, messageId: string) = proc markMessageAsSent*(self:ChatsView, chat: string, messageId: string) =
self.messageList[chat].markMessageAsSent(messageId) self.messageList[chat].markMessageAsSent(messageId)

View File

@ -7,6 +7,7 @@ import libstatus/types
import stickers import stickers
import profile/profile import profile/profile
import contacts
import chat/[chat, message] import chat/[chat, message]
import signals/messages import signals/messages
import ens import ens
@ -114,6 +115,10 @@ proc join*(self: ChatModel, chatId: string, chatType: ChatType) =
self.events.emit("channelJoined", ChannelArgs(chat: chat)) self.events.emit("channelJoined", ChannelArgs(chat: chat))
proc updateContacts*(self: ChatModel, contacts: seq[Profile]) =
for c in contacts:
self.contacts[c.id] = c
self.events.emit("chatUpdate", ChatUpdateArgs(contacts: contacts))
proc init*(self: ChatModel) = proc init*(self: ChatModel) =
let chatList = status_chat.loadChats() let chatList = status_chat.loadChats()
@ -152,6 +157,10 @@ proc init*(self: ChatModel) =
self.events.once("mailserverAvailable") do(a: Args): self.events.once("mailserverAvailable") do(a: Args):
self.events.emit("mailserverTopics", TopicArgs(topics: topics)); self.events.emit("mailserverTopics", TopicArgs(topics: topics));
self.events.on("contactUpdate") do(a: Args):
var evArgs = ContactUpdateArgs(a)
self.updateContacts(evArgs.contacts)
proc leave*(self: ChatModel, chatId: string) = proc leave*(self: ChatModel, chatId: string) =
self.removeChatFilters(chatId) self.removeChatFilters(chatId)
@ -266,11 +275,6 @@ proc getUserName*(self: ChatModel, id: string, defaultUserName: string):string =
else: else:
return defaultUserName return defaultUserName
proc updateContacts*(self: ChatModel, contacts: seq[Profile]) =
for c in contacts:
self.contacts[c.id] = c
self.events.emit("chatUpdate", ChatUpdateArgs(contacts: contacts))
proc createGroup*(self: ChatModel, groupName: string, pubKeys: seq[string]) = proc createGroup*(self: ChatModel, groupName: string, pubKeys: seq[string]) =
var response = parseJson(status_chat.createGroup(groupName, pubKeys)) var response = parseJson(status_chat.createGroup(groupName, pubKeys))
var (chats, messages) = formatChatUpdate(response) var (chats, messages) = formatChatUpdate(response)

View File

@ -43,6 +43,8 @@ proc getContacts*(self: ContactModel): seq[Profile] =
proc addContact*(self: ContactModel, id: string, localNickname: string): string = proc addContact*(self: ContactModel, id: string, localNickname: string): string =
let contact = self.getContactByID(id) let contact = self.getContactByID(id)
let updating = contact.systemTags.contains(":contact/added")
if not updating:
contact.systemTags.add(":contact/added") contact.systemTags.add(":contact/added")
let nickname = let nickname =
if (localNickname == ""): if (localNickname == ""):
@ -53,6 +55,21 @@ proc addContact*(self: ContactModel, id: string, localNickname: string): string
localNickname localNickname
result = status_contacts.saveContact(contact.id, contact.ensVerified, contact.ensName, contact.ensVerifiedAt, contact.ensVerificationRetries, contact.alias, contact.identicon, contact.systemTags, nickname) result = status_contacts.saveContact(contact.id, contact.ensVerified, contact.ensName, contact.ensVerifiedAt, contact.ensVerificationRetries, contact.alias, contact.identicon, contact.systemTags, nickname)
self.events.emit("contactAdded", Args()) self.events.emit("contactAdded", Args())
if updating:
let profile = Profile(
id: contact.id,
username: contact.alias,
identicon: contact.identicon,
alias: contact.alias,
ensName: contact.ensName,
ensVerified: contact.ensVerified,
ensVerifiedAt: contact.ensVerifiedAt,
appearance: 0,
ensVerificationRetries: contact.ensVerificationRetries,
systemTags: contact.systemTags,
localNickname: nickname
)
self.events.emit("contactUpdate", ContactUpdateArgs(contacts: @[profile]))
proc addContact*(self: ContactModel, id: string): string = proc addContact*(self: ContactModel, id: string): string =
result = self.addContact(id, "") result = self.addContact(id, "")