Delete last message updates thread preview (signal ios#833) (#3)

* fix thread preview when deleting last message

because we are doing internal accounting of what our "last" message id
is, when we delete the last message, other things get out of whack.
Caching is hard, don't do it! We can efficiently get the last object
using our existing Yap DB view.

//FREEBIE

* remove lastMessageId in favor of lastMessage for cleaner code

//FREEBIE
pull/1/head
Michael Kirk 9 years ago committed by Frederic Jacobs
parent a49d36d66a
commit a0c147722e

@ -19,8 +19,10 @@
@property (nonatomic, retain) NSDate *creationDate; @property (nonatomic, retain) NSDate *creationDate;
@property (nonatomic, copy) NSDate *archivalDate; @property (nonatomic, copy) NSDate *archivalDate;
@property (nonatomic, retain) NSDate *lastMessageDate; @property (nonatomic, retain) NSDate *lastMessageDate;
@property (nonatomic, copy) NSString *latestMessageId;
@property (nonatomic, copy) NSString *messageDraft; @property (nonatomic, copy) NSString *messageDraft;
- (TSInteraction *) lastInteraction;
@end @end
@implementation TSThread @implementation TSThread
@ -34,7 +36,6 @@
if (self) { if (self) {
_archivalDate = nil; _archivalDate = nil;
_latestMessageId = nil;
_lastMessageDate = nil; _lastMessageDate = nil;
_creationDate = [NSDate date]; _creationDate = [NSDate date];
_messageDraft = nil; _messageDraft = nil;
@ -62,15 +63,12 @@
#pragma mark Read Status #pragma mark Read Status
- (BOOL)hasUnreadMessages { - (BOOL)hasUnreadMessages {
__block TSInteraction *interaction; TSInteraction *interaction = self.lastInteraction;
__block BOOL hasUnread = NO; BOOL hasUnread = NO;
[[TSStorageManager sharedManager]
.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
interaction = [TSInteraction fetchObjectWithUniqueID:self.latestMessageId transaction:transaction]; hasUnread = ![(TSIncomingMessage *)interaction wasRead];
if ([interaction isKindOfClass:[TSIncomingMessage class]]) { }
hasUnread = ![(TSIncomingMessage *)interaction wasRead];
}
}];
return hasUnread; return hasUnread;
} }
@ -93,6 +91,14 @@
#pragma mark Last Interactions #pragma mark Last Interactions
- (TSInteraction *) lastInteraction {
__block TSInteraction *last;
[TSStorageManager.sharedManager.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction){
last = [[transaction ext:TSMessageDatabaseViewExtensionName] lastObjectInGroup:self.uniqueId];
}];
return (TSInteraction *)last;
}
- (NSDate *)lastMessageDate { - (NSDate *)lastMessageDate {
if (_lastMessageDate) { if (_lastMessageDate) {
return _lastMessageDate; return _lastMessageDate;
@ -102,12 +108,11 @@
} }
- (NSString *)lastMessageLabel { - (NSString *)lastMessageLabel {
__block TSInteraction *interaction; if (self.lastInteraction == nil) {
[[TSStorageManager sharedManager] return @"";
.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { } else {
interaction = [TSInteraction fetchObjectWithUniqueID:self.latestMessageId transaction:transaction]; return self.lastInteraction.description;
}]; }
return interaction.description;
} }
- (void)updateWithLastMessage:(TSInteraction *)lastMessage transaction:(YapDatabaseReadWriteTransaction *)transaction { - (void)updateWithLastMessage:(TSInteraction *)lastMessage transaction:(YapDatabaseReadWriteTransaction *)transaction {
@ -119,7 +124,6 @@
} }
if (!_lastMessageDate || [lastMessageDate timeIntervalSinceDate:self.lastMessageDate] > 0) { if (!_lastMessageDate || [lastMessageDate timeIntervalSinceDate:self.lastMessageDate] > 0) {
_latestMessageId = lastMessage.uniqueId;
_lastMessageDate = lastMessageDate; _lastMessageDate = lastMessageDate;
[self saveWithTransaction:transaction]; [self saveWithTransaction:transaction];

Loading…
Cancel
Save