mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Fix race condition
This commit is contained in:
parent
e374d1d0c8
commit
a49e686ca0
2 changed files with 13 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
|||
final class ConversationTitleView : UIView {
|
||||
private let thread: TSThread
|
||||
private var currentStatus: Status? { didSet { updateSubtitleForCurrentStatus() } }
|
||||
private var handledMessageTimestamps: Set<NSNumber> = []
|
||||
|
||||
// MARK: Types
|
||||
private enum Status : Int {
|
||||
|
@ -112,6 +113,7 @@ final class ConversationTitleView : UIView {
|
|||
@objc private func handleMessageSentNotification(_ notification: Notification) {
|
||||
guard let timestamp = notification.object as? NSNumber else { return }
|
||||
setStatusIfNeeded(to: .messageSent, forMessageWithTimestamp: timestamp)
|
||||
handledMessageTimestamps.insert(timestamp)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
self.clearStatusIfNeededForMessageWithTimestamp(timestamp)
|
||||
}
|
||||
|
@ -123,6 +125,7 @@ final class ConversationTitleView : UIView {
|
|||
}
|
||||
|
||||
private func setStatusIfNeeded(to status: Status, forMessageWithTimestamp timestamp: NSNumber) {
|
||||
guard !handledMessageTimestamps.contains(timestamp) else { return }
|
||||
var uncheckedTargetInteraction: TSInteraction? = nil
|
||||
thread.enumerateInteractions { interaction in
|
||||
guard interaction.timestamp == timestamp.uint64Value else { return }
|
||||
|
|
|
@ -220,6 +220,10 @@ typedef enum : NSUInteger {
|
|||
@property (nonatomic) NSMutableArray<LKMention *> *mentions;
|
||||
@property (nonatomic) NSString *oldText;
|
||||
|
||||
// Status bar updating
|
||||
/// Used to avoid duplicate status bar updates.
|
||||
@property (nonatomic) NSMutableSet<NSNumber *> *handledMessageTimestamps;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
@ -5396,6 +5400,7 @@ typedef enum : NSUInteger {
|
|||
{
|
||||
NSNumber *timestamp = (NSNumber *)notification.object;
|
||||
[self setProgressIfNeededTo:1.0f forMessageWithTimestamp:timestamp];
|
||||
[self.handledMessageTimestamps addObject:timestamp];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void) {
|
||||
[self hideProgressIndicatorViewForMessageWithTimestamp:timestamp];
|
||||
});
|
||||
|
@ -5409,6 +5414,11 @@ typedef enum : NSUInteger {
|
|||
|
||||
- (void)setProgressIfNeededTo:(float)progress forMessageWithTimestamp:(NSNumber *)timestamp
|
||||
{
|
||||
if ([self.handledMessageTimestamps contains:^BOOL(NSNumber *t) {
|
||||
return [t isEqual:timestamp];
|
||||
}]) {
|
||||
return;
|
||||
}
|
||||
__block TSInteraction *targetInteraction;
|
||||
[self.thread enumerateInteractionsUsingBlock:^(TSInteraction *interaction) {
|
||||
if (interaction.timestamp == timestamp.unsignedLongLongValue) {
|
||||
|
|
Loading…
Reference in a new issue