aboutsummaryrefslogtreecommitdiff
path: root/SpotlightPlugins/XcodeProject/GetMetadataForFile.m
diff options
context:
space:
mode:
Diffstat (limited to 'SpotlightPlugins/XcodeProject/GetMetadataForFile.m')
-rw-r--r--SpotlightPlugins/XcodeProject/GetMetadataForFile.m85
1 files changed, 85 insertions, 0 deletions
diff --git a/SpotlightPlugins/XcodeProject/GetMetadataForFile.m b/SpotlightPlugins/XcodeProject/GetMetadataForFile.m
new file mode 100644
index 0000000..5bdab36
--- /dev/null
+++ b/SpotlightPlugins/XcodeProject/GetMetadataForFile.m
@@ -0,0 +1,85 @@
+//
+// 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 <Foundation/Foundation.h>
+static BOOL ImportProjectFile(NSMutableDictionary *attributes,
+ NSString *pathToFile) {
+ pathToFile = [pathToFile stringByAppendingPathComponent:@"project.pbxproj"];
+ NSMutableSet *filenames = [[[NSMutableSet alloc] init] autorelease];
+ NSMutableSet *comments = [[[NSMutableSet alloc] init] autorelease];
+ BOOL wasGood = NO;
+ NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:pathToFile];
+ if (dict) {
+ NSDictionary *objects = [dict objectForKey:@"objects"];
+ if (objects) {
+ NSEnumerator *objEnumerator = [objects objectEnumerator];
+ NSDictionary *object;
+ while ((object = [objEnumerator nextObject])) {
+ NSString *isaType = [object objectForKey:@"isa"];
+ if ([isaType caseInsensitiveCompare:@"PBXFileReference"] == NSOrderedSame) {
+ NSString *path = [object objectForKey:@"path"];
+ if (path) {
+ [filenames addObject:[path lastPathComponent]];
+ }
+ } else if ([isaType caseInsensitiveCompare:@"PBXNativeTarget"] == NSOrderedSame) {
+ NSString *name = [object objectForKey:@"name"];
+ if (name) {
+ [filenames addObject:name];
+ }
+ name = [object objectForKey:@"productName"];
+ if (name) {
+ [filenames addObject:name];
+ }
+ }
+ NSString *comment = [object objectForKey:@"comments"];
+ if (comment) {
+ [comments addObject:comment];
+ }
+ }
+ }
+ }
+ if ([filenames count]) {
+ NSString *description = [[filenames allObjects] componentsJoinedByString:@"\n"];
+ [attributes setObject:description forKey:(NSString*)kMDItemDescription];
+ wasGood = YES;
+ }
+ if ([comments count]) {
+ NSString *comment = [[comments allObjects] componentsJoinedByString:@"\n"];
+ [attributes setObject:comment forKey:(NSString*)kMDItemComment];
+ wasGood = YES;
+ }
+ return wasGood;
+}
+
+// Currently grabs all the filenames, target names, and product names
+// and sticks them into kMDItemDescription.
+// It also grabs all of the comments and sticks them into kMDItemComment.
+Boolean GetMetadataForFile(void* interface,
+ CFMutableDictionaryRef cfAttributes,
+ CFStringRef contentTypeUTI,
+ CFStringRef cfPathToFile) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSMutableDictionary *attributes = (NSMutableDictionary*)cfAttributes;
+ NSString *pathToFile = (NSString*)cfPathToFile;
+ BOOL wasGood = NO;
+ if (UTTypeConformsTo(contentTypeUTI, CFSTR("com.apple.xcode.project"))) {
+ wasGood = ImportProjectFile(attributes, pathToFile);
+ }
+ [pool release];
+ return wasGood == NO ? FALSE : TRUE;
+}