Changeset 74
- Timestamp:
- 06/28/07 19:10:35 (1 year ago)
- Files:
-
- trunk/SapphireBrowser.h (modified) (2 diffs)
- trunk/SapphireBrowser.m (modified) (8 diffs)
- trunk/SapphireMetaData.h (modified) (2 diffs)
- trunk/SapphireMetaData.m (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/SapphireBrowser.h
r72 r74 19 19 { 20 20 NSMutableArray * _names ; 21 NSMutableArray * items ;21 NSMutableArray *items ; 22 22 SapphireDirectoryMetaData *metaData; 23 23 SapphirePredicate *predicate; … … 25 25 SapphireFileMetaData *currentPlayFile; 26 26 SapphireSettings *settings; 27 int dirCount; 28 int fileCount; 27 29 } 28 30 trunk/SapphireBrowser.m
r72 r74 143 143 if(predicate == NULL) 144 144 { 145 [_names addObjectsFromArray:[metaData directories]]; 145 NSArray *dirs = [metaData directories]; 146 [_names addObjectsFromArray:dirs]; 146 147 divider = [_names count]; 147 [_names addObjectsFromArray:[metaData files]]; 148 NSArray *files = [metaData files]; 149 [_names addObjectsFromArray:files]; 150 dirCount = [dirs count]; 151 fileCount = [files count]; 148 152 } 149 153 else 150 154 { 151 [_names addObjectsFromArray:[metaData predicatedDirectories:predicate]]; 155 NSArray *dirs = [metaData predicatedDirectories:predicate]; 156 [_names addObjectsFromArray:dirs]; 152 157 divider = [_names count]; 153 [_names addObjectsFromArray:[metaData predicatedFiles:predicate]]; 158 NSArray *files = [metaData predicatedFiles:predicate]; 159 [_names addObjectsFromArray:files]; 160 [_names addObject:@"< Scan for new files >"]; 161 dirCount = [dirs count]; 162 fileCount = [files count]; 154 163 } 155 164 int i=0, count=[_names count]; … … 163 172 if(divider && divider != [_names count]) 164 173 [list addDividerAtIndex:divider]; 174 if(predicate != NULL) 175 [list addDividerAtIndex:[_names count] -1]; 165 176 [[self scene] renderScene]; 166 177 } … … 302 313 BRAdornedMenuItemLayer * result = nil; 303 314 BOOL watched = NO; 304 BOOL favorite = NO ;305 if(row < [[metaData directories] count])315 BOOL favorite = NO; 316 if(row < dirCount) 306 317 { 307 318 result = [BRAdornedMenuItemLayer adornedFolderMenuItemWithScene: [self scene]] ; … … 311 322 favorite = [meta favoriteForPredicate:predicate]; 312 323 } 313 else 324 else if(row < dirCount + fileCount) 314 325 { 315 326 result = [BRAdornedMenuItemLayer adornedMenuItemWithScene: [self scene]] ; … … 321 332 favorite = [meta favorite] ; 322 333 } 334 } 335 else 336 { 337 result = [BRAdornedMenuItemLayer adornedMenuItemWithScene:[self scene]]; 338 [result setLeftIcon:[[SapphireTheme sharedTheme] gearGemForScene:[self scene]]]; 339 watched = YES; 323 340 } 324 341 if(!watched) … … 388 405 } 389 406 390 if( [[metaData directories] containsObject:name])407 if(row < dirCount) 391 408 { 392 409 id controller = [[SapphireBrowser alloc] initWithScene:[self scene] metaData:[metaData metaDataForDirectory:name] predicate:predicate]; … … 396 413 [controller release]; 397 414 } 398 else 415 else if(row < dirCount + fileCount) 399 416 { 400 417 BRVideoPlayerController *controller = [[BRVideoPlayerController alloc] initWithScene:[self scene]]; … … 436 453 [controller release]; 437 454 } 438 } 439 440 - (id<BRMediaPreviewController>) previewControllerForItem: (long) item 455 else 456 { 457 [metaData scanForNewFiles]; 458 [self reloadDirectoryContents]; 459 } 460 } 461 462 - (id<BRMediaPreviewController>) previewControllerForItem: (long) row 441 463 { 442 464 // If subclassing BRMediaMenuController, this function is called when the selection cursor 443 465 // passes over an item. 444 if( item>= [_names count])466 if(row >= [_names count]) 445 467 return nil; 446 NSString *name = [_names objectAtIndex: item];447 if( [[metaData files] containsObject:name])468 NSString *name = [_names objectAtIndex:row]; 469 if(row >= dirCount && row < dirCount + fileCount) 448 470 { 449 471 SapphireFileMetaData *fileMeta = [metaData metaDataForFile:name]; trunk/SapphireMetaData.h
r57 r74 53 53 NSTimer *importTimer; 54 54 NSMutableArray *importArray; 55 BOOL scannedDirectory; 55 56 } 56 57 … … 73 74 - (SapphireMetaData *)metaDataForSubPath:(NSString *)path; 74 75 - (NSArray *)subFileMetas; 76 - (void)scanForNewFiles; 75 77 76 78 - (BOOL)watchedForPredicate:(SapphirePredicate *)predicate; trunk/SapphireMetaData.m
r71 r74 233 233 if([importArray count]) 234 234 [self writeMetaData]; 235 scannedDirectory = YES; 235 236 } 236 237 … … 247 248 - (BOOL)hasPredicatedFiles:(SapphirePredicate *)predicate 248 249 { 249 NSEnumerator *fileEnum = [files objectEnumerator]; 250 NSArray *filesToScan = files; 251 if(!scannedDirectory) 252 filesToScan = [metaFiles allKeys]; 253 NSEnumerator *fileEnum = [filesToScan objectEnumerator]; 250 254 NSString *file = nil; 251 255 while((file = [fileEnum nextObject]) != nil) … … 267 271 - (BOOL)hasPredicatedDirectories:(SapphirePredicate *)predicate 268 272 { 269 NSEnumerator *directoryEnum = [directories objectEnumerator]; 273 NSArray *directoriesToScan = directories; 274 if(!scannedDirectory) 275 directoriesToScan = [metaDirs allKeys]; 276 NSEnumerator *directoryEnum = [directoriesToScan objectEnumerator]; 270 277 NSString *directory = nil; 271 278 while((directory = [directoryEnum nextObject]) != nil) 272 279 { 273 280 SapphireDirectoryMetaData *meta = [self metaDataForDirectory:directory]; 274 [meta reloadDirectoryContents];275 281 276 282 if([meta hasPredicatedFiles:predicate] || [meta hasPredicatedDirectories:predicate]) … … 283 289 { 284 290 NSMutableArray *ret = [NSMutableArray array]; 285 NSEnumerator *fileEnum = [files objectEnumerator]; 291 NSArray *filesToScan = files; 292 if(!scannedDirectory) 293 filesToScan = [metaFiles allKeys]; 294 NSEnumerator *fileEnum = [filesToScan objectEnumerator]; 286 295 NSString *file = nil; 287 296 while((file = [fileEnum nextObject]) != nil) … … 303 312 { 304 313 NSMutableArray *ret = [NSMutableArray array]; 305 NSEnumerator *directoryEnum = [directories objectEnumerator]; 314 NSArray *directoriesToScan = directories; 315 if(!scannedDirectory) 316 directoriesToScan = [metaDirs allKeys]; 317 NSEnumerator *directoryEnum = [directoriesToScan objectEnumerator]; 306 318 NSString *directory = nil; 307 319 while((directory = [directoryEnum nextObject]) != nil) 308 320 { 309 321 SapphireDirectoryMetaData *meta = [self metaDataForDirectory:directory]; 310 [meta reloadDirectoryContents];311 322 312 323 if([meta hasPredicatedFiles:predicate] || [meta hasPredicatedDirectories:predicate]) … … 486 497 } 487 498 499 - (void)scanForNewFiles 500 { 501 NSEnumerator *dirEnum = [directories objectEnumerator]; 502 NSString *dir = nil; 503 while((dir = [dirEnum nextObject]) != nil) 504 { 505 SapphireDirectoryMetaData *dirMeta = [self metaDataForDirectory:dir]; 506 if(dirMeta != nil) 507 [dirMeta scanForNewFiles]; 508 } 509 NSEnumerator *fileEnum = [files objectEnumerator]; 510 NSString *file = nil; 511 while((file = [fileEnum nextObject]) != nil) 512 [self metaDataForFile:file]; 513 } 514 488 515 - (void)setupFiles:(NSArray * *)filesToScan andDirectories:(NSArray * *)directoriesToScan arraysForPredicate:(SapphirePredicate *)predicate 489 516 { … … 491 518 { 492 519 *filesToScan = [self predicatedFiles:predicate]; 493 } 494 else if([files count] + [directories count] == 0) 520 *directoriesToScan = [self predicatedDirectories:predicate]; 521 } 522 else if(!scannedDirectory) 495 523 { 496 524 //Likely haven't scanned the directory yet, so use cached
