summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm')
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm195
1 files changed, 195 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm
new file mode 100644
index 0000000..c6fb49a
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm
@@ -0,0 +1,195 @@
+//
+// MediaServerCocoaTest_AppDelegate.m
+// MediaServerCocoaTest
+//
+// Created by Sylvain on 9/14/10.
+// Copyright Plutinosoft LLC 2010 . All rights reserved.
+//
+
+#import "MediaServerCocoaTest_AppDelegate.h"
+
+@implementation MediaServerCocoaTest_AppDelegate
+
+@synthesize window;
+
+/**
+ Returns the support directory for the application, used to store the Core Data
+ store file. This code uses a directory named "MediaServerCocoaTest" for
+ the content, either in the NSApplicationSupportDirectory location or (if the
+ former cannot be found), the system's temporary directory.
+ */
+
+- (NSString *)applicationSupportDirectory {
+
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
+ NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
+ return [basePath stringByAppendingPathComponent:@"MediaServerCocoaTest"];
+}
+
+
+/**
+ Creates, retains, and returns the managed object model for the application
+ by merging all of the models found in the application bundle.
+ */
+
+- (NSManagedObjectModel *)managedObjectModel {
+
+ if (managedObjectModel) return managedObjectModel;
+
+ managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
+ return managedObjectModel;
+}
+
+
+/**
+ Returns the persistent store coordinator for the application. This
+ implementation will create and return a coordinator, having added the
+ store for the application to it. (The directory for the store is created,
+ if necessary.)
+ */
+
+- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {
+
+ if (persistentStoreCoordinator) return persistentStoreCoordinator;
+
+ NSManagedObjectModel *mom = [self managedObjectModel];
+ if (!mom) {
+ NSAssert(NO, @"Managed object model is nil");
+ //NSLog(@"%@:%s No model to generate a store from", [self class], _cmd);
+ return nil;
+ }
+
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *applicationSupportDirectory = [self applicationSupportDirectory];
+ NSError *error = nil;
+
+ if ( ![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL] ) {
+ if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) {
+ NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error]));
+ NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error);
+ return nil;
+ }
+ }
+
+ NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]];
+ persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom];
+ if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
+ configuration:nil
+ URL:url
+ options:nil
+ error:&error]){
+ [[NSApplication sharedApplication] presentError:error];
+ persistentStoreCoordinator = nil;
+ return nil;
+ }
+
+ return persistentStoreCoordinator;
+}
+
+/**
+ Returns the managed object context for the application (which is already
+ bound to the persistent store coordinator for the application.)
+ */
+
+- (NSManagedObjectContext *) managedObjectContext {
+
+ if (managedObjectContext) return managedObjectContext;
+
+ NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
+ if (!coordinator) {
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+ [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey];
+ [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
+ NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
+ [[NSApplication sharedApplication] presentError:error];
+ return nil;
+ }
+ managedObjectContext = [[NSManagedObjectContext alloc] init];
+ [managedObjectContext setPersistentStoreCoordinator: coordinator];
+
+ return managedObjectContext;
+}
+
+/**
+ Returns the NSUndoManager for the application. In this case, the manager
+ returned is that of the managed object context for the application.
+ */
+
+- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
+ return [[self managedObjectContext] undoManager];
+}
+
+
+/**
+ Performs the save action for the application, which is to send the save:
+ message to the application's managed object context. Any encountered errors
+ are presented to the user.
+ */
+
+- (IBAction) saveAction:(id)sender {
+
+ NSError *error = nil;
+
+ if (![[self managedObjectContext] commitEditing]) {
+ //NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd);
+ }
+
+ if (![[self managedObjectContext] save:&error]) {
+ [[NSApplication sharedApplication] presentError:error];
+ }
+}
+
+
+/**
+ Implementation of the applicationShouldTerminate: method, used here to
+ handle the saving of changes in the application managed object context
+ before the application terminates.
+ */
+
+- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
+
+ if (!managedObjectContext) return NSTerminateNow;
+
+ if (![managedObjectContext commitEditing]) {
+ //NSLog(@"%@:%s unable to commit editing to terminate", [self class], _cmd);
+ return NSTerminateCancel;
+ }
+
+ if (![managedObjectContext hasChanges]) return NSTerminateNow;
+
+ NSError *error = nil;
+ if (![managedObjectContext save:&error]) {
+
+ // This error handling simply presents error information in a panel with an
+ // "Ok" button, which does not include any attempt at error recovery (meaning,
+ // attempting to fix the error.) As a result, this implementation will
+ // present the information to the user and then follow up with a panel asking
+ // if the user wishes to "Quit Anyway", without saving the changes.
+
+ // Typically, this process should be altered to include application-specific
+ // recovery steps.
+
+ BOOL result = [sender presentError:error];
+ if (result) return NSTerminateCancel;
+
+ NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message");
+ NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info");
+ NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title");
+ NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title");
+ NSAlert *alert = [[NSAlert alloc] init];
+ [alert setMessageText:question];
+ [alert setInformativeText:info];
+ [alert addButtonWithTitle:quitButton];
+ [alert addButtonWithTitle:cancelButton];
+
+ NSInteger answer = [alert runModal];
+ alert = nil;
+
+ if (answer == NSAlertAlternateReturn) return NSTerminateCancel;
+
+ }
+
+ return NSTerminateNow;
+}
+
+@end