mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-12-23 05:16:58 +00:00
Convert to kotlin
This commit is contained in:
parent
333e0faed5
commit
d7462109db
@ -58,7 +58,6 @@ import com.google.android.exoplayer2.source.dash.DashMediaSource;
|
||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -86,7 +85,7 @@ import awais.instagrabber.models.stickers.SliderModel;
|
||||
import awais.instagrabber.models.stickers.SwipeUpModel;
|
||||
import awais.instagrabber.repositories.requests.StoryViewerOptions;
|
||||
import awais.instagrabber.repositories.requests.StoryViewerOptions.Type;
|
||||
import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.responses.Media;
|
||||
import awais.instagrabber.repositories.responses.StoryStickerResponse;
|
||||
import awais.instagrabber.repositories.responses.directmessages.DirectThread;
|
||||
@ -233,35 +232,32 @@ public class StoryViewerFragment extends Fragment {
|
||||
return;
|
||||
}
|
||||
final DirectThread thread = response.body();
|
||||
try {
|
||||
final Call<DirectThreadBroadcastResponse> request = directMessagesService
|
||||
.broadcastStoryReply(BroadcastOptions.ThreadIdOrUserIds.of(thread.getThreadId()),
|
||||
input.getText().toString(),
|
||||
currentStory.getStoryMediaId(),
|
||||
String.valueOf(currentStory.getUserId()));
|
||||
request.enqueue(new Callback<DirectThreadBroadcastResponse>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull final Call<DirectThreadBroadcastResponse> call,
|
||||
@NonNull final Response<DirectThreadBroadcastResponse> response) {
|
||||
if (!response.isSuccessful()) {
|
||||
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Toast.makeText(context, R.string.answered_story, Toast.LENGTH_SHORT).show();
|
||||
final Call<DirectThreadBroadcastResponse> request = directMessagesService.broadcastStoryReply(
|
||||
ThreadIdOrUserIds.of(thread.getThreadId()),
|
||||
input.getText().toString(),
|
||||
currentStory.getStoryMediaId(),
|
||||
String.valueOf(currentStory.getUserId())
|
||||
);
|
||||
request.enqueue(new Callback<DirectThreadBroadcastResponse>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull final Call<DirectThreadBroadcastResponse> call,
|
||||
@NonNull final Response<DirectThreadBroadcastResponse> response) {
|
||||
if (!response.isSuccessful()) {
|
||||
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Toast.makeText(context, R.string.answered_story, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull final Call<DirectThreadBroadcastResponse> call, @NonNull final Throwable t) {
|
||||
try {
|
||||
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||
Log.e(TAG, "onFailure: ", t);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
@Override
|
||||
public void onFailure(@NonNull final Call<DirectThreadBroadcastResponse> call, @NonNull final Throwable t) {
|
||||
try {
|
||||
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||
Log.e(TAG, "onFailure: ", t);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
});
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.e(TAG, "Error", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -266,7 +266,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
|
||||
|
||||
@Override
|
||||
public void onReaction(final DirectItem item, final Emoji emoji) {
|
||||
if (item == null) return;
|
||||
if (item == null || emoji == null) return;
|
||||
final LiveData<Resource<Object>> resourceLiveData = viewModel.sendReaction(item, emoji);
|
||||
if (resourceLiveData != null) {
|
||||
resourceLiveData.observe(getViewLifecycleOwner(), directItemResource -> handleSentMessage(resourceLiveData));
|
||||
@ -1487,7 +1487,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
|
||||
if (reactionDialogFragment != null) {
|
||||
reactionDialogFragment.dismiss();
|
||||
}
|
||||
if (reaction == null) return;
|
||||
if (itemId == null || reaction == null) return;
|
||||
if (reaction.getSenderId() == viewModel.getViewerId()) {
|
||||
final LiveData<Resource<Object>> resourceLiveData = viewModel.sendDeleteReaction(itemId);
|
||||
if (resourceLiveData != null) {
|
||||
@ -1509,7 +1509,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
|
||||
|
||||
@Override
|
||||
public void onClick(final View view, final Emoji emoji) {
|
||||
if (addReactionItem == null) return;
|
||||
if (addReactionItem == null || emoji == null) return;
|
||||
final LiveData<Resource<Object>> resourceLiveData = viewModel.sendReaction(addReactionItem, emoji);
|
||||
if (resourceLiveData != null) {
|
||||
resourceLiveData.observe(getViewLifecycleOwner(), directItemResource -> handleSentMessage(resourceLiveData));
|
||||
|
@ -19,7 +19,7 @@ import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
|
||||
import awais.instagrabber.models.Resource;
|
||||
import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.responses.User;
|
||||
import awais.instagrabber.repositories.responses.directmessages.DirectItem;
|
||||
import awais.instagrabber.repositories.responses.directmessages.DirectThread;
|
||||
@ -220,7 +220,7 @@ public final class DirectMessagesManager {
|
||||
data.postValue(Resource.loading(null));
|
||||
final Call<DirectThreadBroadcastResponse> request = service.broadcastMediaShare(
|
||||
UUID.randomUUID().toString(),
|
||||
BroadcastOptions.ThreadIdOrUserIds.of(threadId),
|
||||
ThreadIdOrUserIds.of(threadId),
|
||||
mediaId
|
||||
);
|
||||
request.enqueue(new Callback<DirectThreadBroadcastResponse>() {
|
||||
|
@ -40,7 +40,7 @@ import awais.instagrabber.models.Resource.Status;
|
||||
import awais.instagrabber.models.UploadVideoOptions;
|
||||
import awais.instagrabber.models.enums.DirectItemType;
|
||||
import awais.instagrabber.repositories.requests.UploadFinishOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.responses.FriendshipChangeResponse;
|
||||
import awais.instagrabber.repositories.responses.FriendshipRestrictResponse;
|
||||
import awais.instagrabber.repositories.responses.User;
|
||||
@ -485,8 +485,8 @@ public final class ThreadManager {
|
||||
inboxManager.addItemsToThread(threadId, index, items);
|
||||
}
|
||||
|
||||
private void addReaction(final DirectItem item, final Emoji emoji) {
|
||||
if (item == null || emoji == null || currentUser == null) return;
|
||||
private void addReaction(@NonNull final DirectItem item, @NonNull final Emoji emoji) {
|
||||
if (currentUser == null) return;
|
||||
final boolean isLike = emoji.getUnicode().equals("❤️");
|
||||
DirectItemReactions reactions = item.getReactions();
|
||||
if (reactions == null) {
|
||||
@ -737,7 +737,8 @@ public final class ThreadManager {
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public LiveData<Resource<Object>> sendReaction(final DirectItem item, final Emoji emoji) {
|
||||
public LiveData<Resource<Object>> sendReaction(@NonNull final DirectItem item,
|
||||
@NonNull final Emoji emoji) {
|
||||
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
||||
final Long userId = getCurrentUserId(data);
|
||||
if (userId == null) {
|
||||
@ -752,13 +753,23 @@ public final class ThreadManager {
|
||||
if (!emoji.getUnicode().equals("❤️")) {
|
||||
emojiUnicode = emoji.getUnicode();
|
||||
}
|
||||
final String itemId = item.getItemId();
|
||||
if (itemId == null) {
|
||||
data.postValue(Resource.error("itemId is null", null));
|
||||
return data;
|
||||
}
|
||||
final Call<DirectThreadBroadcastResponse> request = service.broadcastReaction(
|
||||
clientContext, threadIdOrUserIds, item.getItemId(), emojiUnicode, false);
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
itemId,
|
||||
emojiUnicode,
|
||||
false
|
||||
);
|
||||
handleBroadcastReactionRequest(data, item, request);
|
||||
return data;
|
||||
}
|
||||
|
||||
public LiveData<Resource<Object>> sendDeleteReaction(final String itemId) {
|
||||
public LiveData<Resource<Object>> sendDeleteReaction(@NonNull final String itemId) {
|
||||
final MutableLiveData<Resource<Object>> data = new MutableLiveData<>();
|
||||
final DirectItem item = getItem(itemId);
|
||||
if (item == null) {
|
||||
@ -773,7 +784,12 @@ public final class ThreadManager {
|
||||
}
|
||||
removeReaction(item);
|
||||
final String clientContext = UUID.randomUUID().toString();
|
||||
final Call<DirectThreadBroadcastResponse> request = service.broadcastReaction(clientContext, threadIdOrUserIds, item.getItemId(), null, true);
|
||||
final String itemId1 = item.getItemId();
|
||||
if (itemId1 == null) {
|
||||
data.postValue(Resource.error("itemId is null", null));
|
||||
return data;
|
||||
}
|
||||
final Call<DirectThreadBroadcastResponse> request = service.broadcastReaction(clientContext, threadIdOrUserIds, itemId1, null, true);
|
||||
handleBroadcastReactionRequest(data, item, request);
|
||||
return data;
|
||||
}
|
||||
|
@ -1,27 +1,20 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
import awais.instagrabber.repositories.responses.giphy.GiphyGif
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
import awais.instagrabber.repositories.responses.giphy.GiphyGif;
|
||||
|
||||
public class AnimatedMediaBroadcastOptions extends BroadcastOptions {
|
||||
|
||||
private final GiphyGif giphyGif;
|
||||
|
||||
public AnimatedMediaBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final GiphyGif giphyGif) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.ANIMATED_MEDIA);
|
||||
this.giphyGif = giphyGif;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
final Map<String, String> form = new HashMap<>();
|
||||
form.put("is_sticker", String.valueOf(giphyGif.isSticker()));
|
||||
form.put("id", giphyGif.getId());
|
||||
return form;
|
||||
}
|
||||
}
|
||||
class AnimatedMediaBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val giphyGif: GiphyGif
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.ANIMATED_MEDIA
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"is_sticker" to giphyGif.isSticker.toString(),
|
||||
"id" to giphyGif.id
|
||||
)
|
||||
}
|
@ -1,86 +1,34 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
sealed class BroadcastOptions(
|
||||
val clientContext: String,
|
||||
private val threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val itemType: BroadcastItemType
|
||||
) {
|
||||
var repliedToItemId: String? = null
|
||||
var repliedToClientContext: String? = null
|
||||
val threadId: String?
|
||||
get() = threadIdOrUserIds.threadId
|
||||
val userIds: List<String>?
|
||||
get() = threadIdOrUserIds.userIds
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public abstract class BroadcastOptions {
|
||||
|
||||
private final String clientContext;
|
||||
private final ThreadIdOrUserIds threadIdOrUserIds;
|
||||
private final BroadcastItemType itemType;
|
||||
|
||||
private String repliedToItemId;
|
||||
private String repliedToClientContext;
|
||||
|
||||
public BroadcastOptions(final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final BroadcastItemType itemType) {
|
||||
this.clientContext = clientContext;
|
||||
this.threadIdOrUserIds = threadIdOrUserIds;
|
||||
this.itemType = itemType;
|
||||
}
|
||||
|
||||
public String getClientContext() {
|
||||
return clientContext;
|
||||
}
|
||||
|
||||
public String getThreadId() {
|
||||
return threadIdOrUserIds.getThreadId();
|
||||
}
|
||||
|
||||
public List<String> getUserIds() {
|
||||
return threadIdOrUserIds.getUserIds();
|
||||
}
|
||||
|
||||
public BroadcastItemType getItemType() {
|
||||
return itemType;
|
||||
}
|
||||
|
||||
public abstract Map<String, String> getFormMap();
|
||||
|
||||
public String getRepliedToItemId() {
|
||||
return repliedToItemId;
|
||||
}
|
||||
|
||||
public void setRepliedToItemId(final String repliedToItemId) {
|
||||
this.repliedToItemId = repliedToItemId;
|
||||
}
|
||||
|
||||
public String getRepliedToClientContext() {
|
||||
return repliedToClientContext;
|
||||
}
|
||||
|
||||
public void setRepliedToClientContext(final String repliedToClientContext) {
|
||||
this.repliedToClientContext = repliedToClientContext;
|
||||
}
|
||||
|
||||
public static final class ThreadIdOrUserIds {
|
||||
private final String threadId;
|
||||
private final List<String> userIds;
|
||||
|
||||
private ThreadIdOrUserIds(final String threadId, final List<String> userIds) {
|
||||
this.threadId = threadId;
|
||||
this.userIds = userIds;
|
||||
}
|
||||
|
||||
public static ThreadIdOrUserIds of(final String threadId) {
|
||||
return new ThreadIdOrUserIds(threadId, null);
|
||||
}
|
||||
|
||||
public static ThreadIdOrUserIds of(final List<String> userIds) {
|
||||
return new ThreadIdOrUserIds(null, userIds);
|
||||
}
|
||||
|
||||
public String getThreadId() {
|
||||
return threadId;
|
||||
}
|
||||
|
||||
public List<String> getUserIds() {
|
||||
return 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)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,32 +1,21 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
import org.json.JSONArray
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public class LinkBroadcastOptions extends BroadcastOptions {
|
||||
private final String linkText;
|
||||
private final List<String> urls;
|
||||
|
||||
public LinkBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String linkText,
|
||||
final List<String> urls) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.LINK);
|
||||
this.linkText = linkText;
|
||||
this.urls = urls;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
return ImmutableMap.of(
|
||||
"link_text", linkText,
|
||||
"link_urls", new JSONArray(urls).toString()
|
||||
);
|
||||
}
|
||||
}
|
||||
class LinkBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val linkText: String,
|
||||
val urls: List<String>
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.LINK
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"link_text" to linkText,
|
||||
"link_urls" to JSONArray(urls).toString()
|
||||
)
|
||||
}
|
@ -3,7 +3,7 @@ package awais.instagrabber.repositories.requests.directmessages
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
class MediaShareBroadcastOptions(
|
||||
clientContext: String?,
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val mediaId: String
|
||||
) : BroadcastOptions(
|
||||
@ -11,8 +11,6 @@ class MediaShareBroadcastOptions(
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.MEDIA_SHARE
|
||||
) {
|
||||
|
||||
override fun getFormMap(): Map<String, String> {
|
||||
return mapOf("media_id" to mediaId)
|
||||
}
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf("media_id" to mediaId)
|
||||
}
|
@ -1,28 +1,20 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public class PhotoBroadcastOptions extends BroadcastOptions {
|
||||
final boolean allowFullAspectRatio;
|
||||
final String uploadId;
|
||||
|
||||
public PhotoBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final boolean allowFullAspectRatio,
|
||||
final String uploadId) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.IMAGE);
|
||||
this.allowFullAspectRatio = allowFullAspectRatio;
|
||||
this.uploadId = uploadId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
final Map<String, String> form = new HashMap<>();
|
||||
form.put("allow_full_aspect_ratio", String.valueOf(allowFullAspectRatio));
|
||||
form.put("upload_id", uploadId);
|
||||
return form;
|
||||
}
|
||||
}
|
||||
class PhotoBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val allowFullAspectRatio: Boolean,
|
||||
val uploadId: String
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.IMAGE
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"allow_full_aspect_ratio" to allowFullAspectRatio.toString(),
|
||||
"upload_id" to uploadId
|
||||
)
|
||||
}
|
@ -1,36 +1,19 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
|
||||
public class ReactionBroadcastOptions extends BroadcastOptions {
|
||||
private final String itemId;
|
||||
private final String emoji;
|
||||
private final boolean delete;
|
||||
|
||||
public ReactionBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String itemId,
|
||||
final String emoji,
|
||||
final boolean delete) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.REACTION);
|
||||
this.itemId = itemId;
|
||||
this.emoji = emoji;
|
||||
this.delete = delete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
final Map<String, String> form = new HashMap<>();
|
||||
form.put("item_id", itemId);
|
||||
form.put("reaction_status", delete ? "deleted" : "created");
|
||||
form.put("reaction_type", "like");
|
||||
if (!TextUtils.isEmpty(emoji)) {
|
||||
form.put("emoji", emoji);
|
||||
}
|
||||
return form;
|
||||
}
|
||||
}
|
||||
class ReactionBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val itemId: String,
|
||||
val emoji: String?,
|
||||
val delete: Boolean
|
||||
) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.REACTION) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = listOfNotNull(
|
||||
"item_id" to itemId,
|
||||
"reaction_status" to if (delete) "deleted" else "created",
|
||||
"reaction_type" to "like",
|
||||
if (!emoji.isNullOrBlank()) "emoji" to emoji else null,
|
||||
).toMap()
|
||||
}
|
@ -1,34 +1,19 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
|
||||
public class StoryReplyBroadcastOptions extends BroadcastOptions {
|
||||
private final String text, mediaId, reelId;
|
||||
|
||||
public StoryReplyBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String text,
|
||||
final String mediaId,
|
||||
final String reelId)
|
||||
throws UnsupportedEncodingException {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.REELSHARE);
|
||||
this.text = text;
|
||||
this.mediaId = mediaId;
|
||||
this.reelId = reelId; // or user id, usually same
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
final Map<String, String> form = new HashMap<>();
|
||||
form.put("text", text);
|
||||
form.put("media_id", mediaId);
|
||||
form.put("reel_id", reelId);
|
||||
form.put("entry", "reel");
|
||||
return form;
|
||||
}
|
||||
}
|
||||
class StoryReplyBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val text: String,
|
||||
val mediaId: String,
|
||||
val reelId: String // or user id, usually same
|
||||
) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.REELSHARE) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"text" to text,
|
||||
"media_id" to mediaId,
|
||||
"reel_id" to reelId,
|
||||
"entry" to "reel",
|
||||
)
|
||||
}
|
@ -1,22 +1,16 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public class TextBroadcastOptions extends BroadcastOptions {
|
||||
private final String text;
|
||||
|
||||
public TextBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String text) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.TEXT);
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
return Collections.singletonMap("text", text);
|
||||
}
|
||||
}
|
||||
class TextBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val text: String
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.TEXT
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf("text" to text)
|
||||
}
|
@ -1,33 +1,22 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public class VideoBroadcastOptions extends BroadcastOptions {
|
||||
private final String videoResult;
|
||||
private final String uploadId;
|
||||
private final boolean sampled;
|
||||
|
||||
public VideoBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String videoResult,
|
||||
final String uploadId,
|
||||
final boolean sampled) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.VIDEO);
|
||||
this.videoResult = videoResult;
|
||||
this.uploadId = uploadId;
|
||||
this.sampled = sampled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
return ImmutableMap.<String, String>of(
|
||||
"video_result", videoResult,
|
||||
"upload_id", uploadId,
|
||||
"sampled", String.valueOf(sampled)
|
||||
);
|
||||
}
|
||||
}
|
||||
class VideoBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val videoResult: String,
|
||||
val uploadId: String,
|
||||
val sampled: Boolean
|
||||
) : BroadcastOptions(
|
||||
clientContext,
|
||||
threadIdOrUserIds,
|
||||
BroadcastItemType.VIDEO
|
||||
) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"video_result" to videoResult,
|
||||
"upload_id" to uploadId,
|
||||
"sampled" to sampled.toString()
|
||||
)
|
||||
}
|
@ -1,36 +1,19 @@
|
||||
package awais.instagrabber.repositories.requests.directmessages;
|
||||
package awais.instagrabber.repositories.requests.directmessages
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import awais.instagrabber.models.enums.BroadcastItemType
|
||||
import org.json.JSONArray
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import awais.instagrabber.models.enums.BroadcastItemType;
|
||||
|
||||
public class VoiceBroadcastOptions extends BroadcastOptions {
|
||||
private final List<Float> waveform;
|
||||
private final String uploadId;
|
||||
private final int waveformSamplingFrequencyHz;
|
||||
|
||||
public VoiceBroadcastOptions(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String uploadId,
|
||||
final List<Float> waveform,
|
||||
final int waveformSamplingFrequencyHz) {
|
||||
super(clientContext, threadIdOrUserIds, BroadcastItemType.VOICE);
|
||||
this.waveform = waveform;
|
||||
this.uploadId = uploadId;
|
||||
this.waveformSamplingFrequencyHz = waveformSamplingFrequencyHz;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getFormMap() {
|
||||
return ImmutableMap.<String, String>of(
|
||||
"waveform", new JSONArray(waveform).toString(),
|
||||
"upload_id", uploadId,
|
||||
"waveform_sampling_frequency_hz", String.valueOf(waveformSamplingFrequencyHz)
|
||||
);
|
||||
}
|
||||
}
|
||||
class VoiceBroadcastOptions(
|
||||
clientContext: String,
|
||||
threadIdOrUserIds: ThreadIdOrUserIds,
|
||||
val uploadId: String,
|
||||
val waveform: List<Float>,
|
||||
val waveformSamplingFrequencyHz: Int
|
||||
) : BroadcastOptions(clientContext, threadIdOrUserIds, BroadcastItemType.VOICE) {
|
||||
override val formMap: Map<String, String>
|
||||
get() = mapOf(
|
||||
"waveform" to JSONArray(waveform).toString(),
|
||||
"upload_id" to uploadId,
|
||||
"waveform_sampling_frequency_hz" to waveformSamplingFrequencyHz.toString()
|
||||
)
|
||||
}
|
@ -214,11 +214,11 @@ public class DirectThreadViewModel extends AndroidViewModel {
|
||||
voiceRecorder = null;
|
||||
}
|
||||
|
||||
public LiveData<Resource<Object>> sendReaction(final DirectItem item, final Emoji emoji) {
|
||||
public LiveData<Resource<Object>> sendReaction(@NonNull final DirectItem item, @NonNull final Emoji emoji) {
|
||||
return threadManager.sendReaction(item, emoji);
|
||||
}
|
||||
|
||||
public LiveData<Resource<Object>> sendDeleteReaction(final String itemId) {
|
||||
public LiveData<Resource<Object>> sendDeleteReaction(@NonNull final String itemId) {
|
||||
return threadManager.sendDeleteReaction(itemId);
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,6 @@ import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -19,13 +18,13 @@ import java.util.stream.Collectors;
|
||||
import awais.instagrabber.repositories.DirectMessagesRepository;
|
||||
import awais.instagrabber.repositories.requests.directmessages.AnimatedMediaBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.requests.directmessages.LinkBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.MediaShareBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.PhotoBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.ReactionBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.StoryReplyBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.TextBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.ThreadIdOrUserIds;
|
||||
import awais.instagrabber.repositories.requests.directmessages.VideoBroadcastOptions;
|
||||
import awais.instagrabber.repositories.requests.directmessages.VoiceBroadcastOptions;
|
||||
import awais.instagrabber.repositories.responses.directmessages.DirectBadgeCount;
|
||||
@ -121,73 +120,77 @@ public class DirectMessagesService extends BaseService {
|
||||
return repository.fetchUnseenCount();
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastText(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String text,
|
||||
final String repliedToItemId,
|
||||
final String repliedToClientContext) {
|
||||
public Call<DirectThreadBroadcastResponse> broadcastText(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String text,
|
||||
@Nullable final String repliedToItemId,
|
||||
@Nullable final String repliedToClientContext) {
|
||||
final List<String> urls = TextUtils.extractUrls(text);
|
||||
if (!urls.isEmpty()) {
|
||||
return broadcastLink(clientContext, threadIdOrUserIds, text, urls, repliedToItemId, repliedToClientContext);
|
||||
}
|
||||
final TextBroadcastOptions broadcastOptions = new TextBroadcastOptions(clientContext, threadIdOrUserIds, text);
|
||||
broadcastOptions.setRepliedToItemId(repliedToItemId);
|
||||
broadcastOptions.setRepliedToClientContext(repliedToClientContext);
|
||||
if (repliedToItemId != null && repliedToClientContext != null) {
|
||||
broadcastOptions.setRepliedToItemId(repliedToItemId);
|
||||
broadcastOptions.setRepliedToClientContext(repliedToClientContext);
|
||||
}
|
||||
return broadcast(broadcastOptions);
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastLink(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String linkText,
|
||||
final List<String> urls,
|
||||
final String repliedToItemId,
|
||||
final String repliedToClientContext) {
|
||||
public Call<DirectThreadBroadcastResponse> broadcastLink(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String linkText,
|
||||
@NonNull final List<String> urls,
|
||||
@Nullable final String repliedToItemId,
|
||||
@Nullable final String repliedToClientContext) {
|
||||
final LinkBroadcastOptions broadcastOptions = new LinkBroadcastOptions(clientContext, threadIdOrUserIds, linkText, urls);
|
||||
broadcastOptions.setRepliedToItemId(repliedToItemId);
|
||||
broadcastOptions.setRepliedToClientContext(repliedToClientContext);
|
||||
if (repliedToItemId != null && repliedToClientContext != null) {
|
||||
broadcastOptions.setRepliedToItemId(repliedToItemId);
|
||||
broadcastOptions.setRepliedToClientContext(repliedToClientContext);
|
||||
}
|
||||
return broadcast(broadcastOptions);
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastPhoto(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String uploadId) {
|
||||
public Call<DirectThreadBroadcastResponse> broadcastPhoto(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String uploadId) {
|
||||
return broadcast(new PhotoBroadcastOptions(clientContext, threadIdOrUserIds, true, uploadId));
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastVideo(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String uploadId,
|
||||
final String videoResult,
|
||||
public Call<DirectThreadBroadcastResponse> broadcastVideo(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String uploadId,
|
||||
@NonNull final String videoResult,
|
||||
final boolean sampled) {
|
||||
return broadcast(new VideoBroadcastOptions(clientContext, threadIdOrUserIds, videoResult, uploadId, sampled));
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastVoice(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String uploadId,
|
||||
final List<Float> waveform,
|
||||
public Call<DirectThreadBroadcastResponse> broadcastVoice(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String uploadId,
|
||||
@NonNull final List<Float> waveform,
|
||||
final int samplingFreq) {
|
||||
return broadcast(new VoiceBroadcastOptions(clientContext, threadIdOrUserIds, uploadId, waveform, samplingFreq));
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastStoryReply(final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String text,
|
||||
final String mediaId,
|
||||
final String reelId) throws UnsupportedEncodingException {
|
||||
public Call<DirectThreadBroadcastResponse> broadcastStoryReply(@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String text,
|
||||
@NonNull final String mediaId,
|
||||
@NonNull final String reelId) {
|
||||
return broadcast(new StoryReplyBroadcastOptions(UUID.randomUUID().toString(), threadIdOrUserIds, text, mediaId, reelId));
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastReaction(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final String itemId,
|
||||
final String emoji,
|
||||
public Call<DirectThreadBroadcastResponse> broadcastReaction(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final String itemId,
|
||||
@Nullable final String emoji,
|
||||
final boolean delete) {
|
||||
return broadcast(new ReactionBroadcastOptions(clientContext, threadIdOrUserIds, itemId, emoji, delete));
|
||||
}
|
||||
|
||||
public Call<DirectThreadBroadcastResponse> broadcastAnimatedMedia(final String clientContext,
|
||||
final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
final GiphyGif giphyGif) {
|
||||
public Call<DirectThreadBroadcastResponse> broadcastAnimatedMedia(@NonNull final String clientContext,
|
||||
@NonNull final ThreadIdOrUserIds threadIdOrUserIds,
|
||||
@NonNull final GiphyGif giphyGif) {
|
||||
return broadcast(new AnimatedMediaBroadcastOptions(clientContext, threadIdOrUserIds, giphyGif));
|
||||
}
|
||||
|
||||
@ -456,8 +459,10 @@ public class DirectMessagesService extends BaseService {
|
||||
return repository.declineRequest(threadId, form);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Call<DirectItemSeenResponse> markAsSeen(@NonNull final String threadId,
|
||||
@NonNull final DirectItem directItem) {
|
||||
if (directItem.getItemId() == null) return null;
|
||||
final ImmutableMap<String, String> form = ImmutableMap.<String, String>builder()
|
||||
.put("_csrftoken", csrfToken)
|
||||
.put("_uuid", deviceUuid)
|
||||
|
Loading…
Reference in New Issue
Block a user