Changeset 4880

Show
Ignore:
Timestamp:
08/23/07 23:57:04 (1 year ago)
Author:
morris
Message:

Moving up when standing at the root path now displays a list of mounted volumes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Footagehead/trunk/English.lproj/ReleaseNotes.rtf

    r4877 r4880  
    217217- Reverse rotate right/left so they do what they're called\ 
    218218- Rotate spreads correctly\ 
     219- Moving up when standing at the root path now displays a list of mounted volumes\ 
    219220 
    220221\f0\b \cf2 \ 
  • Footagehead/trunk/FHApplicationController.m

    r4733 r4880  
    3030#import "FHBrowserController.h" 
    3131#import "FHHandler.h" 
     32#import "FHFileHandler.h" 
    3233#import "FHImageView.h" 
    3334#import "FHSettings.h" 
     
    169170                items--; 
    170171        } 
     172         
     173        if(count == 0) { 
     174                i = _initialMenuItems + _menuItems - 1; 
     175                 
     176                if([[_goMenu itemAtIndex:i] isSeparatorItem]) { 
     177                        [_goMenu removeItemAtIndex:i]; 
     178                         
     179                        _menuItems--; 
     180                } 
     181        } else { 
     182                i = items - count - 1; 
     183                 
     184                if(![[_goMenu itemAtIndex:i] isSeparatorItem]) { 
     185                        [_goMenu insertItem:[NSMenuItem separatorItem] atIndex:i + 1]; 
     186                         
     187                        _menuItems++; 
     188                } 
     189        } 
    171190} 
    172191 
     
    254273                url = [WIURL URLWithString:[FHSettings objectForKey:FHOpenURL]]; 
    255274                 
    256                 if([url isFileURL] && ![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) 
     275                if([url isFileURL] && ![FHFileHandler handlesURL:url isPrimary:YES]) 
    257276                        url = [WIURL fileURLWithPath:NSHomeDirectory()]; 
    258277 
  • Footagehead/trunk/FHBrowserController.m

    r4879 r4880  
    5555- (void)_updateRightStatus; 
    5656 
     57- (NSString *)_nameOfRootVolume; 
     58 
    5759@end 
    5860 
     
    254256- (void)_loadURL:(WIURL *)url selectRow:(NSInteger)row name:(NSString *)name { 
    255257        NSArray                 *files; 
     258        NSString                *subtitle; 
    256259        FHHandler               *handler; 
    257260        FHFile                  *file; 
     
    278281        [_imageLoader setFiles:files]; 
    279282         
    280         if([[_handler URL] isFileURL]
     283        if([[_handler URL] isFileURL] && [[[_handler URL] path] length] > 0
    281284                [[WIEventQueue sharedQueue] addPath:[[_handler URL] path] forMode:WIEventFileWrite]; 
    282285         
    283         [[self window] setTitle:@"Footagehead" withSubtitle:[[_handler stringComponents] lastObject]]; 
     286        subtitle = [[_handler stringComponents] lastObject]; 
     287         
     288        if(!subtitle && [[_handler URL] isFileURL]) 
     289                subtitle = [[NSHost currentHost] name]; 
     290         
     291        [[self window] setTitle:[NSApp name] withSubtitle:subtitle]; 
    284292         
    285293        [self updateSpreads]; 
     
    414422         
    415423        [_rightStatusTextField setStringValue:string]; 
     424} 
     425 
     426 
     427 
     428#pragma mark - 
     429 
     430- (NSString *)_nameOfRootVolume { 
     431        NSFileManager   *fileManager; 
     432        NSEnumerator    *enumerator; 
     433        NSString                *volume, *path; 
     434         
     435        fileManager = [NSFileManager defaultManager]; 
     436        enumerator = [[fileManager directoryContentsAtPath:@"/Volumes/"] objectEnumerator]; 
     437         
     438        while((volume = [enumerator nextObject])) { 
     439                path = [fileManager pathContentOfSymbolicLinkAtPath:[NSSWF:@"/Volumes/%@", volume]]; 
     440                 
     441                if([path isEqualToString:@"/"]) 
     442                        return volume; 
     443        } 
     444         
     445        return @"/"; 
    416446} 
    417447 
     
    12011231                        name = [[[_handler URL] path] lastPathComponent]; 
    12021232                         
     1233                        if([url isFileURL] && [name isEqualToString:@"/"]) 
     1234                                name = [self _nameOfRootVolume]; 
     1235                         
    12031236                        [self _loadURL:url selectName:name]; 
    12041237                } 
     
    13201353 
    13211354        row = [_tableView selectedRow]; 
     1355         
     1356        if(row < 0) 
     1357                return; 
     1358         
    13221359        file = [self fileAtIndex:row]; 
    13231360         
  • Footagehead/trunk/FHFile.m

    r4868 r4880  
    9595#pragma mark - 
    9696 
     97- (NSComparisonResult)compareName:(FHFile *)file { 
     98    return [[self name] compare:[file name] options:NSCaseInsensitiveSearch | NSNumericSearch]; 
     99} 
     100 
     101 
     102 
     103#pragma mark - 
     104 
    97105- (void)setImage:(FHImage *)image { 
    98106        [image retain]; 
  • Footagehead/trunk/FHFileHandler.m

    r4726 r4880  
    5959+ (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
    6060        if(primary && [url isFileURL]) { 
     61                if([[url path] length] == 0) 
     62                        return YES; 
     63 
    6164                if([[NSFileManager defaultManager] directoryExistsAtPath:[url path]]) 
    6265                        return YES; 
     
    123126 
    124127- (NSArray *)files { 
     128        NSFileManager           *fileManager; 
     129        NSEnumerator            *enumerator; 
    125130        NSSet                           *types; 
    126131        NSArray                         *files; 
    127         NSString                        *name, *path, *extension
     132        NSString                        *volume, *name, *path, *extension, *symlink
    128133        WIURL                           *url; 
    129134        LSItemInfoRecord        itemInfoRecord; 
    130135        OSStatus                        err; 
    131         BOOL                            isDirectory
     136        BOOL                            isDirectory, isRoot
    132137        NSUInteger                      i, count; 
    133138 
    134139        if(!_files) { 
    135                 files   = [[NSFileManager defaultManager] directoryContentsWithFileAtPath:_rootPath]; 
    136                 files   = [files sortedArrayUsingFunction:compareFile context:NULL]; 
    137                 count   = [files count]; 
    138                 types   = [NSSet setWithArray:[FHFileHandler handledFileTypes]]; 
    139                 _files  = [[NSMutableArray alloc] initWithCapacity:count]; 
     140                fileManager = [NSFileManager defaultManager]; 
    140141                 
    141                 for(i = 0; i < count; i++) { 
    142                         name = [files objectAtIndex:i]; 
    143                         path = [_rootPath stringByAppendingPathComponent:name]; 
    144                          
    145                         if([name hasPrefix:@"."]) 
    146                                 continue; 
    147                          
    148                         url = [WIURL fileURLWithPath:path]; 
    149                         err = LSCopyItemInfoForURL((CFURLRef) [url URL], kLSRequestBasicFlagsOnly, &itemInfoRecord); 
    150                          
    151                         if(err != noErr) 
    152                                 continue; 
    153                          
    154                         if(itemInfoRecord.flags & kLSItemInfoIsInvisible) 
    155                                 continue; 
    156                          
    157                         isDirectory = (itemInfoRecord.flags & kLSItemInfoIsContainer || itemInfoRecord.flags & kLSItemInfoIsSymlink); 
    158  
    159                         if(!isDirectory) { 
    160                                 extension = [path pathExtension]; 
    161                                  
    162                                 if(![types containsObject:extension]) { 
    163                                         if([[[self class] _directoryHandledFileTypes] containsObject:extension]) 
    164                                                 isDirectory = YES; 
    165                                         else 
     142                if([_rootPath length] == 0) { 
     143                        _files  = [[NSMutableArray alloc] initWithCapacity:0]; 
     144 
     145                        [_files addObject:[FHFile fileWithURL:[WIURL fileURLWithPath:@"/Network"] isDirectory:YES]]; 
     146                         
     147                        enumerator = [[fileManager directoryContentsAtPath:@"/Volumes/"] objectEnumerator]; 
     148                         
     149                        while((volume = [enumerator nextObject])) { 
     150                                path    = [NSSWF:@"/Volumes/%@", volume]; 
     151                                symlink = [fileManager pathContentOfSymbolicLinkAtPath:path]; 
     152                                 
     153                                if(symlink) 
     154                                        path = symlink; 
     155                                 
     156                                [_files addObject:[FHFile fileWithURL:[WIURL fileURLWithPath:path] name:volume isDirectory:YES]]; 
     157                        } 
     158                         
     159                        [_files sortUsingSelector:@selector(compareName:)]; 
     160                         
     161                        _numberOfFiles = [_files count]; 
     162                } else { 
     163                        isRoot  = [_rootPath isEqualToString:@"/"]; 
     164                        files   = [[fileManager directoryContentsWithFileAtPath:_rootPath] sortedArrayUsingFunction:compareFile context:NULL]; 
     165                        count   = [files count]; 
     166                        types   = [NSSet setWithArray:[FHFileHandler handledFileTypes]]; 
     167                        _files  = [[NSMutableArray alloc] initWithCapacity:count]; 
     168                         
     169                        for(i = 0; i < count; i++) { 
     170                                name = [files objectAtIndex:i]; 
     171                                path = [_rootPath stringByAppendingPathComponent:name]; 
     172                                 
     173                                if([name hasPrefix:@"."]) 
     174                                        continue; 
     175                                 
     176                                url = [WIURL fileURLWithPath:path]; 
     177                                err = LSCopyItemInfoForURL((CFURLRef) [url URL], kLSRequestBasicFlagsOnly, &itemInfoRecord); 
     178                                 
     179                                if(err != noErr) 
     180                                        continue; 
     181                                 
     182                                if(itemInfoRecord.flags & kLSItemInfoIsInvisible) 
     183                                        continue; 
     184                                         
     185                                if(isRoot) { 
     186                                        if([path isEqualToString:@"/Network"] || 
     187                                           [path isEqualToString:@"/automount"] ||  
     188                                           [path isEqualToString:@"/etc"] || 
     189                                           [path isEqualToString:@"/mach"] || 
     190                                           [path isEqualToString:@"/tmp"] || 
     191                                           [path isEqualToString:@"/var"]) 
    166192                                                continue; 
    167193                                } 
     194                                 
     195                                isDirectory = (itemInfoRecord.flags & kLSItemInfoIsContainer || itemInfoRecord.flags & kLSItemInfoIsSymlink); 
     196                                 
     197                                if(!isDirectory) { 
     198                                        extension = [path pathExtension]; 
     199                                         
     200                                        if(![types containsObject:extension]) { 
     201                                                if([[[self class] _directoryHandledFileTypes] containsObject:extension]) 
     202                                                        isDirectory = YES; 
     203                                                else 
     204                                                        continue; 
     205                                        } 
     206                                } 
     207                                 
     208                                [_files addObject:[FHFile fileWithURL:url isDirectory:isDirectory]]; 
     209                                 
     210                                _numberOfFiles++; 
     211                                 
     212                                if(!isDirectory) 
     213                                        _numberOfImages++; 
    168214                        } 
    169  
    170                         [_files addObject:[FHFile fileWithURL:url isDirectory:isDirectory]]; 
    171  
    172                         _numberOfFiles++; 
    173                          
    174                         if(!isDirectory) 
    175                                 _numberOfImages++; 
    176215                } 
    177216        } 
     
    179218        return _files; 
    180219} 
    181          
     220 
     221 
     222- (WIURL *)parentURL { 
     223        if([_rootPath isEqualToString:@"/"] || 
     224           ([_rootPath hasPrefix:@"/Volumes"] && [[_rootPath pathComponents] count] == 3) || 
     225           ([_rootPath hasPrefix:@"/Network"] && [[_rootPath pathComponents] count] == 2)) 
     226                return [WIURL fileURLWithPath:@""]; 
     227         
     228        return [super parentURL]; 
     229
     230 
    182231@end 
    183