636e2dfd2f887d65869b9448e65b309d58bec84a
[ITFoundation.git] / ITLoginItem.m
1 /*
2  *  ITLoginItem.m
3  *  ITFoundation
4  *
5  *  Created by Kent Sutherland on Mon May 17 2004.
6  *  Copyright (c) 2004 __MyCompanyName__. All rights reserved.
7  *
8  */
9
10 #import "ITLoginItem.h"
11 #import "ITDebug.h"
12
13 void ITSetApplicationLaunchOnLogin(NSString *path, BOOL flag)
14 {
15     if ( (flag && ITDoesApplicationLaunchOnLogin(path)) || ![[NSFileManager defaultManager] fileExistsAtPath:path] ) {
16         return;
17     }
18     NSUserDefaults *df = [NSUserDefaults standardUserDefaults];
19     NSMutableDictionary *loginwindow;
20     NSMutableArray *loginarray;
21     
22     ITDebugLog(@"Set if \"%@\" launches at login to %i.", path, flag);
23     [df synchronize];
24     loginwindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy];
25     loginarray = [[loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"] mutableCopy];
26     
27     if (flag) {
28         FSRef fileRef;
29         AliasHandle alias;
30         NSData *aliasData;
31         FSPathMakeRef([path UTF8String], &fileRef, NULL);
32         FSNewAlias(NULL, &fileRef, &alias);
33         aliasData = [NSData dataWithBytes:&alias length:GetHandleSize((Handle)alias)];
34         
35         if (!loginarray) { //If there is no loginarray of autolaunch items, create one
36             loginarray = [[[NSMutableArray alloc] init] autorelease];
37         }
38         NSDictionary *itemDict = [NSDictionary dictionaryWithObjectsAndKeys:
39             [[NSBundle mainBundle] bundlePath], @"Path",
40             [NSNumber numberWithInt:0], @"Hide",
41             aliasData, @"AliasData", nil, nil];
42         [loginarray addObject:itemDict];
43     } else {
44         int i;
45         for (i = 0; i < [loginarray count]; i++) {
46             NSDictionary *tempDict = [loginarray objectAtIndex:i];
47             if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[path lastPathComponent]]) {
48                 [loginarray removeObjectAtIndex:i];
49                 break;
50             }
51         }
52     }
53     [loginwindow setObject:loginarray forKey:@"AutoLaunchedApplicationDictionary"];
54     [df setPersistentDomain:loginwindow forName:@"loginwindow"];
55     [df synchronize];
56     [loginwindow release];
57     [loginarray release];
58 }
59
60 BOOL ITDoesApplicationLaunchOnLogin(NSString *path)
61 {
62     NSUserDefaults *df = [NSUserDefaults standardUserDefaults];
63     NSDictionary *loginwindow;
64     NSMutableArray *loginarray;
65     NSEnumerator *loginEnum;
66     id anItem;
67     ITDebugLog(@"Checking if \"%@\" launches at login.", path);
68     [df synchronize];
69     loginwindow = [df persistentDomainForName:@"loginwindow"];
70     loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"];
71
72     loginEnum = [loginarray objectEnumerator];
73     while ( (anItem = [loginEnum nextObject]) ) {
74         if ( [[[anItem objectForKey:@"Path"] lastPathComponent] isEqualToString:[path lastPathComponent]] ) {
75             return YES;
76         }
77     }
78     return NO;
79 }