Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
firefox-merge-…
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
executable file 69 lines (56 sloc) 2.24 KB
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import Foundation
enum ReadingListSynchronizerResult {
case success
case failure
case error(NSError)
}
enum ReadingListSyncType {
case uploadOnly
case full
}
class ReadingListSynchronizer {
var storage: ReadingListStorage
var client: ReadingListClient
init(storage: ReadingListStorage, client: ReadingListClient) {
self.storage = storage
self.client = client
}
func synchronize(type: ReadingListSyncType, completion: (ReadingListSynchronizerResult) -> Void) {
// TODO Check if we are already syncing - Keep state somewhere
// TODO If this is a first time sync then we want to remember the account and server in storage, so that:
// TODO Check if the client is configured to use a different account or server
switch type {
case .uploadOnly:
let synchronizer = ReadingListUploadOnlySynchronizer(storage: storage, client: client)
synchronizer.synchronizeWithCompletion(completion)
case .full:
let synchronizer = ReadingListFullSynchronizer(storage: storage, client: client)
synchronizer.synchronizeWithCompletion(completion)
}
}
}
// This is implemented in two different classes to make the design simpler. There will be some duplicate
// code but I prefer that instead of having two implementations in one class.
private class ReadingListUploadOnlySynchronizer {
var storage: ReadingListStorage
var client: ReadingListClient
init(storage: ReadingListStorage, client: ReadingListClient) {
self.storage = storage
self.client = client
}
func synchronizeWithCompletion(_ completion: (ReadingListSynchronizerResult) -> Void) {
}
}
private class ReadingListFullSynchronizer {
var storage: ReadingListStorage
var client: ReadingListClient
init(storage: ReadingListStorage, client: ReadingListClient) {
self.storage = storage
self.client = client
}
func synchronizeWithCompletion(_ completion: (ReadingListSynchronizerResult) -> Void) {
}
}