Prevent several instances of Transmission.app from running simultaneously

This commit is contained in:
Eric Petit 2006-12-14 23:44:54 +00:00
parent 5ad739aa5c
commit 0d1d80c2ce
1 changed files with 26 additions and 0 deletions

View File

@ -74,6 +74,32 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy
+ (void) initialize
{
/* Make sure another Transmission.app isn't running already */
NSString * myBundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
int myProcessIdentifier = [[NSProcessInfo processInfo] processIdentifier];
NSDictionary * dico;
NSEnumerator * enumerator = [[[NSWorkspace sharedWorkspace] launchedApplications] objectEnumerator];
while( ( dico = [enumerator nextObject] ) )
{
if( ![[dico objectForKey: @"NSApplicationBundleIdentifier"] isEqualToString: myBundleIdentifier] )
{
/* This isn't Transmission */
continue;
}
if( [[dico objectForKey: @"NSApplicationProcessIdentifier"] intValue] == myProcessIdentifier )
{
/* This is ourselves */
continue;
}
/* Activate the already running instance, then kill ourselves right away */
NSLog( @"Another instance of Transmission is already running, aborting" );
[[NSWorkspace sharedWorkspace] launchApplication: [dico objectForKey: @"NSApplicationPath"]];
exit( 0 );
}
[[NSUserDefaults standardUserDefaults] registerDefaults: [NSDictionary dictionaryWithContentsOfFile:
[[NSBundle mainBundle] pathForResource: @"Defaults" ofType: @"plist"]]];