From 1bba8dc0657b45c11bc969832d92390fec6ce253 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Mon, 5 Jul 2021 16:31:47 -0400 Subject: [PATCH] share story via dm (backend) --- .../managers/DirectMessagesManager.kt | 53 +++++++++++++++++-- .../StoryReplyBroadcastOptions.kt | 2 +- .../webservices/DirectMessagesRepository.kt | 11 ++++ 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/managers/DirectMessagesManager.kt b/app/src/main/java/awais/instagrabber/managers/DirectMessagesManager.kt index 34df42d4..69d2afa9 100644 --- a/app/src/main/java/awais/instagrabber/managers/DirectMessagesManager.kt +++ b/app/src/main/java/awais/instagrabber/managers/DirectMessagesManager.kt @@ -102,8 +102,8 @@ object DirectMessagesManager { data.postValue(loading(null)) scope.launch(Dispatchers.IO) { try { - if (itemType == BroadcastItemType.MEDIA_SHARE) - directMessagesRepository.broadcastMediaShare( + when (itemType) { + BroadcastItemType.MEDIA_SHARE -> directMessagesRepository.broadcastMediaShare( csrfToken, viewerId, deviceUuid, @@ -112,8 +112,7 @@ object DirectMessagesManager { mediaId, secondId ) - if (itemType == BroadcastItemType.PROFILE) - directMessagesRepository.broadcastProfile( + BroadcastItemType.PROFILE -> directMessagesRepository.broadcastProfile( csrfToken, viewerId, deviceUuid, @@ -121,6 +120,16 @@ object DirectMessagesManager { ThreadIdsOrUserIds(threadIds, userIds), mediaId ) + BroadcastItemType.STORY -> directMessagesRepository.broadcastStory( + csrfToken, + viewerId, + deviceUuid, + UUID.randomUUID().toString(), + ThreadIdsOrUserIds(threadIds, userIds), + mediaId, + secondId!! + ) + } data.postValue(success(Any())) callback?.invoke() } catch (e: Exception) { @@ -132,6 +141,42 @@ object DirectMessagesManager { return data } + fun replyToStory( + recipientId: Long?, + reelId: String?, + mediaId: String?, + text: String, + scope: CoroutineScope + ): LiveData> { + Log.d("austin_debug", "replying") + val data = MutableLiveData>() + data.postValue(loading(null)) + if (recipientId == null || reelId == null || mediaId == null) { + data.postValue(error("arguments are null", null)) + return data + } + scope.launch(Dispatchers.IO) { + try { + directMessagesRepository.broadcastStoryReply( + csrfToken, + viewerId, + deviceUuid, + ThreadIdsOrUserIds.Companion.ofOneUser(recipientId.toString(10)), + text, + mediaId, + reelId + ) + inboxManager.refresh(scope) + data.postValue(success(null)) + } + catch (e: Exception) { + Log.e(TAG, "story reply: ", e) + data.postValue(error(e.message, null)) + } + } + return data + } + init { val cookie = Utils.settingsHelper.getString(Constants.COOKIE) viewerId = getUserIdFromCookie(cookie) 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 48dec941..5de0991c 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 @@ -7,7 +7,7 @@ class StoryReplyBroadcastOptions( threadIdsOrUserIds: ThreadIdsOrUserIds, val text: String, val mediaId: String, - val reelId: String // or user id, usually same + val reelId: String ) : BroadcastOptions(clientContext, threadIdsOrUserIds, BroadcastItemType.REELSHARE) { override val formMap: Map get() = mapOf( diff --git a/app/src/main/java/awais/instagrabber/webservices/DirectMessagesRepository.kt b/app/src/main/java/awais/instagrabber/webservices/DirectMessagesRepository.kt index f21d35da..b3a12280 100644 --- a/app/src/main/java/awais/instagrabber/webservices/DirectMessagesRepository.kt +++ b/app/src/main/java/awais/instagrabber/webservices/DirectMessagesRepository.kt @@ -187,6 +187,17 @@ open class DirectMessagesRepository(private val service: DirectMessagesService) ): DirectThreadBroadcastResponse = broadcast(csrfToken, userId, deviceUuid, ProfileBroadcastOptions(clientContext, threadIdsOrUserIds, profileId)) + suspend fun broadcastStory( + csrfToken: String, + userId: Long, + deviceUuid: String, + clientContext: String, + threadIdsOrUserIds: ThreadIdsOrUserIds, + mediaId: String, + reelId: String, + ): DirectThreadBroadcastResponse = + broadcast(csrfToken, userId, deviceUuid, StoryBroadcastOptions(clientContext, threadIdsOrUserIds, mediaId, reelId)) + private suspend fun broadcast( csrfToken: String, userId: Long,