From 1382050b5fdd3fabafecc1c8984843cbd4d06871 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 11 Dec 2022 07:34:10 +0800 Subject: [PATCH] Request UConfig on login --- .../com/hippo/ehviewer/client/EhClient.java | 2 + .../com/hippo/ehviewer/client/EhEngine.java | 49 +++++++++++++++++++ .../hippo/ehviewer/ui/scene/SignInScene.java | 23 +++++++-- 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java index 202bd4927..5bd98c95e 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java @@ -54,6 +54,7 @@ public class EhClient { public static final int METHOD_ARCHIVE_LIST = 17; public static final int METHOD_DOWNLOAD_ARCHIVE = 18; public static final int METHOD_VOTE_TAG = 19; + public static final int METHOD_GET_UCONFIG = 20; private final ThreadPoolExecutor mRequestThreadPool; private static final OkHttpClient mOkHttpClient = EhApplication.getOkHttpClient(); @@ -170,6 +171,7 @@ public class EhClient { EhEngine.downloadArchive(this, mOkHttpClient, (Long) params[0], (String) params[1], (String) params[2], (String) params[3]); case METHOD_VOTE_TAG -> EhEngine.voteTag(this, mOkHttpClient, (Long) params[0], (String) params[1], (Long) params[2], (String) params[3], (String) params[4], (Integer) params[5]); + case METHOD_GET_UCONFIG -> EhEngine.getUConfig(this, mOkHttpClient); default -> new IllegalStateException("Can't detect method " + mMethod); }; } catch (Throwable e) { diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index fa902761b..38282ecee 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -813,6 +813,55 @@ public class EhEngine { } } + public static Void getUConfig(@Nullable EhClient.Task task, + OkHttpClient okHttpClient) throws Throwable { + String url = EhUrl.getUConfigUrl(); + Log.d(TAG, url); + Request request = new EhRequestBuilder(url, null).build(); + Call call = okHttpClient.newCall(request); + + // Put call + if (null != task) { + task.setCall(call); + } + + String body = null; + Headers headers = null; + int code = -1; + try (Response response = call.execute()) { + code = response.code(); + headers = response.headers(); + body = response.body().string(); + request = response.request(); + throwException(call, code, headers, body, null); + } catch (Throwable e) { + ExceptionUtils.throwIfFatal(e); + throwException(call, code, headers, body, e); + throw e; + } + + // TODO Use a better way to handle 302 + if (!request.url().toString().equals(url)) { + Log.d(TAG, "Redirected! Retry " + url); + request = new EhRequestBuilder(url, null).build(); + call = okHttpClient.newCall(request); + if (null != task) task.setCall(call); + + try (Response response = call.execute()) { + code = response.code(); + headers = response.headers(); + body = response.body().string(); + throwException(call, code, headers, body, null); + } catch (Throwable e) { + ExceptionUtils.throwIfFatal(e); + throwException(call, code, headers, body, e); + throw e; + } + } + + return null; + } + public static VoteCommentParser.Result voteComment(@Nullable EhClient.Task task, OkHttpClient okHttpClient, long apiUid, String apiKey, long gid, String token, long commentId, int commentVote) throws Throwable { final JSONObject json = new JSONObject(); 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 6da52370d..c50117d3a 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 @@ -113,7 +113,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc outState.putInt(KEY_REQUEST_ID, mRequestId); } - @Nullable + @NonNull @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -207,6 +207,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc if (REQUEST_CODE_WEBVIEW == requestCode) { if (RESULT_OK == resultCode) { getProfile(); + getUConfig(); } } else { super.onSceneResult(requestCode, resultCode, data); @@ -282,7 +283,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc // Clean up for sign in EhUtils.signOut(context); - EhCallback callback = new SignInListener(context, + EhCallback callback = new SignInListener(context, activity.getStageId(), getTag()); mRequestId = ((EhApplication) context.getApplicationContext()).putGlobalStuff(callback); EhRequest request = new EhRequest() @@ -304,7 +305,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc hideSoftInput(); showProgress(true); - EhCallback callback = new GetProfileListener(context, + EhCallback callback = new GetProfileListener(context, activity.getStageId(), getTag()); mRequestId = ((EhApplication) context.getApplicationContext()).putGlobalStuff(callback); EhRequest request = new EhRequest() @@ -313,6 +314,21 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc EhApplication.getEhClient().execute(request); } + private void getUConfig() { + Context context = getContext(); + MainActivity activity = getMainActivity(); + if (null == context || null == activity) { + return; + } + + hideSoftInput(); + showProgress(true); + + EhRequest request = new EhRequest() + .setMethod(EhClient.METHOD_GET_UCONFIG); + EhApplication.getEhClient().execute(request); + } + private void redirectTo() { Settings.putNeedSignIn(false); MainActivity activity = getMainActivity(); @@ -343,6 +359,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc if (EhApplication.getEhCookieStore().hasSignedIn()) { getProfile(); + getUConfig(); } else { mSigningIn = false; hideProgress();