wip
This commit is contained in:
parent
87642a5a10
commit
eb037c452a
|
@ -8,6 +8,7 @@ struct AnotherIMApp: App {
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
DDLog.add(DDOSLogger.sharedInstance, with: .all)
|
DDLog.add(DDOSLogger.sharedInstance, with: .all)
|
||||||
|
MLProcessLock.initialize(forProcess: "MainApp")
|
||||||
}
|
}
|
||||||
|
|
||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
|
|
|
@ -20,7 +20,6 @@ final class MonalXmppWrapper: ObservableObject {
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
// here is some inits (just for now)
|
// here is some inits (just for now)
|
||||||
MLProcessLock.initialize(forProcess: "MainApp")
|
|
||||||
|
|
||||||
// init monalxmpp components
|
// init monalxmpp components
|
||||||
xmpp = MLXMPPManager.sharedInstance()
|
xmpp = MLXMPPManager.sharedInstance()
|
||||||
|
@ -43,8 +42,8 @@ final class MonalXmppWrapper: ObservableObject {
|
||||||
// MARK: - Public
|
// MARK: - Public
|
||||||
extension MonalXmppWrapper {
|
extension MonalXmppWrapper {
|
||||||
func tryLogin(_ login: String, _ password: String) async throws {
|
func tryLogin(_ login: String, _ password: String) async throws {
|
||||||
let loginObject = LoginTry(xmpp: xmpp)
|
let scenario = ScenarioLogIn()
|
||||||
let result = await loginObject.tryLogin(login, password)
|
let result = await scenario.tryLogin(login, password)
|
||||||
if !result {
|
if !result {
|
||||||
throw AimErrors.loginError
|
throw AimErrors.loginError
|
||||||
} else {
|
} else {
|
||||||
|
@ -94,48 +93,6 @@ extension MonalXmppWrapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Try login from Login screen
|
|
||||||
private final class LoginTry {
|
|
||||||
weak var xmpp: MLXMPPManager?
|
|
||||||
|
|
||||||
var successObserver: AnyObject?
|
|
||||||
var failureObserver: AnyObject?
|
|
||||||
|
|
||||||
init(xmpp: MLXMPPManager) {
|
|
||||||
self.xmpp = xmpp
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Добавить автовключение отключенных аккаунтов при попытке ввести тот же JID
|
|
||||||
// Обработать кейс когда бесячий monalxmpp возвращает nil при попытке добавить тот же JID
|
|
||||||
func tryLogin(_ login: String, _ password: String) async -> Bool {
|
|
||||||
async let notify = await withCheckedContinuation { [weak self] continuation in
|
|
||||||
self?.successObserver = NotificationCenter.default.addObserver(forName: Notification.Name("kMLResourceBoundNotice"), object: nil, queue: .main) { _ in
|
|
||||||
continuation.resume(returning: true)
|
|
||||||
}
|
|
||||||
self?.failureObserver = NotificationCenter.default.addObserver(forName: Notification.Name("kXMPPError"), object: nil, queue: .main) { _ in
|
|
||||||
continuation.resume(returning: false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defer {
|
|
||||||
if let successObserver {
|
|
||||||
NotificationCenter.default.removeObserver(successObserver)
|
|
||||||
}
|
|
||||||
if let failureObserver {
|
|
||||||
NotificationCenter.default.removeObserver(failureObserver)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let accountNumber = xmpp?.login(login, password: password)
|
|
||||||
let result = await notify
|
|
||||||
if let accountNumber, !result {
|
|
||||||
xmpp?.removeAccount(forAccountID: accountNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Handle notifications
|
// MARK: - Handle notifications
|
||||||
private extension MonalXmppWrapper {
|
private extension MonalXmppWrapper {
|
||||||
func subscribeToUpdates() {
|
func subscribeToUpdates() {
|
||||||
|
|
|
@ -1 +1,39 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import monalxmpp
|
||||||
|
|
||||||
|
final class ScenarioLogIn {
|
||||||
|
private let xmpp = MLXMPPManager.sharedInstance()
|
||||||
|
|
||||||
|
private var successObserver: AnyObject?
|
||||||
|
private var failureObserver: AnyObject?
|
||||||
|
|
||||||
|
// TODO: Добавить автовключение отключенных аккаунтов при попытке ввести тот же JID
|
||||||
|
// Обработать кейс когда бесячий monalxmpp возвращает nil при попытке добавить тот же JID
|
||||||
|
func tryLogin(_ login: String, _ password: String) async -> Bool {
|
||||||
|
async let notify = await withCheckedContinuation { [weak self] continuation in
|
||||||
|
self?.successObserver = NotificationCenter.default.addObserver(forName: Notification.Name("kMLResourceBoundNotice"), object: nil, queue: .main) { _ in
|
||||||
|
continuation.resume(returning: true)
|
||||||
|
}
|
||||||
|
self?.failureObserver = NotificationCenter.default.addObserver(forName: Notification.Name("kXMPPError"), object: nil, queue: .main) { _ in
|
||||||
|
continuation.resume(returning: false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defer {
|
||||||
|
if let successObserver {
|
||||||
|
NotificationCenter.default.removeObserver(successObserver)
|
||||||
|
}
|
||||||
|
if let failureObserver {
|
||||||
|
NotificationCenter.default.removeObserver(failureObserver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let accountNumber = xmpp.login(login, password: password)
|
||||||
|
let result = await notify
|
||||||
|
if let accountNumber, !result {
|
||||||
|
xmpp.removeAccount(forAccountID: accountNumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue