Changeset 5481
- Timestamp:
- 05/01/08 23:08:21 (2 weeks ago)
- Files:
-
- Spiral/trunk/SPApplicationController.m (modified) (3 diffs)
- Spiral/trunk/SPDrillController.h (modified) (2 diffs)
- Spiral/trunk/SPDrillController.m (modified) (9 diffs)
- Spiral/trunk/SPDrillView.h (modified) (3 diffs)
- Spiral/trunk/SPDrillView.m (modified) (2 diffs)
- Spiral/trunk/SPFullscreenWindow.h (modified) (2 diffs)
- Spiral/trunk/SPFullscreenWindow.m (modified) (2 diffs)
- Spiral/trunk/SPMovieController.h (modified) (1 diff)
- Spiral/trunk/SPMovieController.m (modified) (4 diffs)
- Spiral/trunk/SPPlayerController.m (modified) (4 diffs)
- Spiral/trunk/SPPlaylistController.h (modified) (4 diffs)
- Spiral/trunk/SPPlaylistController.m (modified) (19 diffs)
- Spiral/trunk/SPPlaylistItem.h (modified) (7 diffs)
- Spiral/trunk/SPPlaylistItem.m (modified) (10 diffs)
- Spiral/trunk/SPPlaylistLoader.h (added)
- Spiral/trunk/SPPlaylistLoader.m (added)
- Spiral/trunk/Spiral.xcodeproj/project.pbxproj (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Spiral/trunk/SPApplicationController.m
r5472 r5481 214 214 215 215 - (void)awakeFromNib { 216 [[[QTMovie alloc] init] release]; 217 216 218 SPSharedApplicationController = self; 217 219 … … 620 622 - (IBAction)openFile:(id)sender { 621 623 NSOpenPanel *openPanel; 622 NSArray *types;623 624 NSString *path; 624 625 SPPlaylistFile *file; 625 626 626 types = [[[NSBundle mainBundle] infoDictionary] valueForKeyPath:627 @"CFBundleDocumentTypes.@distinctUnionOfArrays.CFBundleTypeExtensions"];628 629 627 openPanel = [NSOpenPanel openPanel]; 630 628 [openPanel setCanChooseFiles:YES]; … … 632 630 [openPanel setAllowsMultipleSelection:NO]; 633 631 634 if([openPanel runModalForTypes: types] == NSOKButton) {632 if([openPanel runModalForTypes:[[SPMovieController movieFileTypes] allObjects]] == NSOKButton) { 635 633 path = [openPanel filename]; 636 634 file = [[SPPlaylistController playlistController] recentPlaylistFileForPath:path]; Spiral/trunk/SPDrillController.h
r5121 r5481 28 28 29 29 #import "SPDrillView.h" 30 #import "SPPlaylistLoader.h" 30 31 31 @class SPMovieController, SPQTMovieView ;32 @class SPMovieController, SPQTMovieView, SPPlaylistLoader; 32 33 33 @interface SPDrillController : WIWindowController <SPDrillViewDelegate > {34 @interface SPDrillController : WIWindowController <SPDrillViewDelegate, SPPlaylistLoaderDelegate> { 34 35 IBOutlet SPMovieController *_movieController; 35 36 … … 41 42 NSWindow *_overlayWindow; 42 43 NSWindow *_hudWindow; 44 45 SPPlaylistLoader *_loader; 43 46 } 44 47 Spiral/trunk/SPDrillController.m
r5474 r5481 33 33 #import "SPPlaylistController.h" 34 34 #import "SPPlaylistItem.h" 35 #import "SPPlaylistLoader.h" 36 #import "SPPreferencesController.h" 35 37 #import "SPQTMovieView.h" 38 #import "SPSettings.h" 36 39 37 40 @interface SPDrillController(Private) … … 90 93 self = [super initWithWindowNibName:@"Drill"]; 91 94 95 _loader = [[SPPlaylistLoader alloc] init]; 96 [_loader setDelegate:self]; 97 98 [[NSNotificationCenter defaultCenter] 99 addObserver:self 100 selector:@selector(preferencesDidChange:) 101 name:SPPreferencesDidChangeNotification]; 102 92 103 [self window]; 93 104 … … 100 111 [_movieView release]; 101 112 [_drillContentView release]; 113 [_loader release]; 102 114 103 115 [super dealloc]; … … 116 128 [window setReleasedWhenClosed:NO]; 117 129 [window setContentView:[[self window] contentView]]; 130 [window setAnimates:YES]; 118 131 [self setWindow:window]; 119 132 … … 133 146 [_movieView retain]; 134 147 [_drillContentView retain]; 148 149 [_drillView setSimplifyFilenames:[SPSettings boolForKey:SPSimplifyFilenames]]; 150 [_drillView setPlaylist:[[SPPlaylistController playlistController] playlist]]; 135 151 136 152 [[NSNotificationCenter defaultCenter] … … 161 177 162 178 163 - (void)drillView:(SPDrillView *)drillView willOpenContainer:(SPPlaylistContainer *)container { 164 [[SPPlaylistController playlistController] reloadItem:container]; 179 - (void)preferencesDidChange:(NSNotification *)notification { 180 [_drillView setSimplifyFilenames:[SPSettings boolForKey:SPSimplifyFilenames]]; 181 } 182 183 184 185 - (void)drillView:(SPDrillView *)drillView willOpenContainer:(id)container { 186 if([container isKindOfClass:[SPPlaylistFolder class]]) 187 [_loader loadContentsOfFolder:container synchronously:YES]; 188 else if([container isKindOfClass:[SPPlaylistSmartGroup class]]) 189 [_loader loadSmartGroup:container synchronously:YES]; 165 190 } 166 191 … … 232 257 233 258 - (void)showWindow:(id)sender { 234 [_drillView setPlaylist:[[SPPlaylistController playlistController] playlist]];235 236 259 [super showWindow:sender]; 237 260 … … 265 288 [_movieController stopFullscreen]; 266 289 else 267 [ self close];290 [[self window] performClose:self]; 268 291 } 269 292 … … 293 316 [_movieController stopFullscreen]; 294 317 295 [ self close];318 [[self window] performClose:self]; 296 319 } 297 320 Spiral/trunk/SPDrillView.h
r5466 r5481 37 37 38 38 SPPlaylistGroup *_playlist; 39 40 BOOL _simplifyFilenames; 39 41 } 40 42 … … 43 45 - (void)setPlaylist:(SPPlaylistGroup *)playlist; 44 46 - (SPPlaylistGroup *)playlist; 47 - (void)setSimplifyFilenames:(BOOL)simplifyFilenames; 48 - (BOOL)simplifyFilenames; 45 49 46 50 - (void)openSelection; … … 54 58 @protocol SPDrillViewDelegate <NSObject> 55 59 56 - (void)drillView:(SPDrillView *)drillView willOpenContainer:( SPPlaylistContainer *)container;60 - (void)drillView:(SPDrillView *)drillView willOpenContainer:(id)container; 57 61 - (void)drillView:(SPDrillView *)drillView shouldOpenFile:(SPPlaylistFile *)file; 58 62 Spiral/trunk/SPDrillView.m
r5476 r5481 69 69 drillItem = [[SPDrillItem alloc] init]; 70 70 [drillItem setPlaylistItem:playlistItem]; 71 [drillItem setStringValue: [SPSettings boolForKey:SPSimplifyFilenames]? [playlistItem cleanName] : [playlistItem name]];71 [drillItem setStringValue:_simplifyFilenames ? [playlistItem cleanName] : [playlistItem name]]; 72 72 [drillItem setImage:[playlistItem iconWithSize:NSMakeSize(128.0, 128.0)]]; 73 73 [drillItems addObject:drillItem]; … … 212 212 213 213 214 - (void)setSimplifyFilenames:(BOOL)simplifyFilenames { 215 _simplifyFilenames = simplifyFilenames; 216 } 217 218 219 220 - (BOOL)simplifyFilenames { 221 return _simplifyFilenames; 222 } 223 224 225 214 226 #pragma mark - 215 227 Spiral/trunk/SPFullscreenWindow.h
r5459 r5481 30 30 NSWindow *_hudWindow; 31 31 NSTimer *_timer; 32 BOOL _animates; 32 33 } 33 34 … … 38 39 - (void)orderFrontHUDWindow; 39 40 41 - (void)setAnimates:(BOOL)animates; 42 - (BOOL)animates; 43 40 44 @end Spiral/trunk/SPFullscreenWindow.m
r5475 r5481 147 147 #pragma mark - 148 148 149 - (void)setAnimates:(BOOL)animates { 150 _animates = animates; 151 } 152 153 154 155 - (BOOL)animates { 156 return _animates; 157 } 158 159 160 161 #pragma mark - 162 149 163 - (void)close { 150 164 [_timer invalidate]; 151 165 152 166 [super close]; 167 } 168 169 170 171 - (void)makeKeyAndOrderFront:(id)sender { 172 if(_animates) { 173 [self setAlphaValue:0.0]; 174 [super makeKeyAndOrderFront:sender]; 175 [[self animator] setAlphaValue:1.0]; 176 } else { 177 [super makeKeyAndOrderFront:sender]; 178 } 179 } 180 181 182 183 - (void)performClose:(id)sender { 184 if(_animates) { 185 [[self animator] setAlphaValue:0.0]; 186 187 [self performSelector:@selector(close) afterDelay:[[NSAnimationContext currentContext] duration]]; 188 } else { 189 [self close]; 190 } 153 191 } 154 192 … … 171 209 if([event character] == NSEscapeFunctionKey) { 172 210 if([[self delegate] windowShouldClose:self]) 173 [self close];211 [self performClose:self]; 174 212 175 213 handled = YES; Spiral/trunk/SPMovieController.h
r5458 r5481 117 117 + (NSArray *)scalingNames; 118 118 + (NSArray *)aspectRatioNames; 119 + (NSSet *)movieFileTypes; 119 120 120 121 - (NSWindow *)overlayWindow; Spiral/trunk/SPMovieController.m
r5477 r5481 447 447 NSLS(@"4:3", @"Aspect ratio"), 448 448 NULL]; 449 } 450 451 452 453 + (NSSet *)movieFileTypes { 454 static NSMutableSet *types; 455 456 if(!types) { 457 types = [[NSMutableSet alloc] initWithArray:[[[NSBundle mainBundle] infoDictionary] valueForKeyPath: 458 @"CFBundleDocumentTypes.@distinctUnionOfArrays.CFBundleTypeExtensions"]]; 459 [types removeObject:@"srt"]; 460 [types removeObject:@"ass"]; 461 [types removeObject:@"ssa"]; 462 } 463 464 return types; 449 465 } 450 466 … … 1157 1173 _fullscreenDelegate = delegate; 1158 1174 _fullscreenSelector = selector; 1159 1160 [self _flashOverlayString:[_overlayTextField stringValue]];1161 1175 } 1162 1176 … … 1169 1183 _fullscreenDelegate = NULL; 1170 1184 _fullscreenSelector = NULL; 1185 1186 [self _hideOverlayWindow]; 1171 1187 } 1172 1188 … … 1259 1275 if(forwards) { 1260 1276 if(audioTrack == count) 1261 audioTrack = 1;1277 audioTrack = 0; 1262 1278 else 1263 1279 audioTrack++; 1264 1280 } else { 1265 if(audioTrack <= 1)1281 if(audioTrack <= 0) 1266 1282 audioTrack = count; 1267 1283 else Spiral/trunk/SPPlayerController.m
r5480 r5481 391 391 - (IBAction)fullscreen:(id)sender { 392 392 if(!_fullscreenWindow) { 393 [[self window] setAlphaValue:0.0]; 394 393 395 _fullscreenWindow = [[SPFullscreenWindow alloc] initWithScreen:[[self window] screen]]; 394 396 [_fullscreenWindow setHUDWindow:_hudWindow], 395 397 [_fullscreenWindow setReleasedWhenClosed:YES]; 396 398 [_fullscreenWindow setDelegate:self]; 399 [_fullscreenWindow setAnimates:YES]; 397 400 398 401 [[self window] removeChildWindow:_overlayWindow]; … … 411 414 [_fullscreenWindow makeKeyAndOrderFront:self]; 412 415 } else { 413 [_fullscreenWindow close];416 [_fullscreenWindow performClose:self]; 414 417 } 415 418 } … … 422 425 [_hudWindow close]; 423 426 427 frame.origin = [[self window] convertBaseToScreen:_movieViewFrame.origin]; 428 frame.size = _movieViewFrame.size; 429 424 430 [window removeChildWindow:_overlayWindow]; 425 frame.origin = [[self window] convertBaseToScreen:[_movieView frame].origin];426 frame.size = [_movieView frame].size;427 431 [_overlayWindow setFrame:frame display:YES]; 428 432 [[self window] addChildWindow:_overlayWindow ordered:NSWindowAbove]; … … 435 439 [_movieView release]; 436 440 441 [[self window] setAlphaValue:1.0]; 442 437 443 _fullscreenWindow = NULL; 438 444 } Spiral/trunk/SPPlaylistController.h
r5139 r5481 27 27 */ 28 28 29 #import "SPPlaylistLoader.h" 30 29 31 enum _SPPlaylistRepeatMode { 30 32 SPPlaylistRepeatOff = 0, … … 35 37 36 38 37 @class SPFullscreenWindow, SPPlaylistGroup, SPPlaylistFile ;39 @class SPFullscreenWindow, SPPlaylistGroup, SPPlaylistFile, SPPlaylistLoader; 38 40 39 @interface SPPlaylistController : WIWindowController {41 @interface SPPlaylistController : WIWindowController <SPPlaylistLoaderDelegate> { 40 42 IBOutlet WIOutlineView *_outlineView; 41 43 IBOutlet NSTableColumn *_filesTableColumn; … … 60 62 SPPlaylistGroup *_playlist; 61 63 SPPlaylistGroup *_recentPlaylist; 64 65 SPPlaylistLoader *_loader; 62 66 63 67 SPPlaylistRepeatMode _repeatMode; 64 68 NSMutableDictionary *_eventQueueItems; 65 69 BOOL _shuffle; 70 BOOL _simplifyFilenames; 66 71 } 67 72 … … 79 84 - (void)moveSelectionDown; 80 85 - (void)moveSelectionUp; 81 - (void)reloadItem:(id)item;82 86 83 87 - (IBAction)open:(id)sender; Spiral/trunk/SPPlaylistController.m
r5472 r5481 34 34 #import "SPPlaylistController.h" 35 35 #import "SPPlaylistItem.h" 36 #import "SPPlaylistLoader.h" 36 37 #import "SPPreferencesController.h" 37 38 #import "SPSettings.h" … … 39 40 #define SPPlaylistMaximumNumberOfRecentItems 50 40 41 #define SPPlaylistItemPboardType @"SPPlaylistItemPboardType" 42 41 43 42 44 @interface SPPlaylistController(Private) … … 46 48 - (void)_savePlaylist; 47 49 - (void)_saveRecentPlaylist; 50 - (void)_reloadItem:(id)item; 48 51 - (void)_restoreExpansionStateForItems:(NSArray *)array; 49 52 - (NSArray *)_filteredItems:(NSArray *)array; 50 51 - (void)_addFilesFromQuery:(NSMetadataQuery *)query;52 53 53 54 - (void)_setRepeatMode:(SPPlaylistRepeatMode)repeatMode; … … 109 110 110 111 112 - (void)_reloadItem:(id)item { 113 if([item isKindOfClass:[SPPlaylistFolder class]]) { 114 [_loader loadContentsOfFolder:item synchronously:NO]; 115 [_progressIndicator startAnimation:self]; 116 } 117 else if([item isKindOfClass:[SPPlaylistSmartGroup class]]) { 118 [_loader loadSmartGroup:item synchronously:YES]; 119 [_progressIndicator startAnimation:self]; 120 } 121 } 122 123 124 111 125 - (void)_restoreExpansionStateForItems:(NSArray *)items { 112 126 id item; 113 127 114 115 128 for(item in items) { 116 129 if([item isExpanded]) { 117 [self reloadItem:item];130 [self _reloadItem:item]; 118 131 119 132 [_outlineView expandItem:item]; … … 155 168 #pragma mark - 156 169 157 - (NSPredicate *)_metadataQueryPredicateForPredicate:(id)predicate {158 NSMutableArray *compatibleSubpredicates;159 NSPredicate *subpredicate, *compatibleSubpredicate;160 NSString *keyPath;161 NSCompoundPredicateType type;162 id constantValue;163 164 if([predicate isEqual:[NSPredicate predicateWithValue:YES]] || [predicate isEqual:[NSPredicate predicateWithValue:NO]])165 return NULL;166 167 if([predicate isKindOfClass:[NSCompoundPredicate class]]) {168 compatibleSubpredicates = [NSMutableArray array];169 170 for(subpredicate in [predicate subpredicates]) {171 compatibleSubpredicate = [self _metadataQueryPredicateForPredicate:subpredicate];172 173 if(compatibleSubpredicate)174 [compatibleSubpredicates addObject:compatibleSubpredicate];175 }176 177 if([compatibleSubpredicates count] == 0)178 return NULL;179 180 type = [(NSCompoundPredicate *) predicate compoundPredicateType];181 182 if([compatibleSubpredicates count] == 1 && type != NSNotPredicateType)183 return [compatibleSubpredicates objectAtIndex:0];184 else185 return [[[NSCompoundPredicate alloc] initWithType:type subpredicates:compatibleSubpredicates] autorelease];186 }187 else if([predicate isKindOfClass:[NSComparisonPredicate class]]) {188 if([[predicate leftExpression] expressionType] == NSKeyPathExpressionType ||189 [[predicate leftExpression] expressionType] == NSConstantValueExpressionType) {190 keyPath = [[predicate leftExpression] keyPath];191 192 if([keyPath isEqualToString:@"kMDItemLastUsedDate"] ||193 [keyPath isEqualToString:@"kMDItemContentModificationDate"] ||194 [keyPath isEqualToString:@"kMDItemContentCreationDate"]) {195 constantValue = [[predicate rightExpression] constantValue];196 197 if([constantValue isEqual:@"today"])198 constantValue = [NSCalendarDate dateAtStartOfCurrentDay];199 else if([constantValue isEqual:@"yesterday"])200 constantValue = [[NSCalendarDate dateAtStartOfCurrentDay] dateByAddingDays:-1];201 else if([constantValue isEqual:@"this week"])202 constantValue = [NSCalendarDate dateAtStartOfCurrentWeek];203 else if([constantValue isEqual:@"this month"])204 constantValue = [NSCalendarDate dateAtStartOfCurrentMonth];205 else if([constantValue isEqual:@"this year"])206 constantValue = [NSCalendarDate dateAtStartOfCurrentYear];207 208 if(![constantValue isEqual:[[predicate rightExpression] constantValue]]) {209 return [NSComparisonPredicate predicateWithLeftExpression:[predicate leftExpression]210 rightExpression:[NSExpression expressionForConstantValue:constantValue]211 modifier:[predicate comparisonPredicateModifier]212 type:[predicate predicateOperatorType]213 options:[predicate options]];214 }215 }216 }217 }218 219 return predicate;220 }221 222 223 224 - (void)_reloadQueryForGroup:(SPPlaylistSmartGroup *)smartGroup {225 NSPredicate *predicate;226 NSMetadataQuery *query;227 228 predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:229 [NSPredicate predicateWithFormat:@"kMDItemContentTypeTree == 'public.movie'"],230 [self _metadataQueryPredicateForPredicate:[smartGroup predicate]],231 NULL]];232 233 query = [[NSMetadataQuery alloc] init];234 [query setPredicate:predicate];235 [query setDelegate:smartGroup];236 [smartGroup removeAllFiles];237 [smartGroup setQuery:query];238 [query startQuery];239 [query release];240 241 [_outlineView reloadData];242 243 [_progressIndicator startAnimation:self];244 }245 246 247 248 - (void)_addFilesFromQuery:(NSMetadataQuery *)query {249 [self reloadItem:[query delegate]];250 251 [_outlineView reloadData];252 }253 254 255 256 #pragma mark -257 258 170 - (void)_setRepeatMode:(SPPlaylistRepeatMode)repeatMode { 259 171 NSString *image; … … 311 223 _eventQueueItems = [[NSMutableDictionary alloc] init]; 312 224 225 _loader = [[SPPlaylistLoader alloc] init]; 226 [_loader setDelegate:self]; 227 228 _simplifyFilenames = [SPSettings boolForKey:SPSimplifyFilenames]; 229 313 230 [[NSNotificationCenter defaultCenter] 314 231 addObserver:self … … 316 233 name:NSApplicationWillTerminateNotification]; 317 234 318 [[NSNotificationCenter defaultCenter]319 addObserver:self320 selector:@selector(metadataQueryGatheringProgress:)321 name:NSMetadataQueryGatheringProgressNotification];322 323 [[NSNotificationCenter defaultCenter]324 addObserver:self325 selector:@selector(metadataQueryDidUpdate:)326 name:NSMetadataQueryDidUpdateNotification];327 328 [[NSNotificationCenter defaultCenter]329 addObserver:self330 selector:@selector(metadataQueryDidFinishGathering:)331 name:NSMetadataQueryDidFinishGatheringNotification];332 333 235 [[[NSWorkspace sharedWorkspace] notificationCenter] 334 236 addObserver:self … … 353 255 354 256 [_eventQueueItems release]; 257 258 [_loader release]; 355 259 356 260 [super dealloc]; … … 459 363 460 364 461 - (void)metadataQueryGatheringProgress:(NSNotification *)notification { 462 [self _addFilesFromQuery:[notification object]]; 463 } 464 465 466 467 - (void)metadataQueryDidUpdate:(NSNotification *)notification { 468 [self _addFilesFromQuery:[notification object]]; 469 } 470 471 472 473 - (void)metadataQueryDidFinishGathering:(NSNotification *)notification { 365 - (void)eventFileWrite:(NSNotification *)notification { 366 [self _reloadItem:[_eventQueueItems objectForKey:[notification object]]]; 367 368 [_outlineView reloadData]; 369 } 370 371 372 373 - (void)playlistLoader:(SPPlaylistLoader *)loader didLoadContentsOfFolder:(SPPlaylistFolder *)folder { 374 [_outlineView reloadData]; 375 376 [_loader loadMetadataOfItemsInContainer:folder synchronously:NO]; 377 } 378 379 380 381 - (void)playlistLoader:(SPPlaylistLoader *)loader didLoadMetadataOfFile:(SPPlaylistFile *)file { 382 [_outlineView setNeedsDisplay:YES]; 383 } 384 385 386 387 - (void)playlistLoader:(SPPlaylistLoader *)loader didLoadMetadataOfItemsInContainer:(SPPlaylistContainer *)container { 474 388 [_progressIndicator stopAnimation:self]; 475 389 } … … 477 391 478 392 479 - (void)eventFileWrite:(NSNotification *)notification { 480 [self reloadItem:[_eventQueueItems objectForKey:[notification object]]]; 481 393 - (void)playlistLoader:(SPPlaylistLoader *)loader didLoadSmartGroup:(SPPlaylistSmartGroup *)smartGroup { 482 394 [_outlineView reloadData]; 395 396 [_loader loadMetadataOfItemsInContainer:smartGroup synchronously:NO]; 483 397 } 484 398 … … 486 400 487 401 - (void)preferencesDidChange:(NSNotification *)notification { 488 [_playlist sortItemsUsingSelector:[SPSettings boolForKey:SPSimplifyFilenames] 402 _simplifyFilenames = [SPSettings boolForKey:SPSimplifyFilenames]; 403 404 [_playlist sortItemsUsingSelector:_simplifyFilenames 489 405 ? @selector(compareCleanName:) 490 406 : @selector(compareName:)]; … … 650 566 651 567 652 - (void)reloadItem:(id)item {653 if([item respondsToSelector:@selector(reload)])654 [item reload];655 656 [item sortUsingSelector:[SPSettings boolForKey:SPSimplifyFilenames]657 ? @selector(compareCleanName:)658 : @selector(compareName:)];659 }660 661 662 663 568 #pragma mark - 664 569 … … 697 602 698 603 if([_outlineView isItemExpanded:smartGroup]) 699 [self _reload QueryForGroup:smartGroup];604 [self _reloadItem:smartGroup]; 700 605 } 701 606 … … 1046 951 - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { 1047 952 if(tableColumn == _filesTableColumn) { 1048 return [SPSettings boolForKey:SPSimplifyFilenames]? [item cleanName] : [item name];953 return _simplifyFilenames ? [item cleanName] : [item name]; 1049 954 } 1050 955 else if(tableColumn == _viewCountTableColumn) { … … 1075 980 item = [_outlineView itemAtRow:row]; 1076 981 1077 return [SPSettings boolForKey:SPSimplifyFilenames]? [item cleanName] : [item name];982 return _simplifyFilenames ? [item cleanName] : [item name]; 1078 983 } 1079 984 … … 1119 1024 1120 1025 if([[NSFileManager defaultManager] directoryExistsAtPath:path]) { 1121 [self reloadItem:item]; 1122 1123 [_outlineView reloadData]; 1026 [self _reloadItem:item]; 1124 1027 1125 1028 [[WIEventQueue sharedQueue] addPath:path forMode:WIEventFileWrite]; … … 1129 1032 } 1130 1033 else if([item isKindOfClass:[SPPlaylistSmartGroup class]]) { 1131 [self _reload QueryForGroup:item];1034 [self _reloadItem:item]; 1132 1035 } 1133 1036 } … … 1177 1080 1178 1081 - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)childItem proposedChildIndex:(NSInteger)index { 1179 NSDocumentController *controller; 1180 NSPasteboard *pasteboard; 1181 NSArray *types; 1182 NSString *path; 1183 id item, parentItem; 1082 NSPasteboard *pasteboard; 1083 NSArray *types; 1084 NSString *path; 1085 id item, parentItem; 1184 1086 1185 1087 if(childItem && ![childItem isKindOfClass:[SPPlaylistGroup class]]) … … 1200 1102 } 1201 1103 else if([types containsObject:NSFilenamesPboardType]) { 1202 controller = [NSDocumentController sharedDocumentController];1203 1204 1104 for(path in [pasteboard propertyListForType:NSFilenamesPboardType]) { 1205 1105 if(![[NSFileManager defaultManager] directoryExistsAtPath:path]) { 1206 if(![ controller typeFromFileExtension:[path pathExtension]])1106 if(![[SPMovieController movieFileTypes] containsObject:[[path pathExtension] lowercaseString]]) 1207 1107 return NSDragOperationNone; 1208 1108 } Spiral/trunk/SPPlaylistItem.h
r5139 r5481 79 79 - (void)setSize:(unsigned long long)size; 80 80 - (unsigned long long)size; 81 - (unsigned long long)sizeOnDisk; 81 82 - (void)setViewCount:(NSUInteger)count; 82 83 - (NSUInteger)viewCount; … … 100 101 NSMutableDictionary *_allItems; 101 102 NSMutableArray *_shuffledItems; 103 BOOL _loading; 102 104 } 103 105 106 - (id)itemForPath:(NSString *)path; 107 - (void)setItems:(NSArray *)items; 108 - (void)addItem:(id)item; 104 109 - (NSUInteger)numberOfItems; 105 110 - (NSArray *)items; … … 108 113 - (void)sortUsingSelector:(SEL)selector; 109 114 - (void)sortItemsUsingSelector:(SEL)selector; 115 - (void)setLoading:(BOOL)loading; 116 - (BOOL)isLoading; 110 117 111 118 @end … … 116 123 + (id)groupWithName:(NSString *)name; 117 124 118 - (void)addItem:(id)item;119 125 - (void)insertItem:(id)item atIndex:(NSUInteger)index; 120 126 - (void)removeItem:(id)item; … … 137 143 - (NSString *)resolvedPath; 138 144 139 - (void)reload;140 141 145 @end 142 146 … … 153 157 } 154 158 159 + (NSPredicate *)metadataQueryPredicateForPredicate:(id)predicate; 160 155 161 + (id)smartGroupWithName:(NSString *)name; 156 162 … … 159 165 - (void)setQuery:(NSMetadataQuery *)query; 160 166 - (NSMetadataQuery *)query; 167 - (void)setQueryIndex:(NSUInteger)queryIndex; 168 - (NSUInteger)queryIndex; 161 169 162 - (void)reload;163 170 - (void)removeAllFiles; 164 171 Spiral/trunk/SPPlaylistItem.m
r5478 r5481 368 368 369 369 - (id)initWithPath:(NSString *)path { 370 QTMovie *movie; 371 NSTimeInterval duration; 372 373 self = [super initWithName:[path lastPathComponent]]; 370 self = [super initWithName:[[NSFileManager defaultManager] displayNameAtPath:path]]; 374 371 375 372 [self setPath:path]; 376 [self setSize:[[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileSize]];377 378 movie = [[QTMovie alloc] initWithFile:path error:NULL];379 380 if(movie) {381 if(QTGetTimeInterval([movie duration], &duration))382 [self setDuration:duration];383 384 [self setDimensions:[[movie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue]];385 386 [movie release];387 }388 373 389 374 _alias = [[self class] _aliasForPath:[self path]]; 390 375 376 [self setSize:[self sizeOnDisk]]; 377 391 378 return self; 392 379 } … … 441 428 442 429 #pragma mark - 443 444 - (NSString *)name {445 return [[NSFileManager defaultManager] displayNameAtPath:[self path]];446 }447 448 449 430 450 431 - (NSString *)cleanName { … … 519 500 520 501 502 - (unsigned long long)sizeOnDisk { 503 return [[[NSFileManager defaultManager] fileAttributesAtPath:[self resolvedPath] traverseLink:YES] fileSize]; 504 } 505 506 507 521 508 - (void)setViewCount:(NSUInteger)count { 522 509 _viewCount = count; … … 712 699 #pragma mark - 713 700 701 - (id)itemForPath:(NSString *)path { 702 return [_allItems objectForKey:path]; 703 } 704 705 706 707 - (void)setItems:(NSArray *)items { 708 id item; 709 710 [_allItems removeAllObjects]; 711 712 for(item in items) { 713 ((SPPlaylistItem *) item)->_parentItem = self; 714 715 if([item isInFileSystem]) 716 &nb
