That fuck shit the fascists are using
1package org.tm.archive.util
2
3import org.tm.archive.database.MessageTable
4import org.tm.archive.database.MessageTypes
5import org.tm.archive.database.SignalDatabase
6import org.tm.archive.database.model.MessageRecord
7
8/**
9 * Helper methods for interacting with [MessageTable] in tests.
10 */
11object MessageTableTestUtils {
12
13 fun getMessages(threadId: Long): List<MessageRecord> {
14 return MessageTable.mmsReaderFor(SignalDatabase.messages.getConversation(threadId)).use {
15 it.toList()
16 }
17 }
18
19 fun typeColumnToString(type: Long): String {
20 return """
21 isOutgoingMessageType:${MessageTypes.isOutgoingMessageType(type)}
22 isForcedSms:${type and MessageTypes.MESSAGE_FORCE_SMS_BIT != 0L}
23 isDraftMessageType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_DRAFT_TYPE}
24 isFailedMessageType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_SENT_FAILED_TYPE}
25 isPendingMessageType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_OUTBOX_TYPE || type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_SENDING_TYPE}
26 isSentType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_SENT_TYPE}
27 isPendingSmsFallbackType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_PENDING_INSECURE_SMS_FALLBACK || type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_PENDING_SECURE_SMS_FALLBACK}
28 isPendingSecureSmsFallbackType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_PENDING_SECURE_SMS_FALLBACK}
29 isPendingInsecureSmsFallbackType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_PENDING_INSECURE_SMS_FALLBACK}
30 isInboxType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BASE_INBOX_TYPE}
31 isJoinedType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.JOINED_TYPE}
32 isUnsupportedMessageType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.UNSUPPORTED_MESSAGE_TYPE}
33 isInvalidMessageType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.INVALID_MESSAGE_TYPE}
34 isBadDecryptType:${type and MessageTypes.BASE_TYPE_MASK == MessageTypes.BAD_DECRYPT_TYPE}
35 isSecureType:${type and MessageTypes.SECURE_MESSAGE_BIT != 0L}
36 isPushType:${type and MessageTypes.PUSH_MESSAGE_BIT != 0L}
37 isEndSessionType:${type and MessageTypes.END_SESSION_BIT != 0L}
38 isKeyExchangeType:${type and MessageTypes.KEY_EXCHANGE_BIT != 0L}
39 isIdentityVerified:${type and MessageTypes.KEY_EXCHANGE_IDENTITY_VERIFIED_BIT != 0L}
40 isIdentityDefault:${type and MessageTypes.KEY_EXCHANGE_IDENTITY_DEFAULT_BIT != 0L}
41 isInvalidVersionKeyExchange:${type and MessageTypes.KEY_EXCHANGE_INVALID_VERSION_BIT != 0L}
42 isBundleKeyExchange:${type and MessageTypes.KEY_EXCHANGE_BUNDLE_BIT != 0L}
43 isIdentityUpdate:${type and MessageTypes.KEY_EXCHANGE_IDENTITY_UPDATE_BIT != 0L}
44 isRateLimited:${type and MessageTypes.MESSAGE_RATE_LIMITED_BIT != 0L}
45 isExpirationTimerUpdate:${type and MessageTypes.EXPIRATION_TIMER_UPDATE_BIT != 0L}
46 isIncomingAudioCall:${type == MessageTypes.INCOMING_AUDIO_CALL_TYPE}
47 isIncomingVideoCall:${type == MessageTypes.INCOMING_VIDEO_CALL_TYPE}
48 isOutgoingAudioCall:${type == MessageTypes.OUTGOING_AUDIO_CALL_TYPE}
49 isOutgoingVideoCall:${type == MessageTypes.OUTGOING_VIDEO_CALL_TYPE}
50 isMissedAudioCall:${type == MessageTypes.MISSED_AUDIO_CALL_TYPE}
51 isMissedVideoCall:${type == MessageTypes.MISSED_VIDEO_CALL_TYPE}
52 isGroupCall:${type == MessageTypes.GROUP_CALL_TYPE}
53 isGroupUpdate:${type and MessageTypes.GROUP_UPDATE_BIT != 0L}
54 isGroupV2:${type and MessageTypes.GROUP_V2_BIT != 0L}
55 isGroupQuit:${type and MessageTypes.GROUP_LEAVE_BIT != 0L && type and MessageTypes.GROUP_V2_BIT == 0L}
56 isChatSessionRefresh:${type and MessageTypes.ENCRYPTION_REMOTE_FAILED_BIT != 0L}
57 isDuplicateMessageType:${type and MessageTypes.ENCRYPTION_REMOTE_DUPLICATE_BIT != 0L}
58 isDecryptInProgressType:${type and 0x40000000 != 0L}
59 isNoRemoteSessionType:${type and MessageTypes.ENCRYPTION_REMOTE_NO_SESSION_BIT != 0L}
60 isLegacyType:${type and MessageTypes.ENCRYPTION_REMOTE_LEGACY_BIT != 0L || type and MessageTypes.ENCRYPTION_REMOTE_BIT != 0L}
61 isProfileChange:${type == MessageTypes.PROFILE_CHANGE_TYPE}
62 isGroupV1MigrationEvent:${type == MessageTypes.GV1_MIGRATION_TYPE}
63 isChangeNumber:${type == MessageTypes.CHANGE_NUMBER_TYPE}
64 isBoostRequest:${type == MessageTypes.BOOST_REQUEST_TYPE}
65 isThreadMerge:${type == MessageTypes.THREAD_MERGE_TYPE}
66 isSmsExport:${type == MessageTypes.SMS_EXPORT_TYPE}
67 isGroupV2LeaveOnly:${type and MessageTypes.GROUP_V2_LEAVE_BITS == MessageTypes.GROUP_V2_LEAVE_BITS}
68 isSpecialType:${type and MessageTypes.SPECIAL_TYPES_MASK != 0L}
69 isStoryReaction:${type and MessageTypes.SPECIAL_TYPES_MASK == MessageTypes.SPECIAL_TYPE_STORY_REACTION}
70 isGiftBadge:${type and MessageTypes.SPECIAL_TYPES_MASK == MessageTypes.SPECIAL_TYPE_GIFT_BADGE}
71 isPaymentsNotificaiton:${type and MessageTypes.SPECIAL_TYPES_MASK == MessageTypes.SPECIAL_TYPE_PAYMENTS_NOTIFICATION}
72 isRequestToActivatePayments:${type and MessageTypes.SPECIAL_TYPES_MASK == MessageTypes.SPECIAL_TYPE_PAYMENTS_ACTIVATE_REQUEST}
73 isPaymentsActivated:${type and MessageTypes.SPECIAL_TYPES_MASK == MessageTypes.SPECIAL_TYPE_PAYMENTS_ACTIVATED}
74 """.trimIndent().replace(Regex("is[A-Z][A-Za-z0-9]*:false\n?"), "").replace("\n", "")
75 }
76}