On Jan 7, 2008 11:19 AM, Greg Miller <[EMAIL PROTECTED]> wrote:
> Hi.
>
> Comments inline.
>
> On Jan 4, 2008 7:59 PM, Guillaume Boudreau <[EMAIL PROTECTED]> wrote:
> >
> > Hi,
> >
> > I'd like to get some comments from ObjC developers about the following
> > changes I made to the SpotlightFS source code to only see the name of
> > the files in the Spotlight search results, instead of the full path to
> > the original file.
>
> There are potential problems here because you could end up with one
> directory containing many files that are named the same. For example,
> you could have a smart folder with 50 files named "README". The
> problem here is that it's now ambiguous how you refer to a file; Which
> link should be used when someone clicks on
> /Volumes/SpotlightFS/Foo/README? That's why the full paths were
> included.
>
> Of course, if it seems to work most of the time in your cases, then by
> all means, do it :-)
>
>
> > I'm a programmer, but know only ObjC in theory, so
> > I might have made mistakes in there that 'real' ObjC programmers will
> > easily spot. (In particular, I'm pretty unsure when I need/should
> > autorelease, retain or copy variables I initialize, use or return.)
> >
> > Thanks.
> >
> > $ svn diff SpotlightFS.h SpotlightFS.m
> > Index: SpotlightFS.h
> > ===================================================================
> > --- SpotlightFS.h (revision 691)
> > +++ SpotlightFS.h (working copy)
> > @@ -27,7 +27,7 @@
> > // See the documentation for FUSEFileSystem for more details.
> > //
> > @interface SpotlightFS : FUSEFileSystem {
> > - // Empty
> > + NSMutableDictionary* symlinks_;
> > }
> >
> > // Returns an array of all *.savedSearch files in "~/Library/Saved
> > Searches".
> > @@ -72,6 +72,7 @@
> > // all forward slashes have been replaced by colons.
> > //
> > - (NSArray *)encodedPathResultsForSpotlightQuery:(NSString
> > *)queryString
> > - scope:(NSArray
> > *)scopeDirectories;
> > + scope:(NSArray
> > *)scopeDirectories
> > + path:(NSString *)path;
> >
> > @end
> > Index: SpotlightFS.m
> > ===================================================================
> > --- SpotlightFS.m (revision 691)
> > +++ SpotlightFS.m (working copy)
> > @@ -210,7 +210,8 @@
> > // an NSArray of all the matching file paths (encoded).
> > //
> > - (NSArray *)encodedPathResultsForSpotlightQuery:(NSString
> > *)queryString
> > - scope:(NSArray
> > *)scopeDirectories {
> > + scope:(NSArray
> > *)scopeDirectories
> > + path:(NSString *)path {
> > // Try to create an MDQueryRef from the given queryString.
> > MDQueryRef query = MDQueryCreate(kCFAllocatorDefault,
> > (CFStringRef)queryString,
> > @@ -247,11 +248,20 @@
> > int count = MDQueryGetResultCount(query);
> > NSMutableArray *symlinkNames = [NSMutableArray array];
> >
> > + if (symlinks_ == nil) {
> > + symlinks_ = [[NSMutableDictionary alloc] initWithCapacity:count];
> > + [symlinks_ retain];
>
> Don't retain here. +alloc is giving you an object that is implicitly
> retained by you.
>
>
> > + }
> > +
> > for (int i = 0; i < count; i++) {
> > MDItemRef item = (MDItemRef)MDQueryGetResultAtIndex(query, i);
> > - NSString *name = (NSString *)MDItemCopyAttribute(item,
> > kMDItemPath);
> > + NSString *name = (NSString *)MDItemCopyAttribute(item,
> > kMDItemFSName);
> > [name autorelease];
> > [symlinkNames addObject:EncodePath(name)];
> > + NSString *symlink = (NSString *)MDItemCopyAttribute(item,
> > kMDItemPath);
> > + [symlink autorelease];
> > + NSString *symlinkKey = [path
> > stringByAppendingPathComponent:name];
> > + [symlinks_ setObject:symlink forKey:symlinkKey];
> > }
> >
> > CFRelease(query);
> > @@ -292,7 +302,7 @@
> >
> > objectForKey:@"FXScopeArrayOfPaths"];
> > }
> >
> > - return [self encodedPathResultsForSpotlightQuery:query
> > scope:scopeDirectories];
> > + return [self encodedPathResultsForSpotlightQuery:query
> > scope:scopeDirectories path:path];
> > }
> >
> > - (BOOL)createDirectoryAtPath:(NSString *)path
> > @@ -396,9 +406,11 @@
> >
> > } else {
> >
> > - NSString *decodedPath = DecodePath([path lastPathComponent]);
> > - NSFileManager *fm = [NSFileManager defaultManager];
> > - attr = [[[fm fileAttributesAtPath:decodedPath traverseLink:NO]
> > mutableCopy] autorelease];
> > + NSString *decodedPath = [symlinks_ objectForKey:path];
> > + if (decodedPath) {
> > + NSFileManager *fm = [NSFileManager defaultManager];
> > + attr = [[[fm fileAttributesAtPath:decodedPath traverseLink:NO]
> > mutableCopy] autorelease];
> > + }
> > if (!attr)
> > attr = [NSMutableDictionary dictionary];
> > [attr setObject:NSFileTypeSymbolicLink forKey:NSFileType];
> > @@ -416,10 +428,10 @@
> > return nil;
> > }
> >
> > - NSString *lastComponent = [path lastPathComponent];
> > + NSString *decodedPath = [symlinks_ objectForKey:path];
> >
> > - if ([lastComponent hasPrefix:@":"])
> > - return DecodePath(lastComponent);
> > + if (decodedPath)
> > + return [[decodedPath copy] autorelease];
> >
> > *error = [FUSEFileSystem errorWithCode:ENOENT];
> > return nil;
> >
> > > >
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"macfuse-devel" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/macfuse-devel?hl=en
-~----------~----~----~----~------~----~------~--~---