|
|
|
@ -1,16 +1,19 @@
|
|
|
|
|
// 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 PromiseKit
|
|
|
|
|
|
|
|
|
|
@objc(OWSSyncPushTokensJob)
|
|
|
|
|
class SyncPushTokensJob : NSObject {
|
|
|
|
|
class SyncPushTokensJob: NSObject {
|
|
|
|
|
let TAG = "[SyncPushTokensJob]"
|
|
|
|
|
let pushManager: PushManager
|
|
|
|
|
let accountManager: AccountManager
|
|
|
|
|
let preferences: PropertyListPreferences
|
|
|
|
|
var uploadOnlyIfStale = true
|
|
|
|
|
// useful to ensure promise runs to completion
|
|
|
|
|
var retainCycle: SyncPushTokensJob?
|
|
|
|
|
|
|
|
|
|
required init(pushManager: PushManager, accountManager: AccountManager, preferences: PropertyListPreferences) {
|
|
|
|
|
self.pushManager = pushManager
|
|
|
|
@ -29,29 +32,32 @@ class SyncPushTokensJob : NSObject {
|
|
|
|
|
|
|
|
|
|
func run() -> Promise<Void> {
|
|
|
|
|
Logger.debug("\(TAG) Starting.")
|
|
|
|
|
// Make sure we don't GC until completion.
|
|
|
|
|
self.retainCycle = self
|
|
|
|
|
|
|
|
|
|
// Required to potentially prompt user for notifications settings
|
|
|
|
|
// before `requestPushTokens` will return.
|
|
|
|
|
self.pushManager.validateUserNotificationSettings()
|
|
|
|
|
|
|
|
|
|
return self.requestPushTokens().then { (pushToken: String, voipToken: String) in
|
|
|
|
|
|
|
|
|
|
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 {
|
|
|
|
|
var shouldUploadTokens = !self.uploadOnlyIfStale
|
|
|
|
|
if self.preferences.getPushToken() != pushToken || self.preferences.getVoipToken() != voipToken {
|
|
|
|
|
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 {
|
|
|
|
|
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))
|
|
|
|
|
},
|
|
|
|
|
failure: reject
|
|
|
|
|
);
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -71,15 +77,14 @@ class SyncPushTokensJob : NSObject {
|
|
|
|
|
|
|
|
|
|
if (pushToken != self.preferences.getPushToken()) {
|
|
|
|
|
Logger.info("\(TAG) Recording new plain push token")
|
|
|
|
|
self.preferences.setPushToken(pushToken);
|
|
|
|
|
self.preferences.setPushToken(pushToken)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (voipToken != self.preferences.getVoipToken()) {
|
|
|
|
|
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 { fulfill, reject in fulfill(); }
|
|
|
|
|
return Promise(value: ())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|