Changeset 202

Show
Ignore:
Timestamp:
09/05/07 17:40:06 (1 year ago)
Author:
gbooker
Message:
  • Added a protocol for the directory so that it is easier to make a virtual dir
  • Added notifications for file creation and distruction as well as change to make virtual dirs easier
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/SapphireBrowser.h

    r201 r202  
    77// 
    88 
    9 @class SapphireDirectoryMetaData, SapphireFileMetaData, SapphireMetaDataCollection, BRTVShowsSortControl, SapphireSettings, BRSegmentedSortControl, SapphirePredicate; 
    10 @protocol SapphireMetaDataDelegate, SapphireMetaDataScannerDelegate
     9@class SapphireFileMetaData, SapphireMetaDataCollection, BRTVShowsSortControl, SapphireSettings, BRSegmentedSortControl, SapphirePredicate; 
     10@protocol SapphireMetaDataDelegate, SapphireMetaDataScannerDelegate, SapphireDirectoryMetaData
    1111 
    1212@interface SapphireBrowser : BRMediaMenuController <SapphireMetaDataDelegate, SapphireMetaDataScannerDelegate> 
    1313{ 
    14         NSMutableArray                          * _names ; 
    15         NSMutableArray                          *items ; 
    16         SapphireDirectoryMetaData       *metaData; 
    17         SapphirePredicate                       *predicate; 
    18 //      BRSegmentedSortControl          *modeControl; 
    19         SapphireFileMetaData            *currentPlayFile; 
    20         int                                                     dirCount; 
    21         int                                                     fileCount; 
    22         BOOL                                            cancelScan; 
     14        NSMutableArray                                  *_names ; 
     15        NSMutableArray                                  *items ; 
     16        id <SapphireDirectoryMetaData>  metaData; 
     17        SapphirePredicate                               *predicate; 
     18        SapphireFileMetaData                    *currentPlayFile; 
     19        int                                                             dirCount; 
     20        int                                                             fileCount; 
     21        BOOL                                                    cancelScan; 
    2322} 
    2423 
    25 - (id) initWithScene: (BRRenderScene *) scene metaData: (SapphireDirectoryMetaData *)meta; 
     24- (id) initWithScene: (BRRenderScene *) scene metaData: (id <SapphireDirectoryMetaData>)meta; 
    2625- (void) dealloc; 
    2726 
  • trunk/SapphireBrowser.m

    r201 r202  
    159159 * @return The Browser 
    160160 */ 
    161 - (id) initWithScene: (BRRenderScene *) scene metaData: (SapphireDirectoryMetaData *)meta 
     161- (id) initWithScene: (BRRenderScene *) scene metaData: (id <SapphireDirectoryMetaData>)meta 
    162162{ 
    163163        if ( [super initWithScene: scene] == nil ) return ( nil ); 
     
    449449        { 
    450450                result = [BRAdornedMenuItemLayer adornedFolderMenuItemWithScene: scene] ; 
    451                 SapphireDirectoryMetaData *meta = [metaData metaDataForDirectory:name]; 
     451                id <SapphireDirectoryMetaData> meta = [metaData metaDataForDirectory:name]; 
    452452                watched = [meta watchedForPredicate:predicate]; 
    453453                favorite = [meta favoriteForPredicate:predicate]; 
  • trunk/SapphireMarkMenu.m

    r201 r202  
    3333         
    3434        /*Check to see if it is directory or file*/ 
    35         isDir = [meta isKindOfClass:[SapphireDirectoryMetaData class]]; 
     35        isDir = [meta conformsToProtocol:@protocol(SapphireDirectoryMetaData)]; 
    3636        metaData = [meta retain]; 
    3737        commands = nil; 
     
    221221        if(isDir) 
    222222        { 
    223                 SapphireDirectoryMetaData *dirMeta = (SapphireDirectoryMetaData *)metaData; 
     223                id <SapphireDirectoryMetaData> dirMeta = (SapphireDirectoryMetaData *)metaData; 
    224224                switch(row) 
    225225                { 
  • trunk/SapphireMetaData.h

    r201 r202  
    3838#define META_EPISODE_AND_SEASON_KEY             @"S/E" 
    3939 
     40#define META_DATA_FILE_ADDED_NOTIFICATION                               @"MetaDataFileAdded" 
     41#define META_DATA_FILE_REMOVED_NOTIFICATION                             @"MetaDataFileRemoved" 
     42#define META_DATA_FILE_INFO_WILL_CHANGE_NOTIFICATION    @"MetaDataFileInfoWillChange" 
     43#define META_DATA_FILE_INFO_HAS_CHANGED_NOTIFICATION    @"MetaDataFileInfoHasChanged" 
     44#define META_DATA_FILE_INFO_KIND                                                @"MetaDataFileInfoKind" 
     45 
    4046typedef enum { 
    4147        FILE_CLASS_UNKNOWN = 0, 
     
    5460- (void)scanningDir:(NSString *)dir; 
    5561- (BOOL)getSubFilesCanceled; 
     62@end 
     63 
     64@protocol SapphireMetaData <NSObject> 
     65@end 
     66 
     67@protocol SapphireDirectoryMetaData <NSObject> 
     68- (NSString *)path; 
     69- (void)setDelegate:(id <SapphireMetaDataDelegate>)newDelegate; 
     70 
     71- (void)reloadDirectoryContents; 
     72- (NSArray *)files; 
     73- (NSArray *)directories; 
     74- (NSArray *)predicatedFiles:(SapphirePredicate *)predicate; 
     75- (NSArray *)predicatedDirectories:(SapphirePredicate *)predicate; 
     76 
     77- (SapphireFileMetaData *)metaDataForFile:(NSString *)file; 
     78- (SapphireDirectoryMetaData *)metaDataForDirectory:(NSString *)dir; 
     79 
     80- (void)cancelImport; 
     81- (void)resumeDelayedImport; 
     82 
     83- (void)scanForNewFilesWithDelegate:(id <SapphireMetaDataScannerDelegate>)subDelegate skipDirectories:(NSMutableSet *)skip; 
     84 
     85- (BOOL)watchedForPredicate:(SapphirePredicate *)predicate; 
     86- (void)setWatched:(BOOL)watched forPredicate:(SapphirePredicate *)predicate; 
     87- (BOOL)favoriteForPredicate:(SapphirePredicate *)predicate; 
     88- (void)setFavorite:(BOOL)favorite forPredicate:(SapphirePredicate *)predicate; 
     89- (void)setToImportFromSource:(NSString *)source forPredicate:(SapphirePredicate *)predicate; 
     90- (void)setFileClass:(FileClass)fileClass forPredicate:(SapphirePredicate *)predicate; 
    5691@end 
    5792 
     
    93128@end 
    94129 
    95 @interface SapphireDirectoryMetaData : SapphireMetaData
     130@interface SapphireDirectoryMetaData : SapphireMetaData <SapphireDirectoryMetaData>
    96131        /*These two are not retained*/ 
    97132        NSMutableDictionary                     *metaFiles; 
     
    112147} 
    113148 
    114 - (void)reloadDirectoryContents; 
    115 - (NSArray *)files; 
    116 - (NSArray *)directories; 
    117 - (NSArray *)predicatedFiles:(SapphirePredicate *)predicate; 
    118 - (NSArray *)predicatedDirectories:(SapphirePredicate *)predicate; 
    119  
    120 - (SapphireFileMetaData *)metaDataForFile:(NSString *)file; 
    121 - (SapphireDirectoryMetaData *)metaDataForDirectory:(NSString *)dir; 
    122  
    123149- (BOOL)pruneMetaData; 
    124150- (BOOL)updateMetaData; 
    125151 
    126 - (void)cancelImport; 
    127152- (void)resumeImport; 
    128 - (void)resumeDelayedImport; 
    129153 
    130154- (SapphireMetaData *)metaDataForSubPath:(NSString *)path; 
    131155- (void)getSubFileMetasWithDelegate:(id <SapphireMetaDataScannerDelegate>)subDelegate skipDirectories:(NSMutableSet *)skip; 
    132 - (void)scanForNewFilesWithDelegate:(id <SapphireMetaDataScannerDelegate>)subDelegate skipDirectories:(NSMutableSet *)skip; 
    133  
    134 - (BOOL)watchedForPredicate:(SapphirePredicate *)predicate; 
    135 - (void)setWatched:(BOOL)watched forPredicate:(SapphirePredicate *)predicate; 
    136 - (BOOL)favoriteForPredicate:(SapphirePredicate *)predicate; 
    137 - (void)setFavorite:(BOOL)favorite forPredicate:(SapphirePredicate *)predicate; 
    138 - (void)setToImportFromSource:(NSString *)source forPredicate:(SapphirePredicate *)predicate; 
    139 - (void)setFileClass:(FileClass)fileClass forPredicate:(SapphirePredicate *)predicate; 
    140  
    141156@end 
    142157 
  • trunk/SapphireMetaData.m

    r201 r202  
    482482@implementation SapphireDirectoryMetaData 
    483483 
     484//Just to shut up the compiler since it doesn't think to look at the super class to see if a method is implemented or not 
     485- (NSString *)path 
     486{ 
     487        return [super path]; 
     488} 
     489- (void)setDelegate:(id <SapphireMetaDataDelegate>)newDelegate 
     490{ 
     491        [super setDelegate:newDelegate]; 
     492} 
     493 
    484494/*! 
    485495 * @brief Creates a new meta data object 
     
    523533- (void)dealloc 
    524534{ 
     535        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
     536        NSEnumerator *filesEnum = [cachedMetaFiles objectEnumerator]; 
     537        SapphireFileMetaData *meta = nil; 
     538        while((meta = [filesEnum nextObject]) != nil) 
     539                [nc postNotificationName:META_DATA_FILE_REMOVED_NOTIFICATION object:meta]; 
     540         
    525541        [importTimer invalidate]; 
    526542        [importArray release]; 
     
    808824                        { 
    809825                                /*Remove and mark as we did an update*/ 
     826                                SapphireMetaData *meta = [cachedMetaFiles objectForKey:pruneKey]; 
     827                                if(meta != nil) 
     828                                        [[NSNotificationCenter defaultCenter] postNotificationName:META_DATA_FILE_REMOVED_NOTIFICATION object:meta]; 
    810829                                [metaFiles removeObjectForKey:pruneKey]; 
    811830                                [cachedMetaFiles removeObjectForKey:pruneKey]; 
     
    12601279        displayedMetaDataOrder = [[NSArray alloc] initWithArray:modified]; 
    12611280        [modified release]; 
     1281} 
     1282 
     1283- (id)initWithDictionary:(NSDictionary *)dict parent:(SapphireMetaData *)myParent path:(NSString *)myPath 
     1284{ 
     1285        self = [super initWithDictionary:dict parent:myParent path:myPath]; 
     1286        if(self == nil) 
     1287                return nil; 
     1288         
     1289        [[NSNotificationCenter defaultCenter] postNotificationName:META_DATA_FILE_ADDED_NOTIFICATION object:self]; 
     1290         
     1291        return self; 
    12621292} 
    12631293 
     
    14551485- (void)importInfo:(NSMutableDictionary *)newMeta fromSource:(NSString *)source withTime:(long)modTime 
    14561486{ 
     1487        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
     1488        NSDictionary *info = [NSDictionary dictionaryWithObject:source forKey:META_DATA_FILE_INFO_KIND]; 
     1489        [nc postNotificationName:META_DATA_FILE_INFO_WILL_CHANGE_NOTIFICATION object:self userInfo:info]; 
    14571490        [newMeta setObject:[NSNumber numberWithInt:modTime] forKey:MODIFIED_KEY]; 
    14581491        [metaData setObject:newMeta forKey:source]; 
    14591492        [self combinedDataChanged]; 
     1493        [nc postNotificationName:META_DATA_FILE_INFO_HAS_CHANGED_NOTIFICATION object:self userInfo:info]; 
    14601494} 
    14611495