diff --git a/Tinodios/AppDelegate.swift b/Tinodios/AppDelegate.swift index 9f738b12..345156c6 100644 --- a/Tinodios/AppDelegate.swift +++ b/Tinodios/AppDelegate.swift @@ -260,7 +260,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate { } DispatchQueue.global(qos: .userInitiated).async { if !SharedUtils.connectAndLoginSync(using: tinode, inBackground: false) { - UiUtils.logoutAndRouteToLoginVC() + DispatchQueue.main.async { UiUtils.showToast(message: "Failed to connect to server") } } else { UiUtils.routeToMessageVC(forTopic: topicName) } diff --git a/Tinodios/ChatListInteractor.swift b/Tinodios/ChatListInteractor.swift index 514e0774..4833245a 100644 --- a/Tinodios/ChatListInteractor.swift +++ b/Tinodios/ChatListInteractor.swift @@ -63,7 +63,8 @@ class ChatListInteractor: ChatListBusinessLogic, ChatListDataStore { super.init(connected: connected) self.interactor = interactor } - func onLogin(code: Int, text: String) { + override func onLogin(code: Int, text: String) { + super.onLogin(code: code, text: text) self.interactor?.attachToMeTopic() } override func onDisconnect(byServer: Bool, code: URLSessionWebSocketTask.CloseCode, reason: String) { @@ -71,12 +72,14 @@ class ChatListInteractor: ChatListBusinessLogic, ChatListDataStore { // Update presence indicators (all should be off). self.interactor?.loadAndPresentTopics() } - func onDataMessage(data: MsgServerData?) { + override func onDataMessage(data: MsgServerData?) { + super.onDataMessage(data: data) if let topic = data?.topic { interactor?.updateChat(topic) } } - func onInfoMessage(info: MsgServerInfo?) { + override func onInfoMessage(info: MsgServerInfo?) { + super.onInfoMessage(info: info) if info?.what != "call", let topic = info?.src { interactor?.updateChat(topic) } diff --git a/Tinodios/MessageInteractor.swift b/Tinodios/MessageInteractor.swift index e452d169..1c418dcf 100644 --- a/Tinodios/MessageInteractor.swift +++ b/Tinodios/MessageInteractor.swift @@ -81,7 +81,9 @@ class MessageInteractor: DefaultComTopic.Listener, MessageBusinessLogic, Message super.init(connected: connected) self.interactor = interactor } - func onLogin(code: Int, text: String) { + + override func onLogin(code: Int, text: String) { + super.onLogin(code: code, text: text) _ = UiUtils.attachToMeTopic(meListener: nil) _ = interactor?.attachToTopic(interactively: false) } diff --git a/Tinodios/MessageViewController.swift b/Tinodios/MessageViewController.swift index d3abc18a..04f93fdd 100644 --- a/Tinodios/MessageViewController.swift +++ b/Tinodios/MessageViewController.swift @@ -257,6 +257,7 @@ class MessageViewController: UIViewController { func appBecameActive() { self.interactor?.setup(topicName: topicName, sendReadReceipts: self.sendReadReceipts) self.interactor?.attachToTopic(interactively: true) + self.interactor?.loadMessagesFromCache(scrollToMostRecentMessage: false) } @objc func appGoingInactive() { diff --git a/Tinodios/UiUtils.swift b/Tinodios/UiUtils.swift index b2f48dac..d5acdec3 100644 --- a/Tinodios/UiUtils.swift +++ b/Tinodios/UiUtils.swift @@ -18,6 +18,18 @@ class UiTinodeEventListener: TinodeEventListener { init(connected: Bool) { self.connected = connected } + + // Empty handlers. Otherwise, methods of subclasses of UiTinodeEventListener + // won't be called. + func onLogin(code: Int, text: String) {} + func onMessage(msg: ServerMessage?) {} + func onRawMessage(msg: String) {} + func onCtrlMessage(ctrl: MsgServerCtrl?) {} + func onDataMessage(data: MsgServerData?) {} + func onInfoMessage(info: MsgServerInfo?) {} + func onMetaMessage(meta: MsgServerMeta?) {} + func onPresMessage(pres: MsgServerPres?) {} + func onConnect(code: Int, reason: String, params: [String: JSONValue]?) { connected = true }