#import "SoulSeek.h" #import @implementation SoulSeek(CoreMethods) #pragma mark User Defaults + (void)initialize { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys: @"server.slsknet.org", @"server_url", [NSNumber numberWithInt:2240], @"server_port", [NSNumber numberWithInt:2230], @"client_listen_port", [NSNumber numberWithInt:2230], @"client_listen_port_range_start", [NSNumber numberWithInt:2239], @"client_listen_port_range_end", [NSNumber numberWithInt:156], @"soulseek_version", @"", @"user", @"", @"password", [NSNumber numberWithBool:NO], @"auto_login", nil]; [defaults registerDefaults:appDefaults]; } -(NSString *) valueForPreference:(NSString *)name { return [[NSUserDefaults standardUserDefaults] valueForKey:name]; } -(void) setValue:(id)value forPreference:(NSString *)name { NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:value forKey:name]; [defaults synchronize]; } #pragma mark threading -(BOOL) isInForeground { return [NSThread currentThread] == foregroundThread; } -(BOOL) isInBackground { return [NSThread currentThread] == backgroundThread; } -(void) startBackgroundThread:(id)unused{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; backgroundThread = [NSThread currentThread]; [background deliverInCurrentThread]; [[NSRunLoop currentRunLoop] run]; NSLog(@"Loop terminated..."); [pool release]; } -(void) startForegroundThread:(id)unused{ [foreground deliverInCurrentThread]; } -(id) init { if (!(self = [super init])) return nil; background = [[YAMessageQueue alloc] init]; foreground = [[YAMessageQueue alloc] init]; connectedPeers = [[NSMutableDictionary alloc] init]; pierceFirewallInfo = [[NSMutableDictionary alloc] init]; fileTransfers = [[NSMutableDictionary alloc] init]; incomingConnections = [[NSMutableArray alloc] init]; [self startForegroundThread:nil]; foregroundThread = [NSThread currentThread]; [self prepareManagedObjectContexts]; [NSThread detachNewThreadSelector:@selector(startBackgroundThread:) toTarget:self withObject:nil]; return self; } - (NSString *)runCommand:(NSString *)command withArguments:(NSArray *)args { NSTask *task = [[NSTask alloc] init]; NSPipe *newPipe = [NSPipe pipe]; NSFileHandle *readHandle = [newPipe fileHandleForReading]; NSData *inData; NSString *tempString; // [task setCurrentDirectory:NSHomeDirectory()]; [task setLaunchPath:command]; [task setArguments:args]; [task setStandardOutput:newPipe]; [task setStandardError:newPipe]; [task launch]; inData = [readHandle readDataToEndOfFile]; tempString = [[NSString alloc] initWithData:inData encoding:NSASCIIStringEncoding]; [task release]; [tempString autorelease]; return tempString; } -(NSString *)MD5:(NSString *)string { NSString *result = [self runCommand:@"/sbin/md5" withArguments:[NSArray arrayWithObjects:@"-q", @"-s", string, nil]]; return result; } @end