mobile: remove most user data from responses, to reduce noice in errors/console (#2966)
* mobile: remove most user data from responses, to reduce noice in errors/console * small change for desktop --------- Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
This commit is contained in:
parent
e804df9d58
commit
a35ab7f9bc
@ -495,18 +495,18 @@ final class ChatModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func increaseUnreadCounter(user: User) {
|
func increaseUnreadCounter(user: any UserLike) {
|
||||||
changeUnreadCounter(user: user, by: 1)
|
changeUnreadCounter(user: user, by: 1)
|
||||||
NtfManager.shared.incNtfBadgeCount()
|
NtfManager.shared.incNtfBadgeCount()
|
||||||
}
|
}
|
||||||
|
|
||||||
func decreaseUnreadCounter(user: User, by: Int = 1) {
|
func decreaseUnreadCounter(user: any UserLike, by: Int = 1) {
|
||||||
changeUnreadCounter(user: user, by: -by)
|
changeUnreadCounter(user: user, by: -by)
|
||||||
NtfManager.shared.decNtfBadgeCount(by: by)
|
NtfManager.shared.decNtfBadgeCount(by: by)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func changeUnreadCounter(user: User, by: Int) {
|
private func changeUnreadCounter(user: any UserLike, by: Int) {
|
||||||
if let i = users.firstIndex(where: { $0.user.id == user.id }) {
|
if let i = users.firstIndex(where: { $0.user.userId == user.userId }) {
|
||||||
users[i].unreadCount += by
|
users[i].unreadCount += by
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -211,17 +211,17 @@ class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject {
|
|||||||
center.delegate = self
|
center.delegate = self
|
||||||
}
|
}
|
||||||
|
|
||||||
func notifyContactRequest(_ user: User, _ contactRequest: UserContactRequest) {
|
func notifyContactRequest(_ user: any UserLike, _ contactRequest: UserContactRequest) {
|
||||||
logger.debug("NtfManager.notifyContactRequest")
|
logger.debug("NtfManager.notifyContactRequest")
|
||||||
addNotification(createContactRequestNtf(user, contactRequest))
|
addNotification(createContactRequestNtf(user, contactRequest))
|
||||||
}
|
}
|
||||||
|
|
||||||
func notifyContactConnected(_ user: User, _ contact: Contact) {
|
func notifyContactConnected(_ user: any UserLike, _ contact: Contact) {
|
||||||
logger.debug("NtfManager.notifyContactConnected")
|
logger.debug("NtfManager.notifyContactConnected")
|
||||||
addNotification(createContactConnectedNtf(user, contact))
|
addNotification(createContactConnectedNtf(user, contact))
|
||||||
}
|
}
|
||||||
|
|
||||||
func notifyMessageReceived(_ user: User, _ cInfo: ChatInfo, _ cItem: ChatItem) {
|
func notifyMessageReceived(_ user: any UserLike, _ cInfo: ChatInfo, _ cItem: ChatItem) {
|
||||||
logger.debug("NtfManager.notifyMessageReceived")
|
logger.debug("NtfManager.notifyMessageReceived")
|
||||||
if cInfo.ntfsEnabled {
|
if cInfo.ntfsEnabled {
|
||||||
addNotification(createMessageReceivedNtf(user, cInfo, cItem))
|
addNotification(createMessageReceivedNtf(user, cInfo, cItem))
|
||||||
|
@ -807,7 +807,7 @@ func apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool) async throws {
|
|||||||
try await sendCommandOkResp(.apiChatUnread(type: type, id: id, unreadChat: unreadChat))
|
try await sendCommandOkResp(.apiChatUnread(type: type, id: id, unreadChat: unreadChat))
|
||||||
}
|
}
|
||||||
|
|
||||||
func receiveFile(user: User, fileId: Int64, auto: Bool = false) async {
|
func receiveFile(user: any UserLike, fileId: Int64, auto: Bool = false) async {
|
||||||
if let chatItem = await apiReceiveFile(fileId: fileId, auto: auto) {
|
if let chatItem = await apiReceiveFile(fileId: fileId, auto: auto) {
|
||||||
await chatItemSimpleUpdate(user, chatItem)
|
await chatItemSimpleUpdate(user, chatItem)
|
||||||
}
|
}
|
||||||
@ -1587,11 +1587,11 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func active(_ user: User) -> Bool {
|
func active(_ user: any UserLike) -> Bool {
|
||||||
user.id == ChatModel.shared.currentUser?.id
|
user.userId == ChatModel.shared.currentUser?.id
|
||||||
}
|
}
|
||||||
|
|
||||||
func chatItemSimpleUpdate(_ user: User, _ aChatItem: AChatItem) async {
|
func chatItemSimpleUpdate(_ user: any UserLike, _ aChatItem: AChatItem) async {
|
||||||
let m = ChatModel.shared
|
let m = ChatModel.shared
|
||||||
let cInfo = aChatItem.chatInfo
|
let cInfo = aChatItem.chatInfo
|
||||||
let cItem = aChatItem.chatItem
|
let cItem = aChatItem.chatItem
|
||||||
|
@ -136,7 +136,7 @@ public func chatResponse(_ s: String) -> ChatResponse {
|
|||||||
type = jResp.allKeys[0] as? String
|
type = jResp.allKeys[0] as? String
|
||||||
if type == "apiChats" {
|
if type == "apiChats" {
|
||||||
if let jApiChats = jResp["apiChats"] as? NSDictionary,
|
if let jApiChats = jResp["apiChats"] as? NSDictionary,
|
||||||
let user: User = try? decodeObject(jApiChats["user"] as Any),
|
let user: UserRef = try? decodeObject(jApiChats["user"] as Any),
|
||||||
let jChats = jApiChats["chats"] as? NSArray {
|
let jChats = jApiChats["chats"] as? NSArray {
|
||||||
let chats = jChats.map { jChat in
|
let chats = jChats.map { jChat in
|
||||||
if let chatData = try? parseChatData(jChat) {
|
if let chatData = try? parseChatData(jChat) {
|
||||||
@ -148,16 +148,21 @@ public func chatResponse(_ s: String) -> ChatResponse {
|
|||||||
}
|
}
|
||||||
} else if type == "apiChat" {
|
} else if type == "apiChat" {
|
||||||
if let jApiChat = jResp["apiChat"] as? NSDictionary,
|
if let jApiChat = jResp["apiChat"] as? NSDictionary,
|
||||||
let user: User = try? decodeObject(jApiChat["user"] as Any),
|
let user: UserRef = try? decodeObject(jApiChat["user"] as Any),
|
||||||
let jChat = jApiChat["chat"] as? NSDictionary,
|
let jChat = jApiChat["chat"] as? NSDictionary,
|
||||||
let chat = try? parseChatData(jChat) {
|
let chat = try? parseChatData(jChat) {
|
||||||
return .apiChat(user: user, chat: chat)
|
return .apiChat(user: user, chat: chat)
|
||||||
}
|
}
|
||||||
} else if type == "chatCmdError" {
|
} else if type == "chatCmdError" {
|
||||||
if let jError = jResp["chatCmdError"] as? NSDictionary {
|
if let jError = jResp["chatCmdError"] as? NSDictionary {
|
||||||
let user: User? = try? decodeObject(jError["user_"] as Any)
|
let user: UserRef? = try? decodeObject(jError["user_"] as Any)
|
||||||
return .chatCmdError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
|
return .chatCmdError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
|
||||||
}
|
}
|
||||||
|
} else if type == "chatError" {
|
||||||
|
if let jError = jResp["chatError"] as? NSDictionary {
|
||||||
|
let user: UserRef? = try? decodeObject(jError["user_"] as Any)
|
||||||
|
return .chatError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
json = prettyJSON(j)
|
json = prettyJSON(j)
|
||||||
|
@ -424,128 +424,128 @@ public enum ChatResponse: Decodable, Error {
|
|||||||
case chatRunning
|
case chatRunning
|
||||||
case chatStopped
|
case chatStopped
|
||||||
case chatSuspended
|
case chatSuspended
|
||||||
case apiChats(user: User, chats: [ChatData])
|
case apiChats(user: UserRef, chats: [ChatData])
|
||||||
case apiChat(user: User, chat: ChatData)
|
case apiChat(user: UserRef, chat: ChatData)
|
||||||
case chatItemInfo(user: User, chatItem: AChatItem, chatItemInfo: ChatItemInfo)
|
case chatItemInfo(user: UserRef, chatItem: AChatItem, chatItemInfo: ChatItemInfo)
|
||||||
case userProtoServers(user: User, servers: UserProtoServers)
|
case userProtoServers(user: UserRef, servers: UserProtoServers)
|
||||||
case serverTestResult(user: User, testServer: String, testFailure: ProtocolTestFailure?)
|
case serverTestResult(user: UserRef, testServer: String, testFailure: ProtocolTestFailure?)
|
||||||
case chatItemTTL(user: User, chatItemTTL: Int64?)
|
case chatItemTTL(user: UserRef, chatItemTTL: Int64?)
|
||||||
case networkConfig(networkConfig: NetCfg)
|
case networkConfig(networkConfig: NetCfg)
|
||||||
case contactInfo(user: User, contact: Contact, connectionStats: ConnectionStats, customUserProfile: Profile?)
|
case contactInfo(user: UserRef, contact: Contact, connectionStats: ConnectionStats, customUserProfile: Profile?)
|
||||||
case groupMemberInfo(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?)
|
case groupMemberInfo(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?)
|
||||||
case contactSwitchStarted(user: User, contact: Contact, connectionStats: ConnectionStats)
|
case contactSwitchStarted(user: UserRef, contact: Contact, connectionStats: ConnectionStats)
|
||||||
case groupMemberSwitchStarted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
case groupMemberSwitchStarted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
||||||
case contactSwitchAborted(user: User, contact: Contact, connectionStats: ConnectionStats)
|
case contactSwitchAborted(user: UserRef, contact: Contact, connectionStats: ConnectionStats)
|
||||||
case groupMemberSwitchAborted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
case groupMemberSwitchAborted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
||||||
case contactSwitch(user: User, contact: Contact, switchProgress: SwitchProgress)
|
case contactSwitch(user: UserRef, contact: Contact, switchProgress: SwitchProgress)
|
||||||
case groupMemberSwitch(user: User, groupInfo: GroupInfo, member: GroupMember, switchProgress: SwitchProgress)
|
case groupMemberSwitch(user: UserRef, groupInfo: GroupInfo, member: GroupMember, switchProgress: SwitchProgress)
|
||||||
case contactRatchetSyncStarted(user: User, contact: Contact, connectionStats: ConnectionStats)
|
case contactRatchetSyncStarted(user: UserRef, contact: Contact, connectionStats: ConnectionStats)
|
||||||
case groupMemberRatchetSyncStarted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
case groupMemberRatchetSyncStarted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
||||||
case contactRatchetSync(user: User, contact: Contact, ratchetSyncProgress: RatchetSyncProgress)
|
case contactRatchetSync(user: UserRef, contact: Contact, ratchetSyncProgress: RatchetSyncProgress)
|
||||||
case groupMemberRatchetSync(user: User, groupInfo: GroupInfo, member: GroupMember, ratchetSyncProgress: RatchetSyncProgress)
|
case groupMemberRatchetSync(user: UserRef, groupInfo: GroupInfo, member: GroupMember, ratchetSyncProgress: RatchetSyncProgress)
|
||||||
case contactVerificationReset(user: User, contact: Contact)
|
case contactVerificationReset(user: UserRef, contact: Contact)
|
||||||
case groupMemberVerificationReset(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case groupMemberVerificationReset(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case contactCode(user: User, contact: Contact, connectionCode: String)
|
case contactCode(user: UserRef, contact: Contact, connectionCode: String)
|
||||||
case groupMemberCode(user: User, groupInfo: GroupInfo, member: GroupMember, connectionCode: String)
|
case groupMemberCode(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionCode: String)
|
||||||
case connectionVerified(user: User, verified: Bool, expectedCode: String)
|
case connectionVerified(user: UserRef, verified: Bool, expectedCode: String)
|
||||||
case invitation(user: User, connReqInvitation: String, connection: PendingContactConnection)
|
case invitation(user: UserRef, connReqInvitation: String, connection: PendingContactConnection)
|
||||||
case connectionIncognitoUpdated(user: User, toConnection: PendingContactConnection)
|
case connectionIncognitoUpdated(user: UserRef, toConnection: PendingContactConnection)
|
||||||
case sentConfirmation(user: User)
|
case sentConfirmation(user: UserRef)
|
||||||
case sentInvitation(user: User)
|
case sentInvitation(user: UserRef)
|
||||||
case contactAlreadyExists(user: User, contact: Contact)
|
case contactAlreadyExists(user: UserRef, contact: Contact)
|
||||||
case contactRequestAlreadyAccepted(user: User, contact: Contact)
|
case contactRequestAlreadyAccepted(user: UserRef, contact: Contact)
|
||||||
case contactDeleted(user: User, contact: Contact)
|
case contactDeleted(user: UserRef, contact: Contact)
|
||||||
case chatCleared(user: User, chatInfo: ChatInfo)
|
case chatCleared(user: UserRef, chatInfo: ChatInfo)
|
||||||
case userProfileNoChange(user: User)
|
case userProfileNoChange(user: User)
|
||||||
case userProfileUpdated(user: User, fromProfile: Profile, toProfile: Profile)
|
case userProfileUpdated(user: User, fromProfile: Profile, toProfile: Profile)
|
||||||
case userPrivacy(user: User, updatedUser: User)
|
case userPrivacy(user: User, updatedUser: User)
|
||||||
case contactAliasUpdated(user: User, toContact: Contact)
|
case contactAliasUpdated(user: UserRef, toContact: Contact)
|
||||||
case connectionAliasUpdated(user: User, toConnection: PendingContactConnection)
|
case connectionAliasUpdated(user: UserRef, toConnection: PendingContactConnection)
|
||||||
case contactPrefsUpdated(user: User, fromContact: Contact, toContact: Contact)
|
case contactPrefsUpdated(user: User, fromContact: Contact, toContact: Contact)
|
||||||
case userContactLink(user: User, contactLink: UserContactLink)
|
case userContactLink(user: User, contactLink: UserContactLink)
|
||||||
case userContactLinkUpdated(user: User, contactLink: UserContactLink)
|
case userContactLinkUpdated(user: User, contactLink: UserContactLink)
|
||||||
case userContactLinkCreated(user: User, connReqContact: String)
|
case userContactLinkCreated(user: User, connReqContact: String)
|
||||||
case userContactLinkDeleted(user: User)
|
case userContactLinkDeleted(user: User)
|
||||||
case contactConnected(user: User, contact: Contact, userCustomProfile: Profile?)
|
case contactConnected(user: UserRef, contact: Contact, userCustomProfile: Profile?)
|
||||||
case contactConnecting(user: User, contact: Contact)
|
case contactConnecting(user: UserRef, contact: Contact)
|
||||||
case receivedContactRequest(user: User, contactRequest: UserContactRequest)
|
case receivedContactRequest(user: UserRef, contactRequest: UserContactRequest)
|
||||||
case acceptingContactRequest(user: User, contact: Contact)
|
case acceptingContactRequest(user: UserRef, contact: Contact)
|
||||||
case contactRequestRejected(user: User)
|
case contactRequestRejected(user: UserRef)
|
||||||
case contactUpdated(user: User, toContact: Contact)
|
case contactUpdated(user: UserRef, toContact: Contact)
|
||||||
case contactsSubscribed(server: String, contactRefs: [ContactRef])
|
case contactsSubscribed(server: String, contactRefs: [ContactRef])
|
||||||
case contactsDisconnected(server: String, contactRefs: [ContactRef])
|
case contactsDisconnected(server: String, contactRefs: [ContactRef])
|
||||||
case contactSubError(user: User, contact: Contact, chatError: ChatError)
|
case contactSubError(user: UserRef, contact: Contact, chatError: ChatError)
|
||||||
case contactSubSummary(user: User, contactSubscriptions: [ContactSubStatus])
|
case contactSubSummary(user: UserRef, contactSubscriptions: [ContactSubStatus])
|
||||||
case groupSubscribed(user: User, groupInfo: GroupInfo)
|
case groupSubscribed(user: UserRef, groupInfo: GroupInfo)
|
||||||
case memberSubErrors(user: User, memberSubErrors: [MemberSubError])
|
case memberSubErrors(user: UserRef, memberSubErrors: [MemberSubError])
|
||||||
case groupEmpty(user: User, groupInfo: GroupInfo)
|
case groupEmpty(user: UserRef, groupInfo: GroupInfo)
|
||||||
case userContactLinkSubscribed
|
case userContactLinkSubscribed
|
||||||
case newChatItem(user: User, chatItem: AChatItem)
|
case newChatItem(user: UserRef, chatItem: AChatItem)
|
||||||
case chatItemStatusUpdated(user: User, chatItem: AChatItem)
|
case chatItemStatusUpdated(UserRef: User, chatItem: AChatItem)
|
||||||
case chatItemUpdated(user: User, chatItem: AChatItem)
|
case chatItemUpdated(user: UserRef, chatItem: AChatItem)
|
||||||
case chatItemNotChanged(user: User, chatItem: AChatItem)
|
case chatItemNotChanged(user: UserRef, chatItem: AChatItem)
|
||||||
case chatItemReaction(user: User, added: Bool, reaction: ACIReaction)
|
case chatItemReaction(user: UserRef, added: Bool, reaction: ACIReaction)
|
||||||
case chatItemDeleted(user: User, deletedChatItem: AChatItem, toChatItem: AChatItem?, byUser: Bool)
|
case chatItemDeleted(user: UserRef, deletedChatItem: AChatItem, toChatItem: AChatItem?, byUser: Bool)
|
||||||
case contactsList(user: User, contacts: [Contact])
|
case contactsList(user: UserRef, contacts: [Contact])
|
||||||
// group events
|
// group events
|
||||||
case groupCreated(user: User, groupInfo: GroupInfo)
|
case groupCreated(user: UserRef, groupInfo: GroupInfo)
|
||||||
case sentGroupInvitation(user: User, groupInfo: GroupInfo, contact: Contact, member: GroupMember)
|
case sentGroupInvitation(user: UserRef, groupInfo: GroupInfo, contact: Contact, member: GroupMember)
|
||||||
case userAcceptedGroupSent(user: User, groupInfo: GroupInfo, hostContact: Contact?)
|
case userAcceptedGroupSent(user: UserRef, groupInfo: GroupInfo, hostContact: Contact?)
|
||||||
case userDeletedMember(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case userDeletedMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case leftMemberUser(user: User, groupInfo: GroupInfo)
|
case leftMemberUser(user: UserRef, groupInfo: GroupInfo)
|
||||||
case groupMembers(user: User, group: Group)
|
case groupMembers(user: UserRef, group: Group)
|
||||||
case receivedGroupInvitation(user: User, groupInfo: GroupInfo, contact: Contact, memberRole: GroupMemberRole)
|
case receivedGroupInvitation(user: UserRef, groupInfo: GroupInfo, contact: Contact, memberRole: GroupMemberRole)
|
||||||
case groupDeletedUser(user: User, groupInfo: GroupInfo)
|
case groupDeletedUser(user: UserRef, groupInfo: GroupInfo)
|
||||||
case joinedGroupMemberConnecting(user: User, groupInfo: GroupInfo, hostMember: GroupMember, member: GroupMember)
|
case joinedGroupMemberConnecting(user: UserRef, groupInfo: GroupInfo, hostMember: GroupMember, member: GroupMember)
|
||||||
case memberRole(user: User, groupInfo: GroupInfo, byMember: GroupMember, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
case memberRole(user: UserRef, groupInfo: GroupInfo, byMember: GroupMember, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
||||||
case memberRoleUser(user: User, groupInfo: GroupInfo, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
case memberRoleUser(user: UserRef, groupInfo: GroupInfo, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
||||||
case deletedMemberUser(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case deletedMemberUser(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case deletedMember(user: User, groupInfo: GroupInfo, byMember: GroupMember, deletedMember: GroupMember)
|
case deletedMember(user: UserRef, groupInfo: GroupInfo, byMember: GroupMember, deletedMember: GroupMember)
|
||||||
case leftMember(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case leftMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case groupDeleted(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case groupDeleted(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case contactsMerged(user: User, intoContact: Contact, mergedContact: Contact)
|
case contactsMerged(user: UserRef, intoContact: Contact, mergedContact: Contact)
|
||||||
case groupInvitation(user: User, groupInfo: GroupInfo) // unused
|
case groupInvitation(user: UserRef, groupInfo: GroupInfo) // unused
|
||||||
case userJoinedGroup(user: User, groupInfo: GroupInfo)
|
case userJoinedGroup(user: UserRef, groupInfo: GroupInfo)
|
||||||
case joinedGroupMember(user: User, groupInfo: GroupInfo, member: GroupMember)
|
case joinedGroupMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember)
|
||||||
case connectedToGroupMember(user: User, groupInfo: GroupInfo, member: GroupMember, memberContact: Contact?)
|
case connectedToGroupMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember, memberContact: Contact?)
|
||||||
case groupRemoved(user: User, groupInfo: GroupInfo) // unused
|
case groupRemoved(user: UserRef, groupInfo: GroupInfo) // unused
|
||||||
case groupUpdated(user: User, toGroup: GroupInfo)
|
case groupUpdated(user: UserRef, toGroup: GroupInfo)
|
||||||
case groupLinkCreated(user: User, groupInfo: GroupInfo, connReqContact: String, memberRole: GroupMemberRole)
|
case groupLinkCreated(user: UserRef, groupInfo: GroupInfo, connReqContact: String, memberRole: GroupMemberRole)
|
||||||
case groupLink(user: User, groupInfo: GroupInfo, connReqContact: String, memberRole: GroupMemberRole)
|
case groupLink(user: UserRef, groupInfo: GroupInfo, connReqContact: String, memberRole: GroupMemberRole)
|
||||||
case groupLinkDeleted(user: User, groupInfo: GroupInfo)
|
case groupLinkDeleted(user: UserRef, groupInfo: GroupInfo)
|
||||||
// receiving file events
|
// receiving file events
|
||||||
case rcvFileAccepted(user: User, chatItem: AChatItem)
|
case rcvFileAccepted(user: UserRef, chatItem: AChatItem)
|
||||||
case rcvFileAcceptedSndCancelled(user: User, rcvFileTransfer: RcvFileTransfer)
|
case rcvFileAcceptedSndCancelled(user: UserRef, rcvFileTransfer: RcvFileTransfer)
|
||||||
case rcvFileStart(user: User, chatItem: AChatItem)
|
case rcvFileStart(user: UserRef, chatItem: AChatItem)
|
||||||
case rcvFileProgressXFTP(user: User, chatItem: AChatItem, receivedSize: Int64, totalSize: Int64)
|
case rcvFileProgressXFTP(user: UserRef, chatItem: AChatItem, receivedSize: Int64, totalSize: Int64)
|
||||||
case rcvFileComplete(user: User, chatItem: AChatItem)
|
case rcvFileComplete(user: UserRef, chatItem: AChatItem)
|
||||||
case rcvFileCancelled(user: User, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
|
case rcvFileCancelled(user: UserRef, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
|
||||||
case rcvFileSndCancelled(user: User, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
|
case rcvFileSndCancelled(user: UserRef, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
|
||||||
case rcvFileError(user: User, chatItem: AChatItem)
|
case rcvFileError(user: UserRef, chatItem: AChatItem)
|
||||||
// sending file events
|
// sending file events
|
||||||
case sndFileStart(user: User, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
case sndFileStart(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
||||||
case sndFileComplete(user: User, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
case sndFileComplete(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
||||||
case sndFileCancelled(user: User, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sndFileTransfers: [SndFileTransfer])
|
case sndFileCancelled(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sndFileTransfers: [SndFileTransfer])
|
||||||
case sndFileRcvCancelled(user: User, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
case sndFileRcvCancelled(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
|
||||||
case sndFileProgressXFTP(user: User, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sentSize: Int64, totalSize: Int64)
|
case sndFileProgressXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sentSize: Int64, totalSize: Int64)
|
||||||
case sndFileCompleteXFTP(user: User, chatItem: AChatItem, fileTransferMeta: FileTransferMeta)
|
case sndFileCompleteXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta)
|
||||||
case sndFileError(user: User, chatItem: AChatItem)
|
case sndFileError(user: UserRef, chatItem: AChatItem)
|
||||||
// call events
|
// call events
|
||||||
case callInvitation(callInvitation: RcvCallInvitation)
|
case callInvitation(callInvitation: RcvCallInvitation)
|
||||||
case callOffer(user: User, contact: Contact, callType: CallType, offer: WebRTCSession, sharedKey: String?, askConfirmation: Bool)
|
case callOffer(user: UserRef, contact: Contact, callType: CallType, offer: WebRTCSession, sharedKey: String?, askConfirmation: Bool)
|
||||||
case callAnswer(user: User, contact: Contact, answer: WebRTCSession)
|
case callAnswer(user: UserRef, contact: Contact, answer: WebRTCSession)
|
||||||
case callExtraInfo(user: User, contact: Contact, extraInfo: WebRTCExtraInfo)
|
case callExtraInfo(user: UserRef, contact: Contact, extraInfo: WebRTCExtraInfo)
|
||||||
case callEnded(user: User, contact: Contact)
|
case callEnded(user: UserRef, contact: Contact)
|
||||||
case callInvitations(callInvitations: [RcvCallInvitation])
|
case callInvitations(callInvitations: [RcvCallInvitation])
|
||||||
case ntfTokenStatus(status: NtfTknStatus)
|
case ntfTokenStatus(status: NtfTknStatus)
|
||||||
case ntfToken(token: DeviceToken, status: NtfTknStatus, ntfMode: NotificationsMode)
|
case ntfToken(token: DeviceToken, status: NtfTknStatus, ntfMode: NotificationsMode)
|
||||||
case ntfMessages(user_: User?, connEntity: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
|
case ntfMessages(user_: User?, connEntity: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
|
||||||
case newContactConnection(user: User, connection: PendingContactConnection)
|
case newContactConnection(user: UserRef, connection: PendingContactConnection)
|
||||||
case contactConnectionDeleted(user: User, connection: PendingContactConnection)
|
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
||||||
case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration])
|
case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration])
|
||||||
case cmdOk(user: User?)
|
case cmdOk(user: UserRef?)
|
||||||
case chatCmdError(user_: User?, chatError: ChatError)
|
case chatCmdError(user_: UserRef?, chatError: ChatError)
|
||||||
case chatError(user_: User?, chatError: ChatError)
|
case chatError(user_: UserRef?, chatError: ChatError)
|
||||||
case archiveImported(archiveErrors: [ArchiveError])
|
case archiveImported(archiveErrors: [ArchiveError])
|
||||||
|
|
||||||
public var responseType: String {
|
public var responseType: String {
|
||||||
@ -816,7 +816,7 @@ public enum ChatResponse: Decodable, Error {
|
|||||||
|
|
||||||
private var noDetails: String { get { "\(responseType): no details" } }
|
private var noDetails: String { get { "\(responseType): no details" } }
|
||||||
|
|
||||||
private func withUser(_ u: User?, _ s: String) -> String {
|
private func withUser(_ u: (any UserLike)?, _ s: String) -> String {
|
||||||
if let id = u?.userId {
|
if let id = u?.userId {
|
||||||
return "userId: \(id)\n\(s)"
|
return "userId: \(id)\n\(s)"
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
public struct User: Decodable, NamedChat, Identifiable {
|
public struct User: Identifiable, Decodable, UserLike, NamedChat {
|
||||||
public var userId: Int64
|
public var userId: Int64
|
||||||
var userContactId: Int64
|
var userContactId: Int64
|
||||||
var localDisplayName: ContactName
|
var localDisplayName: ContactName
|
||||||
@ -52,6 +52,17 @@ public struct User: Decodable, NamedChat, Identifiable {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct UserRef: Identifiable, Decodable, UserLike {
|
||||||
|
public var userId: Int64
|
||||||
|
public var localDisplayName: ContactName
|
||||||
|
|
||||||
|
public var id: Int64 { userId }
|
||||||
|
}
|
||||||
|
|
||||||
|
public protocol UserLike: Identifiable {
|
||||||
|
var userId: Int64 { get }
|
||||||
|
}
|
||||||
|
|
||||||
public struct UserPwdHash: Decodable {
|
public struct UserPwdHash: Decodable {
|
||||||
public var hash: String
|
public var hash: String
|
||||||
public var salt: String
|
public var salt: String
|
||||||
|
@ -21,7 +21,7 @@ public let appNotificationId = "chat.simplex.app.notification"
|
|||||||
|
|
||||||
let contactHidden = NSLocalizedString("Contact hidden:", comment: "notification")
|
let contactHidden = NSLocalizedString("Contact hidden:", comment: "notification")
|
||||||
|
|
||||||
public func createContactRequestNtf(_ user: User, _ contactRequest: UserContactRequest) -> UNMutableNotificationContent {
|
public func createContactRequestNtf(_ user: any UserLike, _ contactRequest: UserContactRequest) -> UNMutableNotificationContent {
|
||||||
let hideContent = ntfPreviewModeGroupDefault.get() == .hidden
|
let hideContent = ntfPreviewModeGroupDefault.get() == .hidden
|
||||||
return createNotification(
|
return createNotification(
|
||||||
categoryIdentifier: ntfCategoryContactRequest,
|
categoryIdentifier: ntfCategoryContactRequest,
|
||||||
@ -38,7 +38,7 @@ public func createContactRequestNtf(_ user: User, _ contactRequest: UserContactR
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func createContactConnectedNtf(_ user: User, _ contact: Contact) -> UNMutableNotificationContent {
|
public func createContactConnectedNtf(_ user: any UserLike, _ contact: Contact) -> UNMutableNotificationContent {
|
||||||
let hideContent = ntfPreviewModeGroupDefault.get() == .hidden
|
let hideContent = ntfPreviewModeGroupDefault.get() == .hidden
|
||||||
return createNotification(
|
return createNotification(
|
||||||
categoryIdentifier: ntfCategoryContactConnected,
|
categoryIdentifier: ntfCategoryContactConnected,
|
||||||
@ -56,7 +56,7 @@ public func createContactConnectedNtf(_ user: User, _ contact: Contact) -> UNMut
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func createMessageReceivedNtf(_ user: User, _ cInfo: ChatInfo, _ cItem: ChatItem) -> UNMutableNotificationContent {
|
public func createMessageReceivedNtf(_ user: any UserLike, _ cInfo: ChatInfo, _ cItem: ChatItem) -> UNMutableNotificationContent {
|
||||||
let previewMode = ntfPreviewModeGroupDefault.get()
|
let previewMode = ntfPreviewModeGroupDefault.get()
|
||||||
var title: String
|
var title: String
|
||||||
if case let .group(groupInfo) = cInfo, case let .groupRcv(groupMember) = cItem.chatDir {
|
if case let .group(groupInfo) = cInfo, case let .groupRcv(groupMember) = cItem.chatDir {
|
||||||
|
@ -143,7 +143,7 @@ class SimplexApp: Application(), LifecycleEventObserver {
|
|||||||
override fun notifyCallInvitation(invitation: RcvCallInvitation) = NtfManager.notifyCallInvitation(invitation)
|
override fun notifyCallInvitation(invitation: RcvCallInvitation) = NtfManager.notifyCallInvitation(invitation)
|
||||||
override fun hasNotificationsForChat(chatId: String): Boolean = NtfManager.hasNotificationsForChat(chatId)
|
override fun hasNotificationsForChat(chatId: String): Boolean = NtfManager.hasNotificationsForChat(chatId)
|
||||||
override fun cancelNotificationsForChat(chatId: String) = NtfManager.cancelNotificationsForChat(chatId)
|
override fun cancelNotificationsForChat(chatId: String) = NtfManager.cancelNotificationsForChat(chatId)
|
||||||
override fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions.map { it.first })
|
override fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions.map { it.first })
|
||||||
override fun androidCreateNtfChannelsMaybeShowAlert() = NtfManager.createNtfChannelsMaybeShowAlert()
|
override fun androidCreateNtfChannelsMaybeShowAlert() = NtfManager.createNtfChannelsMaybeShowAlert()
|
||||||
override fun cancelCallNotification() = NtfManager.cancelCallNotification()
|
override fun cancelCallNotification() = NtfManager.cancelCallNotification()
|
||||||
override fun cancelAllNotifications() = NtfManager.cancelAllNotifications()
|
override fun cancelAllNotifications() = NtfManager.cancelAllNotifications()
|
||||||
|
@ -81,7 +81,7 @@ object NtfManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List<NotificationAction> = emptyList()) {
|
fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List<NotificationAction> = emptyList()) {
|
||||||
if (!user.showNotifications) return
|
if (!user.showNotifications) return
|
||||||
Log.d(TAG, "notifyMessageReceived $chatId")
|
Log.d(TAG, "notifyMessageReceived $chatId")
|
||||||
val now = Clock.System.now().toEpochMilliseconds()
|
val now = Clock.System.now().toEpochMilliseconds()
|
||||||
|
@ -407,18 +407,18 @@ object ChatModel {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun increaseUnreadCounter(user: User) {
|
fun increaseUnreadCounter(user: UserLike) {
|
||||||
changeUnreadCounter(user, 1)
|
changeUnreadCounter(user, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun decreaseUnreadCounter(user: User, by: Int = 1) {
|
fun decreaseUnreadCounter(user: UserLike, by: Int = 1) {
|
||||||
changeUnreadCounter(user, -by)
|
changeUnreadCounter(user, -by)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun changeUnreadCounter(user: User, by: Int) {
|
private fun changeUnreadCounter(user: UserLike, by: Int) {
|
||||||
val i = users.indexOfFirst { it.user.userId == user.userId }
|
val i = users.indexOfFirst { it.user.userId == user.userId }
|
||||||
if (i != -1) {
|
if (i != -1) {
|
||||||
users[i] = UserInfo(user, users[i].unreadCount + by)
|
users[i] = UserInfo(users[i].user, users[i].unreadCount + by)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,17 +500,17 @@ enum class ChatType(val type: String) {
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class User(
|
data class User(
|
||||||
val userId: Long,
|
override val userId: Long,
|
||||||
val userContactId: Long,
|
val userContactId: Long,
|
||||||
val localDisplayName: String,
|
val localDisplayName: String,
|
||||||
val profile: LocalProfile,
|
val profile: LocalProfile,
|
||||||
val fullPreferences: FullChatPreferences,
|
val fullPreferences: FullChatPreferences,
|
||||||
val activeUser: Boolean,
|
override val activeUser: Boolean,
|
||||||
val showNtfs: Boolean,
|
override val showNtfs: Boolean,
|
||||||
val sendRcptsContacts: Boolean,
|
val sendRcptsContacts: Boolean,
|
||||||
val sendRcptsSmallGroups: Boolean,
|
val sendRcptsSmallGroups: Boolean,
|
||||||
val viewPwdHash: UserPwdHash?
|
val viewPwdHash: UserPwdHash?
|
||||||
): NamedChat {
|
): NamedChat, UserLike {
|
||||||
override val displayName: String get() = profile.displayName
|
override val displayName: String get() = profile.displayName
|
||||||
override val fullName: String get() = profile.fullName
|
override val fullName: String get() = profile.fullName
|
||||||
override val image: String? get() = profile.image
|
override val image: String? get() = profile.image
|
||||||
@ -518,8 +518,6 @@ data class User(
|
|||||||
|
|
||||||
val hidden: Boolean = viewPwdHash != null
|
val hidden: Boolean = viewPwdHash != null
|
||||||
|
|
||||||
val showNotifications: Boolean = activeUser || showNtfs
|
|
||||||
|
|
||||||
val addressShared: Boolean = profile.contactLink != null
|
val addressShared: Boolean = profile.contactLink != null
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ -538,6 +536,22 @@ data class User(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class UserRef(
|
||||||
|
override val userId: Long,
|
||||||
|
val localDisplayName: String,
|
||||||
|
override val activeUser: Boolean,
|
||||||
|
override val showNtfs: Boolean
|
||||||
|
): UserLike {}
|
||||||
|
|
||||||
|
interface UserLike {
|
||||||
|
val userId: Long
|
||||||
|
val activeUser: Boolean
|
||||||
|
val showNtfs: Boolean
|
||||||
|
|
||||||
|
val showNotifications: Boolean get() = activeUser || showNtfs
|
||||||
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class UserPwdHash(
|
data class UserPwdHash(
|
||||||
val hash: String,
|
val hash: String,
|
||||||
|
@ -1636,7 +1636,7 @@ object ChatController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun active(user: User): Boolean = user.userId == chatModel.currentUser.value?.userId
|
private fun active(user: UserLike): Boolean = user.userId == chatModel.currentUser.value?.userId
|
||||||
|
|
||||||
private fun withCall(r: CR, contact: Contact, perform: (Call) -> Unit) {
|
private fun withCall(r: CR, contact: Contact, perform: (Call) -> Unit) {
|
||||||
val call = chatModel.activeCall.value
|
val call = chatModel.activeCall.value
|
||||||
@ -1647,7 +1647,7 @@ object ChatController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun receiveFile(user: User, fileId: Long, auto: Boolean = false) {
|
suspend fun receiveFile(user: UserLike, fileId: Long, auto: Boolean = false) {
|
||||||
val chatItem = apiReceiveFile(fileId, auto = auto)
|
val chatItem = apiReceiveFile(fileId, auto = auto)
|
||||||
if (chatItem != null) {
|
if (chatItem != null) {
|
||||||
chatItemSimpleUpdate(user, chatItem)
|
chatItemSimpleUpdate(user, chatItem)
|
||||||
@ -1661,7 +1661,7 @@ object ChatController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun chatItemSimpleUpdate(user: User, aChatItem: AChatItem) {
|
private suspend fun chatItemSimpleUpdate(user: UserLike, aChatItem: AChatItem) {
|
||||||
val cInfo = aChatItem.chatInfo
|
val cInfo = aChatItem.chatInfo
|
||||||
val cItem = aChatItem.chatItem
|
val cItem = aChatItem.chatItem
|
||||||
val notify = { ntfManager.notifyMessageReceived(user, cInfo, cItem) }
|
val notify = { ntfManager.notifyMessageReceived(user, cInfo, cItem) }
|
||||||
@ -3149,7 +3149,7 @@ class APIResponse(val resp: CR, val corr: String? = null) {
|
|||||||
val type = resp["type"]?.jsonPrimitive?.content ?: "invalid"
|
val type = resp["type"]?.jsonPrimitive?.content ?: "invalid"
|
||||||
try {
|
try {
|
||||||
if (type == "apiChats") {
|
if (type == "apiChats") {
|
||||||
val user: User = json.decodeFromJsonElement(resp["user"]!!.jsonObject)
|
val user: UserRef = json.decodeFromJsonElement(resp["user"]!!.jsonObject)
|
||||||
val chats: List<Chat> = resp["chats"]!!.jsonArray.map {
|
val chats: List<Chat> = resp["chats"]!!.jsonArray.map {
|
||||||
parseChatData(it)
|
parseChatData(it)
|
||||||
}
|
}
|
||||||
@ -3158,7 +3158,7 @@ class APIResponse(val resp: CR, val corr: String? = null) {
|
|||||||
corr = data["corr"]?.toString()
|
corr = data["corr"]?.toString()
|
||||||
)
|
)
|
||||||
} else if (type == "apiChat") {
|
} else if (type == "apiChat") {
|
||||||
val user: User = json.decodeFromJsonElement(resp["user"]!!.jsonObject)
|
val user: UserRef = json.decodeFromJsonElement(resp["user"]!!.jsonObject)
|
||||||
val chat = parseChatData(resp["chat"]!!)
|
val chat = parseChatData(resp["chat"]!!)
|
||||||
return APIResponse(
|
return APIResponse(
|
||||||
resp = CR.ApiChat(user, chat),
|
resp = CR.ApiChat(user, chat),
|
||||||
@ -3166,11 +3166,18 @@ class APIResponse(val resp: CR, val corr: String? = null) {
|
|||||||
)
|
)
|
||||||
} else if (type == "chatCmdError") {
|
} else if (type == "chatCmdError") {
|
||||||
val userObject = resp["user_"]?.jsonObject
|
val userObject = resp["user_"]?.jsonObject
|
||||||
val user = runCatching<User?> { json.decodeFromJsonElement(userObject!!) }.getOrNull()
|
val user = runCatching<UserRef?> { json.decodeFromJsonElement(userObject!!) }.getOrNull()
|
||||||
return APIResponse(
|
return APIResponse(
|
||||||
resp = CR.ChatCmdError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatError"]))),
|
resp = CR.ChatCmdError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatError"]))),
|
||||||
corr = data["corr"]?.toString()
|
corr = data["corr"]?.toString()
|
||||||
)
|
)
|
||||||
|
} else if (type == "chatError") {
|
||||||
|
val userObject = resp["user_"]?.jsonObject
|
||||||
|
val user = runCatching<UserRef?> { json.decodeFromJsonElement(userObject!!) }.getOrNull()
|
||||||
|
return APIResponse(
|
||||||
|
resp = CR.ChatRespError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatError"]))),
|
||||||
|
corr = data["corr"]?.toString()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Error while parsing chat(s): " + e.stackTraceToString())
|
Log.e(TAG, "Error while parsing chat(s): " + e.stackTraceToString())
|
||||||
@ -3214,124 +3221,124 @@ sealed class CR {
|
|||||||
@Serializable @SerialName("chatStarted") class ChatStarted: CR()
|
@Serializable @SerialName("chatStarted") class ChatStarted: CR()
|
||||||
@Serializable @SerialName("chatRunning") class ChatRunning: CR()
|
@Serializable @SerialName("chatRunning") class ChatRunning: CR()
|
||||||
@Serializable @SerialName("chatStopped") class ChatStopped: CR()
|
@Serializable @SerialName("chatStopped") class ChatStopped: CR()
|
||||||
@Serializable @SerialName("apiChats") class ApiChats(val user: User, val chats: List<Chat>): CR()
|
@Serializable @SerialName("apiChats") class ApiChats(val user: UserRef, val chats: List<Chat>): CR()
|
||||||
@Serializable @SerialName("apiChat") class ApiChat(val user: User, val chat: Chat): CR()
|
@Serializable @SerialName("apiChat") class ApiChat(val user: UserRef, val chat: Chat): CR()
|
||||||
@Serializable @SerialName("chatItemInfo") class ApiChatItemInfo(val user: User, val chatItem: AChatItem, val chatItemInfo: ChatItemInfo): CR()
|
@Serializable @SerialName("chatItemInfo") class ApiChatItemInfo(val user: UserRef, val chatItem: AChatItem, val chatItemInfo: ChatItemInfo): CR()
|
||||||
@Serializable @SerialName("userProtoServers") class UserProtoServers(val user: User, val servers: UserProtocolServers): CR()
|
@Serializable @SerialName("userProtoServers") class UserProtoServers(val user: UserRef, val servers: UserProtocolServers): CR()
|
||||||
@Serializable @SerialName("serverTestResult") class ServerTestResult(val user: User, val testServer: String, val testFailure: ProtocolTestFailure? = null): CR()
|
@Serializable @SerialName("serverTestResult") class ServerTestResult(val user: UserRef, val testServer: String, val testFailure: ProtocolTestFailure? = null): CR()
|
||||||
@Serializable @SerialName("chatItemTTL") class ChatItemTTL(val user: User, val chatItemTTL: Long? = null): CR()
|
@Serializable @SerialName("chatItemTTL") class ChatItemTTL(val user: UserRef, val chatItemTTL: Long? = null): CR()
|
||||||
@Serializable @SerialName("networkConfig") class NetworkConfig(val networkConfig: NetCfg): CR()
|
@Serializable @SerialName("networkConfig") class NetworkConfig(val networkConfig: NetCfg): CR()
|
||||||
@Serializable @SerialName("contactInfo") class ContactInfo(val user: User, val contact: Contact, val connectionStats: ConnectionStats, val customUserProfile: Profile? = null): CR()
|
@Serializable @SerialName("contactInfo") class ContactInfo(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats, val customUserProfile: Profile? = null): CR()
|
||||||
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats? = null): CR()
|
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats? = null): CR()
|
||||||
@Serializable @SerialName("contactSwitchStarted") class ContactSwitchStarted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("contactSwitchStarted") class ContactSwitchStarted(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("groupMemberSwitchStarted") class GroupMemberSwitchStarted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("groupMemberSwitchStarted") class GroupMemberSwitchStarted(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("contactSwitchAborted") class ContactSwitchAborted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("contactSwitchAborted") class ContactSwitchAborted(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("groupMemberSwitchAborted") class GroupMemberSwitchAborted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("groupMemberSwitchAborted") class GroupMemberSwitchAborted(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("contactSwitch") class ContactSwitch(val user: User, val contact: Contact, val switchProgress: SwitchProgress): CR()
|
@Serializable @SerialName("contactSwitch") class ContactSwitch(val user: UserRef, val contact: Contact, val switchProgress: SwitchProgress): CR()
|
||||||
@Serializable @SerialName("groupMemberSwitch") class GroupMemberSwitch(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val switchProgress: SwitchProgress): CR()
|
@Serializable @SerialName("groupMemberSwitch") class GroupMemberSwitch(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val switchProgress: SwitchProgress): CR()
|
||||||
@Serializable @SerialName("contactRatchetSyncStarted") class ContactRatchetSyncStarted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("contactRatchetSyncStarted") class ContactRatchetSyncStarted(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("groupMemberRatchetSyncStarted") class GroupMemberRatchetSyncStarted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
@Serializable @SerialName("groupMemberRatchetSyncStarted") class GroupMemberRatchetSyncStarted(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
||||||
@Serializable @SerialName("contactRatchetSync") class ContactRatchetSync(val user: User, val contact: Contact, val ratchetSyncProgress: RatchetSyncProgress): CR()
|
@Serializable @SerialName("contactRatchetSync") class ContactRatchetSync(val user: UserRef, val contact: Contact, val ratchetSyncProgress: RatchetSyncProgress): CR()
|
||||||
@Serializable @SerialName("groupMemberRatchetSync") class GroupMemberRatchetSync(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val ratchetSyncProgress: RatchetSyncProgress): CR()
|
@Serializable @SerialName("groupMemberRatchetSync") class GroupMemberRatchetSync(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val ratchetSyncProgress: RatchetSyncProgress): CR()
|
||||||
@Serializable @SerialName("contactVerificationReset") class ContactVerificationReset(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("contactVerificationReset") class ContactVerificationReset(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("groupMemberVerificationReset") class GroupMemberVerificationReset(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("groupMemberVerificationReset") class GroupMemberVerificationReset(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("contactCode") class ContactCode(val user: User, val contact: Contact, val connectionCode: String): CR()
|
@Serializable @SerialName("contactCode") class ContactCode(val user: UserRef, val contact: Contact, val connectionCode: String): CR()
|
||||||
@Serializable @SerialName("groupMemberCode") class GroupMemberCode(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionCode: String): CR()
|
@Serializable @SerialName("groupMemberCode") class GroupMemberCode(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionCode: String): CR()
|
||||||
@Serializable @SerialName("connectionVerified") class ConnectionVerified(val user: User, val verified: Boolean, val expectedCode: String): CR()
|
@Serializable @SerialName("connectionVerified") class ConnectionVerified(val user: UserRef, val verified: Boolean, val expectedCode: String): CR()
|
||||||
@Serializable @SerialName("invitation") class Invitation(val user: User, val connReqInvitation: String, val connection: PendingContactConnection): CR()
|
@Serializable @SerialName("invitation") class Invitation(val user: UserRef, val connReqInvitation: String, val connection: PendingContactConnection): CR()
|
||||||
@Serializable @SerialName("connectionIncognitoUpdated") class ConnectionIncognitoUpdated(val user: User, val toConnection: PendingContactConnection): CR()
|
@Serializable @SerialName("connectionIncognitoUpdated") class ConnectionIncognitoUpdated(val user: UserRef, val toConnection: PendingContactConnection): CR()
|
||||||
@Serializable @SerialName("sentConfirmation") class SentConfirmation(val user: User): CR()
|
@Serializable @SerialName("sentConfirmation") class SentConfirmation(val user: UserRef): CR()
|
||||||
@Serializable @SerialName("sentInvitation") class SentInvitation(val user: User): CR()
|
@Serializable @SerialName("sentInvitation") class SentInvitation(val user: UserRef): CR()
|
||||||
@Serializable @SerialName("contactAlreadyExists") class ContactAlreadyExists(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("contactAlreadyExists") class ContactAlreadyExists(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("contactRequestAlreadyAccepted") class ContactRequestAlreadyAccepted(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("contactRequestAlreadyAccepted") class ContactRequestAlreadyAccepted(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("contactDeleted") class ContactDeleted(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("contactDeleted") class ContactDeleted(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("chatCleared") class ChatCleared(val user: User, val chatInfo: ChatInfo): CR()
|
@Serializable @SerialName("chatCleared") class ChatCleared(val user: UserRef, val chatInfo: ChatInfo): CR()
|
||||||
@Serializable @SerialName("userProfileNoChange") class UserProfileNoChange(val user: User): CR()
|
@Serializable @SerialName("userProfileNoChange") class UserProfileNoChange(val user: User): CR()
|
||||||
@Serializable @SerialName("userProfileUpdated") class UserProfileUpdated(val user: User, val fromProfile: Profile, val toProfile: Profile): CR()
|
@Serializable @SerialName("userProfileUpdated") class UserProfileUpdated(val user: User, val fromProfile: Profile, val toProfile: Profile): CR()
|
||||||
@Serializable @SerialName("userPrivacy") class UserPrivacy(val user: User, val updatedUser: User): CR()
|
@Serializable @SerialName("userPrivacy") class UserPrivacy(val user: User, val updatedUser: User): CR()
|
||||||
@Serializable @SerialName("contactAliasUpdated") class ContactAliasUpdated(val user: User, val toContact: Contact): CR()
|
@Serializable @SerialName("contactAliasUpdated") class ContactAliasUpdated(val user: UserRef, val toContact: Contact): CR()
|
||||||
@Serializable @SerialName("connectionAliasUpdated") class ConnectionAliasUpdated(val user: User, val toConnection: PendingContactConnection): CR()
|
@Serializable @SerialName("connectionAliasUpdated") class ConnectionAliasUpdated(val user: UserRef, val toConnection: PendingContactConnection): CR()
|
||||||
@Serializable @SerialName("contactPrefsUpdated") class ContactPrefsUpdated(val user: User, val fromContact: Contact, val toContact: Contact): CR()
|
@Serializable @SerialName("contactPrefsUpdated") class ContactPrefsUpdated(val user: UserRef, val fromContact: Contact, val toContact: Contact): CR()
|
||||||
@Serializable @SerialName("userContactLink") class UserContactLink(val user: User, val contactLink: UserContactLinkRec): CR()
|
@Serializable @SerialName("userContactLink") class UserContactLink(val user: User, val contactLink: UserContactLinkRec): CR()
|
||||||
@Serializable @SerialName("userContactLinkUpdated") class UserContactLinkUpdated(val user: User, val contactLink: UserContactLinkRec): CR()
|
@Serializable @SerialName("userContactLinkUpdated") class UserContactLinkUpdated(val user: User, val contactLink: UserContactLinkRec): CR()
|
||||||
@Serializable @SerialName("userContactLinkCreated") class UserContactLinkCreated(val user: User, val connReqContact: String): CR()
|
@Serializable @SerialName("userContactLinkCreated") class UserContactLinkCreated(val user: User, val connReqContact: String): CR()
|
||||||
@Serializable @SerialName("userContactLinkDeleted") class UserContactLinkDeleted(val user: User): CR()
|
@Serializable @SerialName("userContactLinkDeleted") class UserContactLinkDeleted(val user: User): CR()
|
||||||
@Serializable @SerialName("contactConnected") class ContactConnected(val user: User, val contact: Contact, val userCustomProfile: Profile? = null): CR()
|
@Serializable @SerialName("contactConnected") class ContactConnected(val user: UserRef, val contact: Contact, val userCustomProfile: Profile? = null): CR()
|
||||||
@Serializable @SerialName("contactConnecting") class ContactConnecting(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("contactConnecting") class ContactConnecting(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("receivedContactRequest") class ReceivedContactRequest(val user: User, val contactRequest: UserContactRequest): CR()
|
@Serializable @SerialName("receivedContactRequest") class ReceivedContactRequest(val user: UserRef, val contactRequest: UserContactRequest): CR()
|
||||||
@Serializable @SerialName("acceptingContactRequest") class AcceptingContactRequest(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("acceptingContactRequest") class AcceptingContactRequest(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("contactRequestRejected") class ContactRequestRejected(val user: User): CR()
|
@Serializable @SerialName("contactRequestRejected") class ContactRequestRejected(val user: UserRef): CR()
|
||||||
@Serializable @SerialName("contactUpdated") class ContactUpdated(val user: User, val toContact: Contact): CR()
|
@Serializable @SerialName("contactUpdated") class ContactUpdated(val user: UserRef, val toContact: Contact): CR()
|
||||||
@Serializable @SerialName("contactsSubscribed") class ContactsSubscribed(val server: String, val contactRefs: List<ContactRef>): CR()
|
@Serializable @SerialName("contactsSubscribed") class ContactsSubscribed(val server: String, val contactRefs: List<ContactRef>): CR()
|
||||||
@Serializable @SerialName("contactsDisconnected") class ContactsDisconnected(val server: String, val contactRefs: List<ContactRef>): CR()
|
@Serializable @SerialName("contactsDisconnected") class ContactsDisconnected(val server: String, val contactRefs: List<ContactRef>): CR()
|
||||||
@Serializable @SerialName("contactSubError") class ContactSubError(val user: User, val contact: Contact, val chatError: ChatError): CR()
|
@Serializable @SerialName("contactSubError") class ContactSubError(val user: UserRef, val contact: Contact, val chatError: ChatError): CR()
|
||||||
@Serializable @SerialName("contactSubSummary") class ContactSubSummary(val user: User, val contactSubscriptions: List<ContactSubStatus>): CR()
|
@Serializable @SerialName("contactSubSummary") class ContactSubSummary(val user: UserRef, val contactSubscriptions: List<ContactSubStatus>): CR()
|
||||||
@Serializable @SerialName("groupSubscribed") class GroupSubscribed(val user: User, val group: GroupInfo): CR()
|
@Serializable @SerialName("groupSubscribed") class GroupSubscribed(val user: UserRef, val group: GroupInfo): CR()
|
||||||
@Serializable @SerialName("memberSubErrors") class MemberSubErrors(val user: User, val memberSubErrors: List<MemberSubError>): CR()
|
@Serializable @SerialName("memberSubErrors") class MemberSubErrors(val user: UserRef, val memberSubErrors: List<MemberSubError>): CR()
|
||||||
@Serializable @SerialName("groupEmpty") class GroupEmpty(val user: User, val group: GroupInfo): CR()
|
@Serializable @SerialName("groupEmpty") class GroupEmpty(val user: UserRef, val group: GroupInfo): CR()
|
||||||
@Serializable @SerialName("userContactLinkSubscribed") class UserContactLinkSubscribed: CR()
|
@Serializable @SerialName("userContactLinkSubscribed") class UserContactLinkSubscribed: CR()
|
||||||
@Serializable @SerialName("newChatItem") class NewChatItem(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("newChatItem") class NewChatItem(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("chatItemStatusUpdated") class ChatItemStatusUpdated(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("chatItemStatusUpdated") class ChatItemStatusUpdated(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("chatItemUpdated") class ChatItemUpdated(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("chatItemUpdated") class ChatItemUpdated(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("chatItemNotChanged") class ChatItemNotChanged(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("chatItemNotChanged") class ChatItemNotChanged(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("chatItemReaction") class ChatItemReaction(val user: User, val added: Boolean, val reaction: ACIReaction): CR()
|
@Serializable @SerialName("chatItemReaction") class ChatItemReaction(val user: UserRef, val added: Boolean, val reaction: ACIReaction): CR()
|
||||||
@Serializable @SerialName("chatItemDeleted") class ChatItemDeleted(val user: User, val deletedChatItem: AChatItem, val toChatItem: AChatItem? = null, val byUser: Boolean): CR()
|
@Serializable @SerialName("chatItemDeleted") class ChatItemDeleted(val user: UserRef, val deletedChatItem: AChatItem, val toChatItem: AChatItem? = null, val byUser: Boolean): CR()
|
||||||
@Serializable @SerialName("contactsList") class ContactsList(val user: User, val contacts: List<Contact>): CR()
|
@Serializable @SerialName("contactsList") class ContactsList(val user: UserRef, val contacts: List<Contact>): CR()
|
||||||
// group events
|
// group events
|
||||||
@Serializable @SerialName("groupCreated") class GroupCreated(val user: User, val groupInfo: GroupInfo): CR()
|
@Serializable @SerialName("groupCreated") class GroupCreated(val user: UserRef, val groupInfo: GroupInfo): CR()
|
||||||
@Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val user: User, val groupInfo: GroupInfo, val contact: Contact, val member: GroupMember): CR()
|
@Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val user: UserRef, val groupInfo: GroupInfo, val contact: Contact, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("userAcceptedGroupSent") class UserAcceptedGroupSent (val user: User, val groupInfo: GroupInfo, val hostContact: Contact? = null): CR()
|
@Serializable @SerialName("userAcceptedGroupSent") class UserAcceptedGroupSent (val user: UserRef, val groupInfo: GroupInfo, val hostContact: Contact? = null): CR()
|
||||||
@Serializable @SerialName("userDeletedMember") class UserDeletedMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("userDeletedMember") class UserDeletedMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("leftMemberUser") class LeftMemberUser(val user: User, val groupInfo: GroupInfo): CR()
|
@Serializable @SerialName("leftMemberUser") class LeftMemberUser(val user: UserRef, val groupInfo: GroupInfo): CR()
|
||||||
@Serializable @SerialName("groupMembers") class GroupMembers(val user: User, val group: Group): CR()
|
@Serializable @SerialName("groupMembers") class GroupMembers(val user: UserRef, val group: Group): CR()
|
||||||
@Serializable @SerialName("receivedGroupInvitation") class ReceivedGroupInvitation(val user: User, val groupInfo: GroupInfo, val contact: Contact, val memberRole: GroupMemberRole): CR()
|
@Serializable @SerialName("receivedGroupInvitation") class ReceivedGroupInvitation(val user: UserRef, val groupInfo: GroupInfo, val contact: Contact, val memberRole: GroupMemberRole): CR()
|
||||||
@Serializable @SerialName("groupDeletedUser") class GroupDeletedUser(val user: User, val groupInfo: GroupInfo): CR()
|
@Serializable @SerialName("groupDeletedUser") class GroupDeletedUser(val user: UserRef, val groupInfo: GroupInfo): CR()
|
||||||
@Serializable @SerialName("joinedGroupMemberConnecting") class JoinedGroupMemberConnecting(val user: User, val groupInfo: GroupInfo, val hostMember: GroupMember, val member: GroupMember): CR()
|
@Serializable @SerialName("joinedGroupMemberConnecting") class JoinedGroupMemberConnecting(val user: UserRef, val groupInfo: GroupInfo, val hostMember: GroupMember, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("memberRole") class MemberRole(val user: User, val groupInfo: GroupInfo, val byMember: GroupMember, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR()
|
@Serializable @SerialName("memberRole") class MemberRole(val user: UserRef, val groupInfo: GroupInfo, val byMember: GroupMember, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR()
|
||||||
@Serializable @SerialName("memberRoleUser") class MemberRoleUser(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR()
|
@Serializable @SerialName("memberRoleUser") class MemberRoleUser(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR()
|
||||||
@Serializable @SerialName("deletedMemberUser") class DeletedMemberUser(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("deletedMemberUser") class DeletedMemberUser(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("deletedMember") class DeletedMember(val user: User, val groupInfo: GroupInfo, val byMember: GroupMember, val deletedMember: GroupMember): CR()
|
@Serializable @SerialName("deletedMember") class DeletedMember(val user: UserRef, val groupInfo: GroupInfo, val byMember: GroupMember, val deletedMember: GroupMember): CR()
|
||||||
@Serializable @SerialName("leftMember") class LeftMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("leftMember") class LeftMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("groupDeleted") class GroupDeleted(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("groupDeleted") class GroupDeleted(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("contactsMerged") class ContactsMerged(val user: User, val intoContact: Contact, val mergedContact: Contact): CR()
|
@Serializable @SerialName("contactsMerged") class ContactsMerged(val user: UserRef, val intoContact: Contact, val mergedContact: Contact): CR()
|
||||||
@Serializable @SerialName("groupInvitation") class GroupInvitation(val user: User, val groupInfo: GroupInfo): CR() // unused
|
@Serializable @SerialName("groupInvitation") class GroupInvitation(val user: UserRef, val groupInfo: GroupInfo): CR() // unused
|
||||||
@Serializable @SerialName("userJoinedGroup") class UserJoinedGroup(val user: User, val groupInfo: GroupInfo): CR()
|
@Serializable @SerialName("userJoinedGroup") class UserJoinedGroup(val user: UserRef, val groupInfo: GroupInfo): CR()
|
||||||
@Serializable @SerialName("joinedGroupMember") class JoinedGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
@Serializable @SerialName("joinedGroupMember") class JoinedGroupMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||||
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val memberContact: Contact? = null): CR()
|
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val memberContact: Contact? = null): CR()
|
||||||
@Serializable @SerialName("groupRemoved") class GroupRemoved(val user: User, val groupInfo: GroupInfo): CR() // unused
|
@Serializable @SerialName("groupRemoved") class GroupRemoved(val user: UserRef, val groupInfo: GroupInfo): CR() // unused
|
||||||
@Serializable @SerialName("groupUpdated") class GroupUpdated(val user: User, val toGroup: GroupInfo): CR()
|
@Serializable @SerialName("groupUpdated") class GroupUpdated(val user: UserRef, val toGroup: GroupInfo): CR()
|
||||||
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: UserRef, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
||||||
@Serializable @SerialName("groupLink") class GroupLink(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
@Serializable @SerialName("groupLink") class GroupLink(val user: UserRef, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
||||||
@Serializable @SerialName("groupLinkDeleted") class GroupLinkDeleted(val user: User, val groupInfo: GroupInfo): CR()
|
@Serializable @SerialName("groupLinkDeleted") class GroupLinkDeleted(val user: UserRef, val groupInfo: GroupInfo): CR()
|
||||||
// receiving file events
|
// receiving file events
|
||||||
@Serializable @SerialName("rcvFileAccepted") class RcvFileAccepted(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("rcvFileAccepted") class RcvFileAccepted(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("rcvFileAcceptedSndCancelled") class RcvFileAcceptedSndCancelled(val user: User, val rcvFileTransfer: RcvFileTransfer): CR()
|
@Serializable @SerialName("rcvFileAcceptedSndCancelled") class RcvFileAcceptedSndCancelled(val user: UserRef, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||||
@Serializable @SerialName("rcvFileStart") class RcvFileStart(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("rcvFileStart") class RcvFileStart(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("rcvFileComplete") class RcvFileComplete(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("rcvFileComplete") class RcvFileComplete(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
@Serializable @SerialName("rcvFileCancelled") class RcvFileCancelled(val user: User, val chatItem: AChatItem, val rcvFileTransfer: RcvFileTransfer): CR()
|
@Serializable @SerialName("rcvFileCancelled") class RcvFileCancelled(val user: UserRef, val chatItem: AChatItem, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||||
@Serializable @SerialName("rcvFileSndCancelled") class RcvFileSndCancelled(val user: User, val chatItem: AChatItem, val rcvFileTransfer: RcvFileTransfer): CR()
|
@Serializable @SerialName("rcvFileSndCancelled") class RcvFileSndCancelled(val user: UserRef, val chatItem: AChatItem, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||||
@Serializable @SerialName("rcvFileProgressXFTP") class RcvFileProgressXFTP(val user: User, val chatItem: AChatItem, val receivedSize: Long, val totalSize: Long): CR()
|
@Serializable @SerialName("rcvFileProgressXFTP") class RcvFileProgressXFTP(val user: UserRef, val chatItem: AChatItem, val receivedSize: Long, val totalSize: Long): CR()
|
||||||
@Serializable @SerialName("rcvFileError") class RcvFileError(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("rcvFileError") class RcvFileError(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
// sending file events
|
// sending file events
|
||||||
@Serializable @SerialName("sndFileStart") class SndFileStart(val user: User, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
@Serializable @SerialName("sndFileStart") class SndFileStart(val user: UserRef, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
||||||
@Serializable @SerialName("sndFileComplete") class SndFileComplete(val user: User, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
@Serializable @SerialName("sndFileComplete") class SndFileComplete(val user: UserRef, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
||||||
@Serializable @SerialName("sndFileCancelled") class SndFileCancelled(val user: User, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta, val sndFileTransfers: List<SndFileTransfer>): CR()
|
@Serializable @SerialName("sndFileCancelled") class SndFileCancelled(val user: UserRef, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta, val sndFileTransfers: List<SndFileTransfer>): CR()
|
||||||
@Serializable @SerialName("sndFileRcvCancelled") class SndFileRcvCancelled(val user: User, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
@Serializable @SerialName("sndFileRcvCancelled") class SndFileRcvCancelled(val user: UserRef, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
||||||
@Serializable @SerialName("sndFileProgressXFTP") class SndFileProgressXFTP(val user: User, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta, val sentSize: Long, val totalSize: Long): CR()
|
@Serializable @SerialName("sndFileProgressXFTP") class SndFileProgressXFTP(val user: UserRef, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta, val sentSize: Long, val totalSize: Long): CR()
|
||||||
@Serializable @SerialName("sndFileCompleteXFTP") class SndFileCompleteXFTP(val user: User, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta): CR()
|
@Serializable @SerialName("sndFileCompleteXFTP") class SndFileCompleteXFTP(val user: UserRef, val chatItem: AChatItem, val fileTransferMeta: FileTransferMeta): CR()
|
||||||
@Serializable @SerialName("sndFileError") class SndFileError(val user: User, val chatItem: AChatItem): CR()
|
@Serializable @SerialName("sndFileError") class SndFileError(val user: UserRef, val chatItem: AChatItem): CR()
|
||||||
// call events
|
// call events
|
||||||
@Serializable @SerialName("callInvitation") class CallInvitation(val callInvitation: RcvCallInvitation): CR()
|
@Serializable @SerialName("callInvitation") class CallInvitation(val callInvitation: RcvCallInvitation): CR()
|
||||||
@Serializable @SerialName("callOffer") class CallOffer(val user: User, val contact: Contact, val callType: CallType, val offer: WebRTCSession, val sharedKey: String? = null, val askConfirmation: Boolean): CR()
|
@Serializable @SerialName("callOffer") class CallOffer(val user: UserRef, val contact: Contact, val callType: CallType, val offer: WebRTCSession, val sharedKey: String? = null, val askConfirmation: Boolean): CR()
|
||||||
@Serializable @SerialName("callAnswer") class CallAnswer(val user: User, val contact: Contact, val answer: WebRTCSession): CR()
|
@Serializable @SerialName("callAnswer") class CallAnswer(val user: UserRef, val contact: Contact, val answer: WebRTCSession): CR()
|
||||||
@Serializable @SerialName("callExtraInfo") class CallExtraInfo(val user: User, val contact: Contact, val extraInfo: WebRTCExtraInfo): CR()
|
@Serializable @SerialName("callExtraInfo") class CallExtraInfo(val user: UserRef, val contact: Contact, val extraInfo: WebRTCExtraInfo): CR()
|
||||||
@Serializable @SerialName("callEnded") class CallEnded(val user: User, val contact: Contact): CR()
|
@Serializable @SerialName("callEnded") class CallEnded(val user: UserRef, val contact: Contact): CR()
|
||||||
@Serializable @SerialName("newContactConnection") class NewContactConnection(val user: User, val connection: PendingContactConnection): CR()
|
@Serializable @SerialName("newContactConnection") class NewContactConnection(val user: UserRef, val connection: PendingContactConnection): CR()
|
||||||
@Serializable @SerialName("contactConnectionDeleted") class ContactConnectionDeleted(val user: User, val connection: PendingContactConnection): CR()
|
@Serializable @SerialName("contactConnectionDeleted") class ContactConnectionDeleted(val user: UserRef, val connection: PendingContactConnection): CR()
|
||||||
@Serializable @SerialName("versionInfo") class VersionInfo(val versionInfo: CoreVersionInfo, val chatMigrations: List<UpMigration>, val agentMigrations: List<UpMigration>): CR()
|
@Serializable @SerialName("versionInfo") class VersionInfo(val versionInfo: CoreVersionInfo, val chatMigrations: List<UpMigration>, val agentMigrations: List<UpMigration>): CR()
|
||||||
@Serializable @SerialName("cmdOk") class CmdOk(val user: User?): CR()
|
@Serializable @SerialName("cmdOk") class CmdOk(val user: UserRef?): CR()
|
||||||
@Serializable @SerialName("chatCmdError") class ChatCmdError(val user_: User?, val chatError: ChatError): CR()
|
@Serializable @SerialName("chatCmdError") class ChatCmdError(val user_: UserRef?, val chatError: ChatError): CR()
|
||||||
@Serializable @SerialName("chatError") class ChatRespError(val user_: User?, val chatError: ChatError): CR()
|
@Serializable @SerialName("chatError") class ChatRespError(val user_: UserRef?, val chatError: ChatError): CR()
|
||||||
@Serializable @SerialName("archiveImported") class ArchiveImported(val archiveErrors: List<ArchiveError>): CR()
|
@Serializable @SerialName("archiveImported") class ArchiveImported(val archiveErrors: List<ArchiveError>): CR()
|
||||||
@Serializable class Response(val type: String, val json: String): CR()
|
@Serializable class Response(val type: String, val json: String): CR()
|
||||||
@Serializable class Invalid(val str: String): CR()
|
@Serializable class Invalid(val str: String): CR()
|
||||||
@ -3590,7 +3597,7 @@ sealed class CR {
|
|||||||
|
|
||||||
fun noDetails(): String ="${responseType}: " + generalGetString(MR.strings.no_details)
|
fun noDetails(): String ="${responseType}: " + generalGetString(MR.strings.no_details)
|
||||||
|
|
||||||
private fun withUser(u: User?, s: String): String = if (u != null) "userId: ${u.userId}\n$s" else s
|
private fun withUser(u: UserLike?, s: String): String = if (u != null) "userId: ${u.userId}\n$s" else s
|
||||||
}
|
}
|
||||||
|
|
||||||
fun chatError(r: CR): ChatErrorType? {
|
fun chatError(r: CR): ChatErrorType? {
|
||||||
|
@ -17,14 +17,14 @@ enum class NotificationAction {
|
|||||||
lateinit var ntfManager: NtfManager
|
lateinit var ntfManager: NtfManager
|
||||||
|
|
||||||
abstract class NtfManager {
|
abstract class NtfManager {
|
||||||
fun notifyContactConnected(user: User, contact: Contact) = displayNotification(
|
fun notifyContactConnected(user: UserLike, contact: Contact) = displayNotification(
|
||||||
user = user,
|
user = user,
|
||||||
chatId = contact.id,
|
chatId = contact.id,
|
||||||
displayName = contact.displayName,
|
displayName = contact.displayName,
|
||||||
msgText = generalGetString(MR.strings.notification_contact_connected)
|
msgText = generalGetString(MR.strings.notification_contact_connected)
|
||||||
)
|
)
|
||||||
|
|
||||||
fun notifyContactRequestReceived(user: User, cInfo: ChatInfo.ContactRequest) = displayNotification(
|
fun notifyContactRequestReceived(user: UserLike, cInfo: ChatInfo.ContactRequest) = displayNotification(
|
||||||
user = user,
|
user = user,
|
||||||
chatId = cInfo.id,
|
chatId = cInfo.id,
|
||||||
displayName = cInfo.displayName,
|
displayName = cInfo.displayName,
|
||||||
@ -36,7 +36,7 @@ abstract class NtfManager {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
fun notifyMessageReceived(user: User, cInfo: ChatInfo, cItem: ChatItem) {
|
fun notifyMessageReceived(user: UserLike, cInfo: ChatInfo, cItem: ChatItem) {
|
||||||
if (!cInfo.ntfsEnabled) return
|
if (!cInfo.ntfsEnabled) return
|
||||||
displayNotification(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem))
|
displayNotification(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem))
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ abstract class NtfManager {
|
|||||||
abstract fun notifyCallInvitation(invitation: RcvCallInvitation)
|
abstract fun notifyCallInvitation(invitation: RcvCallInvitation)
|
||||||
abstract fun hasNotificationsForChat(chatId: String): Boolean
|
abstract fun hasNotificationsForChat(chatId: String): Boolean
|
||||||
abstract fun cancelNotificationsForChat(chatId: String)
|
abstract fun cancelNotificationsForChat(chatId: String)
|
||||||
abstract fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List<Pair<NotificationAction, () -> Unit>> = emptyList())
|
abstract fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List<Pair<NotificationAction, () -> Unit>> = emptyList())
|
||||||
abstract fun cancelCallNotification()
|
abstract fun cancelCallNotification()
|
||||||
abstract fun cancelAllNotifications()
|
abstract fun cancelAllNotifications()
|
||||||
// Android only
|
// Android only
|
||||||
|
@ -67,7 +67,7 @@ object NtfManager {
|
|||||||
prevNtfs.clear()
|
prevNtfs.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) {
|
fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) {
|
||||||
if (!user.showNotifications) return
|
if (!user.showNotifications) return
|
||||||
Log.d(TAG, "notifyMessageReceived $chatId")
|
Log.d(TAG, "notifyMessageReceived $chatId")
|
||||||
val previewMode = appPreferences.notificationPreviewMode.get()
|
val previewMode = appPreferences.notificationPreviewMode.get()
|
||||||
|
@ -15,7 +15,7 @@ fun initApp() {
|
|||||||
override fun notifyCallInvitation(invitation: RcvCallInvitation) = chat.simplex.common.model.NtfManager.notifyCallInvitation(invitation)
|
override fun notifyCallInvitation(invitation: RcvCallInvitation) = chat.simplex.common.model.NtfManager.notifyCallInvitation(invitation)
|
||||||
override fun hasNotificationsForChat(chatId: String): Boolean = chat.simplex.common.model.NtfManager.hasNotificationsForChat(chatId)
|
override fun hasNotificationsForChat(chatId: String): Boolean = chat.simplex.common.model.NtfManager.hasNotificationsForChat(chatId)
|
||||||
override fun cancelNotificationsForChat(chatId: String) = chat.simplex.common.model.NtfManager.cancelNotificationsForChat(chatId)
|
override fun cancelNotificationsForChat(chatId: String) = chat.simplex.common.model.NtfManager.cancelNotificationsForChat(chatId)
|
||||||
override fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = chat.simplex.common.model.NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions)
|
override fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = chat.simplex.common.model.NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions)
|
||||||
override fun androidCreateNtfChannelsMaybeShowAlert() {}
|
override fun androidCreateNtfChannelsMaybeShowAlert() {}
|
||||||
override fun cancelCallNotification() {}
|
override fun cancelCallNotification() {}
|
||||||
override fun cancelAllNotifications() = chat.simplex.common.model.NtfManager.cancelAllNotifications()
|
override fun cancelAllNotifications() = chat.simplex.common.model.NtfManager.cancelAllNotifications()
|
||||||
|
Loading…
Reference in New Issue
Block a user