-
Notifications
You must be signed in to change notification settings - Fork 3
/
iPhotoFS_Controller.m
78 lines (62 loc) · 2.82 KB
/
iPhotoFS_Controller.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
iPhoto_Controller.m
Copyright [2009] by Phillip Bogle
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import <MacFUSE/MacFUSE.h>
#import "iPhotoFS_Controller.h"
#import "iPhotoFilesystem.h"
@implementation iPhotoFSController
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(mountFailed:)
name:kGMUserFileSystemMountFailed object:nil];
[center addObserver:self selector:@selector(didMount:)
name:kGMUserFileSystemDidMount object:nil];
[center addObserver:self selector:@selector(didUnmount:)
name:kGMUserFileSystemDidUnmount object:nil];
NSString* mountPath = @"/Volumes/iphotofs";
fs_delegate_ = [[iPhotoFilesystemWithReloading alloc] init];
fs_ = [[GMUserFileSystem alloc] initWithDelegate:fs_delegate_ isThreadSafe: NO];
NSMutableArray* options = [NSMutableArray array];
NSString* volArg = [NSString stringWithFormat:@"volicon=%@", [[NSBundle mainBundle] pathForResource:@"iphotofs" ofType:@"icns"]];
[options addObject:volArg];
[options addObject:@"volname=iphotofs"];
[options addObject:@"rdonly"];
[options addObject:@"allow_other"];
[options addObject:@"local"];
[fs_ mountAtPath:mountPath withOptions:options];
}
- (void)didMount:(NSNotification *)notification {
NSDictionary* userInfo = [notification userInfo];
NSString* mountPath = [userInfo objectForKey:kGMUserFileSystemMountPathKey];
NSString* parentPath = [mountPath stringByDeletingLastPathComponent];
[[NSWorkspace sharedWorkspace] selectFile:mountPath
inFileViewerRootedAtPath:parentPath];
}
- (void)mountFailed:(NSNotification *)notification {
NSDictionary* userInfo = [notification userInfo];
NSError* error = [userInfo objectForKey:kGMUserFileSystemErrorKey];
NSLog(@"kGMUserFileSystem Error: %@, userInfo=%@", error, [error userInfo]);
NSRunAlertPanel(@"Mount Failed", [error localizedDescription], nil, nil, nil);
[[NSApplication sharedApplication] terminate:nil];
}
- (void)didUnmount:(NSNotification*)notification {
[[NSApplication sharedApplication] terminate:nil];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[fs_ unmount];
[fs_ release];
[fs_delegate_ release];
return NSTerminateNow;
}
@end