mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-11-22 06:37:30 +00:00
pluralize dm recipient options
as used in the official client
This commit is contained in:
parent
95b90ab72f
commit
e89c1ac9ef
@ -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<DirectThreadParticipantRequestsResponse?>(null)
|
||||
val pendingRequests: LiveData<DirectThreadParticipantRequestsResponse?> = _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
|
||||
|
@ -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<String, String>
|
||||
|
@ -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<String>?
|
||||
get() = threadIdOrUserIds.userIds
|
||||
val threadIds: List<String>?
|
||||
get() = threadIdsOrUserIds.threadIds
|
||||
val userIds: List<List<String>>?
|
||||
get() = threadIdsOrUserIds.userIds
|
||||
|
||||
abstract val formMap: Map<String, String>
|
||||
}
|
||||
|
||||
// TODO convert to data class once usages are migrated to kotlin
|
||||
class ThreadIdOrUserIds(val threadId: String? = null, val userIds: List<String>? = null) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun of(threadId: String?): ThreadIdOrUserIds {
|
||||
return ThreadIdOrUserIds(threadId, null)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun of(userIds: List<String>?): ThreadIdOrUserIds {
|
||||
return ThreadIdOrUserIds(null, userIds)
|
||||
}
|
||||
}
|
||||
}
|
@ -5,12 +5,12 @@ import org.json.JSONArray
|
||||
|
||||
class LinkBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
threadIdsOrUserIds: ThreadIdsOrUserIds,
|
||||
val linkText: String,
|
||||
val urls: List<String>
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
threadIdsOrUserIds,
|
||||
BroadcastItemType.LINK
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
|
@ -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<String, String>
|
||||
|
@ -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<String, String>
|
||||
|
@ -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<String, String>
|
||||
get() = listOfNotNull(
|
||||
"item_id" to itemId,
|
||||
|
@ -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<String, String>
|
||||
get() = mapOf(
|
||||
"text" to text,
|
||||
|
@ -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<String, String>
|
||||
|
@ -0,0 +1,14 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
data class ThreadIdsOrUserIds(val threadIds: List<String>? = null, val userIds: List<List<String>>? = 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)))
|
||||
}
|
||||
}
|
||||
}
|
@ -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<String, String>
|
||||
|
@ -5,11 +5,11 @@ import org.json.JSONArray
|
||||
|
||||
class VoiceBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
threadIdsOrUserIds: ThreadIdsOrUserIds,
|
||||
val uploadId: String,
|
||||
val waveform: List<Float>,
|
||||
val waveformSamplingFrequencyHz: Int
|
||||
) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.VOICE) {
|
||||
) : BroadcastOptions(clientContext, threadIdsOrUserIds, BroadcastItemType.VOICE) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"waveform" to JSONArray(waveform).toString(),
|
||||
|
@ -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<String>,
|
||||
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<Float>,
|
||||
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()) {
|
||||
|
Loading…
Reference in New Issue
Block a user