From e89c1ac9ef47e3f28c5d8f0580c7cd5cc02b29ea Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Mon, 14 Jun 2021 21:12:52 -0400 Subject: [PATCH] pluralize dm recipient options as used in the official client --- .../instagrabber/managers/ThreadManager.kt | 20 ++++----- .../AnimatedMediaBroadcastOptions.kt | 4 +- .../directmessages/BroadcastOptions.kt | 26 +++-------- .../directmessages/LinkBroadcastOptions.kt | 4 +- .../MediaShareBroadcastOptions.kt | 4 +- .../directmessages/PhotoBroadcastOptions.kt | 4 +- .../ReactionBroadcastOptions.kt | 4 +- .../StoryReplyBroadcastOptions.kt | 4 +- .../directmessages/TextBroadcastOptions.kt | 4 +- .../directmessages/ThreadIdsOrUserIds.kt | 14 ++++++ .../directmessages/VideoBroadcastOptions.kt | 4 +- .../directmessages/VoiceBroadcastOptions.kt | 4 +- .../webservices/DirectMessagesService.kt | 44 +++++++++---------- 13 files changed, 69 insertions(+), 71 deletions(-) create mode 100644 app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ThreadIdsOrUserIds.kt diff --git a/app/src/main/java/awais/instagrabber/managers/ThreadManager.kt b/app/src/main/java/awais/instagrabber/managers/ThreadManager.kt index 22f1a140..88517de9 100644 --- a/app/src/main/java/awais/instagrabber/managers/ThreadManager.kt +++ b/app/src/main/java/awais/instagrabber/managers/ThreadManager.kt @@ -17,8 +17,8 @@ import awais.instagrabber.models.Resource.Companion.success import awais.instagrabber.models.enums.DirectItemType import awais.instagrabber.repositories.requests.UploadFinishOptions import awais.instagrabber.repositories.requests.VideoOptions -import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds -import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds.Companion.of +import awais.instagrabber.repositories.requests.directmessages.ThreadIdsOrUserIds +import awais.instagrabber.repositories.requests.directmessages.ThreadIdsOrUserIds.Companion.of import awais.instagrabber.repositories.responses.User import awais.instagrabber.repositories.responses.directmessages.* import awais.instagrabber.repositories.responses.giphy.GiphyGif @@ -61,7 +61,7 @@ class ThreadManager( private val _pendingRequests = MutableLiveData(null) val pendingRequests: LiveData = _pendingRequests private val inboxManager: InboxManager = if (pending) DirectMessagesManager.pendingInboxManager else DirectMessagesManager.inboxManager - private val threadIdOrUserIds: ThreadIdOrUserIds = of(threadId) + private val threadIdsOrUserIds: ThreadIdsOrUserIds = of(threadId) private val friendshipRepository: FriendshipRepository by lazy { FriendshipRepository.getInstance() } private val mediaRepository: MediaRepository by lazy { MediaRepository.getInstance() } @@ -353,7 +353,7 @@ class ThreadManager( viewerId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, text, repliedToItemId, repliedToClientContext @@ -411,7 +411,7 @@ class ThreadManager( userId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, giphyGif ) parseResponse(request, data, directItem) @@ -460,7 +460,7 @@ class ThreadManager( viewerId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, uploadDmVoiceOptions.uploadId, waveform, samplingFreq @@ -504,7 +504,7 @@ class ThreadManager( userId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, itemId, emojiUnicode, false @@ -544,7 +544,7 @@ class ThreadManager( viewerId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, itemId1, null, true @@ -732,7 +732,7 @@ class ThreadManager( if (handleInvalidResponse(data, response)) return@launch val response1 = response.response ?: return@launch val uploadId = response1.optString("upload_id") - val response2 = DirectMessagesService.broadcastPhoto(csrfToken, viewerId, deviceUuid, clientContext, threadIdOrUserIds, uploadId) + val response2 = DirectMessagesService.broadcastPhoto(csrfToken, viewerId, deviceUuid, clientContext, threadIdsOrUserIds, uploadId) parseResponse(response2, data, directItem) } catch (e: Exception) { data.postValue(error(e.message, null)) @@ -798,7 +798,7 @@ class ThreadManager( viewerId, deviceUuid, clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, uploadDmVideoOptions.uploadId, "", true diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/AnimatedMediaBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/AnimatedMediaBroadcastOptions.kt index 0c30d278..a0f1b74c 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/AnimatedMediaBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/AnimatedMediaBroadcastOptions.kt @@ -5,11 +5,11 @@ import awais.instagrabber.repositories.responses.giphy.GiphyGif class AnimatedMediaBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val giphyGif: GiphyGif ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.ANIMATED_MEDIA ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/BroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/BroadcastOptions.kt index 8c772074..55841b6a 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/BroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/BroadcastOptions.kt @@ -4,31 +4,15 @@ import awais.instagrabber.models.enums.BroadcastItemType sealed class BroadcastOptions( val clientContext: String, - private val threadIdOrUserIds: ThreadIdOrUserIds, + private val threadIdsOrUserIds: ThreadIdsOrUserIds, val itemType: BroadcastItemType ) { var repliedToItemId: String? = null var repliedToClientContext: String? = null - val threadId: String? - get() = threadIdOrUserIds.threadId - val userIds: List? - get() = threadIdOrUserIds.userIds + val threadIds: List? + get() = threadIdsOrUserIds.threadIds + val userIds: List>? + get() = threadIdsOrUserIds.userIds abstract val formMap: Map -} - -// TODO convert to data class once usages are migrated to kotlin -class ThreadIdOrUserIds(val threadId: String? = null, val userIds: List? = null) { - - companion object { - @JvmStatic - fun of(threadId: String?): ThreadIdOrUserIds { - return ThreadIdOrUserIds(threadId, null) - } - - @JvmStatic - fun of(userIds: List?): ThreadIdOrUserIds { - return ThreadIdOrUserIds(null, userIds) - } - } } \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/LinkBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/LinkBroadcastOptions.kt index 5cbf4155..64257d68 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/LinkBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/LinkBroadcastOptions.kt @@ -5,12 +5,12 @@ import org.json.JSONArray class LinkBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val linkText: String, val urls: List ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.LINK ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/MediaShareBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/MediaShareBroadcastOptions.kt index 00f122b8..89b74998 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/MediaShareBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/MediaShareBroadcastOptions.kt @@ -4,11 +4,11 @@ import awais.instagrabber.models.enums.BroadcastItemType class MediaShareBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val mediaId: String ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.MEDIA_SHARE ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/PhotoBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/PhotoBroadcastOptions.kt index b09b673d..0a7ed212 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/PhotoBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/PhotoBroadcastOptions.kt @@ -4,12 +4,12 @@ import awais.instagrabber.models.enums.BroadcastItemType class PhotoBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val allowFullAspectRatio: Boolean, val uploadId: String ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.IMAGE ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ReactionBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ReactionBroadcastOptions.kt index 7aacdc5f..0598e927 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ReactionBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ReactionBroadcastOptions.kt @@ -4,11 +4,11 @@ import awais.instagrabber.models.enums.BroadcastItemType class ReactionBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val itemId: String, val emoji: String?, val delete: Boolean -) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.REACTION) { +) : BroadcastOptions(clientContext, threadIdsOrUserIds, BroadcastItemType.REACTION) { override val formMap: Map get() = listOfNotNull( "item_id" to itemId, diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/StoryReplyBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/StoryReplyBroadcastOptions.kt index 2ac32eb2..48dec941 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/StoryReplyBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/StoryReplyBroadcastOptions.kt @@ -4,11 +4,11 @@ import awais.instagrabber.models.enums.BroadcastItemType class StoryReplyBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val text: String, val mediaId: String, val reelId: String // or user id, usually same -) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.REELSHARE) { +) : BroadcastOptions(clientContext, threadIdsOrUserIds, BroadcastItemType.REELSHARE) { override val formMap: Map get() = mapOf( "text" to text, diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/TextBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/TextBroadcastOptions.kt index 2273b68f..d128084f 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/TextBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/TextBroadcastOptions.kt @@ -4,11 +4,11 @@ import awais.instagrabber.models.enums.BroadcastItemType class TextBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val text: String ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.TEXT ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ThreadIdsOrUserIds.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ThreadIdsOrUserIds.kt new file mode 100644 index 00000000..0a200f17 --- /dev/null +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/ThreadIdsOrUserIds.kt @@ -0,0 +1,14 @@ +package awais.instagrabber.repositories.requests.directmessages + +data class ThreadIdsOrUserIds(val threadIds: List? = null, val userIds: List>? = null) { + companion object { + @JvmStatic + fun of(threadId: String): ThreadIdsOrUserIds { + return ThreadIdsOrUserIds(listOf(threadId), null) + } + + fun ofOneUser(userId: String): ThreadIdsOrUserIds { + return ThreadIdsOrUserIds(null, listOf(listOf(userId))) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VideoBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VideoBroadcastOptions.kt index ab614431..edb437a8 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VideoBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VideoBroadcastOptions.kt @@ -4,13 +4,13 @@ import awais.instagrabber.models.enums.BroadcastItemType class VideoBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val videoResult: String, val uploadId: String, val sampled: Boolean ) : BroadcastOptions( clientContext, - threadIdOrUserIds, + threadIdsOrUserIds, BroadcastItemType.VIDEO ) { override val formMap: Map diff --git a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VoiceBroadcastOptions.kt b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VoiceBroadcastOptions.kt index bc8e806f..8ff69119 100644 --- a/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VoiceBroadcastOptions.kt +++ b/app/src/main/java/awais/instagrabber/repositories/requests/directmessages/VoiceBroadcastOptions.kt @@ -5,11 +5,11 @@ import org.json.JSONArray class VoiceBroadcastOptions( clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, val uploadId: String, val waveform: List, val waveformSamplingFrequencyHz: Int -) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.VOICE) { +) : BroadcastOptions(clientContext, threadIdsOrUserIds, BroadcastItemType.VOICE) { override val formMap: Map get() = mapOf( "waveform" to JSONArray(waveform).toString(), diff --git a/app/src/main/java/awais/instagrabber/webservices/DirectMessagesService.kt b/app/src/main/java/awais/instagrabber/webservices/DirectMessagesService.kt index 295faf28..de2cead6 100644 --- a/app/src/main/java/awais/instagrabber/webservices/DirectMessagesService.kt +++ b/app/src/main/java/awais/instagrabber/webservices/DirectMessagesService.kt @@ -54,16 +54,16 @@ object DirectMessagesService { userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, text: String, repliedToItemId: String?, repliedToClientContext: String?, ): DirectThreadBroadcastResponse { val urls = extractUrls(text) if (urls.isNotEmpty()) { - return broadcastLink(csrfToken, userId, deviceUuid, clientContext, threadIdOrUserIds, text, urls, repliedToItemId, repliedToClientContext) + return broadcastLink(csrfToken, userId, deviceUuid, clientContext, threadIdsOrUserIds, text, urls, repliedToItemId, repliedToClientContext) } - val broadcastOptions = TextBroadcastOptions(clientContext, threadIdOrUserIds, text) + val broadcastOptions = TextBroadcastOptions(clientContext, threadIdsOrUserIds, text) if (!repliedToItemId.isNullOrBlank() && !repliedToClientContext.isNullOrBlank()) { broadcastOptions.repliedToItemId = repliedToItemId broadcastOptions.repliedToClientContext = repliedToClientContext @@ -76,13 +76,13 @@ object DirectMessagesService { userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, linkText: String, urls: List, repliedToItemId: String?, repliedToClientContext: String?, ): DirectThreadBroadcastResponse { - val broadcastOptions = LinkBroadcastOptions(clientContext, threadIdOrUserIds, linkText, urls) + val broadcastOptions = LinkBroadcastOptions(clientContext, threadIdsOrUserIds, linkText, urls) if (!repliedToItemId.isNullOrBlank() && !repliedToClientContext.isNullOrBlank()) { broadcastOptions.repliedToItemId = repliedToItemId broadcastOptions.repliedToClientContext = repliedToClientContext @@ -95,77 +95,77 @@ object DirectMessagesService { userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, uploadId: String, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, PhotoBroadcastOptions(clientContext, threadIdOrUserIds, true, uploadId)) + broadcast(csrfToken, userId, deviceUuid, PhotoBroadcastOptions(clientContext, threadIdsOrUserIds, true, uploadId)) suspend fun broadcastVideo( csrfToken: String, userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, uploadId: String, videoResult: String, sampled: Boolean, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, VideoBroadcastOptions(clientContext, threadIdOrUserIds, videoResult, uploadId, sampled)) + broadcast(csrfToken, userId, deviceUuid, VideoBroadcastOptions(clientContext, threadIdsOrUserIds, videoResult, uploadId, sampled)) suspend fun broadcastVoice( csrfToken: String, userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, uploadId: String, waveform: List, samplingFreq: Int, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, VoiceBroadcastOptions(clientContext, threadIdOrUserIds, uploadId, waveform, samplingFreq)) + broadcast(csrfToken, userId, deviceUuid, VoiceBroadcastOptions(clientContext, threadIdsOrUserIds, uploadId, waveform, samplingFreq)) suspend fun broadcastStoryReply( csrfToken: String, userId: Long, deviceUuid: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, text: String, mediaId: String, reelId: String, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, StoryReplyBroadcastOptions(UUID.randomUUID().toString(), threadIdOrUserIds, text, mediaId, reelId)) + broadcast(csrfToken, userId, deviceUuid, StoryReplyBroadcastOptions(UUID.randomUUID().toString(), threadIdsOrUserIds, text, mediaId, reelId)) suspend fun broadcastReaction( csrfToken: String, userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, itemId: String, emoji: String?, delete: Boolean, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, ReactionBroadcastOptions(clientContext, threadIdOrUserIds, itemId, emoji, delete)) + broadcast(csrfToken, userId, deviceUuid, ReactionBroadcastOptions(clientContext, threadIdsOrUserIds, itemId, emoji, delete)) suspend fun broadcastAnimatedMedia( csrfToken: String, userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, giphyGif: GiphyGif, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, AnimatedMediaBroadcastOptions(clientContext, threadIdOrUserIds, giphyGif)) + broadcast(csrfToken, userId, deviceUuid, AnimatedMediaBroadcastOptions(clientContext, threadIdsOrUserIds, giphyGif)) suspend fun broadcastMediaShare( csrfToken: String, userId: Long, deviceUuid: String, clientContext: String, - threadIdOrUserIds: ThreadIdOrUserIds, + threadIdsOrUserIds: ThreadIdsOrUserIds, mediaId: String, ): DirectThreadBroadcastResponse = - broadcast(csrfToken, userId, deviceUuid, MediaShareBroadcastOptions(clientContext, threadIdOrUserIds, mediaId)) + broadcast(csrfToken, userId, deviceUuid, MediaShareBroadcastOptions(clientContext, threadIdsOrUserIds, mediaId)) private suspend fun broadcast( csrfToken: String, @@ -181,9 +181,9 @@ object DirectMessagesService { "client_context" to broadcastOptions.clientContext, "mutation_token" to broadcastOptions.clientContext, ) - val threadId = broadcastOptions.threadId - if (!threadId.isNullOrBlank()) { - form["thread_id"] = threadId + val threadIds = broadcastOptions.threadIds + if (!threadIds.isNullOrEmpty()) { + form["thread_ids"] = JSONArray(threadIds).toString() } else { val userIds = broadcastOptions.userIds require(!userIds.isNullOrEmpty()) {