diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt b/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt index 644168ecf..96aef8c06 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.CoroutineScope import java.io.File object EhClient { - fun execute(request: EhRequest, scope: CoroutineScope) { + internal fun enqueue(request: EhRequest, scope: CoroutineScope) { check(!request.isActive) // Abort if attempt to execute an active request request.job = scope.launchIO { val method = request.method diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhRequest.kt b/app/src/main/java/com/hippo/ehviewer/client/EhRequest.kt index a80cadb4e..51be6e810 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhRequest.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhRequest.kt @@ -15,7 +15,14 @@ */ package com.hippo.ehviewer.client +import android.app.Activity import androidx.annotation.MainThread +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.lifecycleScope +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job class EhRequest { @@ -45,6 +52,24 @@ class EhRequest { return this } + fun enqueue(scope: CoroutineScope) { + EhClient.enqueue(this, scope) + } + + @DelicateCoroutinesApi + fun enqueue() { + EhClient.enqueue(this, GlobalScope) + } + + fun enqueue(fragment: Fragment) { + enqueue(fragment.lifecycleScope) + } + + fun enqueue(activity: Activity) { + check(activity is FragmentActivity) + enqueue(activity.lifecycleScope) + } + @MainThread fun cancel() { if (isActive) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 5c2950ca4..9130eed34 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -60,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, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle())); + request.enqueue(activity); } else { listener.onFailure(new Exception()); // TODO Add text } @@ -107,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, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle())); + request.enqueue(activity); } public static void startDownload(final MainActivity activity, final GalleryInfo galleryInfo, boolean forceDefault) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt index d026b1a35..3de584837 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.kt @@ -347,10 +347,7 @@ class AdvancedFragment : BasePreferenceFragment() { request.setArgs(favListUrlBuilder.build()) viewLifecycleOwner.lifecycleScope.launch { delay(100) - mClient.execute( - request, - viewLifecycleOwner.lifecycle.coroutineScope - ) + request.enqueue(this@AdvancedFragment) } } else { showTip( @@ -376,7 +373,7 @@ class AdvancedFragment : BasePreferenceFragment() { } }) request.setArgs(favListUrlBuilder.build()) - mClient.execute(request, viewLifecycleOwner.lifecycle.coroutineScope) + mClient.enqueue(request, viewLifecycleOwner.lifecycle.coroutineScope) } override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java index 9eaf99977..606935d39 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java @@ -199,7 +199,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_GET_PROFILE) .setCallback(new CookieSignInListener()); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); } private void storeCookie(String id, String hash, String igneous) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index be2de8c5e..ee2e005cc 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -50,7 +50,6 @@ import com.hippo.app.BaseDialogBuilder; import com.hippo.drawable.AddDeleteDrawable; import com.hippo.easyrecyclerview.EasyRecyclerView; import com.hippo.easyrecyclerview.FastScroller; -import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; @@ -1045,7 +1044,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, mUrlBuilder.getKeyword(), modifyGiListBackup)); request.setArgs(gidArray, tokenArray, mModifyFavCat); - mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(FavoritesScene.this); } else { for (int i = 0, n = mModifyGiList.size(); i < n; i++) { gidArray[i] = mModifyGiList.get(i).gid; @@ -1067,7 +1066,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, local, mUrlBuilder.getKeyword())); request.setArgs(url, gidArray, mModifyFavCat); - mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(FavoritesScene.this); } } else if (mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_LOCAL) { final String keyword = mUrlBuilder.getKeyword(); @@ -1082,7 +1081,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, false, mUrlBuilder.getKeyword())); request.setArgs(url); - mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(FavoritesScene.this); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index c5c5b3558..594a1b5a0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -59,7 +59,6 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.hippo.app.BaseDialogBuilder; import com.hippo.easyrecyclerview.EasyRecyclerView; -import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.UrlOpener; import com.hippo.ehviewer.WindowInsetsAnimationHelper; @@ -318,7 +317,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())); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); } @SuppressLint("InflateParams") @@ -454,7 +453,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag())); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); } } @@ -639,7 +638,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setArgs(url, comment, mCommentId != 0 ? Long.toString(mCommentId) : null) .setCallback(new CommentGalleryListener(context, activity.getStageId(), getTag(), mCommentId)); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); hideSoftInput(); hideEditPanel(true); } @@ -745,7 +744,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag())); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index f286bc53a..98a83fb0d 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -37,7 +37,6 @@ import android.os.Bundle; import android.os.Environment; import android.text.Html; import android.text.TextUtils; -import android.util.Pair; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -729,7 +728,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(callback); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); return true; } @@ -1358,7 +1357,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())); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); } @Override @@ -1794,7 +1793,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mRequest = new EhRequest().setMethod(EhClient.METHOD_ARCHIVE_LIST) .setArgs(url, mGid, mToken) .setCallback(this); - EhClient.INSTANCE.execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + mRequest.enqueue(GalleryDetailScene.this); } else { bind(mArchiveList); } @@ -1831,7 +1830,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)); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(GalleryDetailScene.this); } if (mDialog != null) { @@ -1909,7 +1908,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mRequest = new EhRequest().setMethod(EhClient.METHOD_GET_TORRENT_LIST) .setArgs(url, mGid, mToken) .setCallback(this); - EhClient.INSTANCE.execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + mRequest.enqueue(GalleryDetailScene.this); } else { bind(mTorrentList); } @@ -2042,7 +2041,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mGalleryDetail.gid, mGalleryDetail.token, mRatingBar.getRating()) .setCallback(new RateGalleryListener(context, activity.getStageId(), getTag(), mGalleryDetail.gid)); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(GalleryDetailScene.this); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index 8aca9fea9..3fd57ba68 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -1594,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, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(GalleryListScene.this); } else { String url = mUrlBuilder.build(); EhRequest request = new EhRequest(); @@ -1602,7 +1602,7 @@ public final class GalleryListScene extends SearchBarScene request.setCallback(new GetGalleryListListener(getContext(), activity.getStageId(), getTag(), taskId)); request.setArgs(url); - mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(GalleryListScene.this); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index 4020bce14..b9b210d0d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -39,7 +39,6 @@ import com.google.android.material.slider.Slider; import com.hippo.app.BaseDialogBuilder; import com.hippo.easyrecyclerview.EasyRecyclerView; import com.hippo.easyrecyclerview.MarginItemDecoration; -import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhClient; @@ -352,7 +351,7 @@ public class GalleryPreviewsScene extends BaseToolbarScene { request.setCallback(new GetPreviewSetListener(getContext(), activity.getStageId(), getTag(), taskId)); request.setArgs(url); - mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(GalleryPreviewsScene.this); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java index 7b20ac1ef..63057a197 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java @@ -29,7 +29,6 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.lifecycle.LifecycleKt; -import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhRequest; @@ -100,7 +99,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen .setArgs(mGid, mPToken, mPage) .setCallback(new GetGalleryTokenListener(context, activity.getStageId(), getTag())); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); return true; } return false; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java index 2d8c614f3..275dd56e0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java @@ -292,7 +292,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc .setMethod(EhClient.METHOD_SIGN_IN) .setArgs(username, password) .setCallback(callback); - EhClient.INSTANCE.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); + request.enqueue(this); mSigningIn = true; } @@ -313,9 +313,9 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_GET_PROFILE) .setCallback(callback); - EhClient.INSTANCE.execute(request, GlobalScope.INSTANCE); + request.enqueue(); - EhClient.INSTANCE.execute(new EhRequest().setMethod(EhClient.METHOD_GET_UCONFIG), GlobalScope.INSTANCE); + new EhRequest().setMethod(EhClient.METHOD_GET_UCONFIG).enqueue(); } private void redirectTo() {