Moved transcript indexing to an XPC service

This commit is contained in:
Guilherme Rambo
2017-05-28 01:06:58 -03:00
parent 25cdb3ce5b
commit 12bb3e5c8e
9 changed files with 458 additions and 68 deletions

View File

@@ -18,16 +18,24 @@ public final class SyncEngine {
public let storage: Storage
public let client: AppleAPIClient
public let transcriptIndexer: TranscriptIndexer
private lazy var transcriptIndexingConnection: NSXPCConnection = {
let c = NSXPCConnection(serviceName: "io.wwdc.app.TranscriptIndexingService")
c.remoteObjectInterface = NSXPCInterface(with: TranscriptIndexingServiceProtocol.self)
return c
}()
private var transcriptIndexingService: TranscriptIndexingServiceProtocol? {
return transcriptIndexingConnection.remoteObjectProxy as? TranscriptIndexingServiceProtocol
}
public init(storage: Storage, client: AppleAPIClient) {
self.storage = storage
self.client = client
self.transcriptIndexer = TranscriptIndexer(storage)
NotificationCenter.default.addObserver(forName: .SyncEngineDidSyncSessionsAndSchedule, object: nil, queue: OperationQueue.main) { [unowned self] _ in
self.transcriptIndexer.downloadTranscriptsIfNeeded()
self.startTranscriptIndexingIfNeeded()
}
}
@@ -53,4 +61,12 @@ public final class SyncEngine {
}
}
private func startTranscriptIndexingIfNeeded() {
guard let url = storage.realmConfig.fileURL else { return }
transcriptIndexingConnection.resume()
transcriptIndexingService?.indexTranscriptsIfNeeded(storageURL: url, schemaVersion: storage.realmConfig.schemaVersion)
}
}