From: <ho...@us...> - 2006-03-30 08:56:54
|
Revision: 6069 Author: hofman Date: 2006-03-30 00:56:39 -0800 (Thu, 30 Mar 2006) ViewCVS: http://svn.sourceforge.net/bibdesk/?rev=6069&view=rev Log Message: ----------- Notify the document when a shared group finished loading data. We (un)register as observer when the shared group is added or removed. Modified Paths: -------------- trunk/bibdesk/BDSKGroup.m trunk/bibdesk/BibDocument_Groups.h trunk/bibdesk/BibDocument_Groups.m trunk/bibdesk/BibDocument_Sharing.m trunk/bibdesk/BibPrefController.h trunk/bibdesk/BibPrefController.m Modified: trunk/bibdesk/BDSKGroup.m =================================================================== --- trunk/bibdesk/BDSKGroup.m 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BDSKGroup.m 2006-03-30 08:56:39 UTC (rev 6069) @@ -489,36 +489,38 @@ { switch(event){ case NSStreamEventHasBytesAvailable: - // compiler barfs unless we include a bogus line here - [(id)nil release]; - uint8_t readBuffer[4096]; - int amountRead = 0; - NSInputStream *is = (NSInputStream *)aStream; - amountRead = [is read:readBuffer maxLength:4096]; - [data appendBytes:readBuffer length:amountRead]; + do { + // compiler barfs unless we include a bogus line here + [(id)nil release]; + uint8_t readBuffer[4096]; + int amountRead = 0; + NSInputStream *is = (NSInputStream *)aStream; + amountRead = [is read:readBuffer maxLength:4096]; + [data appendBytes:readBuffer length:amountRead]; + } while (0); break; case NSStreamEventEndEncountered: // close to remove from the run loop [(NSInputStream *)aStream close]; downloadComplete = YES; [self setCount:[[self publications] count]]; + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKSharedGroupFinishedNotification object:self]; break; case NSStreamEventErrorOccurred: - // compiler barfs unless we include a bogus line here - [(id)nil release]; - NSError *error = [aStream streamError]; - // log to the console for more detailed diagnostics - NSLog(@" *** sharing error for %@: %@", [self description], error); - OFError(&error, BDSKNetworkError, NSLocalizedDescriptionKey, NSLocalizedString(@"Unable to Read Shared File", @""), NSLocalizedRecoverySuggestionErrorKey, NSLocalizedString(@"You may wish to disable and re-enable sharing in BibDesk's preferences to see if the error persists.", @""), nil); - - // this will get annoying if the streams are really unreliable - [NSApp presentError:error]; - // docs indicate the stream can't be re-used after an error occurs, so go ahead and close it - [aStream close]; - - // allow the user to try again; otherwise this group is one-shot only (this should be the same as aStream, but someday we may handle output as well) - [self closeInputStream]; - + do { + NSError *error = [aStream streamError]; + // log to the console for more detailed diagnostics + NSLog(@" *** sharing error for %@: %@", [self description], error); + OFError(&error, BDSKNetworkError, NSLocalizedDescriptionKey, NSLocalizedString(@"Unable to Read Shared File", @""), NSLocalizedRecoverySuggestionErrorKey, NSLocalizedString(@"You may wish to disable and re-enable sharing in BibDesk's preferences to see if the error persists.", @""), nil); + + // this will get annoying if the streams are really unreliable + [NSApp presentError:error]; + // docs indicate the stream can't be re-used after an error occurs, so go ahead and close it + [aStream close]; + + // allow the user to try again; otherwise this group is one-shot only (this should be the same as aStream, but someday we may handle output as well) + [self closeInputStream]; + } while (0); break; default: break; Modified: trunk/bibdesk/BibDocument_Groups.h =================================================================== --- trunk/bibdesk/BibDocument_Groups.h 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BibDocument_Groups.h 2006-03-30 08:56:39 UTC (rev 6069) @@ -69,6 +69,7 @@ - (void)removeGroupFieldAction:(id)sender; - (void)handleGroupFieldChangedNotification:(NSNotification *)notification; - (void)handleGroupAddRemoveNotification:(NSNotification *)notification; +- (void)handleSharedGroupFinishedNotification:(NSNotification *)notification; - (IBAction)sortGroupsByGroup:(id)sender; - (IBAction)sortGroupsByCount:(id)sender; Modified: trunk/bibdesk/BibDocument_Groups.m =================================================================== --- trunk/bibdesk/BibDocument_Groups.m 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BibDocument_Groups.m 2006-03-30 08:56:39 UTC (rev 6069) @@ -201,6 +201,15 @@ [self updateAllSmartGroups]; } + +- (void)handleSharedGroupFinishedNotification:(NSNotification *)notification{ + BDSKGroup *group = [notification object]; + if ([[self selectedGroups] containsObject:group]) + [self updateGroupsPreservingSelection:YES]; + else + [groupTableView reloadData]; +} + // this method uses counted sets to compute the number of publications per group; each group object is just a name // and a count, and a group knows how to compare itself with other groups for sorting/equality, but doesn't know // which pubs are associated with it Modified: trunk/bibdesk/BibDocument_Sharing.m =================================================================== --- trunk/bibdesk/BibDocument_Sharing.m 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BibDocument_Sharing.m 2006-03-30 08:56:39 UTC (rev 6069) @@ -139,6 +139,11 @@ [group release]; [groupTableView reloadData]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleSharedGroupFinishedNotification:) + name:BDSKSharedGroupFinishedNotification + object:group]; + // remove from the list of unresolved services [unresolvedNetServices removeObject:aNetService]; @@ -164,8 +169,13 @@ // create an array of the groups we should keep by comparing services with the one that just went away while(group = [e nextObject]) - if([[group service] isEqual:aNetService] == NO) + if([[group service] isEqual:aNetService]) { + [[NSNotificationCenter defaultCenter] removeObserver:self + name:BDSKSharedGroupFinishedNotification + object:group]; + } else { [array addObject:group]; + } [sharedGroups setArray:array]; [groupTableView reloadData]; Modified: trunk/bibdesk/BibPrefController.h =================================================================== --- trunk/bibdesk/BibPrefController.h 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BibPrefController.h 2006-03-30 08:56:39 UTC (rev 6069) @@ -261,6 +261,7 @@ extern NSString *BDSKStopWordsChangedNotification; extern NSString *BDSKSharingChangedNotification; extern NSString *BDSKSharedBrowsingChangedNotification; +extern NSString *BDSKSharedGroupFinishedNotification; #pragma mark Exception name strings extern NSString *BDSKComplexStringException; Modified: trunk/bibdesk/BibPrefController.m =================================================================== --- trunk/bibdesk/BibPrefController.m 2006-03-30 08:10:10 UTC (rev 6068) +++ trunk/bibdesk/BibPrefController.m 2006-03-30 08:56:39 UTC (rev 6069) @@ -278,6 +278,7 @@ NSString *BDSKStopWordsChangedNotification = @"BDSKStopWordsChangedNotification"; NSString *BDSKSharingChangedNotification = @"BDSKSharingChangedNotification"; NSString *BDSKSharedBrowsingChangedNotification = @"BDSKSharedBrowsingChangedNotification"; +NSString *BDSKSharedGroupFinishedNotification = @"BDSKSharedGroupFinishedNotification"; #pragma mark Exception name strings This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |