92 lines
2.4 KiB
Swift
92 lines
2.4 KiB
Swift
//
|
|
// SyncManager.swift
|
|
// Delta
|
|
//
|
|
// Created by Riley Testut on 11/12/18.
|
|
// Copyright © 2018 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
import Harmony
|
|
import Harmony_Drive
|
|
|
|
final class SyncManager
|
|
{
|
|
static let shared = SyncManager()
|
|
|
|
var service: Service {
|
|
return self.syncCoordinator.service
|
|
}
|
|
|
|
var recordController: RecordController {
|
|
return self.syncCoordinator.recordController
|
|
}
|
|
|
|
private(set) var isAuthenticated = false
|
|
|
|
let syncCoordinator = SyncCoordinator(service: DriveService.shared, persistentContainer: DatabaseManager.shared)
|
|
|
|
private init()
|
|
{
|
|
DriveService.shared.clientID = "457607414709-5puj6lcv779gpu3ql43e6k3smjj40dmu.apps.googleusercontent.com"
|
|
}
|
|
}
|
|
|
|
extension SyncManager
|
|
{
|
|
func start(completionHandler: @escaping (Error?) -> Void)
|
|
{
|
|
self.syncCoordinator.start { (result) in
|
|
do
|
|
{
|
|
_ = try result.verify()
|
|
|
|
self.syncCoordinator.service.authenticateInBackground { (result) in
|
|
do
|
|
{
|
|
_ = try result.verify()
|
|
|
|
self.isAuthenticated = true
|
|
}
|
|
catch let error as AuthenticationError where error.code == .noSavedCredentials
|
|
{
|
|
// Ignore
|
|
}
|
|
catch
|
|
{
|
|
return completionHandler(error)
|
|
}
|
|
|
|
completionHandler(nil)
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
completionHandler(error)
|
|
}
|
|
}
|
|
}
|
|
|
|
func authenticate(presentingViewController: UIViewController, completionHandler: @escaping (Error?) -> Void)
|
|
{
|
|
guard !self.isAuthenticated else { return completionHandler(nil) }
|
|
|
|
self.service.authenticate(withPresentingViewController: presentingViewController) { (result) in
|
|
switch result
|
|
{
|
|
case .success:
|
|
self.isAuthenticated = true
|
|
completionHandler(nil)
|
|
|
|
case .failure(let error): completionHandler(error)
|
|
}
|
|
}
|
|
}
|
|
|
|
func sync()
|
|
{
|
|
guard self.isAuthenticated else { return }
|
|
|
|
self.syncCoordinator.sync()
|
|
}
|
|
}
|