Merge branch 'mkirk/unregistered_user'

pull/1/head
Michael Kirk 8 years ago
commit bff1fedaf2

@ -1,5 +1,6 @@
// Created by Michael Kirk on 10/26/16. //
// Copyright © 2016 Open Whisper Systems. All rights reserved. // Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
import Foundation import Foundation
import PromiseKit import PromiseKit
@ -11,6 +12,8 @@ class SyncPushTokensJob : NSObject {
let accountManager: AccountManager let accountManager: AccountManager
let preferences: PropertyListPreferences let preferences: PropertyListPreferences
var uploadOnlyIfStale = true var uploadOnlyIfStale = true
// useful to ensure promise runs to completion
var retainCycle: SyncPushTokensJob?
required init(pushManager: PushManager, accountManager: AccountManager, preferences: PropertyListPreferences) { required init(pushManager: PushManager, accountManager: AccountManager, preferences: PropertyListPreferences) {
self.pushManager = pushManager self.pushManager = pushManager
@ -29,29 +32,32 @@ class SyncPushTokensJob : NSObject {
func run() -> Promise<Void> { func run() -> Promise<Void> {
Logger.debug("\(TAG) Starting.") Logger.debug("\(TAG) Starting.")
// Make sure we don't GC until completion.
self.retainCycle = self
// Required to potentially prompt user for notifications settings // Required to potentially prompt user for notifications settings
// before `requestPushTokens` will return. // before `requestPushTokens` will return.
self.pushManager.validateUserNotificationSettings() self.pushManager.validateUserNotificationSettings()
return self.requestPushTokens().then { (pushToken: String, voipToken: String) in return self.requestPushTokens().then { (pushToken: String, voipToken: String) in
var shouldUploadTokens = !self.uploadOnlyIfStale
if self.preferences.getPushToken() == pushToken && self.preferences.getVoipToken() == voipToken { if self.preferences.getPushToken() != pushToken || self.preferences.getVoipToken() != voipToken {
Logger.debug("\(self.TAG) push tokens are already up to date.")
if (self.uploadOnlyIfStale) {
return Promise { fulfill, reject in fulfill(); }
} else {
Logger.debug("\(self.TAG) proceeding with upload even though tokens aren't stale")
}
} else {
Logger.debug("\(self.TAG) push tokens changed.") Logger.debug("\(self.TAG) push tokens changed.")
shouldUploadTokens = true
}
guard shouldUploadTokens else {
Logger.info("\(self.TAG) skipping push token upload")
return Promise(value: ())
} }
Logger.debug("\(self.TAG) Sending new tokens to account servers.") Logger.info("\(self.TAG) Sending new tokens to account servers.")
return self.accountManager.updatePushTokens(pushToken:pushToken, voipToken:voipToken).then { return self.accountManager.updatePushTokens(pushToken:pushToken, voipToken:voipToken).then {
Logger.info("\(self.TAG) Recording tokens locally.") Logger.info("\(self.TAG) Recording tokens locally.")
return self.recordNewPushTokens(pushToken:pushToken, voipToken:voipToken); return self.recordNewPushTokens(pushToken:pushToken, voipToken:voipToken)
} }
}.always {
self.retainCycle = nil
} }
} }
@ -62,7 +68,7 @@ class SyncPushTokensJob : NSObject {
fulfill((pushToken:pushToken, voipToken:voipToken)) fulfill((pushToken:pushToken, voipToken:voipToken))
}, },
failure: reject failure: reject
); )
} }
} }
@ -71,15 +77,14 @@ class SyncPushTokensJob : NSObject {
if (pushToken != self.preferences.getPushToken()) { if (pushToken != self.preferences.getPushToken()) {
Logger.info("\(TAG) Recording new plain push token") Logger.info("\(TAG) Recording new plain push token")
self.preferences.setPushToken(pushToken); self.preferences.setPushToken(pushToken)
} }
if (voipToken != self.preferences.getVoipToken()) { if (voipToken != self.preferences.getVoipToken()) {
Logger.info("\(TAG) Recording new voip token") Logger.info("\(TAG) Recording new voip token")
self.preferences.setVoipToken(voipToken); self.preferences.setVoipToken(voipToken)
} }
// TODO code cleanup: convert to `return Promise(value: nil)` and test. return Promise(value: ())
return Promise { fulfill, reject in fulfill(); }
} }
} }

Loading…
Cancel
Save