Execute request in fragment's lifecycle coroutine scope

This commit is contained in:
tarsin committed 2023-01-04 15:02:16 +08:00
1 parent f98fd5e5f1
commit 57e7f89814
12 files changed
+39 -32

No files matched your search

@@ -16,7 +16,6 @@
package com.hippo.ehviewer.client
import com.hippo.ehviewer.EhApplication.Companion.okHttpClient
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
@@ -27,7 +26,7 @@ import kotlinx.coroutines.launch
import java.io.File
class EhClient {
fun execute(request: EhRequest) {
fun execute(request: EhRequest, scope: CoroutineScope) {
if (!request.isCancelled) {
val task = Task()
val job = scope.launch(Dispatchers.IO, CoroutineStart.LAZY) {
@@ -196,15 +195,12 @@ class EhClient {
fun stop() {
if (!mStop) {
job?.cancel()
mCallback?.let {
scope.launchUI { it.onCancel() }
}
mCallback?.onCancel()
}
}
}
companion object {
val scope = CoroutineScope(Dispatchers.IO)
const val METHOD_SIGN_IN = 0
const val METHOD_GET_GALLERY_LIST = 1
const val METHOD_GET_GALLERY_DETAIL = 3
@@ -21,6 +21,8 @@ import android.content.Intent;
import android.os.Build;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.LifecycleKt;
import com.hippo.app.ListCheckBoxDialogBuilder;
import com.hippo.ehviewer.EhApplication;
@@ -58,7 +60,7 @@ public final class CommonOperations {
request.setMethod(EhClient.METHOD_ADD_FAVORITES);
request.setArgs(galleryInfo.gid, galleryInfo.token, slot, "");
request.setCallback(listener);
client.execute(request);
client.execute(request, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle()));
} else {
listener.onFailure(new Exception()); // TODO Add text
}
@@ -105,7 +107,7 @@ public final class CommonOperations {
request.setMethod(EhClient.METHOD_ADD_FAVORITES);
request.setArgs(galleryInfo.gid, galleryInfo.token, -1, "");
request.setCallback(new DelegateFavoriteCallback(listener, galleryInfo, null, -2));
client.execute(request);
client.execute(request, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle()));
}
public static void startDownload(final MainActivity activity, final GalleryInfo galleryInfo, boolean forceDefault) {
@@ -30,6 +30,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.os.LocaleListCompat;
import androidx.lifecycle.LifecycleKt;
import androidx.preference.Preference;
import com.hippo.app.BaseDialogBuilder;
@@ -341,7 +342,7 @@ public class AdvancedFragment extends BasePreferenceFragment {
favIndex++;
favListUrlBuilder.setIndex(result.next, true);
request.setArgs(favListUrlBuilder.build());
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
} else {
showTip(R.string.settings_advanced_backup_favorite_success, BaseScene.LENGTH_SHORT);
}
@@ -363,7 +364,7 @@ public class AdvancedFragment extends BasePreferenceFragment {
});
request.setArgs(favListUrlBuilder.build());
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
@Override
@@ -30,6 +30,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleKt;
import com.google.android.material.textfield.TextInputLayout;
import com.hippo.app.BaseDialogBuilder;
@@ -198,7 +199,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc
EhRequest request = new EhRequest()
.setMethod(EhClient.METHOD_GET_PROFILE)
.setCallback(new CookieSignInListener());
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
private void storeCookie(String id, String hash, String igneous) {
@@ -36,6 +36,7 @@ import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsAnimationCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.lifecycle.LifecycleKt;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -1044,7 +1045,7 @@ public class FavoritesScene extends SearchBarScene implements
activity.getStageId(), getTag(),
taskId, mUrlBuilder.getKeyword(), modifyGiListBackup));
request.setArgs(gidArray, tokenArray, mModifyFavCat);
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
} else {
for (int i = 0, n = mModifyGiList.size(); i < n; i++) {
gidArray[i] = mModifyGiList.get(i).gid;
@@ -1066,7 +1067,7 @@ public class FavoritesScene extends SearchBarScene implements
activity.getStageId(), getTag(),
taskId, local, mUrlBuilder.getKeyword()));
request.setArgs(url, gidArray, mModifyFavCat);
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
} else if (mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_LOCAL) {
final String keyword = mUrlBuilder.getKeyword();
@@ -1081,7 +1082,7 @@ public class FavoritesScene extends SearchBarScene implements
activity.getStageId(), getTag(),
taskId, false, mUrlBuilder.getKeyword()));
request.setArgs(url);
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
}
@@ -50,6 +50,7 @@ import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsAnimationCompat;
import androidx.lifecycle.LifecycleKt;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -317,7 +318,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene
.setArgs(mGalleryDetail.apiUid, mGalleryDetail.apiKey, mGalleryDetail.gid, mGalleryDetail.token, id, vote)
.setCallback(new VoteCommentListener(context,
activity.getStageId(), getTag()));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
@SuppressLint("InflateParams")
@@ -453,7 +454,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene
.setMethod(EhClient.METHOD_GET_GALLERY_DETAIL)
.setArgs(url)
.setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag()));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
}
@@ -638,7 +639,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene
.setArgs(url, comment, mCommentId != 0 ? Long.toString(mCommentId) : null)
.setCallback(new CommentGalleryListener(context,
activity.getStageId(), getTag(), mCommentId));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
hideSoftInput();
hideEditPanel(true);
}
@@ -744,7 +745,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene
.setMethod(EhClient.METHOD_GET_GALLERY_DETAIL)
.setArgs(url)
.setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag()));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
}
}
@@ -58,6 +58,7 @@ import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import androidx.core.widget.NestedScrollView;
import androidx.lifecycle.LifecycleKt;
import com.google.android.material.progressindicator.CircularProgressIndicator;
import com.google.android.material.snackbar.Snackbar;
@@ -728,7 +729,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
.setMethod(EhClient.METHOD_GET_GALLERY_DETAIL)
.setArgs(url)
.setCallback(callback);
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
return true;
}
@@ -1357,7 +1358,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
.setArgs(mGalleryDetail.apiUid, mGalleryDetail.apiKey, mGalleryDetail.gid, mGalleryDetail.token, tag, vote)
.setCallback(new VoteTagListener(context,
activity.getStageId(), getTag()));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
@Override
@@ -1793,7 +1794,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
mRequest = new EhRequest().setMethod(EhClient.METHOD_ARCHIVE_LIST)
.setArgs(url, mGid, mToken)
.setCallback(this);
EhApplication.getEhClient().execute(mRequest);
EhApplication.getEhClient().execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
} else {
bind(mArchiveList);
}
@@ -1830,7 +1831,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
request.setMethod(EhClient.METHOD_DOWNLOAD_ARCHIVE);
request.setArgs(mGalleryDetail.gid, mGalleryDetail.token, mArchiveFormParamOr, res, isHAtH);
request.setCallback(new DownloadArchiveListener(context, activity.getStageId(), getTag(), mGalleryDetail));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
if (mDialog != null) {
@@ -1908,7 +1909,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
mRequest = new EhRequest().setMethod(EhClient.METHOD_GET_TORRENT_LIST)
.setArgs(url, mGid, mToken)
.setCallback(this);
EhApplication.getEhClient().execute(mRequest);
EhApplication.getEhClient().execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
} else {
bind(mTorrentList);
}
@@ -2041,7 +2042,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O
mGalleryDetail.gid, mGalleryDetail.token, mRatingBar.getRating())
.setCallback(new RateGalleryListener(context,
activity.getStageId(), getTag(), mGalleryDetail.gid));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
}
@@ -52,6 +52,7 @@ import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsAnimationCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.lifecycle.LifecycleKt;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -1593,7 +1594,7 @@ public final class GalleryListScene extends SearchBarScene
request.setArgs(new File(StringUtils.avoidNull(mUrlBuilder.getImagePath())),
mUrlBuilder.isUseSimilarityScan(),
mUrlBuilder.isOnlySearchCovers(), mUrlBuilder.isShowExpunged());
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
} else {
String url = mUrlBuilder.build();
EhRequest request = new EhRequest();
@@ -1601,7 +1602,7 @@ public final class GalleryListScene extends SearchBarScene
request.setCallback(new GetGalleryListListener(getContext(),
activity.getStageId(), getTag(), taskId));
request.setArgs(url);
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
}
@@ -32,6 +32,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleKt;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.slider.Slider;
@@ -351,7 +352,7 @@ public class GalleryPreviewsScene extends BaseToolbarScene {
request.setCallback(new GetPreviewSetListener(getContext(),
activity.getStageId(), getTag(), taskId));
request.setArgs(url);
mClient.execute(request);
mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
@Override
@@ -119,6 +119,7 @@ class HistoryScene : BaseToolbarScene() {
@SuppressLint("NotifyDataSetChanged")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewLifecycleOwner.lifecycleScope
mDownloadManager.addDownloadInfoListener(mDownloadInfoListener)
mFavouriteStatusRouter.addListener(mFavouriteStatusRouterListener)
}
@@ -27,6 +27,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleKt;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.R;
@@ -99,7 +100,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen
.setArgs(mGid, mPToken, mPage)
.setCallback(new GetGalleryTokenListener(context,
activity.getStageId(), getTag()));
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
return true;
}
return false;
@@ -29,6 +29,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleKt;
import com.google.android.material.textfield.TextInputLayout;
import com.hippo.app.BaseDialogBuilder;
@@ -289,7 +290,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc
.setMethod(EhClient.METHOD_SIGN_IN)
.setArgs(username, password)
.setCallback(callback);
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
mSigningIn = true;
}
@@ -310,10 +311,9 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc
EhRequest request = new EhRequest()
.setMethod(EhClient.METHOD_GET_PROFILE)
.setCallback(callback);
EhApplication.getEhClient().execute(request);
EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
EhApplication.getEhClient().execute(new EhRequest()
.setMethod(EhClient.METHOD_GET_UCONFIG));
EhApplication.getEhClient().execute(new EhRequest().setMethod(EhClient.METHOD_GET_UCONFIG), LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle()));
}
private void redirectTo() {