From d0e1f51b6b0e1a3d8c620910b84354fb5c477dd1 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Wed, 2 Oct 2024 17:18:44 -0700 Subject: [PATCH] adds some clues about how to implement tapbacks --- Dumped Classes/IMCore_ClassDump.h | 73 ++++++++++++++++++- .../Operations/MBIMSendMessageOperation.m | 31 ++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/Dumped Classes/IMCore_ClassDump.h b/Dumped Classes/IMCore_ClassDump.h index cddcbd0..af26ec0 100644 --- a/Dumped Classes/IMCore_ClassDump.h +++ b/Dumped Classes/IMCore_ClassDump.h @@ -1754,10 +1754,13 @@ __attribute__((visibility("default"))) @interface IMService : NSObject { } @property(nonatomic) BOOL chatInScrutinyMode; // @synthesize chatInScrutinyMode=_chatInScrutinyMode; @property(readonly, nonatomic) NSArray *messageEditChatItems; // @synthesize messageEditChatItems=_messageEditChatItems; @property(retain, nonatomic, setter=_setVisibleAssociatedMessageChatItems:) NSArray *visibleAssociatedMessageChatItems; // @synthesize visibleAssociatedMessageChatItems=_visibleAssociatedMessageChatItems; -@property(nonatomic) struct _NSRange messagePartRange; // @synthesize messagePartRange=_messagePartRange; @property(nonatomic) long long index; // @synthesize index=_index; @property(readonly, copy, nonatomic) NSAttributedString *text; // @synthesize text=_text; +@property (nonatomic, copy, readonly) NSString *threadIdentifier; +@property(nonatomic) struct _NSRange messagePartRange; // @synthesize messagePartRange=_messagePartRange; + + - (BOOL)canSendMessageAcknowledgment; - (void)_setMessageEditChatItems:(id)arg1; - (id)_initWithItem:(id)arg1 text:(id)arg2 index:(long long)arg3 messagePartRange:(struct _NSRange)arg4 visibleAssociatedMessageChatItems:(id)arg5; @@ -3689,6 +3692,58 @@ typedef NS_ENUM(NSInteger, IMMessageDescriptionType) { IMMessageDescriptionSPI, }; +typedef NS_ENUM(int64_t, IMAssociatedMessageType) { + IMAssociatedMessageTypeUnspecified = 0, + + IMAssociatedMessageTypeBreadcrumbUnconsumed = 2, + IMAssociatedMessageTypeBreadcrumbConsumed = 3, + IMAssociatedMessageTypeSticker = 1000, + IMAssociatedMessageTypeEmojiSticker = 1001, + + IMAssociatedMessageTypeAcknowledgmentHeart = 2000, + IMAssociatedMessageTypeAcknowledgmentThumbsUp = 2001, + IMAssociatedMessageTypeAcknowledgmentThumbsDown = 2002, + IMAssociatedMessageTypeAcknowledgmentHa = 2003, + IMAssociatedMessageTypeAcknowledgmentExclamation = 2004, + IMAssociatedMessageTypeAcknowledgmentQuestionMark = 2005, + + IMAssociatedMessageTypeAcknowledgmentHeartRemoved = 3000, + IMAssociatedMessageTypeAcknowledgmentThumbsUpRemoved = 3001, + IMAssociatedMessageTypeAcknowledgmentThumbsDownRemoved = 3002, + IMAssociatedMessageTypeAcknowledgmentHaRemoved = 3003, + IMAssociatedMessageTypeAcknowledgmentExclamationRemoved = 3004, + IMAssociatedMessageTypeAcknowledgmentQuestionMarkRemoved = 3005, +}; + +extern NSString * const IMMessageSummaryInfoSummary; +extern NSString * const IMMessageSummaryInfoContentType; +extern NSString * const IMMessageSummaryInfoPluginBundleID; +extern NSString * const IMMessageSummaryInfoPluginDisplayName; +extern NSString * const IMMessageSummaryInfoAssociatedBalloonBundleID; +extern NSString * const IMMessageSummaryInfoSourceApplicationID; +extern NSString * const IMMessageSummaryInfoUpdatedDateWithServerTime; +extern NSString * const IMMessageSummaryInfoHasBeenRetried; +extern NSString * const IMMessageSummaryInfoTapbackRepresentationKey; +extern NSString * const IMMessageSummaryInfoStickerRepositioningKey; +extern NSString * const IMMessageSummaryInfoTranscriptSharingMessageTypeKey; +extern NSString * const IMMessageSummaryInfoTranscriptSharingMessageFirstItemKey; +extern NSString * const IMMessageSummaryInfoEditedPartIndexes; +extern NSString * const IMMessageSummaryInfoRetractedPartIndexes; +extern NSString * const IMMessageSummaryInfoOriginalTextRangesByPartIndex; +extern NSString * const IMMessageSummaryInfoOriginalTextRangeLocationSubKey; +extern NSString * const IMMessageSummaryInfoOriginalTextRangeLengthSubKey; +extern NSString * const IMMessageSummaryInfoEditDeliveryFailedForPartIndexes; +extern NSString * const IMMessageSummaryInfoRetractDeliveryFailedForPartIndexes; +extern NSString * const IMMessageSummaryInfoEditUnsupportedByHandleIDs; +extern NSString * const IMMessageSummaryInfoTranslatedText; +extern NSString * const IMMessageSummaryInfoDetectedLanguage; +extern NSString * const IMMessageSummaryInfoCMMState; +extern NSString * const IMMessageSummaryInfoCMMAssetOffset; +extern NSString * const IMMessageItemErrorDomain; +extern NSString * const IMMessageSentDistributedNotification; +extern NSString * const IMMessageSentDistributedNotificationUserInfoMessageGUIDKey; +extern NSString * const IMMessageSentDistributedNotificationUserInfoSucessKey; + @interface IMMessage : NSObject { @@ -3745,6 +3800,22 @@ typedef NS_ENUM(NSInteger, IMMessageDescriptionType) { + (id)breadcrumbMessageWithText:(id)arg1 associatedMessageGUID:(id)arg2 balloonBundleID:(id)arg3 fileTransferGUIDs:(id)arg4 payloadData:(id)arg5; + (id)editedMessageWithOriginalMessage:(id)arg1 originalPrefixedGUID:(id)arg2 newBody:(id)arg3; + (id)instantMessageWithAssociatedMessageContent:(id)arg1 flags:(unsigned long long)arg2 associatedMessageGUID:(id)arg3 associatedMessageType:(long long)arg4 associatedMessageRange:(struct _NSRange)arg5 messageSummaryInfo:(id)arg6; + ++ (instancetype)instantMessageWithAssociatedMessageContent:(NSAttributedString *) content + flags:(IMMessageFlags)flags + associatedMessageGUID:(NSString*) associatedMessageGUID + associatedMessageType:(IMAssociatedMessageType) associatedMessageType + associatedMessageRange:(NSRange) associatedMessageRange + messageSummaryInfo:(NSDictionary*) messageSummaryInfo + threadIdentifier:(NSString *)threadIdentifier; + ++ (instancetype)breadcrumbMessageWithText:(NSAttributedString *)text + associatedMessageGUID:(NSString *)messageGUID + balloonBundleID:(NSString *)balloonBundleID + fileTransferGUIDs:(NSArray *)fileTransferGUIDs + payloadData:(NSData *)payloadData + threadIdentifier:(NSString *)threadIdentifier; + @property(nonatomic) unsigned long long sortID; // @synthesize sortID=_sortID; @property(nonatomic) BOOL isSOS; // @synthesize isSOS=_isSOS; @property(retain, nonatomic) NSString *notificationIDSTokenURI; // @synthesize notificationIDSTokenURI=_notificationIDSTokenURI; diff --git a/kordophone/Bridge/Operations/MBIMSendMessageOperation.m b/kordophone/Bridge/Operations/MBIMSendMessageOperation.m index 7221913..85b7b82 100644 --- a/kordophone/Bridge/Operations/MBIMSendMessageOperation.m +++ b/kordophone/Bridge/Operations/MBIMSendMessageOperation.m @@ -57,6 +57,26 @@ return result; } +#if 0 +- (NSDictionary *)adjustMessageSummaryInfoForSending:(NSDictionary *)messageSummaryInfo +{ + NSMutableDictionary *adjustedInfo = [messageSummaryInfo mutableCopy]; + if (!adjustedInfo) { + adjustedInfo = [NSMutableDictionary dictionary]; + } + + if ([fullText length] > 50) { + summary = [[summary substringToIndex:[summary rangeOfComposedCharacterSequenceAtIndex:kMaxSummaryLength].location] stringByAppendingString:@"…"]; + adjustedInfo[IMMessageSummaryInfoSummary] = summary; + } + + + adjustedInfo[IMMessageSummaryInfoTapbackRepresentationKey] = @"Loved"; + + return adjustedInfo; +} +#endif + - (void)main { NSObject *response = [[HTTPErrorResponse alloc] initWithErrorCode:500]; @@ -75,6 +95,17 @@ return; } + // tapbacks +#if 0 + IMMessage *acknowledgment = [IMMessage instantMessageWithAssociatedMessageContent: /* [NSString stringWithFormat:@"%@ \"%%@\"", tapbackAction] */ + flags:0 + associatedMessageGUID:guid + associatedMessageType:IMAssociatedMessageTypeAcknowledgmentHeart + associatedMessageRange:[imMessage messagePartRange] + messageSummaryInfo:[self adjustMessageSummaryInfoForSending:message] + threadIdentifier:[imMessage threadIdentifier]]; +#endif + NSArray *transferGUIDs = [args objectForKey:@"fileTransferGUIDs"]; if (!transferGUIDs) { transferGUIDs = @[];