From c6bbc621f7ebb959573be23cb4413daed4e0e14a Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Sat, 13 Feb 2021 13:26:02 -0500 Subject: [PATCH] disable btndm --- app/build.gradle | 2 +- .../asyncs/CreateThreadAction.java | 91 ++++++++++--------- .../fragments/StoryViewerFragment.java | 8 +- .../fragments/main/ProfileFragment.java | 44 +++++---- 4 files changed, 83 insertions(+), 62 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7db7b24c..70943d90 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { targetSdkVersion 29 versionCode 58 - versionName '19.1.0' + versionName '19.1.0-a1' multiDexEnabled true diff --git a/app/src/main/java/awais/instagrabber/asyncs/CreateThreadAction.java b/app/src/main/java/awais/instagrabber/asyncs/CreateThreadAction.java index a38eee76..ba35ef7e 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/CreateThreadAction.java +++ b/app/src/main/java/awais/instagrabber/asyncs/CreateThreadAction.java @@ -3,77 +3,82 @@ package awais.instagrabber.asyncs; import android.os.AsyncTask; import android.util.Log; -import org.json.JSONObject; +import androidx.annotation.NonNull; import java.io.DataOutputStream; -import java.net.HttpURLConnection; -import java.net.URL; +import java.io.IOException; +import java.util.Collections; +import java.util.Locale; +import awais.instagrabber.repositories.responses.directmessages.DirectThread; import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.CookieUtils; import awais.instagrabber.utils.NetworkUtils; import awais.instagrabber.utils.Utils; +import awais.instagrabber.webservices.DirectMessagesService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; import static awais.instagrabber.utils.Utils.settingsHelper; -public class CreateThreadAction extends AsyncTask { +public class CreateThreadAction extends AsyncTask { private static final String TAG = "CommentAction"; private final String cookie; private final long userId; private final OnTaskCompleteListener onTaskCompleteListener; + private final DirectMessagesService directMessagesService; public CreateThreadAction(final String cookie, final long userId, final OnTaskCompleteListener onTaskCompleteListener) { this.cookie = cookie; this.userId = userId; this.onTaskCompleteListener = onTaskCompleteListener; + directMessagesService = DirectMessagesService.getInstance(CookieUtils.getCsrfTokenFromCookie(cookie), + CookieUtils.getUserIdFromCookie(cookie), + Utils.settingsHelper.getString(Constants.DEVICE_UUID)); } - protected String doInBackground(Void... lmao) { - final String url = "https://i.instagram.com/api/v1/direct_v2/create_group_thread/"; - HttpURLConnection urlConnection = null; - try { - urlConnection = (HttpURLConnection) new URL(url).openConnection(); - urlConnection.setRequestMethod("POST"); - urlConnection.setRequestProperty("User-Agent", Utils.settingsHelper.getString(Constants.APP_UA)); - urlConnection.setUseCaches(false); - final String urlParameters = Utils.sign("{\"_csrftoken\":\"" + cookie.split("csrftoken=")[1].split(";")[0] - + "\",\"_uid\":\"" + CookieUtils.getUserIdFromCookie(cookie) - + "\",\"__uuid\":\"" + settingsHelper.getString(Constants.DEVICE_UUID) - + "\",\"recipient_users\":\"[" + userId // <- string of array of number (not joking) - + "]\"}"); - urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - if (urlParameters != null) { - urlConnection.setRequestProperty("Content-Length", "" + urlParameters.getBytes().length); + protected Void doInBackground(Void... lmao) { + final Call createThreadRequest = directMessagesService.createThread(Collections.singletonList(userId), null); + createThreadRequest.enqueue(new Callback() { + @Override + public void onResponse(@NonNull final Call call, @NonNull final Response response) { + if (!response.isSuccessful()) { + if (response.errorBody() != null) { + try { + final String string = response.errorBody().string(); + final String msg = String.format(Locale.US, + "onResponse: url: %s, responseCode: %d, errorBody: %s", + call.request().url().toString(), + response.code(), + string); + Log.e(TAG, msg); + } catch (IOException e) { + Log.e(TAG, "onResponse: ", e); + } + } + Log.e(TAG, "onResponse: request was not successful and response error body was null"); + } + onTaskCompleteListener.onTaskComplete(response.body()); + if (response.body() == null) { + Log.e(TAG, "onResponse: thread is null"); + } } - urlConnection.setDoOutput(true); - DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); - wr.writeBytes(urlParameters); - wr.flush(); - wr.close(); - urlConnection.connect(); - if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { - return new JSONObject(NetworkUtils.readFromConnection(urlConnection)).getString("thread_id"); + + @Override + public void onFailure(@NonNull final Call call, @NonNull final Throwable t) { + onTaskCompleteListener.onTaskComplete(null); } - } catch (Throwable ex) { - Log.e(TAG, "reply (CT): " + ex); - } finally { - if (urlConnection != null) { - urlConnection.disconnect(); - } - } + }); return null; } - @Override - protected void onPostExecute(final String threadId) { - if (threadId == null || onTaskCompleteListener == null) { - return; - } - onTaskCompleteListener.onTaskComplete(threadId); - } +// @Override +// protected void onPostExecute() { +// } public interface OnTaskCompleteListener { - void onTaskComplete(final String threadId); + void onTaskComplete(final DirectThread thread); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java index 337f2754..c7345228 100644 --- a/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java @@ -216,10 +216,14 @@ public class StoryViewerFragment extends Fragment { new AlertDialog.Builder(context) .setTitle(R.string.reply_story) .setView(input) - .setPositiveButton(R.string.confirm, (d, w) -> new CreateThreadAction(cookie, currentStory.getUserId(), threadId -> { + .setPositiveButton(R.string.confirm, (d, w) -> new CreateThreadAction(cookie, currentStory.getUserId(), thread -> { + if (thread == null) { + Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + return; + } try { final Call request = directMessagesService - .broadcastStoryReply(BroadcastOptions.ThreadIdOrUserIds.of(threadId), + .broadcastStoryReply(BroadcastOptions.ThreadIdOrUserIds.of(thread.getThreadId()), input.getText().toString(), currentStory.getStoryMediaId(), String.valueOf(currentStory.getUserId())); diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index 55e52f1b..b66f626c 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -56,6 +56,7 @@ import awais.instagrabber.R; import awais.instagrabber.activities.MainActivity; import awais.instagrabber.adapters.FeedAdapterV2; import awais.instagrabber.adapters.HighlightsAdapter; +import awais.instagrabber.asyncs.CreateThreadAction; import awais.instagrabber.asyncs.ProfileFetcher; import awais.instagrabber.asyncs.ProfilePostFetchService; import awais.instagrabber.asyncs.UsernameFetcher; @@ -305,9 +306,9 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe final String deviceUuid = Utils.settingsHelper.getString(Constants.DEVICE_UUID); final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie); fragmentActivity = (MainActivity) requireActivity(); - friendshipService = FriendshipService.getInstance(deviceUuid, csrfToken, userId); - storiesService = StoriesService.getInstance(); - mediaService = MediaService.getInstance(null, null, 0); + friendshipService = isLoggedIn ? FriendshipService.getInstance(deviceUuid, csrfToken, userId) : null; + storiesService = isLoggedIn ? StoriesService.getInstance() : null; + mediaService = isLoggedIn ? MediaService.getInstance(null, null, 0) : null; accountRepository = AccountRepository.getInstance(AccountDataSource.getInstance(getContext())); favoriteRepository = FavoriteRepository.getInstance(FavoriteDataSource.getInstance(getContext())); setHasOptionsMenu(true); @@ -802,18 +803,19 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe private void setupButtons(final long profileId, final long myId) { profileDetailsBinding.btnTagged.setVisibility(isReallyPrivate() ? View.GONE : View.VISIBLE); + profileDetailsBinding.btnDM.setVisibility(View.GONE); // temporary measure if (isLoggedIn) { if (Objects.equals(profileId, myId)) { profileDetailsBinding.btnTagged.setVisibility(View.VISIBLE); profileDetailsBinding.btnSaved.setVisibility(View.VISIBLE); profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE); - profileDetailsBinding.btnDM.setVisibility(View.GONE); +// profileDetailsBinding.btnDM.setVisibility(View.GONE); profileDetailsBinding.btnSaved.setText(R.string.saved); return; } profileDetailsBinding.btnSaved.setVisibility(View.GONE); profileDetailsBinding.btnLiked.setVisibility(View.GONE); - profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); // maybe there is a judgment mechanism? +// profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); profileDetailsBinding.btnFollow.setVisibility(View.VISIBLE); final Context context = getContext(); if (context == null) return; @@ -977,17 +979,27 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe PostItemType.TAGGED); NavHostFragment.findNavController(this).navigate(action); }); - profileDetailsBinding.btnDM.setOnClickListener(v -> { - profileDetailsBinding.btnDM.setEnabled(false); - // new CreateThreadAction(cookie, profileModel.getPk(), threadId -> { - // if (isAdded()) { - // final NavDirections action = ProfileFragmentDirections - // .actionProfileFragmentToDMThreadFragment(threadId, profileModel.getUsername()); - // NavHostFragment.findNavController(this).navigate(action); - // } - // profileDetailsBinding.btnDM.setEnabled(true); - // }).execute(); - }); +// profileDetailsBinding.btnDM.setOnClickListener(v -> { +// profileDetailsBinding.btnDM.setEnabled(false); +// new CreateThreadAction(cookie, profileModel.getPk(), thread -> { +// if (thread == null) { +// Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); +// profileDetailsBinding.btnDM.setEnabled(true); +// return; +// } +// if (isAdded()) { +// final Bundle bundle = new Bundle(); +// bundle.putString("threadId", thread.getThreadId()); +// bundle.putString("title", thread.getThreadTitle()); +// if (isAdded()) { +// final NavDirections action = ProfileFragmentDirections +// .actionProfileFragmentToDMThreadFragment(thread.getThreadId(), profileModel.getUsername()); +// NavHostFragment.findNavController(this).navigate(action); +// } +// } +// profileDetailsBinding.btnDM.setEnabled(true); +// }).execute(); +// }); profileDetailsBinding.mainProfileImage.setOnClickListener(v -> { if (!hasStories) { // show profile pic