diff --git a/app/src/main/java/com/github/catvod/bean/ali/Auth.java b/app/src/main/java/com/github/catvod/bean/ali/Auth.java index 2e74bfa..9285564 100644 --- a/app/src/main/java/com/github/catvod/bean/ali/Auth.java +++ b/app/src/main/java/com/github/catvod/bean/ali/Auth.java @@ -1,7 +1,6 @@ package com.github.catvod.bean.ali; import android.text.TextUtils; -import android.widget.ImageView; public class Auth { @@ -9,7 +8,6 @@ public class Auth { private String accessToken; private String shareToken; private String shareId; - private ImageView view; public String getRefreshToken() { return TextUtils.isEmpty(refreshToken) ? "" : refreshToken; @@ -43,14 +41,6 @@ public class Auth { this.shareId = shareId; } - public ImageView getView() { - return view; - } - - public void setView(ImageView view) { - this.view = view; - } - public boolean isEmpty() { return getAccessToken().isEmpty(); } diff --git a/app/src/main/java/com/github/catvod/bean/ali/Data.java b/app/src/main/java/com/github/catvod/bean/ali/Data.java index efb6be7..5b083d2 100644 --- a/app/src/main/java/com/github/catvod/bean/ali/Data.java +++ b/app/src/main/java/com/github/catvod/bean/ali/Data.java @@ -5,6 +5,9 @@ import android.util.Base64; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; +import java.util.HashMap; +import java.util.Map; + public class Data { @SerializedName("data") @@ -67,7 +70,19 @@ public class Data { return getQrCodeStatus().equals("CONFIRMED") && getBizExt().length() > 0; } - public boolean isExpired() { - return getQrCodeStatus().equals("EXPIRED"); + public Map getParams() { + Map params = new HashMap<>(); + params.put("t", getT()); + params.put("ck", getCk()); + params.put("appName", "aliyun_drive"); + params.put("appEntrance", "web"); + params.put("isMobile", "false"); + params.put("lang", "zh_CN"); + params.put("returnUrl", ""); + params.put("fromSite", "52"); + params.put("bizParams", ""); + params.put("navlanguage", "zh-CN"); + params.put("navPlatform", "MacIntel"); + return params; } } diff --git a/app/src/main/java/com/github/catvod/spider/Ali.java b/app/src/main/java/com/github/catvod/spider/Ali.java index e4eef1d..00d5b7c 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -1,5 +1,9 @@ package com.github.catvod.spider; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.SystemClock; import android.text.TextUtils; import android.view.Gravity; @@ -31,7 +35,6 @@ import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -43,6 +46,7 @@ public class Ali { public static final Pattern pattern = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?"); private ScheduledExecutorService service; private final Auth auth; + private AlertDialog dialog; private static class Loader { static volatile Ali INSTANCE = new Ali(); @@ -303,32 +307,33 @@ public class Ali { return result; } - private void stopService() { - if (service != null) service.shutdownNow(); - if (auth.getView() != null) Init.run(() -> Utils.removeView(auth.getView())); + private void getQRCode() { + Data data = Data.objectFrom(OkHttp.string("https://passport.aliyundrive.com/newlogin/qrcode/generate.do?appName=aliyun_drive&fromSite=52&appName=aliyun_drive&appEntrance=web&isMobile=false&lang=zh_CN&returnUrl=&bizParams=&_bx-v=2.2.3")).getContent().getData(); + Init.run(() -> showQRCode(data)); } - private void getQRCode() { - AtomicInteger time = new AtomicInteger(); - Data data = Data.objectFrom(OkHttp.string("https://passport.aliyundrive.com/newlogin/qrcode/generate.do?appName=aliyun_drive&fromSite=52&appName=aliyun_drive&appEntrance=web&isMobile=false&lang=zh_CN&returnUrl=&bizParams=&_bx-v=2.0.3")).getContent().getData(); - Init.run(() -> showCode(data)); + private void showQRCode(Data data) { + try { + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(Utils.dp2px(240), Utils.dp2px(240)); + ImageView image = new ImageView(Init.context()); + image.setScaleType(ImageView.ScaleType.CENTER_CROP); + image.setImageBitmap(QRCode.getBitmap(data.getCodeContent(), 240, 2)); + FrameLayout frame = new FrameLayout(Init.context()); + params.gravity = Gravity.CENTER; + frame.addView(image, params); + dialog = new AlertDialog.Builder(Init.getActivity()).setView(frame).setOnDismissListener(this::dismiss).show(); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + Init.execute(() -> startService(data.getParams())); + Init.show("請使用阿里雲盤 App 掃描二維碼"); + } catch (Exception ignored) { + } + } + + private void startService(Map params) { service = Executors.newScheduledThreadPool(1); service.scheduleAtFixedRate(() -> { - Map params = new HashMap<>(); - params.put("t", data.getT()); - params.put("ck", data.getCk()); - params.put("appName", "aliyun_drive"); - params.put("appEntrance", "web"); - params.put("isMobile", "false"); - params.put("lang", "zh_CN"); - params.put("returnUrl", ""); - params.put("fromSite", "52"); - params.put("bizParams", ""); - params.put("navlanguage", "zh-CN"); - params.put("navPlatform", "MacIntel"); - Data result = Data.objectFrom(OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.0.31", params)).getContent().getData(); + Data result = Data.objectFrom(OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.2.3", params)).getContent().getData(); if (result.hasToken()) setToken(result.getToken()); - if (time.incrementAndGet() > 29) stopService(); }, 1, 1, TimeUnit.SECONDS); } @@ -339,18 +344,19 @@ public class Ali { stopService(); } - private void showCode(Data data) { - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); - params.gravity = Gravity.CENTER; - Utils.addView(create(data.getCodeContent()), params); - Init.show("請使用阿里雲盤 App 掃描二維碼"); + private void stopService() { + if (service != null) service.shutdownNow(); + Init.run(this::dismiss); } - private ImageView create(String value) { - ImageView view = new ImageView(Init.context()); - view.setScaleType(ImageView.ScaleType.CENTER_CROP); - view.setImageBitmap(QRCode.getBitmap(value, 250, 2)); - auth.setView(view); - return view; + private void dismiss(DialogInterface dialog) { + stopService(); + } + + private void dismiss() { + try { + if (dialog != null) dialog.dismiss(); + } catch (Exception ignored) { + } } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Init.java b/app/src/main/java/com/github/catvod/spider/Init.java index e23df19..d28d256 100644 --- a/app/src/main/java/com/github/catvod/spider/Init.java +++ b/app/src/main/java/com/github/catvod/spider/Init.java @@ -12,9 +12,12 @@ import com.github.catvod.utils.Trans; import java.lang.reflect.Field; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class Init { + private final ExecutorService executor; private final Handler handler; private Application app; @@ -28,6 +31,7 @@ public class Init { public Init() { this.handler = new Handler(Looper.getMainLooper()); + this.executor = Executors.newFixedThreadPool(5); } public static Application context() { @@ -40,6 +44,10 @@ public class Init { Trans.init(); } + public static void execute(Runnable runnable) { + get().executor.execute(runnable); + } + public static void run(Runnable runnable) { get().handler.post(runnable); } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index ec6bf02..10e45b5 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 8065ce9..8484e70 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -ff85cd0428496acedc5c8a4599583862 +5f350e3b859432e66db59eebc3ccce78