mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2025-07-02 15:56:21 +00:00
151 lines
4.6 KiB
Objective-C
151 lines
4.6 KiB
Objective-C
//
|
|
// DataManager.m
|
|
// Moonlight
|
|
//
|
|
// Created by Diego Waxemberg on 10/28/14.
|
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
|
//
|
|
|
|
#import "DataManager.h"
|
|
#import "TemporaryApp.h"
|
|
#import "TemporarySettings.h"
|
|
#import "Settings.h"
|
|
|
|
@implementation DataManager {
|
|
NSManagedObjectContext *_managedObjectContext;
|
|
AppDelegate *_appDelegate;
|
|
}
|
|
|
|
- (id) init {
|
|
self = [super init];
|
|
|
|
_appDelegate = [[UIApplication sharedApplication] delegate];
|
|
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
|
[_managedObjectContext setPersistentStoreCoordinator:_appDelegate.persistentStoreCoordinator];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) updateUniqueId:(NSString*)uniqueId {
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
[self retrieveSettings].uniqueId = uniqueId;
|
|
[self saveData];
|
|
}];
|
|
}
|
|
|
|
- (NSString*) getUniqueId {
|
|
__block NSString *uid;
|
|
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
uid = [self retrieveSettings].uniqueId;
|
|
}];
|
|
|
|
return uid;
|
|
}
|
|
|
|
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls {
|
|
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
Settings* settingsToSave = [self retrieveSettings];
|
|
settingsToSave.framerate = [NSNumber numberWithInteger:framerate];
|
|
// Bitrate is persisted in kbps
|
|
settingsToSave.bitrate = [NSNumber numberWithInteger:bitrate];
|
|
settingsToSave.height = [NSNumber numberWithInteger:height];
|
|
settingsToSave.width = [NSNumber numberWithInteger:width];
|
|
settingsToSave.onscreenControls = [NSNumber numberWithInteger:onscreenControls];
|
|
|
|
[self saveData];
|
|
}];
|
|
}
|
|
|
|
- (void) updateHost:(TemporaryHost *)host {
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
// Add a new persistent managed object if one doesn't exist
|
|
if (host.parent == nil) {
|
|
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Host" inManagedObjectContext:_managedObjectContext];
|
|
host.parent = [[Host alloc] initWithEntity:entity insertIntoManagedObjectContext:_managedObjectContext];
|
|
}
|
|
|
|
// Push changes from the temp host to the persistent one
|
|
[host propagateChangesToParent];
|
|
|
|
[self saveData];
|
|
}];
|
|
}
|
|
|
|
- (TemporarySettings*) getSettings {
|
|
__block TemporarySettings *tempSettings;
|
|
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
tempSettings = [[TemporarySettings alloc] initFromSettings:[self retrieveSettings]];
|
|
}];
|
|
|
|
return tempSettings;
|
|
}
|
|
|
|
- (Settings*) retrieveSettings {
|
|
NSArray* fetchedRecords = [self fetchRecords:@"Settings"];
|
|
if (fetchedRecords.count == 0) {
|
|
// create a new settings object with the default values
|
|
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Settings" inManagedObjectContext:_managedObjectContext];
|
|
Settings* settings = [[Settings alloc] initWithEntity:entity insertIntoManagedObjectContext:_managedObjectContext];
|
|
|
|
return settings;
|
|
} else {
|
|
// we should only ever have 1 settings object stored
|
|
return [fetchedRecords objectAtIndex:0];
|
|
}
|
|
}
|
|
|
|
- (void) removeHost:(TemporaryHost*)host {
|
|
if (host.parent == nil) {
|
|
// Not inserted into the DB
|
|
return;
|
|
}
|
|
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
[_managedObjectContext deleteObject:host.parent];
|
|
[self saveData];
|
|
}];
|
|
}
|
|
|
|
- (void) saveData {
|
|
NSError* error;
|
|
if (![_managedObjectContext save:&error]) {
|
|
Log(LOG_E, @"Unable to save hosts to database: %@", error);
|
|
}
|
|
|
|
[_appDelegate saveContext];
|
|
}
|
|
|
|
- (NSArray*) getHosts {
|
|
__block NSMutableArray *tempHosts = [[NSMutableArray alloc] init];
|
|
|
|
[_managedObjectContext performBlockAndWait:^{
|
|
NSArray *hosts = [self fetchRecords:@"Host"];
|
|
|
|
for (Host* host in hosts) {
|
|
[tempHosts addObject:[[TemporaryHost alloc] initFromHost:host]];
|
|
}
|
|
}];
|
|
|
|
return tempHosts;
|
|
}
|
|
|
|
- (NSArray*) fetchRecords:(NSString*)entityName {
|
|
NSArray* fetchedRecords;
|
|
|
|
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
|
|
NSEntityDescription* entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:_managedObjectContext];
|
|
[fetchRequest setEntity:entity];
|
|
|
|
NSError* error;
|
|
fetchedRecords = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
|
|
//TODO: handle errors
|
|
|
|
return fetchedRecords;
|
|
}
|
|
|
|
@end
|
|
|