Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


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

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