Playlist entries are now processed on main thread.

CQTexperiment
matthewleon 2008-03-02 10:51:37 +00:00
parent d84a12d596
commit 92be178bf2
1 changed files with 21 additions and 23 deletions

View File

@ -278,7 +278,7 @@
readEntryInfoOperation = [[[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(readEntryInfo:)
object:pe] autorelease];
object:pe]autorelease];
if (oldReadEntryInfoOperation)
{
[readEntryInfoOperation addDependency:oldReadEntryInfoOperation];
@ -309,6 +309,25 @@
return entryInfo;
}
- (void)processEntryInfo:(NSInvocationOperation *)operation
{
NSDictionary *entryInfo = [operation result];
PlaylistEntry *pe;
// get the playlist entry that the thread was inspecting
[[operation invocation]getArgument:&pe atIndex:2];
if (entryInfo == nil)
{
pe.error = YES;
pe.errorMessage = @"Unable to retrieve properties.";
}
else
{
[pe setValuesForKeysWithDictionary:entryInfo];
[playlistController updateTotalTime];
}
return;
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
@ -317,30 +336,9 @@
// We finished reading the info for a playlist entry
if ([keyPath isEqualToString:@"isFinished"] && [object isFinished])
{
// get the results
NSDictionary *entryInfo = [object result];
// get the playlist entry that the thread was inspecting
PlaylistEntry *pe;
[[object invocation]getArgument:&pe atIndex:2];
if (entryInfo == nil)
{
pe.error = YES;
pe.errorMessage = @"Unable to retrieve properties.";
}
else
{
[pe setValuesForKeysWithDictionary:entryInfo];
[playlistController updateTotalTime];
}
//Hack so the display gets updated
PlaylistEntry *tempEntry = [playlistController currentEntry];
[playlistController setCurrentEntry:pe];
[playlistController setCurrentEntry:tempEntry];
// stop observing
[object removeObserver:self forKeyPath:keyPath];
[self performSelectorOnMainThread:@selector(processEntryInfo:) withObject:object waitUntilDone:NO];
}
else
{