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
-~----------~----~----~----~------~----~------~--~---

Reply via email to