Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 190 - (hide annotations) (download)
Sat Jan 2 18:13:04 2010 UTC (14 years, 3 months ago) by masaki
File size: 18588 byte(s)
[New] メニューより表示形式を変更可能にした。メニューより並べ替えを変更可能にした。メニューよりXspfファイルの追加を可能にした。
1 masaki 2 //
2     // XspfManager.m
3     // XspfManager
4     //
5     // Created by Hori,Masaki on 09/11/01.
6     // Copyright 2009 masakih. All rights reserved.
7     //
8    
9 masaki 182 #import "XspfMMainWindowController.h"
10 masaki 2
11     #import "XspfMMovieLoadRequest.h"
12 masaki 50 #import "XspfMCheckFileModifiedRequest.h"
13 masaki 2
14 masaki 189 #import "XspfMViewController.h"
15 masaki 41 #import "XspfMLibraryViewController.h"
16 masaki 16 #import "XspfMCollectionViewController.h"
17 masaki 25 #import "XspfMListViewController.h"
18 masaki 47 #import "XspfMDetailViewController.h"
19 masaki 2
20 masaki 94 #import "UKKQueue.h"
21 masaki 96 #import "NSPathUtilities-XspfQT-Extensions.h"
22 masaki 69
23 masaki 182 @interface XspfMMainWindowController(HMPrivate)
24 masaki 43 - (void)setupXspfLists;
25 masaki 47 - (void)setupDetailView;
26 masaki 82 - (void)setupAccessorylView;
27 masaki 25 - (void)changeViewType:(XspfMViewType)newType;
28     - (void)setCurrentListViewType:(XspfMViewType)newType;
29 masaki 189 - (void)recalculateKeyViewLoop;
30 masaki 16 @end
31    
32 masaki 184 @interface XspfMMainWindowController(XspfMDeprecated)
33     - (BOOL)didRegisteredURL:(NSURL *)url;
34     - (XSPFMXspfObject *)registerWithURL:(NSURL *)url;
35     - (void)registerFilePaths:(NSArray *)filePaths;
36     - (void)registerURLs:(NSArray *)URLs;
37    
38     - (void)registerToUKKQueue;
39     -(void) watcher:(id<UKFileWatcher>)kq receivedNotification:(NSString*)notificationName forPath: (NSString*)filePath;
40    
41     @end
42    
43    
44 masaki 182 @interface XspfMMainWindowController(UKKQueueSupport)
45 masaki 98 - (void)registerToUKKQueue;
46     @end
47    
48 masaki 182 @implementation XspfMMainWindowController
49 masaki 36
50 masaki 182 static XspfMMainWindowController *sharedInstance = nil;
51 masaki 2
52 masaki 182 + (XspfMMainWindowController *)sharedInstance
53 masaki 2 {
54 masaki 8 @synchronized(self) {
55     if (sharedInstance == nil) {
56     [[self alloc] init]; // assignment not done here
57     }
58     }
59     return sharedInstance;
60     }
61    
62     + (id)allocWithZone:(NSZone *)zone
63     {
64     @synchronized(self) {
65     if (sharedInstance == nil) {
66     sharedInstance = [super allocWithZone:zone];
67     return sharedInstance; // assignment and return on first allocation
68     }
69     }
70     return nil; //on subsequent allocation attempts return nil
71     }
72    
73     - (id)copyWithZone:(NSZone *)zone
74     {
75     return self;
76     }
77    
78     - (id)retain
79     {
80     return self;
81     }
82    
83     - (unsigned)retainCount
84     {
85     return UINT_MAX; //denotes an object that cannot be released
86     }
87    
88     - (void)release
89     {
90     //do nothing
91     }
92    
93     - (id)autorelease
94     {
95     return self;
96     }
97    
98    
99     - (id)init
100     {
101     [super initWithWindowNibName:@"MainWindow"];
102    
103 masaki 25 viewControllers = [[NSMutableDictionary alloc] init];
104 masaki 50
105 masaki 8 return self;
106 masaki 2 }
107 masaki 8 - (void)awakeFromNib
108     {
109 masaki 47 static BOOL didSetupOnMainMenu = NO;
110    
111     if(appDelegate && !didSetupOnMainMenu) {
112     didSetupOnMainMenu = YES;
113 masaki 98
114 masaki 185 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
115     [nc addObserver:self
116     selector:@selector(managerDidAddObjects:)
117     name:XspfManagerDidAddXspfObjectsNotification
118     object:appDelegate];
119 masaki 98
120 masaki 49 [self window];
121 masaki 99
122 masaki 47 }
123 masaki 8 }
124 masaki 49 - (void)windowDidLoad
125     {
126 masaki 82 [[self window] setContentBorderThickness:38 forEdge:NSMinYEdge];
127    
128 masaki 49 [self setupXspfLists];
129     [self setupDetailView];
130 masaki 82 [self setupAccessorylView];
131 masaki 50 if(currentListViewType == typeNotSelected) {
132 masaki 180 [self setCurrentListViewType:typeTableView];
133 masaki 50 }
134 masaki 49
135 masaki 50 [self showWindow:nil];
136 masaki 189 [self recalculateKeyViewLoop];
137 masaki 49 }
138 masaki 25 #pragma mark#### KVC ####
139 masaki 8 - (NSManagedObjectContext *)managedObjectContext
140     {
141     return [appDelegate managedObjectContext];
142     }
143 masaki 16 - (NSArrayController *)arrayController
144     {
145     return controller;
146     }
147 masaki 2
148 masaki 25 - (XspfMViewType)currentListViewType
149     {
150     return currentListViewType;
151     }
152     - (void)setCurrentListViewType:(XspfMViewType)newType
153     {
154     if(currentListViewType == newType) return;
155    
156     [self changeViewType:newType];
157     }
158 masaki 16
159 masaki 13 #pragma mark#### Actions ####
160 masaki 10 - (IBAction)openXspf:(id)sender
161     {
162 masaki 115 BOOL isSelected = [[controller valueForKeyPath:@"selectedObjects.@count"] boolValue];
163     if(!isSelected) return;
164    
165 masaki 77 XSPFMXspfObject *rep = [controller valueForKeyPath:@"selection.self"];
166 masaki 101 if(rep.deleted) {
167     NSRunCriticalAlertPanel( NSLocalizedString(@"Xspf is Deleted", @"Xspf is Deleted"),
168     NSLocalizedString(@"\"%@\" is deleted", @"\"%@\" is deleted"),
169     nil, nil, nil, rep.title);
170     return;
171     }
172 masaki 77 [[NSWorkspace sharedWorkspace] openFile:rep.filePath withApplication:@"XspfQT"];
173     rep.lastPlayDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
174 masaki 10 }
175 masaki 190 - (IBAction)switchListView:(id)sender
176     {
177     [self setCurrentListViewType:typeTableView];
178     }
179     - (IBAction)switchRegularIconView:(id)sender
180     {
181     [self setCurrentListViewType:typeCollectionView];
182     [(XspfMCollectionViewController *)listViewController collectionViewItemViewRegular:sender];
183     }
184     - (IBAction)switchSmallIconView:(id)sender
185     {
186     [self setCurrentListViewType:typeCollectionView];
187     [(XspfMCollectionViewController *)listViewController collectionViewItemViewSmall:sender];
188     }
189     - (void)addSortByKey:(NSString *)key
190     {
191     NSMutableArray *sortDescs = [[controller sortDescriptors] mutableCopy];
192     NSSortDescriptor *sortDesc = nil;
193    
194     // key is descs first key.
195     if([sortDescs count] > 1) {
196     NSSortDescriptor *firstDesc = [sortDescs objectAtIndex:0];
197     if([key isEqualToString:[firstDesc key]]) {
198     sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:![firstDesc ascending]] autorelease];
199     [sortDescs removeObject:firstDesc];
200     }
201     }
202     // remove same key.
203     if(!sortDesc) {
204     BOOL newAscemding = NO;
205     NSSortDescriptor *foundDesc = nil;
206     for(id desc in sortDescs) {
207     if([key isEqualToString:[desc key]]) {
208     foundDesc = desc;
209     break;
210     }
211     }
212     if(foundDesc) {
213     newAscemding = [foundDesc ascending];
214     [sortDescs removeObject:foundDesc];
215     }
216    
217     sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:newAscemding] autorelease];
218     }
219    
220     [sortDescs insertObject:sortDesc atIndex:0];
221    
222     NSArray *selectedObjects = [controller selectedObjects];
223     [controller setSortDescriptors:sortDescs];
224     [controller setSelectedObjects:selectedObjects];
225     }
226     - (IBAction)sortByTitle:(id)sender
227     {
228     [self addSortByKey:@"title"];
229     }
230     - (IBAction)sortByLastPlayDate:(id)sender
231     {
232     [self addSortByKey:@"lastPlayDate"];
233     }
234     - (IBAction)sortByModificationDate:(id)sender
235     {
236     [self addSortByKey:@"modificationDate"];
237     }
238     - (IBAction)sortByCreationDate:(id)sender
239     {
240     [self addSortByKey:@"creationDate"];
241     }
242     - (IBAction)sortByRegisterDate:(id)sender
243     {
244     [self addSortByKey:@"registerDate"];
245     }
246     - (IBAction)sortByRate:(id)sender
247     {
248     [self addSortByKey:@"rating"];
249     }
250     - (IBAction)sortByMovieNumber:(id)sender
251     {
252     [self addSortByKey:@"movieNum"];
253     }
254     - (IBAction)sortByLabel:(id)sender
255     {
256     [self doesNotRecognizeSelector:_cmd];
257     }
258    
259 masaki 2 - (IBAction)add:(id)sender
260     {
261     NSOpenPanel *panel = [NSOpenPanel openPanel];
262    
263     [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]];
264     [panel setAllowsMultipleSelection:YES];
265 masaki 9 [panel setDelegate:self];
266 masaki 2
267     [panel beginSheetForDirectory:nil
268     file:nil
269     types:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]
270 masaki 8 modalForWindow:[self window]
271 masaki 2 modalDelegate:self
272     didEndSelector:@selector(endOpenPanel:::)
273     contextInfo:NULL];
274     }
275 masaki 106 - (void)endOpenPanel:(NSOpenPanel *)panel :(NSInteger)returnCode :(void *)context
276     {
277     [panel orderOut:nil];
278 masaki 2
279 masaki 106 if(returnCode == NSCancelButton) return;
280    
281     NSArray *URLs = [panel URLs];
282     if([URLs count] == 0) return;
283    
284 masaki 184 [appDelegate registerURLs:URLs];
285 masaki 106 }
286 masaki 190 - (IBAction)remove:(id)sender
287     {
288     XSPFMXspfObject *obj = [controller valueForKeyPath:@"selection.self"];
289     [[UKKQueue sharedFileWatcher] removePathFromQueue:obj.filePath];
290     [[self managedObjectContext] deleteObject:obj];
291     }
292 masaki 182
293 masaki 190 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem
294     {
295     BOOL enabled = YES;
296     SEL action = [menuItem action];
297    
298     if(action == @selector(switchListView:)) {
299     if(currentListViewType == typeTableView) {
300     [menuItem setState:NSOnState];
301     } else {
302     [menuItem setState:NSOffState];
303     }
304     } else if(action == @selector(switchRegularIconView:)) {
305     if(currentListViewType == typeCollectionView
306     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXspfMRegularItem) {
307     [menuItem setState:NSOnState];
308     } else {
309     [menuItem setState:NSOffState];
310     }
311     } else if(action == @selector(switchSmallIconView:)) {
312     if(currentListViewType == typeCollectionView
313     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXSpfMSmallItem) {
314     [menuItem setState:NSOnState];
315     } else {
316     [menuItem setState:NSOffState];
317     }
318     } else if(action == @selector(sortByLabel:)) {
319     enabled = NO;
320     }
321    
322     return enabled;
323     }
324    
325 masaki 25 #pragma mark#### Other methods ####
326 masaki 189 - (void)recalculateKeyViewLoop
327     {
328     [searchField setNextKeyView:[libraryViewController firstKeyView]];
329     [libraryViewController setNextKeyView:[listViewController firstKeyView]];
330     [listViewController setNextKeyView:[detailViewController firstKeyView]];
331     [detailViewController setNextKeyView:searchField];
332     }
333 masaki 25 - (void)changeViewType:(XspfMViewType)viewType
334     {
335     if(currentListViewType == viewType) return;
336     currentListViewType = viewType;
337    
338     NSString *className = nil;
339     switch(currentListViewType) {
340     case typeCollectionView:
341     className = @"XspfMCollectionViewController";
342     break;
343     case typeTableView:
344     className = @"XspfMListViewController";
345     break;
346     }
347     if(!className) return;
348    
349 masaki 189 XspfMViewController *targetContorller = [viewControllers objectForKey:className];
350 masaki 25 if(!targetContorller) {
351     targetContorller = [[[NSClassFromString(className) alloc] init] autorelease];
352     if(!targetContorller) return;
353     [viewControllers setObject:targetContorller forKey:className];
354 masaki 180 [targetContorller view];
355 masaki 30 [targetContorller setRepresentedObject:controller];
356 masaki 189 [targetContorller recalculateKeyViewLoop];
357 masaki 25 }
358 masaki 109
359 masaki 25 [[listViewController view] removeFromSuperview];
360     listViewController = targetContorller;
361     [listView addSubview:[listViewController view]];
362     [[listViewController view] setFrame:[listView bounds]];
363 masaki 189 // [[self window] recalculateKeyViewLoop];
364     [self recalculateKeyViewLoop];
365 masaki 25 }
366 masaki 2
367 masaki 5
368 masaki 43 - (void)setupXspfLists
369 masaki 36 {
370 masaki 47 if(libraryViewController) return;
371    
372 masaki 41 libraryViewController = [[XspfMLibraryViewController alloc] init];
373 masaki 37 [libraryViewController setRepresentedObject:listController];
374     [libraryView addSubview:[libraryViewController view]];
375     [[libraryViewController view] setFrame:[libraryView bounds]];
376 masaki 189 [libraryViewController recalculateKeyViewLoop];
377 masaki 36 }
378 masaki 47 - (void)setupDetailView
379 masaki 6 {
380 masaki 47 if(detailViewController) return;
381 masaki 6
382 masaki 47 detailViewController = [[XspfMDetailViewController alloc] init];
383     [detailViewController setRepresentedObject:controller];
384     [detailView addSubview:[detailViewController view]];
385     [[detailViewController view] setFrame:[detailView bounds]];
386 masaki 189 [detailViewController recalculateKeyViewLoop];
387 masaki 6 }
388 masaki 82 - (void)setupAccessorylView
389     {
390     if(accessoryViewController) return;
391    
392     accessoryViewController = [[NSViewController alloc] initWithNibName:@"AccessoryView" bundle:nil];
393     [accessoryViewController setRepresentedObject:[appDelegate channel]];
394     [accessoryView addSubview:[accessoryViewController view]];
395     [[accessoryViewController view] setFrame:[accessoryView bounds]];
396 masaki 189 // [accessoryViewController recalculateKeyViewLoop];
397 masaki 82 }
398 masaki 8 #pragma mark#### NSWidnow Delegate ####
399     /**
400     Returns the NSUndoManager for the application. In this case, the manager
401     returned is that of the managed object context for the application.
402     */
403 masaki 6
404 masaki 8 - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
405     return [[appDelegate managedObjectContext] undoManager];
406     }
407    
408 masaki 9 #pragma mark#### NSOpenPanel Delegate ####
409     - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
410     {
411 masaki 184 return ![appDelegate didRegisteredURL:[NSURL fileURLWithPath:filename]];
412 masaki 9 }
413    
414 masaki 185 #pragma mark#### XspfManager Notifications ####
415     - (void)managerDidAddObjects:(NSNotification *)notification
416     {
417     id addedObjects = [[notification userInfo] objectForKey:@"XspfManagerAddedXspfObjects"];
418     if(!addedObjects || ![addedObjects isKindOfClass:[NSArray class]] || [addedObjects count] == 0) return;
419    
420     [controller performSelector:@selector(setSelectedObjects:)
421     withObject:addedObjects
422     afterDelay:0.01];
423     }
424    
425 masaki 184 #pragma mark#### Test ####
426     - (IBAction)test01:(id)sender
427     {
428 masaki 187 HMLog(HMLogLevelDebug, @"HMLogLevelDebug");
429     HMLog(HMLogLevelNotice, @"HMLogLevelNotice");
430     HMLog(HMLogLevelCaution, @"HMLogLevelCaution");
431     HMLog(HMLogLevelAlert, @"HMLogLevelAlert");
432     HMLog(HMLogLevelError, @"HMLogLevelError");
433 masaki 184
434 masaki 187 HMLog(HMLogLevelDebug, @"HMLogLevelDebug -> %@", @"DEBUG");
435 masaki 184 }
436     - (IBAction)test02:(id)sender
437     {
438     NSResponder *responder = [[self window] firstResponder];
439     while(responder) {
440 masaki 188 HMLog(HMLogLevelDebug, @"Responder -> %@", responder);
441 masaki 184 responder = [responder nextResponder];
442     }
443     }
444     - (IBAction)test03:(id)sender
445     {
446     id keyView = [[self window] firstResponder];
447     NSView *firstKeyView = keyView;
448     while(keyView) {
449 masaki 188 HMLog(HMLogLevelDebug, @"Keyview -> %@", keyView);
450 masaki 184 keyView = [keyView nextKeyView];
451     if(keyView == firstKeyView) break;
452     }
453    
454 masaki 188 HMLog(HMLogLevelDebug, @"Valid next view -> %@", [firstKeyView nextValidKeyView]);
455 masaki 184 }
456     @end
457    
458     @implementation XspfMMainWindowController(XspfMDeprecated)
459    
460     - (BOOL)didRegisteredURL:(NSURL *)url
461     {
462 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
463 masaki 184
464     NSManagedObjectContext *moc = [appDelegate managedObjectContext];
465     NSError *error = nil;
466     NSFetchRequest *fetch;
467     NSInteger num;
468    
469     fetch = [[[NSFetchRequest alloc] init] autorelease];
470     [fetch setEntity:[NSEntityDescription entityForName:@"Xspf" inManagedObjectContext:moc]];
471     NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"urlString LIKE %@", [url absoluteString]];
472     [fetch setPredicate:aPredicate];
473     num = [moc countForFetchRequest:fetch error:&error];
474     if(error) {
475 masaki 188 HMLog(HMLogLevelError, @"%@", [error localizedDescription]);
476 masaki 184 return NO;
477     }
478    
479     return num != 0;
480     }
481 masaki 94 #pragma mark#### UKKQUEUE ####
482 masaki 98 - (void)registerToUKKQueue
483     {
484 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
485 masaki 184
486 masaki 98 NSManagedObjectContext *moc = [[NSApp delegate] managedObjectContext];
487     NSError *error = nil;
488 masaki 99 NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
489 masaki 98 [fetch setEntity:[NSEntityDescription entityForName:@"Xspf" inManagedObjectContext:moc]];
490    
491     NSArray *array = [moc executeFetchRequest:fetch error:&error];
492     if(!array) {
493     if(error) {
494 masaki 188 HMLog(HMLogLevelError, @"could not fetch : %@", [error localizedDescription]);
495 masaki 98 }
496 masaki 188 HMLog(HMLogLevelError, @"Could not fetch.");
497 masaki 98 return;
498     }
499    
500 masaki 99 NSFileManager *fm = [NSFileManager defaultManager];
501 masaki 98 UKKQueue *queue = [UKKQueue sharedFileWatcher];
502     for(XSPFMXspfObject *obj in array) {
503 masaki 99 NSString *filePath = obj.filePath;
504     if([fm fileExistsAtPath:filePath]) {
505     [queue addPathToQueue:filePath];
506     } else {
507     obj.deleted = YES;
508     }
509 masaki 98 }
510     }
511 masaki 184 - (XSPFMXspfObject *)registerWithURL:(NSURL *)url
512     {
513 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
514 masaki 184
515     if([appDelegate didRegisteredURL:url]) return nil;
516    
517     XSPFMXspfObject *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Xspf"
518     inManagedObjectContext:[appDelegate managedObjectContext]];
519     if(!obj) return nil;
520    
521     obj.url = url;
522     obj.registerDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
523    
524     // will set in XspfMCheckFileModifiedRequest.
525     // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"modificationDate"];
526     // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"creationDate"];
527    
528     id<HMChannel> channel = [appDelegate channel];
529     id<HMRequest> request = [XspfMCheckFileModifiedRequest requestWithObject:obj];
530     [channel putRequest:request];
531     request = [XspfMMovieLoadRequest requestWithObject:obj];
532     [channel putRequest:request];
533    
534     [[UKKQueue sharedFileWatcher] addPathToQueue:obj.filePath];
535    
536     return obj;
537     }
538     - (void)registerFilePaths:(NSArray *)filePaths
539     {
540 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
541 masaki 184
542     NSMutableArray *array = [NSMutableArray array];
543    
544     for(NSString *filePath in filePaths) {
545     [array addObject:[NSURL fileURLWithPath:filePath]];
546     }
547    
548     [self registerURLs:array];
549     }
550     - (void)registerURLs:(NSArray *)URLs
551     {
552 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
553 masaki 184
554     [progressBar setUsesThreadedAnimation:YES];
555     [progressBar startAnimation:self];
556     [progressMessage setStringValue:@"During register."];
557    
558     [NSApp beginSheet:progressPanel
559     modalForWindow:[self window]
560     modalDelegate:nil
561     didEndSelector:Nil
562     contextInfo:NULL];
563    
564     XSPFMXspfObject *insertedObject = nil;
565     for(id URL in URLs) {
566     insertedObject = [appDelegate registerWithURL:URL];
567     }
568     if(insertedObject) {
569     [controller performSelector:@selector(setSelectedObjects:)
570     withObject:[NSArray arrayWithObject:insertedObject]
571     afterDelay:0.0];
572     }
573    
574     [progressBar stopAnimation:self];
575     [progressPanel orderOut:self];
576     [NSApp endSheet:progressPanel];
577     }
578 masaki 96 -(void) watcher:(id<UKFileWatcher>)kq receivedNotification:(NSString*)notificationName forPath: (NSString*)filePath
579 masaki 94 {
580 masaki 188 HMLog(HMLogLevelError, @"-[%@ %@] is Deprecated.", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
581 masaki 184
582 masaki 94 if(![NSThread isMainThread]) {
583 masaki 188 HMLog(HMLogLevelError, @"there is not main thread.");
584 masaki 94 }
585 masaki 184
586 masaki 94 NSString *fileURL = [[NSURL fileURLWithPath:filePath] absoluteString];
587     NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
588     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"urlString = %@", fileURL];
589     NSEntityDescription *entity = [NSEntityDescription entityForName:@"Xspf"
590     inManagedObjectContext:[self managedObjectContext]];
591     [fetch setPredicate:predicate];
592     [fetch setEntity:entity];
593    
594     NSError *error = nil;
595     NSArray *array = [[self managedObjectContext] executeFetchRequest:fetch error:&error];
596     if(!array) {
597     if(error) {
598 masaki 188 HMLog(HMLogLevelError, @"%@", [error localizedDescription]);
599 masaki 94 }
600 masaki 188 HMLog(HMLogLevelError, @"Could not fetch.");
601 masaki 94 return;
602     }
603     if([array count] == 0) {
604 masaki 188 HMLog(HMLogLevelError, @"Target file is not found.");
605 masaki 94 return;
606     }
607     if([array count] > 1) {
608 masaki 188 HMLog(HMLogLevelError, @"Target found too many!!! (%d).", [array count]);
609 masaki 94 }
610    
611     XSPFMXspfObject *obj = [array objectAtIndex:0];
612     NSString *resolvedPath = [obj.alias resolvedPath];
613    
614 masaki 102 if([UKFileWatcherRenameNotification isEqualToString:notificationName]) {
615     obj.url = [NSURL fileURLWithPath:resolvedPath];
616     [[UKKQueue sharedFileWatcher] removePathFromQueue:filePath];
617     [[UKKQueue sharedFileWatcher] addPathToQueue:obj.filePath];
618     return;
619     }
620    
621     NSFileManager *fm = [NSFileManager defaultManager];
622 masaki 98 if(!resolvedPath) {
623     if(![fm fileExistsAtPath:filePath]) {
624 masaki 94 [[UKKQueue sharedFileWatcher] removePathFromQueue:filePath];
625 masaki 98 obj.deleted = YES;
626 masaki 94 return;
627 masaki 98 } else {
628     obj.alias = [filePath aliasData];
629 masaki 94 }
630     }
631    
632 masaki 102 id attr = [fm fileAttributesAtPath:resolvedPath traverseLink:YES];
633     NSDate *newModDate = [attr fileModificationDate];
634     if(newModDate) {
635     obj.modificationDate = newModDate;
636 masaki 94 }
637 masaki 107 obj.alias = [filePath aliasData];
638 masaki 94 }
639    
640 masaki 2 @end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26