| Index: remoting/ios/data_store.mm
|
| diff --git a/remoting/ios/data_store.mm b/remoting/ios/data_store.mm
|
| deleted file mode 100644
|
| index 1cfbc3f9ac2bb85d571e835ebc6932cbb77f4ebf..0000000000000000000000000000000000000000
|
| --- a/remoting/ios/data_store.mm
|
| +++ /dev/null
|
| @@ -1,176 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| -#error "This file requires ARC support."
|
| -#endif
|
| -
|
| -#import "remoting/ios/data_store.h"
|
| -
|
| -@interface DataStore (Private)
|
| -- (NSString*)itemArchivePath;
|
| -@end
|
| -
|
| -@implementation DataStore {
|
| - @private
|
| - NSMutableArray* _allHosts;
|
| - NSManagedObjectContext* _context;
|
| - NSManagedObjectModel* _model;
|
| -}
|
| -
|
| -// Create or Get a static data store
|
| -+ (DataStore*)sharedStore {
|
| - static DataStore* sharedStore = nil;
|
| - static dispatch_once_t onceToken;
|
| - dispatch_once(&onceToken,
|
| - ^{ sharedStore = [[super allocWithZone:nil] init]; });
|
| -
|
| - return sharedStore;
|
| -}
|
| -
|
| -// General methods
|
| -+ (id)allocWithZone:(NSZone*)zone {
|
| - return [self sharedStore];
|
| -}
|
| -
|
| -// Load data store from SQLLite backing store
|
| -- (id)init {
|
| - self = [super init];
|
| -
|
| - if (self) {
|
| - // Read in ChromotingModel.xdatamodeld
|
| - _model = [NSManagedObjectModel mergedModelFromBundles:nil];
|
| -
|
| - NSPersistentStoreCoordinator* psc = [[NSPersistentStoreCoordinator alloc]
|
| - initWithManagedObjectModel:_model];
|
| -
|
| - NSString* path = [self itemArchivePath];
|
| - NSURL* storeUrl = [NSURL fileURLWithPath:path];
|
| -
|
| - NSError* error = nil;
|
| -
|
| - NSDictionary* tryOptions = @{
|
| - NSMigratePersistentStoresAutomaticallyOption : @YES,
|
| - NSInferMappingModelAutomaticallyOption : @YES
|
| - };
|
| - NSDictionary* makeOptions =
|
| - @{NSMigratePersistentStoresAutomaticallyOption : @YES};
|
| -
|
| - if (![psc addPersistentStoreWithType:NSSQLiteStoreType
|
| - configuration:nil
|
| - URL:storeUrl
|
| - options:tryOptions
|
| - error:&error]) {
|
| - // An incompatible version of the store exists, delete it and start over
|
| - [[NSFileManager defaultManager] removeItemAtURL:storeUrl error:nil];
|
| -
|
| - [psc addPersistentStoreWithType:NSSQLiteStoreType
|
| - configuration:nil
|
| - URL:storeUrl
|
| - options:makeOptions
|
| - error:&error];
|
| - [NSException raise:@"Open failed"
|
| - format:@"Reason: %@", [error localizedDescription]];
|
| - }
|
| -
|
| - // Create the managed object context
|
| - _context = [[NSManagedObjectContext alloc] init];
|
| - [_context setPersistentStoreCoordinator:psc];
|
| -
|
| - // The managed object context can manage undo, but we don't need it
|
| - [_context setUndoManager:nil];
|
| -
|
| - _allHosts = nil;
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -// Committing to backing store
|
| -- (BOOL)saveChanges {
|
| - NSError* err = nil;
|
| - BOOL successful = [_context save:&err];
|
| - return successful;
|
| -}
|
| -
|
| -// Looking up the backing store path
|
| -- (NSString*)itemArchivePath {
|
| - NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(
|
| - NSDocumentDirectory, NSUserDomainMask, YES);
|
| -
|
| - // Get one and only document directory from that list
|
| - NSString* documentDirectory = [documentDirectories objectAtIndex:0];
|
| -
|
| - return [documentDirectory stringByAppendingPathComponent:@"store.data"];
|
| -}
|
| -
|
| -// Return an array of all known hosts, if the list hasn't been loaded yet, then
|
| -// load it now
|
| -- (NSArray*)allHosts {
|
| - if (!_allHosts) {
|
| - NSFetchRequest* request = [[NSFetchRequest alloc] init];
|
| -
|
| - NSEntityDescription* e =
|
| - [[_model entitiesByName] objectForKey:@"HostPreferences"];
|
| -
|
| - [request setEntity:e];
|
| -
|
| - NSError* error;
|
| - NSArray* result = [_context executeFetchRequest:request error:&error];
|
| - if (!result) {
|
| - [NSException raise:@"Fetch failed"
|
| - format:@"Reason: %@", [error localizedDescription]];
|
| - }
|
| - _allHosts = [result mutableCopy];
|
| - }
|
| -
|
| - return _allHosts;
|
| -}
|
| -
|
| -// Return a HostPreferences if it already exists, otherwise create a new
|
| -// HostPreferences to use
|
| -- (const HostPreferences*)createHost:(NSString*)hostId {
|
| -
|
| - const HostPreferences* p = [self getHostForId:hostId];
|
| -
|
| - if (p == nil) {
|
| - p = [NSEntityDescription insertNewObjectForEntityForName:@"HostPreferences"
|
| - inManagedObjectContext:_context];
|
| - p.hostId = hostId;
|
| - [_allHosts addObject:p];
|
| - }
|
| - return p;
|
| -}
|
| -
|
| -- (void)removeHost:(HostPreferences*)p {
|
| - [_context deleteObject:p];
|
| - [_allHosts removeObjectIdenticalTo:p];
|
| -}
|
| -
|
| -// Search the store for any matching HostPreferences
|
| -// return the 1st match or nil
|
| -- (const HostPreferences*)getHostForId:(NSString*)hostId {
|
| - NSFetchRequest* request = [[NSFetchRequest alloc] init];
|
| -
|
| - NSEntityDescription* e =
|
| - [[_model entitiesByName] objectForKey:@"HostPreferences"];
|
| - [request setEntity:e];
|
| -
|
| - NSPredicate* predicate =
|
| - [NSPredicate predicateWithFormat:@"(hostId = %@)", hostId];
|
| - [request setPredicate:predicate];
|
| -
|
| - NSError* error;
|
| - NSArray* result = [_context executeFetchRequest:request error:&error];
|
| - if (!result) {
|
| - [NSException raise:@"Fetch failed"
|
| - format:@"Reason: %@", [error localizedDescription]];
|
| - }
|
| -
|
| - for (HostPreferences* curHost in result) {
|
| - return curHost;
|
| - }
|
| - return nil;
|
| -}
|
| -
|
| -@end
|
|
|