pull/43/head
Niels Andriesse 6 years ago
parent 3a1d07e5a8
commit 1e7949a029

@ -71,7 +71,7 @@ public final class LokiGroupChatPoller : NSObject {
let message = TSOutgoingMessage(outgoingMessageWithTimestamp: message.timestamp, in: groupThread, messageBody: message.body, attachmentIds: [], expiresInSeconds: 0, expireStartedAt: 0, isVoiceMessage: false, groupMetaMessage: .deliver, quotedMessage: nil, contactShare: nil, linkPreview: nil) let message = TSOutgoingMessage(outgoingMessageWithTimestamp: message.timestamp, in: groupThread, messageBody: message.body, attachmentIds: [], expiresInSeconds: 0, expireStartedAt: 0, isVoiceMessage: false, groupMetaMessage: .deliver, quotedMessage: nil, contactShare: nil, linkPreview: nil)
storage.newDatabaseConnection().readWrite { transaction in storage.newDatabaseConnection().readWrite { transaction in
message.update(withSentRecipient: group.server, wasSentByUD: false, transaction: transaction) message.update(withSentRecipient: group.server, wasSentByUD: false, transaction: transaction)
message.savePublicChatMessageID(messageServerID, with: transaction) message.saveGroupChatMessageID(messageServerID, in: transaction)
guard let messageID = message.uniqueId else { guard let messageID = message.uniqueId else {
owsFailDebug("[Loki] Outgoing public chat message should have a unique id set") owsFailDebug("[Loki] Outgoing public chat message should have a unique id set")

@ -1182,11 +1182,11 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
// Make sure it's a public chat message // Make sure it's a public chat message
TSMessage *message = (TSMessage *)self.interaction; TSMessage *message = (TSMessage *)self.interaction;
if (!message.isPublicChatMessage) return; if (!message.isGroupChatMessage) return;
// Delete the message // Delete the message
BOOL isSentByUser = (interationType == OWSInteractionType_OutgoingMessage); BOOL isSentByUser = (interationType == OWSInteractionType_OutgoingMessage);
[[LKGroupChatAPI deleteMessageWithID:message.publicChatMessageID forGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer isSentByUser:isSentByUser].catch(^(NSError *error) { [[LKGroupChatAPI deleteMessageWithID:message.isGroupChatMessage forGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer isSentByUser:isSentByUser].catch(^(NSError *error) {
// Roll back // Roll back
[self.interaction save]; [self.interaction save];
}) retainUntilComplete]; }) retainUntilComplete];
@ -1247,7 +1247,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
// Make sure it's a public chat message // Make sure it's a public chat message
TSMessage *message = (TSMessage *)self.interaction; TSMessage *message = (TSMessage *)self.interaction;
if (!message.isPublicChatMessage) return false; if (!message.isGroupChatMessage) return false;
// Only allow deletion on incoming messages if the user has moderation permission // Only allow deletion on incoming messages if the user has moderation permission
if (interationType == OWSInteractionType_IncomingMessage) { if (interationType == OWSInteractionType_IncomingMessage) {

@ -39,20 +39,15 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
@property (nonatomic, readonly, nullable) OWSContact *contactShare; @property (nonatomic, readonly, nullable) OWSContact *contactShare;
@property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview; @property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview;
// Loki friend request handling // Loki friend request handling
// ========
@property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus; @property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus;
@property (nonatomic, readonly) NSString *friendRequestStatusDescription; @property (nonatomic, readonly) NSString *friendRequestStatusDescription;
@property (nonatomic) uint64_t friendRequestExpiresAt; @property (nonatomic) uint64_t friendRequestExpiresAt;
@property (nonatomic, readonly) BOOL isFriendRequest; @property (nonatomic, readonly) BOOL isFriendRequest;
@property (nonatomic, readonly) BOOL hasFriendRequestStatusMessage; @property (nonatomic, readonly) BOOL hasFriendRequestStatusMessage;
@property (nonatomic) BOOL isP2P; @property (nonatomic) BOOL isP2P;
// ======== // Group chat
@property (nonatomic) uint64_t groupChatMessageID;
// Public Chat @property (nonatomic, readonly) BOOL isGroupChatMessage;
// ========
@property (nonatomic) uint64_t publicChatMessageID;
@property (nonatomic, readonly) BOOL isPublicChatMessage;
// ========
- (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE; - (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE;
@ -98,9 +93,9 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
- (void)saveFriendRequestStatus:(LKMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction; - (void)saveFriendRequestStatus:(LKMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
- (void)saveFriendRequestExpiresAt:(u_int64_t)expiresAt withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction; - (void)saveFriendRequestExpiresAt:(u_int64_t)expiresAt withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
#pragma mark - Public Chat #pragma mark - Group chat
- (void)savePublicChatMessageID:(uint64_t)serverMessageId withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction; - (void)saveGroupChatMessageID:(uint64_t)serverMessageID in:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
@end @end

@ -84,7 +84,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
_linkPreview = linkPreview; _linkPreview = linkPreview;
_friendRequestStatus = LKMessageFriendRequestStatusNone; _friendRequestStatus = LKMessageFriendRequestStatusNone;
_friendRequestExpiresAt = 0; _friendRequestExpiresAt = 0;
_publicChatMessageID = -1; _groupChatMessageID = -1;
return self; return self;
} }
@ -491,14 +491,14 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
return self.isFriendRequest && self.friendRequestStatus != LKMessageFriendRequestStatusSendingOrFailed; return self.isFriendRequest && self.friendRequestStatus != LKMessageFriendRequestStatusSendingOrFailed;
} }
#pragma mark - Public chat handling #pragma mark - Group chat
- (BOOL) isPublicChatMessage { - (BOOL) isGroupChatMessage {
return self.publicChatMessageID > 0; return self.groupChatMessageID > 0;
} }
- (void)savePublicChatMessageID:(uint64_t)serverMessageId withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction { - (void)saveGroupChatMessageID:(uint64_t)serverMessageID in:(YapDatabaseReadWriteTransaction *_Nullable)transaction {
self.publicChatMessageID = serverMessageId; self.groupChatMessageID = serverMessageID;
if (transaction == nil) { if (transaction == nil) {
[self save]; [self save];
[self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{}]; [self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{}];

@ -1377,7 +1377,7 @@ NS_ASSUME_NONNULL_BEGIN
wasReceivedByUD:wasReceivedByUD]; wasReceivedByUD:wasReceivedByUD];
if (envelope.isPtpMessage) { incomingMessage.isP2P = YES; } if (envelope.isPtpMessage) { incomingMessage.isP2P = YES; }
if (dataMessage.publicChatInfo && dataMessage.publicChatInfo.hasServerID) { incomingMessage.publicChatMessageID = dataMessage.publicChatInfo.serverID; } if (dataMessage.publicChatInfo && dataMessage.publicChatInfo.hasServerID) { incomingMessage.groupChatMessageID = dataMessage.publicChatInfo.serverID; }
NSArray<TSAttachmentPointer *> *attachmentPointers = NSArray<TSAttachmentPointer *> *attachmentPointers =
[TSAttachmentPointer attachmentPointersFromProtos:dataMessage.attachments [TSAttachmentPointer attachmentPointersFromProtos:dataMessage.attachments

@ -1117,7 +1117,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[[LKGroupChatAPI sendMessage:groupMessage toGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer] [[LKGroupChatAPI sendMessage:groupMessage toGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer]
.thenOn(OWSDispatch.sendingQueue, ^(LKGroupMessage *groupMessage) { .thenOn(OWSDispatch.sendingQueue, ^(LKGroupMessage *groupMessage) {
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message savePublicChatMessageID:groupMessage.serverID withTransaction:transaction]; [message saveGroupChatMessageID:groupMessage.serverID in:transaction];
[OWSPrimaryStorage.sharedManager setIDForMessageWithServerID:groupMessage.serverID to:message.uniqueId in:transaction]; [OWSPrimaryStorage.sharedManager setIDForMessageWithServerID:groupMessage.serverID to:message.uniqueId in:transaction];
}]; }];
[self messageSendDidSucceed:messageSend deviceMessages:deviceMessages wasSentByUD:false wasSentByWebsocket:false]; [self messageSendDidSucceed:messageSend deviceMessages:deviceMessages wasSentByUD:false wasSentByWebsocket:false];

Loading…
Cancel
Save