Skip to content

Commit

Permalink
Bugfix: Immediate messages won't get removed from queue, when a new i…
Browse files Browse the repository at this point in the history
…mmediate message is posted
  • Loading branch information
myell0w committed Jan 17, 2011
1 parent 0dd45af commit 85f77a5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
1 change: 1 addition & 0 deletions MTStatusBarOverlay.h
Expand Up @@ -58,6 +58,7 @@ typedef enum MTMessageType {
#define kMTStatusBarOverlayMessageTypeKey @"MessageType"
#define kMTStatusBarOverlayDurationKey @"MessageDuration"
#define kMTStatusBarOverlayAnimationKey @"MessageAnimation"
#define kMTStatusBarOverlayImmediateKey @"MessageImmediate"


//===========================================================
Expand Down
32 changes: 19 additions & 13 deletions MTStatusBarOverlay.m
Expand Up @@ -278,7 +278,7 @@ @interface MTStatusBarOverlay ()
@property (nonatomic, retain) UITableView *historyTableView;

// intern method that posts a new entry to the message-queue
- (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated;
- (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated immediate:(BOOL)immediate;
// intern method that clears the messageQueue and then posts a new entry to it
- (void)postImmediateMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated;
// intern method that does all the work of showing the next message in the queue
Expand Down Expand Up @@ -520,7 +520,7 @@ - (void)postMessage:(NSString *)message {
}

- (void)postMessage:(NSString *)message animated:(BOOL)animated {
[self postMessage:message type:MTMessageTypeActivity duration:0 animated:animated];
[self postMessage:message type:MTMessageTypeActivity duration:0 animated:animated immediate:NO];
}

- (void)postImmediateMessage:(NSString *)message animated:(BOOL)animated {
Expand All @@ -532,7 +532,7 @@ - (void)postFinishMessage:(NSString *)message duration:(NSTimeInterval)duration
}

- (void)postFinishMessage:(NSString *)message duration:(NSTimeInterval)duration animated:(BOOL)animated {
[self postMessage:message type:MTMessageTypeFinish duration:duration animated:animated];
[self postMessage:message type:MTMessageTypeFinish duration:duration animated:animated immediate:NO];
}

- (void)postImmediateFinishMessage:(NSString *)message duration:(NSTimeInterval)duration animated:(BOOL)animated {
Expand All @@ -544,14 +544,14 @@ - (void)postErrorMessage:(NSString *)message duration:(NSTimeInterval)duration {
}

- (void)postErrorMessage:(NSString *)message duration:(NSTimeInterval)duration animated:(BOOL)animated {
[self postMessage:message type:MTMessageTypeError duration:duration animated:animated];
[self postMessage:message type:MTMessageTypeError duration:duration animated:animated immediate:NO];
}

- (void)postImmediateErrorMessage:(NSString *)message duration:(NSTimeInterval)duration animated:(BOOL)animated {
[self postImmediateMessage:message type:MTMessageTypeError duration:duration animated:animated];
}

- (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated {
- (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated immediate:(BOOL)immediate {
// don't add to queue when message is empty
if (message == nil) {
return;
Expand All @@ -560,7 +560,8 @@ - (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration
NSDictionary *messageDictionaryRepresentation = [NSDictionary dictionaryWithObjectsAndKeys:message, kMTStatusBarOverlayMessageKey,
[NSNumber numberWithInt:messageType], kMTStatusBarOverlayMessageTypeKey,
[NSNumber numberWithDouble:duration], kMTStatusBarOverlayDurationKey,
[NSNumber numberWithBool:animated], kMTStatusBarOverlayAnimationKey, nil];
[NSNumber numberWithBool:animated], kMTStatusBarOverlayAnimationKey,
[NSNumber numberWithBool:immediate], kMTStatusBarOverlayImmediateKey, nil];

@synchronized (self.messageQueue) {
[self.messageQueue insertObject:messageDictionaryRepresentation atIndex:0];
Expand All @@ -574,18 +575,23 @@ - (void)postMessage:(NSString *)message type:(MTMessageType)messageType duration

- (void)postImmediateMessage:(NSString *)message type:(MTMessageType)messageType duration:(NSTimeInterval)duration animated:(BOOL)animated {
@synchronized(self.messageQueue) {
NSArray *messageQueue = [[self.messageQueue copy] autorelease];

// clear queue so that new message gets posted immediately
[self.messageQueue removeAllObjects];
NSMutableArray *clearedMessages = [NSMutableArray array];

for (id messageDictionary in self.messageQueue) {
if ([[messageDictionary valueForKey:kMTStatusBarOverlayImmediateKey] boolValue] == NO) {
[clearedMessages addObject:messageDictionary];
}
}

[self.messageQueue removeObjectsInArray:clearedMessages];

// call delegate
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(statusBarOverlayDidHide)]) {
[self.delegate statusBarOverlayDidClearMessageQueue:messageQueue];
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(statusBarOverlayDidHide)] && clearedMessages.count > 0) {
[self.delegate statusBarOverlayDidClearMessageQueue:clearedMessages];
}
}

[self postMessage:message type:messageType duration:duration animated:animated];
[self postMessage:message type:messageType duration:duration animated:animated immediate:YES];
}


Expand Down

0 comments on commit 85f77a5

Please sign in to comment.