|  |  |  | @ -1022,7 +1022,7 @@ extension ConversationVC: | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |                  | 
		
	
		
			
				|  |  |  |  |                 return OpenGroupAPI | 
		
	
		
			
				|  |  |  |  |                     .reactionDelete( | 
		
	
		
			
				|  |  |  |  |                     .reactionDeleteAll( | 
		
	
		
			
				|  |  |  |  |                         db, | 
		
	
		
			
				|  |  |  |  |                         emoji: emoji, | 
		
	
		
			
				|  |  |  |  |                         id: openGroupServerMessageId, | 
		
	
	
		
			
				
					|  |  |  | @ -1077,7 +1077,6 @@ extension ConversationVC: | 
		
	
		
			
				|  |  |  |  |                     .filter(id: thread.id) | 
		
	
		
			
				|  |  |  |  |                     .updateAll(db, SessionThread.Columns.shouldBeVisible.set(to: true)) | 
		
	
		
			
				|  |  |  |  |                  | 
		
	
		
			
				|  |  |  |  |                 // TODO: Need to handle open group specific logic | 
		
	
		
			
				|  |  |  |  |                 // Update the database | 
		
	
		
			
				|  |  |  |  |                 if remove { | 
		
	
		
			
				|  |  |  |  |                     _ = try Reaction | 
		
	
	
		
			
				
					|  |  |  | @ -1100,30 +1099,60 @@ extension ConversationVC: | 
		
	
		
			
				|  |  |  |  |                     Emoji.addRecent(db, emoji: emoji) | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |                  | 
		
	
		
			
				|  |  |  |  |                 // Send the actual message | 
		
	
		
			
				|  |  |  |  |                 try MessageSender.send( | 
		
	
		
			
				|  |  |  |  |                     db, | 
		
	
		
			
				|  |  |  |  |                     message: VisibleMessage( | 
		
	
		
			
				|  |  |  |  |                         sentTimestamp: UInt64(sentTimestamp), | 
		
	
		
			
				|  |  |  |  |                         // TODO: Is the 'groupPublicKey' needed here? | 
		
	
		
			
				|  |  |  |  |                         groupPublicKey: (thread.variant == .closedGroup ? thread.id : nil), | 
		
	
		
			
				|  |  |  |  |                         text: nil, | 
		
	
		
			
				|  |  |  |  |                         reaction: VisibleMessage.VMReaction( | 
		
	
		
			
				|  |  |  |  |                             timestamp: UInt64(cellViewModel.timestampMs), | 
		
	
		
			
				|  |  |  |  |                             publicKey: { | 
		
	
		
			
				|  |  |  |  |                                 guard cellViewModel.variant == .standardIncoming else { | 
		
	
		
			
				|  |  |  |  |                                     return cellViewModel.currentUserPublicKey | 
		
	
		
			
				|  |  |  |  |                                 } | 
		
	
		
			
				|  |  |  |  |                                  | 
		
	
		
			
				|  |  |  |  |                                 return cellViewModel.authorId | 
		
	
		
			
				|  |  |  |  |                             }(), | 
		
	
		
			
				|  |  |  |  |                             emoji: emoji, | 
		
	
		
			
				|  |  |  |  |                             kind: (remove ? .remove : .react) | 
		
	
		
			
				|  |  |  |  |                         ) | 
		
	
		
			
				|  |  |  |  |                     ), | 
		
	
		
			
				|  |  |  |  |                     interactionId: cellViewModel.id, | 
		
	
		
			
				|  |  |  |  |                     in: thread | 
		
	
		
			
				|  |  |  |  |                 ) | 
		
	
		
			
				|  |  |  |  |                 if let openGroup: OpenGroup = try? OpenGroup.fetchOne(db, id: cellViewModel.threadId) { | 
		
	
		
			
				|  |  |  |  |                     // Send reaction to open groups | 
		
	
		
			
				|  |  |  |  |                     guard | 
		
	
		
			
				|  |  |  |  |                         let openGroupServerMessageId: Int64 = try? Interaction | 
		
	
		
			
				|  |  |  |  |                             .select(.openGroupServerMessageId) | 
		
	
		
			
				|  |  |  |  |                             .filter(id: cellViewModel.id) | 
		
	
		
			
				|  |  |  |  |                             .asRequest(of: Int64.self) | 
		
	
		
			
				|  |  |  |  |                             .fetchOne(db) | 
		
	
		
			
				|  |  |  |  |                     else { return } | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     if remove { | 
		
	
		
			
				|  |  |  |  |                         _ = OpenGroupAPI | 
		
	
		
			
				|  |  |  |  |                             .reactionDelete( | 
		
	
		
			
				|  |  |  |  |                                 db, | 
		
	
		
			
				|  |  |  |  |                                 emoji: emoji, | 
		
	
		
			
				|  |  |  |  |                                 id: openGroupServerMessageId, | 
		
	
		
			
				|  |  |  |  |                                 in: openGroup.roomToken, | 
		
	
		
			
				|  |  |  |  |                                 on: openGroup.server | 
		
	
		
			
				|  |  |  |  |                             ) | 
		
	
		
			
				|  |  |  |  |                     } else { | 
		
	
		
			
				|  |  |  |  |                         _ = OpenGroupAPI | 
		
	
		
			
				|  |  |  |  |                             .reactionAdd( | 
		
	
		
			
				|  |  |  |  |                                 db, | 
		
	
		
			
				|  |  |  |  |                                 emoji: emoji, | 
		
	
		
			
				|  |  |  |  |                                 id: openGroupServerMessageId, | 
		
	
		
			
				|  |  |  |  |                                 in: openGroup.roomToken, | 
		
	
		
			
				|  |  |  |  |                                 on: openGroup.server | 
		
	
		
			
				|  |  |  |  |                             ) | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                     // Send the actual message | 
		
	
		
			
				|  |  |  |  |                     try MessageSender.send( | 
		
	
		
			
				|  |  |  |  |                         db, | 
		
	
		
			
				|  |  |  |  |                         message: VisibleMessage( | 
		
	
		
			
				|  |  |  |  |                             sentTimestamp: UInt64(sentTimestamp), | 
		
	
		
			
				|  |  |  |  |                             text: nil, | 
		
	
		
			
				|  |  |  |  |                             reaction: VisibleMessage.VMReaction( | 
		
	
		
			
				|  |  |  |  |                                 timestamp: UInt64(cellViewModel.timestampMs), | 
		
	
		
			
				|  |  |  |  |                                 publicKey: { | 
		
	
		
			
				|  |  |  |  |                                     guard cellViewModel.variant == .standardIncoming else { | 
		
	
		
			
				|  |  |  |  |                                         return cellViewModel.currentUserPublicKey | 
		
	
		
			
				|  |  |  |  |                                     } | 
		
	
		
			
				|  |  |  |  |                                      | 
		
	
		
			
				|  |  |  |  |                                     return cellViewModel.authorId | 
		
	
		
			
				|  |  |  |  |                                 }(), | 
		
	
		
			
				|  |  |  |  |                                 emoji: emoji, | 
		
	
		
			
				|  |  |  |  |                                 kind: (remove ? .remove : .react) | 
		
	
		
			
				|  |  |  |  |                             ) | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                         interactionId: cellViewModel.id, | 
		
	
		
			
				|  |  |  |  |                         in: thread | 
		
	
		
			
				|  |  |  |  |                     ) | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             }, | 
		
	
		
			
				|  |  |  |  |             completion: { [weak self] _, _ in | 
		
	
		
			
				|  |  |  |  |                 self?.handleMessageSent() | 
		
	
	
		
			
				
					|  |  |  | 
 |