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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
//
// GetMetadataForFile.m
//
// Copyright 2008 Google Inc.
//
// 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 <AppKit/AppKit.h>
#import <Carbon/Carbon.h>
static BOOL ImportScriptBundle(NSMutableDictionary *attributes,
NSString *path) {
NSBundle *scriptBundle = [NSBundle bundleWithPath:path];
NSString *descriptionPath = [scriptBundle pathForResource:@"description"
ofType:@"rtfd"];
NSAttributedString *attrString = nil;
if (descriptionPath) {
attrString = [[[NSAttributedString alloc] initWithPath:descriptionPath
documentAttributes:NULL] autorelease];
}
BOOL wasGood = NO;
if (attrString) {
NSString *description = [attrString string];
[attributes setObject:description forKey:(NSString*)kMDItemDescription];
wasGood = YES;
}
NSArray *scripts = [scriptBundle pathsForResourcesOfType:@"scpt"
inDirectory:@"Scripts"];
NSEnumerator *scriptEnum = [scripts objectEnumerator];
NSString *scriptPath;
NSMutableArray *scriptSources = [NSMutableArray array];
while ((scriptPath = [scriptEnum nextObject])) {
NSURL *scriptURL = [NSURL fileURLWithPath:scriptPath];
NSDictionary *error;
NSAppleScript *script
= [[[NSAppleScript alloc] initWithContentsOfURL:scriptURL
error:&error]
autorelease];
NSString *scriptSource = [script source];
if (scriptSource) {
[scriptSources addObject:scriptSource];
}
}
if ([scriptSources count]) {
NSString *source = [scriptSources componentsJoinedByString:@"\n"];
[attributes setObject:source forKey:(NSString*)kMDItemTextContent];
wasGood = YES;
}
return wasGood;
}
static BOOL ImportScript(NSMutableDictionary *attributes,
NSString *path) {
NSURL *fileURL = [NSURL fileURLWithPath:path];
FSRef ref;
BOOL wasGood = NO;
if (CFURLGetFSRef((CFURLRef)fileURL, &ref)) {
ResFileRefNum resFile = FSOpenResFile(&ref, fsRdPerm);
if (resFile) {
const ResID kScriptDescriptionResID = 1128;
ResFileRefNum curResFile = CurResFile();
UseResFile(resFile);
Handle res = Get1Resource('TEXT', kScriptDescriptionResID);
if (res) {
NSString *descString
= [[[NSString alloc]initWithBytes:(char*)(*res)
length:GetHandleSize(res)
encoding:NSMacOSRomanStringEncoding] autorelease];
ReleaseResource(res);
if (descString) {
[attributes setObject:descString forKey:(NSString*)kMDItemDescription];
wasGood = YES;
}
}
UseResFile(curResFile);
CloseResFile(resFile);
}
NSDictionary *error;
NSAppleScript *script = [[[NSAppleScript alloc] initWithContentsOfURL:fileURL
error:&error]
autorelease];
NSString *scriptSource = [script source];
if (scriptSource) {
[attributes setObject:scriptSource forKey:(NSString*)kMDItemTextContent];
wasGood = YES;
}
}
return wasGood;
}
// Currently grabs the script description and puts it into kMDItemDescription.
// Grabs the script code and puts it into kMDItemTextContent.
Boolean GetMetadataForFile(void* interface,
CFMutableDictionaryRef cfAttributes,
CFStringRef cfContentTypeUTI,
CFStringRef cfPathToFile) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *attributes = (NSMutableDictionary*)cfAttributes;
NSString *pathToFile = (NSString*)cfPathToFile;
BOOL wasGood = NO;
if (UTTypeConformsTo(cfContentTypeUTI, CFSTR("com.apple.applescript.scriptbundle"))) {
wasGood = ImportScriptBundle(attributes, pathToFile);
} else if (UTTypeConformsTo(cfContentTypeUTI, CFSTR("com.apple.applescript.script"))) {
wasGood = ImportScript(attributes, pathToFile);
}
[pool release];
return wasGood ? TRUE : FALSE;
}
|