ios: show ntf server (#3800)
This commit is contained in:
parent
1a7efbc333
commit
4260c20012
@ -80,6 +80,7 @@ final class ChatModel: ObservableObject {
|
|||||||
@Published var tokenRegistered = false
|
@Published var tokenRegistered = false
|
||||||
@Published var tokenStatus: NtfTknStatus?
|
@Published var tokenStatus: NtfTknStatus?
|
||||||
@Published var notificationMode = NotificationsMode.off
|
@Published var notificationMode = NotificationsMode.off
|
||||||
|
@Published var notificationServer: String?
|
||||||
@Published var notificationPreview: NotificationPreviewMode = ntfPreviewModeGroupDefault.get()
|
@Published var notificationPreview: NotificationPreviewMode = ntfPreviewModeGroupDefault.get()
|
||||||
// pending notification actions
|
// pending notification actions
|
||||||
@Published var ntfContactRequest: NTFContactRequest?
|
@Published var ntfContactRequest: NTFContactRequest?
|
||||||
|
@ -412,14 +412,14 @@ func apiDeleteMemberChatItem(groupId: Int64, groupMemberId: Int64, itemId: Int64
|
|||||||
throw r
|
throw r
|
||||||
}
|
}
|
||||||
|
|
||||||
func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode) {
|
func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode, String?) {
|
||||||
let r = chatSendCmdSync(.apiGetNtfToken)
|
let r = chatSendCmdSync(.apiGetNtfToken)
|
||||||
switch r {
|
switch r {
|
||||||
case let .ntfToken(token, status, ntfMode): return (token, status, ntfMode)
|
case let .ntfToken(token, status, ntfMode, ntfServer): return (token, status, ntfMode, ntfServer)
|
||||||
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off)
|
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off, nil)
|
||||||
default:
|
default:
|
||||||
logger.debug("apiGetNtfToken response: \(String(describing: r))")
|
logger.debug("apiGetNtfToken response: \(String(describing: r))")
|
||||||
return (nil, nil, .off)
|
return (nil, nil, .off, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1309,7 +1309,7 @@ func startChat(refreshInvitations: Bool = true) throws {
|
|||||||
if (refreshInvitations) {
|
if (refreshInvitations) {
|
||||||
try refreshCallInvitations()
|
try refreshCallInvitations()
|
||||||
}
|
}
|
||||||
(m.savedToken, m.tokenStatus, m.notificationMode) = apiGetNtfToken()
|
(m.savedToken, m.tokenStatus, m.notificationMode, m.notificationServer) = apiGetNtfToken()
|
||||||
// deviceToken is set when AppDelegate.application(didRegisterForRemoteNotificationsWithDeviceToken:) is called,
|
// deviceToken is set when AppDelegate.application(didRegisterForRemoteNotificationsWithDeviceToken:) is called,
|
||||||
// when it is called before startChat
|
// when it is called before startChat
|
||||||
if let token = m.deviceToken {
|
if let token = m.deviceToken {
|
||||||
|
@ -76,6 +76,10 @@ struct NotificationsView: View {
|
|||||||
Text(m.notificationPreview.label)
|
Text(m.notificationPreview.label)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let server = m.notificationServer {
|
||||||
|
smpServers("Push server", [server])
|
||||||
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Push notifications")
|
Text("Push notifications")
|
||||||
} footer: {
|
} footer: {
|
||||||
@ -87,6 +91,9 @@ struct NotificationsView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.disabled(legacyDatabase)
|
.disabled(legacyDatabase)
|
||||||
|
.onAppear {
|
||||||
|
(m.savedToken, m.tokenStatus, m.notificationMode, m.notificationServer) = apiGetNtfToken()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func notificationAlert(_ alert: NotificationAlert, _ token: DeviceToken) -> Alert {
|
private func notificationAlert(_ alert: NotificationAlert, _ token: DeviceToken) -> Alert {
|
||||||
@ -125,6 +132,7 @@ struct NotificationsView: View {
|
|||||||
m.tokenStatus = .new
|
m.tokenStatus = .new
|
||||||
notificationMode = .off
|
notificationMode = .off
|
||||||
m.notificationMode = .off
|
m.notificationMode = .off
|
||||||
|
m.notificationServer = nil
|
||||||
}
|
}
|
||||||
} catch let error {
|
} catch let error {
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
@ -135,11 +143,13 @@ struct NotificationsView: View {
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
do {
|
do {
|
||||||
let status = try await apiRegisterToken(token: token, notificationMode: mode)
|
let _ = try await apiRegisterToken(token: token, notificationMode: mode)
|
||||||
|
let (_, tknStatus, ntfMode, ntfServer) = apiGetNtfToken()
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
m.tokenStatus = status
|
m.tokenStatus = tknStatus
|
||||||
notificationMode = mode
|
notificationMode = ntfMode
|
||||||
m.notificationMode = mode
|
m.notificationMode = ntfMode
|
||||||
|
m.notificationServer = ntfServer
|
||||||
}
|
}
|
||||||
} catch let error {
|
} catch let error {
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
|
@ -613,7 +613,7 @@ public enum ChatResponse: Decodable, Error {
|
|||||||
case callEnded(user: UserRef, 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, ntfServer: String)
|
||||||
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
|
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
|
||||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
|
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
|
||||||
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
||||||
@ -912,7 +912,7 @@ public enum ChatResponse: Decodable, Error {
|
|||||||
case let .callEnded(u, contact): return withUser(u, "contact: \(contact.id)")
|
case let .callEnded(u, contact): return withUser(u, "contact: \(contact.id)")
|
||||||
case let .callInvitations(invs): return String(describing: invs)
|
case let .callInvitations(invs): return String(describing: invs)
|
||||||
case let .ntfTokenStatus(status): return String(describing: status)
|
case let .ntfTokenStatus(status): return String(describing: status)
|
||||||
case let .ntfToken(token, status, ntfMode): return "token: \(token)\nstatus: \(status.rawValue)\nntfMode: \(ntfMode.rawValue)"
|
case let .ntfToken(token, status, ntfMode, ntfServer): return "token: \(token)\nstatus: \(status.rawValue)\nntfMode: \(ntfMode.rawValue)\nntfServer: \(ntfServer)"
|
||||||
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
|
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
|
||||||
case let .ntfMessage(u, connEntity, ntfMessage): return withUser(u, "connEntity: \(String(describing: connEntity))\nntfMessage: \(String(describing: ntfMessage))")
|
case let .ntfMessage(u, connEntity, ntfMessage): return withUser(u, "connEntity: \(String(describing: connEntity))\nntfMessage: \(String(describing: ntfMessage))")
|
||||||
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
|
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
|
||||||
|
Loading…
Reference in New Issue
Block a user