From b0123cf6813f4232c3023af2532efa3fdcb69fed Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 18 Nov 2024 23:08:23 +0800 Subject: [PATCH] Update --- app/build.gradle | 8 +- app/proguard-rules.pro | 7 +- .../java/com/github/catvod/api/AliYun.java | 653 -------------- .../java/com/github/catvod/bean/ali/Biz.java | 66 -- .../com/github/catvod/bean/ali/Cache.java | 58 -- .../java/com/github/catvod/bean/ali/Code.java | 24 - .../java/com/github/catvod/bean/ali/Data.java | 88 -- .../com/github/catvod/bean/ali/Download.java | 32 - .../com/github/catvod/bean/ali/Drive.java | 31 - .../java/com/github/catvod/bean/ali/Item.java | 97 --- .../com/github/catvod/bean/ali/OAuth.java | 42 - .../com/github/catvod/bean/ali/Preview.java | 84 -- .../java/com/github/catvod/bean/ali/Resp.java | 79 -- .../com/github/catvod/bean/ali/Share.java | 130 --- .../java/com/github/catvod/bean/ali/User.java | 50 -- .../com/github/catvod/bean/star/Card.java | 61 -- .../github/catvod/bean/star/Condition.java | 65 -- .../com/github/catvod/bean/star/Group.java | 24 - .../com/github/catvod/bean/star/Info.java | 71 -- .../com/github/catvod/bean/star/Person.java | 21 - .../com/github/catvod/bean/star/Query.java | 60 -- .../com/github/catvod/bean/star/Video.java | 21 - .../com/github/catvod/bean/upyun/Data.java | 27 - .../com/github/catvod/bean/upyun/Item.java | 37 - .../com/github/catvod/debug/MainActivity.java | 4 +- .../java/com/github/catvod/js/Method.java | 19 - .../java/com/github/catvod/spider/Ali.java | 87 -- .../com/github/catvod/spider/AppYsV2.java | 820 ------------------ .../java/com/github/catvod/spider/Douban.java | 141 --- .../com/github/catvod/spider/FirstAid.java | 106 --- .../java/com/github/catvod/spider/JavDb.java | 133 --- .../com/github/catvod/spider/JustLive.java | 170 ---- .../java/com/github/catvod/spider/Notice.java | 100 --- .../com/github/catvod/spider/PanSearch.java | 60 -- .../java/com/github/catvod/spider/PanSou.java | 73 -- .../java/com/github/catvod/spider/Proxy.java | 2 - .../java/com/github/catvod/spider/Push.java | 15 +- .../java/com/github/catvod/spider/Star.java | 153 ---- .../java/com/github/catvod/spider/UpYun.java | 53 -- .../java/com/github/catvod/spider/Wogg.java | 151 ---- .../com/github/catvod/spider/XiaoZhiTiao.java | 80 -- .../java/com/github/catvod/spider/YiSo.java | 59 -- .../java/com/github/catvod/spider/Zhaozy.java | 87 -- build.gradle | 4 +- gradle.properties | 8 +- gradle/wrapper/gradle-wrapper.properties | 2 +- jar/custom_spider.jar | Bin 266777 -> 323022 bytes jar/custom_spider.jar.md5 | 2 +- jar/genJar.bat | 10 +- tools/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- 51 files changed, 30 insertions(+), 4152 deletions(-) delete mode 100644 app/src/main/java/com/github/catvod/api/AliYun.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Biz.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Cache.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Code.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Data.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Download.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Drive.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Item.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/OAuth.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Preview.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Resp.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/Share.java delete mode 100644 app/src/main/java/com/github/catvod/bean/ali/User.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Card.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Condition.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Group.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Info.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Person.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Query.java delete mode 100644 app/src/main/java/com/github/catvod/bean/star/Video.java delete mode 100644 app/src/main/java/com/github/catvod/bean/upyun/Data.java delete mode 100644 app/src/main/java/com/github/catvod/bean/upyun/Item.java delete mode 100644 app/src/main/java/com/github/catvod/js/Method.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Ali.java delete mode 100644 app/src/main/java/com/github/catvod/spider/AppYsV2.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Douban.java delete mode 100644 app/src/main/java/com/github/catvod/spider/FirstAid.java delete mode 100644 app/src/main/java/com/github/catvod/spider/JavDb.java delete mode 100644 app/src/main/java/com/github/catvod/spider/JustLive.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Notice.java delete mode 100644 app/src/main/java/com/github/catvod/spider/PanSearch.java delete mode 100644 app/src/main/java/com/github/catvod/spider/PanSou.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Star.java delete mode 100644 app/src/main/java/com/github/catvod/spider/UpYun.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Wogg.java delete mode 100644 app/src/main/java/com/github/catvod/spider/XiaoZhiTiao.java delete mode 100644 app/src/main/java/com/github/catvod/spider/YiSo.java delete mode 100644 app/src/main/java/com/github/catvod/spider/Zhaozy.java diff --git a/app/build.gradle b/app/build.gradle index ba632592..096e8075 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { defaultConfig { applicationId "com.github.catvod.demo" - minSdk 16 + minSdk 21 targetSdk 35 } @@ -28,8 +28,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } configurations.configureEach { @@ -41,7 +41,7 @@ android { dependencies { implementation 'com.github.thegrizzlylabs:sardine-android:0.9' - implementation 'wang.harlon.quickjs:wrapper-android:0.21.1' + implementation 'wang.harlon.quickjs:wrapper-android:2.4.0' implementation 'com.squareup.okhttp3:okhttp:3.12.13' implementation 'com.google.code.gson:gson:2.11.0' implementation 'cn.wanghaomiao:JsoupXpath:2.5.1' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 8f45be19..6d878866 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,12 +1,13 @@ # Merge -flattenpackagehierarchy com.github.catvod.spider.merge --dontwarn org.slf4j.impl.StaticLoggerBinder + +# slf4j +-dontwarn org.slf4j.impl.** +-keep class org.slf4j.** { *; } # Spider --keep class com.github.catvod.js.* { *; } -keep class com.github.catvod.crawler.* { *; } -keep class com.github.catvod.spider.* { public ; } --keep class com.github.catvod.parser.* { public ; } # AndroidX -keep class androidx.core.** { *; } diff --git a/app/src/main/java/com/github/catvod/api/AliYun.java b/app/src/main/java/com/github/catvod/api/AliYun.java deleted file mode 100644 index 5dcff262..00000000 --- a/app/src/main/java/com/github/catvod/api/AliYun.java +++ /dev/null @@ -1,653 +0,0 @@ -package com.github.catvod.api; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.net.UrlQuerySanitizer; -import android.os.SystemClock; -import android.text.TextUtils; -import android.view.Gravity; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.ImageView; - -import com.github.catvod.bean.Result; -import com.github.catvod.bean.Sub; -import com.github.catvod.bean.Vod; -import com.github.catvod.bean.ali.Cache; -import com.github.catvod.bean.ali.Code; -import com.github.catvod.bean.ali.Data; -import com.github.catvod.bean.ali.Download; -import com.github.catvod.bean.ali.Drive; -import com.github.catvod.bean.ali.Item; -import com.github.catvod.bean.ali.OAuth; -import com.github.catvod.bean.ali.Preview; -import com.github.catvod.bean.ali.Resp; -import com.github.catvod.bean.ali.Share; -import com.github.catvod.bean.ali.User; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttp; -import com.github.catvod.net.OkResult; -import com.github.catvod.spider.Init; -import com.github.catvod.spider.Proxy; -import com.github.catvod.utils.Json; -import com.github.catvod.utils.Notify; -import com.github.catvod.utils.Path; -import com.github.catvod.utils.ProxyVideo; -import com.github.catvod.utils.QRCode; -import com.github.catvod.utils.ResUtil; -import com.github.catvod.utils.Util; -import com.google.gson.JsonObject; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.locks.ReentrantLock; - -import okhttp3.Response; - -public class AliYun { - - private final Map> m3u8MediaMap; - private final Map shareDownloadMap; - private final Map downloadMap; - private final List tempIds; - private final ReentrantLock lock; - private final Cache cache; - private ScheduledExecutorService service; - private String refreshToken; - private AlertDialog dialog; - private Share share; - - private static class Loader { - static volatile AliYun INSTANCE = new AliYun(); - } - - public static AliYun get() { - return Loader.INSTANCE; - } - - public File getCache() { - return Path.tv("aliyun"); - } - - private AliYun() { - Init.checkPermission(); - lock = new ReentrantLock(); - tempIds = new ArrayList<>(); - downloadMap = new HashMap<>(); - m3u8MediaMap = new HashMap<>(); - shareDownloadMap = new HashMap<>(); - cache = Cache.objectFrom(Path.read(getCache())); - } - - public void setRefreshToken(String token) { - this.refreshToken = token; - } - - public HashMap getHeader() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", Util.CHROME); - headers.put("Referer", "https://www.aliyundrive.com/"); - return headers; - } - - private HashMap getHeaders() { - HashMap headers = getHeader(); - headers.put("x-share-token", share.getShareToken()); - headers.put("X-Canary", "client=Android,app=adrive,version=v4.3.1"); - return headers; - } - - private HashMap getHeaderAuth() { - HashMap headers = getHeader(); - headers.put("x-share-token", share.getShareToken()); - headers.put("X-Canary", "client=Android,app=adrive,version=v4.3.1"); - if (cache.getUser().isAuthed()) headers.put("authorization", cache.getUser().getAuthorization()); - return headers; - } - - private HashMap getHeaderOpen() { - HashMap headers = getHeader(); - headers.put("authorization", cache.getOAuth().getAuthorization()); - return headers; - } - - private boolean alist(String url, JsonObject param) { - String api = "https://api.xhofe.top/alist/ali_open/" + url; - OkResult result = OkHttp.post(api, param.toString(), getHeader()); - SpiderDebug.log(result.getCode() + "," + api + "," + result.getBody()); - if (isManyRequest(result.getBody())) return false; - cache.setOAuth(OAuth.objectFrom(result.getBody())); - return true; - } - - private String post(String url, JsonObject param) { - url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; - OkResult result = OkHttp.post(url, param.toString(), getHeader()); - SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); - return result.getBody(); - } - - private String auth(String url, String json, boolean retry) { - url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; - OkResult result = OkHttp.post(url, json, url.contains("file/list") ? getHeaders() : getHeaderAuth()); - SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); - if (retry && result.getCode() == 401 && refreshAccessToken()) return auth(url, json, false); - if (retry && result.getCode() == 429) return auth(url, json, false); - return result.getBody(); - } - - private String oauth(String url, String json, boolean retry) { - url = url.startsWith("https") ? url : "https://open.aliyundrive.com/adrive/v1.0/" + url; - OkResult result = OkHttp.post(url, json, getHeaderOpen()); - SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); - if (retry && (result.getCode() == 400 || result.getCode() == 401) && refreshOpenToken()) return oauth(url, json, false); - return result.getBody(); - } - - private boolean isManyRequest(String result) { - if (!result.contains("Too Many Requests")) return false; - Notify.show("洗洗睡吧,Too Many Requests。"); - cache.getOAuth().clean(); - return true; - } - - private boolean onTimeout() { - stopService(); - return false; - } - - private void refreshShareToken(String shareId) { - if (share != null && share.alive(shareId)) return; - SpiderDebug.log("refreshShareToken..."); - JsonObject param = new JsonObject(); - param.addProperty("share_id", shareId); - param.addProperty("share_pwd", ""); - String json = post("v2/share_link/get_share_token", param); - share = Share.objectFrom(json).setShareId(shareId).setTime(); - if (share.getShareToken().isEmpty()) Notify.show("來晚啦,該分享已失效。"); - } - - private boolean refreshAccessToken() { - try { - SpiderDebug.log("refreshAccessToken..."); - JsonObject param = new JsonObject(); - String token = cache.getUser().getRefreshToken(); - if (token.isEmpty()) token = refreshToken; - if (token != null && token.startsWith("http")) token = OkHttp.string(token).trim(); - param.addProperty("refresh_token", token); - param.addProperty("grant_type", "refresh_token"); - String json = post("https://auth.aliyundrive.com/v2/account/token", param); - cache.setUser(User.objectFrom(json)); - if (cache.getUser().getAccessToken().isEmpty()) throw new Exception(json); - return true; - } catch (Exception e) { - if (e instanceof TimeoutException) return onTimeout(); - cache.getUser().clean(); - e.printStackTrace(); - stopService(); - startFlow(); - return true; - } finally { - while (cache.getUser().getAccessToken().isEmpty()) SystemClock.sleep(250); - } - } - - private void getDriveId() { - SpiderDebug.log("Get Drive Id..."); - String json = auth("https://user.aliyundrive.com/v2/user/get", "{}", true); - cache.setDrive(Drive.objectFrom(json)); - } - - private boolean oauthRequest() { - SpiderDebug.log("OAuth Request..."); - JsonObject param = new JsonObject(); - param.addProperty("authorize", 1); - param.addProperty("scope", "user:base,file:all:read,file:all:write"); - String url = "https://open.aliyundrive.com/oauth/users/authorize?client_id=76917ccccd4441c39457a04f6084fb2f&redirect_uri=https://alist.nn.ci/tool/aliyundrive/callback&scope=user:base,file:all:read,file:all:write&state="; - String json = auth(url, param.toString(), true); - return oauthRedirect(Code.objectFrom(json).getCode()); - } - - private boolean oauthRedirect(String code) { - SpiderDebug.log("OAuth Redirect..."); - JsonObject param = new JsonObject(); - param.addProperty("code", code); - param.addProperty("grant_type", "authorization_code"); - return alist("code", param); - } - - private boolean refreshOpenToken() { - if (cache.getOAuth().getRefreshToken().isEmpty()) return oauthRequest(); - SpiderDebug.log("refreshOpenToken..."); - JsonObject param = new JsonObject(); - param.addProperty("grant_type", "refresh_token"); - param.addProperty("refresh_token", cache.getOAuth().getRefreshToken()); - return alist("token", param); - } - - public Vod getVod(String url, String shareId, String fileId) { - refreshShareToken(shareId); - JsonObject param = new JsonObject(); - param.addProperty("share_id", shareId); - Share share = Share.objectFrom(post("adrive/v3/share_link/get_share_by_anonymous", param)); - List files = new ArrayList<>(); - List subs = new ArrayList<>(); - listFiles(shareId, new Item(getParentFileId(fileId, share)), files, subs); - Collections.sort(files); - List playFrom = Arrays.asList("轉存原畫", "分享原畫", "代理普畫"); - List episode = new ArrayList<>(); - List playUrl = new ArrayList<>(); - for (Item file : files) episode.add(file.getDisplayName() + "$" + shareId + "+" + file.getFileId() + findSubs(file.getName(), subs)); - for (int i = 0; i < playFrom.size(); i++) playUrl.add(TextUtils.join("#", episode)); - Vod vod = new Vod(); - vod.setVodId(url); - vod.setVodContent(url); - vod.setVodPic(share.getAvatar()); - vod.setVodName(share.getShareName()); - vod.setVodPlayUrl(TextUtils.join("$$$", playUrl)); - vod.setVodPlayFrom(TextUtils.join("$$$", playFrom)); - vod.setTypeName("阿里雲盤"); - return vod; - } - - private void listFiles(String shareId, Item folder, List files, List subs) { - listFiles(shareId, folder, files, subs, ""); - } - - private void listFiles(String shareId, Item parent, List files, List subs, String marker) { - List folders = new ArrayList<>(); - JsonObject param = new JsonObject(); - param.addProperty("limit", 200); - param.addProperty("share_id", shareId); - param.addProperty("parent_file_id", parent.getFileId()); - param.addProperty("order_by", "name"); - param.addProperty("order_direction", "ASC"); - if (marker.length() > 0) param.addProperty("marker", marker); - Item item = Item.objectFrom(auth("adrive/v3/file/list", param.toString(), true)); - for (Item file : item.getItems()) { - if (file.getType().equals("folder")) { - folders.add(file); - } else if (file.getCategory().equals("video") || file.getCategory().equals("audio")) { - files.add(file.parent(parent.getName())); - } else if (Util.isSub(file.getExt())) { - subs.add(file); - } - } - if (item.getNextMarker().length() > 0) { - listFiles(shareId, parent, files, subs, item.getNextMarker()); - } - for (Item folder : folders) { - listFiles(shareId, folder, files, subs); - } - } - - private String getParentFileId(String fileId, Share share) { - if (!TextUtils.isEmpty(fileId)) return fileId; - if (share.getFileInfos().isEmpty()) return ""; - Item item = share.getFileInfos().get(0); - return item.getType().equals("folder") ? item.getFileId() : "root"; - } - - private void pair(String name1, List items, List subs) { - for (Item item : items) { - String name2 = Util.removeExt(item.getName()).toLowerCase(); - if (name1.contains(name2) || name2.contains(name1)) subs.add(item); - } - } - - private String findSubs(String name1, List items) { - List subs = new ArrayList<>(); - pair(Util.removeExt(name1).toLowerCase(), items, subs); - if (subs.isEmpty()) subs.addAll(items); - StringBuilder sb = new StringBuilder(); - for (Item sub : subs) sb.append("+").append(Util.removeExt(sub.getName())).append("@@@").append(sub.getExt()).append("@@@").append(sub.getFileId()); - return sb.toString(); - } - - public List getSubs(String[] ids) { - List sub = new ArrayList<>(); - for (String text : ids) { - if (!text.contains("@@@")) continue; - String[] split = text.split("@@@"); - String name = split[0]; - String ext = split[1]; - String url = Proxy.getUrl() + "?do=ali&type=sub&shareId=" + ids[0] + "&fileId=" + split[2]; - sub.add(Sub.create().name(name).ext(ext).url(url)); - } - return sub; - } - - public String getShareDownloadUrl(String shareId, String fileId) { - try { - if (shareDownloadMap.containsKey(fileId) && shareDownloadMap.get(fileId) != null && !isExpire(shareDownloadMap.get(fileId))) return shareDownloadMap.get(fileId); - refreshShareToken(shareId); - SpiderDebug.log("getShareDownloadUrl..." + fileId); - JsonObject param = new JsonObject(); - param.addProperty("file_id", fileId); - param.addProperty("share_id", shareId); - param.addProperty("expire_sec", 600); - String json = auth("v2/file/get_share_link_download_url", param.toString(), false); - String url = Json.parse(json).getAsJsonObject().get("download_url").getAsString(); - shareDownloadMap.put(fileId, url); - return url; - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } - - public String getDownloadUrl(String shareId, String fileId) { - try { - if (downloadMap.containsKey(fileId) && downloadMap.get(fileId) != null && !isExpire(downloadMap.get(fileId))) return downloadMap.get(fileId); - refreshShareToken(shareId); - SpiderDebug.log("getDownloadUrl..." + fileId); - tempIds.add(0, copy(shareId, fileId)); - JsonObject param = new JsonObject(); - param.addProperty("file_id", tempIds.get(0)); - param.addProperty("drive_id", cache.getDrive().getDriveId()); - param.addProperty("expire_sec", 900); - String json = oauth("openFile/getDownloadUrl", param.toString(), true); - String url = Download.objectFrom(json).getUrl(); - downloadMap.put(fileId, url); - return url; - } catch (Exception e) { - e.printStackTrace(); - return ""; - } finally { - Init.execute(this::deleteAll); - } - } - - public Preview.Info getVideoPreviewPlayInfo(String shareId, String fileId) { - try { - refreshShareToken(shareId); - SpiderDebug.log("getVideoPreviewPlayInfo..." + fileId); - tempIds.add(0, copy(shareId, fileId)); - JsonObject param = new JsonObject(); - param.addProperty("file_id", tempIds.get(0)); - param.addProperty("drive_id", cache.getDrive().getDriveId()); - param.addProperty("category", "live_transcoding"); - param.addProperty("url_expire_sec", 900); - String json = oauth("openFile/getVideoPreviewPlayInfo", param.toString(), true); - return Preview.objectFrom(json).getVideoPreviewPlayInfo(); - } catch (Exception e) { - e.printStackTrace(); - return new Preview.Info(); - } finally { - Init.execute(this::deleteAll); - } - } - - public String playerContent(String[] ids, String flag) { - if (flag.split("#")[0].equals("代理普畫")) { - return getPreviewContent(ids); - } else if (flag.split("#")[0].equals("轉存原畫")) { - return Result.get().url(proxyVideoUrl("open", ids[0], ids[1])).octet().subs(getSubs(ids)).header(getHeader()).string(); - } else if (flag.split("#")[0].equals("分享原畫")) { - return Result.get().url(proxyVideoUrl("share", ids[0], ids[1])).octet().subs(getSubs(ids)).header(getHeader()).string(); - } else { - return ""; - } - } - - private String getPreviewContent(String[] ids) { - Preview.Info info = getVideoPreviewPlayInfo(ids[0], ids[1]); - List url = getPreviewUrl(info, ids[0], ids[1], true); - List subs = getSubs(ids); - subs.addAll(getSubs(info)); - return Result.get().url(url).m3u8().subs(subs).header(getHeader()).string(); - } - - private List getPreviewUrl(Preview.Info info, String shareId, String fileId, boolean proxy) { - List tasks = info.getLiveTranscodingTaskList(); - List url = new ArrayList<>(); - for (int i = tasks.size() - 1; i >= 0; i--) { - url.add(tasks.get(i).getTemplateId()); - url.add(proxy ? proxyVideoUrl("preview", shareId, fileId, tasks.get(i).getTemplateId()) : tasks.get(i).getUrl()); - } - return url; - } - - private List getSubs(Preview.Info info) { - List subs = new ArrayList<>(); - for (Preview.LiveTranscodingTask task : info.getLiveTranscodingSubtitleTaskList()) subs.add(task.getSub()); - return subs; - } - - private String copy(String shareId, String fileId) { - if (cache.getDrive().getDriveId().isEmpty()) getDriveId(); - SpiderDebug.log("Copy..." + fileId); - String json = "{\"requests\":[{\"body\":{\"file_id\":\"%s\",\"share_id\":\"%s\",\"auto_rename\":true,\"to_parent_file_id\":\"root\",\"to_drive_id\":\"%s\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/file/copy\"}],\"resource\":\"file\"}"; - json = String.format(json, fileId, shareId, cache.getDrive().getDriveId()); - Resp resp = Resp.objectFrom(auth("adrive/v2/batch", json, true)); - return resp.getResponse().getBody().getFileId(); - } - - private void deleteAll() { - List ids = new ArrayList<>(tempIds); - for (String id : ids) { - boolean deleted = delete(id); - if (deleted) tempIds.remove(id); - } - } - - private boolean delete(String fileId) { - SpiderDebug.log("Delete..." + fileId); - String json = "{\"requests\":[{\"body\":{\"drive_id\":\"%s\",\"file_id\":\"%s\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"%s\",\"method\":\"POST\",\"url\":\"/file/delete\"}],\"resource\":\"file\"}"; - json = String.format(json, cache.getDrive().getDriveId(), fileId, fileId); - Resp resp = Resp.objectFrom(auth("adrive/v2/batch", json, true)); - return resp.getResponse().getStatus() == 404; - } - - private String proxyVideoUrl(String cate, String shareId, String fileId) { - return String.format(Proxy.getUrl() + "?do=ali&type=video&cate=%s&shareId=%s&fileId=%s", cate, shareId, fileId); - } - - private String proxyVideoUrl(String cate, String shareId, String fileId, String templateId) { - return String.format(Proxy.getUrl() + "?do=ali&type=video&cate=%s&shareId=%s&fileId=%s&templateId=%s", cate, shareId, fileId, templateId); - } - - private String proxyVideoUrl(String cate, String shareId, String fileId, String templateId, String mediaId) { - return String.format(Proxy.getUrl() + "?do=ali&type=video&cate=%s&shareId=%s&fileId=%s&templateId=%s&mediaId=%s", cate, shareId, fileId, templateId, mediaId); - } - - private static boolean isExpire(String url) { - String expires = new UrlQuerySanitizer(url).getValue("x-oss-expires"); - if (TextUtils.isEmpty(expires)) return false; - return Long.parseLong(expires) - getTimeStamp() <= 60; - } - - private static long getTimeStamp() { - return System.currentTimeMillis() / 1000; - } - - public Object[] proxyVideo(Map params) throws Exception { - if (dialog != null && dialog.isShowing()) return null; - String templateId = params.get("templateId"); - String shareId = params.get("shareId"); - String mediaId = params.get("mediaId"); - String fileId = params.get("fileId"); - String cate = params.get("cate"); - String downloadUrl = ""; - - if ("preview".equals(cate)) { - return new Object[]{200, "application/vnd.apple.mpegurl", new ByteArrayInputStream(getM3u8(shareId, fileId, templateId).getBytes())}; - } - - if ("open".equals(cate)) { - downloadUrl = getDownloadUrl(shareId, fileId); - } else if ("share".equals(cate)) { - downloadUrl = getShareDownloadUrl(shareId, fileId); - } else if ("m3u8".equals(cate)) { - lock.lock(); - String mediaUrl = m3u8MediaMap.get(fileId).get(mediaId); - if (isExpire(mediaUrl)) { - getM3u8(shareId, fileId, templateId); - mediaUrl = m3u8MediaMap.get(fileId).get(mediaId); - } - lock.unlock(); - downloadUrl = mediaUrl; - } - - Map headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - List keys = Arrays.asList("referer", "icy-metadata", "range", "connection", "accept-encoding", "user-agent"); - for (String key : params.keySet()) if (keys.contains(key)) headers.put(key, params.get(key)); - return ProxyVideo.proxy(downloadUrl, headers); - } - - private String getM3u8Url(String shareId, String fileId, String templateId) { - Preview.Info info = getVideoPreviewPlayInfo(shareId, fileId); - List url = getPreviewUrl(info, shareId, fileId, false); - Map previewMap = new HashMap<>(); - for (int i = 0; i < url.size(); i = i + 2) { - previewMap.put(url.get(i), url.get(i + 1)); - } - return previewMap.get(templateId); - } - - private String getM3u8(String shareId, String fileId, String templateId) { - String m3u8Url = getM3u8Url(shareId, fileId, templateId); - String m3u8 = OkHttp.string(m3u8Url, getHeader()); - String[] m3u8Arr = m3u8.split("\n"); - List listM3u8 = new ArrayList<>(); - Map media = new HashMap<>(); - String site = m3u8Url.substring(0, m3u8Url.lastIndexOf("/")) + "/"; - int mediaId = 0; - for (String oneLine : m3u8Arr) { - String thisOne = oneLine; - if (oneLine.contains("x-oss-expires")) { - media.put(String.valueOf(mediaId), site + thisOne); - thisOne = proxyVideoUrl("m3u8", shareId, fileId, templateId, String.valueOf(mediaId)); - mediaId++; - } - listM3u8.add(thisOne); - } - m3u8MediaMap.put(fileId, media); - return TextUtils.join("\n", listM3u8); - } - - public Object[] proxySub(Map params) throws Exception { - String fileId = params.get("fileId"); - String shareId = params.get("shareId"); - Response res = OkHttp.newCall(getDownloadUrl(shareId, fileId), getHeaderAuth()); - Object[] result = new Object[3]; - result[0] = 200; - result[1] = "application/octet-stream"; - result[2] = new ByteArrayInputStream(res.body().bytes()); - return result; - } - - private void startFlow() { - Init.run(this::showInput); - } - - private void showInput() { - try { - int margin = ResUtil.dp2px(16); - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - FrameLayout frame = new FrameLayout(Init.context()); - params.setMargins(margin, margin, margin, margin); - EditText input = new EditText(Init.context()); - frame.addView(input, params); - dialog = new AlertDialog.Builder(Init.getActivity()).setTitle("請輸入Token").setView(frame).setNeutralButton("QRCode", (dialog, which) -> onNeutral()).setNegativeButton(android.R.string.cancel, null).setPositiveButton(android.R.string.ok, (dialog, which) -> onPositive(input.getText().toString())).show(); - } catch (Exception ignored) { - } - } - - private void onNeutral() { - dismiss(); - Init.execute(this::getQRCode); - } - - private void onPositive(String text) { - dismiss(); - Init.execute(() -> { - if (text.startsWith("http")) setToken(OkHttp.string(text)); - else setToken(text); - }); - } - - private void getQRCode() { - String json = 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"); - Data data = Data.objectFrom(json).getContent().getData(); - Init.run(() -> openApp(json, data)); - } - - private void openApp(String json, Data data) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setClassName("com.alicloud.databox", "com.taobao.login4android.scan.QrScanActivity"); - intent.putExtra("key_scanParam", json); - Init.getActivity().startActivity(intent); - } catch (Exception e) { - showQRCode(data); - } finally { - Init.execute(() -> startService(data.getParams())); - } - } - - private void showQRCode(Data data) { - try { - int size = ResUtil.dp2px(240); - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(size, size); - ImageView image = new ImageView(Init.context()); - image.setScaleType(ImageView.ScaleType.CENTER_CROP); - image.setImageBitmap(QRCode.getBitmap(data.getCodeContent(), size, 2)); - FrameLayout frame = new FrameLayout(Init.context()); - params.gravity = Gravity.CENTER; - frame.addView(image, params); - dialog = new AlertDialog.Builder(Init.getActivity()).setView(frame).setOnCancelListener(this::dismiss).setOnDismissListener(this::dismiss).show(); - dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - Notify.show("請使用阿里雲盤 App 掃描二維碼"); - } catch (Exception ignored) { - } - } - - private void startService(Map params) { - service = Executors.newScheduledThreadPool(1); - service.scheduleAtFixedRate(() -> { - String result = OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.2.3", params); - Data data = Data.objectFrom(result).getContent().getData(); - if (data.hasToken()) setToken(data.getToken()); - }, 1, 1, TimeUnit.SECONDS); - } - - private void setToken(String value) { - cache.getUser().setRefreshToken(value); - SpiderDebug.log("Token:" + value); - Notify.show("Token:" + value); - refreshAccessToken(); - stopService(); - } - - private void stopService() { - if (service != null) service.shutdownNow(); - Init.run(this::dismiss); - } - - private void dismiss(DialogInterface dialog) { - stopService(); - } - - private void dismiss() { - try { - if (dialog != null) dialog.dismiss(); - } catch (Exception ignored) { - } - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Biz.java b/app/src/main/java/com/github/catvod/bean/ali/Biz.java deleted file mode 100644 index aa9d554f..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Biz.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.github.catvod.bean.ali; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -public class Biz { - - @SerializedName("pds_login_result") - private Biz pdsLoginResult; - @SerializedName("role") - private String role; - @SerializedName("isFirstLogin") - private Boolean isFirstLogin; - @SerializedName("needLink") - private Boolean needLink; - @SerializedName("loginType") - private String loginType; - @SerializedName("nickName") - private String nickName; - @SerializedName("needRpVerify") - private Boolean needRpVerify; - @SerializedName("avatar") - private String avatar; - @SerializedName("accessToken") - private String accessToken; - @SerializedName("userName") - private String userName; - @SerializedName("userId") - private String userId; - @SerializedName("defaultDriveId") - private String defaultDriveId; - @SerializedName("existLink") - private List existLink; - @SerializedName("expiresIn") - private Integer expiresIn; - @SerializedName("expireTime") - private String expireTime; - @SerializedName("requestId") - private String requestId; - @SerializedName("dataPinSetup") - private Boolean dataPinSetup; - @SerializedName("state") - private String state; - @SerializedName("tokenType") - private String tokenType; - @SerializedName("dataPinSaved") - private Boolean dataPinSaved; - @SerializedName("refreshToken") - private String refreshToken; - @SerializedName("status") - private String status; - - public static Biz objectFrom(String str) { - return new Gson().fromJson(str, Biz.class); - } - - public Biz getPdsLoginResult() { - return pdsLoginResult; - } - - public String getRefreshToken() { - return refreshToken; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Cache.java b/app/src/main/java/com/github/catvod/bean/ali/Cache.java deleted file mode 100644 index 155d216e..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Cache.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.catvod.bean.ali; - -import com.github.catvod.api.AliYun; -import com.github.catvod.spider.Init; -import com.github.catvod.utils.Path; -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class Cache { - - @SerializedName("user") - private User user; - @SerializedName("oauth") - private OAuth oauth; - @SerializedName("drive") - private Drive drive; - - public static Cache objectFrom(String str) { - Cache item = new Gson().fromJson(str, Cache.class); - return item == null ? new Cache() : item; - } - - public User getUser() { - return user == null ? new User() : user; - } - - public void setUser(User user) { - this.user = user; - this.save(); - } - - public OAuth getOAuth() { - return oauth == null ? new OAuth() : oauth; - } - - public void setOAuth(OAuth oauth) { - this.oauth = oauth; - this.save(); - } - - public Drive getDrive() { - return drive == null ? new Drive() : drive; - } - - public void setDrive(Drive drive) { - this.drive = drive; - this.save(); - } - - public void save() { - Init.execute(() -> Path.write(AliYun.get().getCache(), toString())); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Code.java b/app/src/main/java/com/github/catvod/bean/ali/Code.java deleted file mode 100644 index a0c0cc28..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Code.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class Code { - - @SerializedName("redirectUri") - private String redirectUri; - - public static Code objectFrom(String str) { - return new Gson().fromJson(str, Code.class); - } - - public String getRedirectUri() { - return TextUtils.isEmpty(redirectUri) ? "" : redirectUri; - } - - public String getCode() { - return getRedirectUri().split("code=")[1]; - } -} 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 deleted file mode 100644 index 5b083d27..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Data.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.github.catvod.bean.ali; - -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") - private Data data; - @SerializedName("content") - private Data content; - @SerializedName("t") - private String t; - @SerializedName("ck") - private String ck; - @SerializedName("codeContent") - private String codeContent; - @SerializedName("qrCodeStatus") - private String qrCodeStatus; - @SerializedName("bizExt") - private String bizExt; - - public static Data objectFrom(String str) { - try { - Data data = new Gson().fromJson(str, Data.class); - return data == null ? new Data() : data; - } catch (Exception e) { - return new Data(); - } - } - - public Data getData() { - return data == null ? new Data() : data; - } - - public Data getContent() { - return content == null ? new Data() : content; - } - - public String getT() { - return t == null ? "" : t; - } - - public String getCk() { - return ck == null ? "" : ck; - } - - public String getCodeContent() { - return codeContent == null ? "" : codeContent; - } - - public String getQrCodeStatus() { - return qrCodeStatus == null ? "" : qrCodeStatus; - } - - public String getBizExt() { - return bizExt == null ? "" : bizExt; - } - - public String getToken() { - return Biz.objectFrom(new String(Base64.decode(getBizExt(), Base64.DEFAULT))).getPdsLoginResult().getRefreshToken(); - } - - public boolean hasToken() { - return getQrCodeStatus().equals("CONFIRMED") && getBizExt().length() > 0; - } - - 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/bean/ali/Download.java b/app/src/main/java/com/github/catvod/bean/ali/Download.java deleted file mode 100644 index c0f8c613..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Download.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class Download { - - @SerializedName("url") - private String url; - @SerializedName("file_id") - private String fileId; - @SerializedName("expiration") - private String expiration; - - public static Download objectFrom(String str) { - return new Gson().fromJson(str, Download.class); - } - - public String getUrl() { - return TextUtils.isEmpty(url) ? "" : url; - } - - public String getFileId() { - return TextUtils.isEmpty(fileId) ? "" : fileId; - } - - public String getExpiration() { - return TextUtils.isEmpty(expiration) ? "" : expiration; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Drive.java b/app/src/main/java/com/github/catvod/bean/ali/Drive.java deleted file mode 100644 index 8f348560..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Drive.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class Drive { - - @SerializedName("default_drive_id") - private String defaultDriveId; - @SerializedName("resource_drive_id") - private String resourceDriveId; - - public static Drive objectFrom(String str) { - Drive item = new Gson().fromJson(str, Drive.class); - return item == null ? new Drive() : item; - } - - private String getDefaultDriveId() { - return TextUtils.isEmpty(defaultDriveId) ? "" : defaultDriveId; - } - - private String getResourceDriveId() { - return TextUtils.isEmpty(resourceDriveId) ? "" : resourceDriveId; - } - - public String getDriveId() { - return getResourceDriveId().isEmpty() ? getDefaultDriveId() : getResourceDriveId(); - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Item.java b/app/src/main/java/com/github/catvod/bean/ali/Item.java deleted file mode 100644 index 41a2e209..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Item.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.github.catvod.utils.Util; -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class Item implements Comparable { - - @SerializedName("items") - private List items; - @SerializedName("next_marker") - private String nextMarker; - @SerializedName("file_id") - private String fileId; - @SerializedName("share_id") - private String shareId; - @SerializedName("name") - private String name; - @SerializedName("type") - private String type; - @SerializedName("file_extension") - private String fileExtension; - @SerializedName("category") - private String category; - @SerializedName("size") - private double size; - @SerializedName("parent") - private String parent; - - public static Item objectFrom(String str) { - return new Gson().fromJson(str, Item.class); - } - - public Item(String fileId) { - this.fileId = fileId; - } - - public List getItems() { - return items == null ? Collections.emptyList() : items; - } - - public String getNextMarker() { - return TextUtils.isEmpty(nextMarker) ? "" : nextMarker; - } - - public String getFileId() { - return TextUtils.isEmpty(fileId) ? "" : fileId; - } - - public String getName() { - return TextUtils.isEmpty(name) ? "" : name; - } - - public String getType() { - return TextUtils.isEmpty(type) ? "" : type; - } - - public String getExt() { - return TextUtils.isEmpty(fileExtension) ? "" : fileExtension; - } - - public String getCategory() { - return TextUtils.isEmpty(category) ? "" : category; - } - - public String getSize() { - return size == 0 ? "" : "[" + Util.getSize(size) + "]"; - } - - public String getParent() { - return TextUtils.isEmpty(parent) ? "" : "[" + parent + "]"; - } - - public Item parent(String parent) { - this.parent = parent; - return this; - } - - public String getDisplayName() { - return TextUtils.join(" ", Arrays.asList(getParent(), getName(), getSize())).trim(); - } - - public String getSortName() { - return TextUtils.join(" ", Arrays.asList(getParent(), Util.getDigit(getName()))).trim(); - } - - @Override - public int compareTo(Item item) { - return getSortName().compareTo(item.getSortName()); - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/OAuth.java b/app/src/main/java/com/github/catvod/bean/ali/OAuth.java deleted file mode 100644 index ae37e2b3..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/OAuth.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class OAuth { - - @SerializedName("token_type") - private String tokenType; - @SerializedName("access_token") - private String accessToken; - @SerializedName("refresh_token") - private String refreshToken; - - public static OAuth objectFrom(String str) { - OAuth item = new Gson().fromJson(str, OAuth.class); - return item == null ? new OAuth() : item; - } - - public String getTokenType() { - return TextUtils.isEmpty(tokenType) ? "" : tokenType; - } - - public String getAccessToken() { - return TextUtils.isEmpty(accessToken) ? "" : accessToken; - } - - public String getRefreshToken() { - return TextUtils.isEmpty(refreshToken) ? "" : refreshToken; - } - - public String getAuthorization() { - return getTokenType() + " " + getAccessToken(); - } - - public void clean() { - this.refreshToken = ""; - this.accessToken = ""; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Preview.java b/app/src/main/java/com/github/catvod/bean/ali/Preview.java deleted file mode 100644 index 0d6c6a3a..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Preview.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.github.catvod.bean.Sub; -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.Collections; -import java.util.List; - -public class Preview { - - @SerializedName("video_preview_play_info") - private Info videoPreviewPlayInfo; - @SerializedName("drive_id") - private String driveId; - @SerializedName("file_id") - private String fileId; - - public static Preview objectFrom(String str) { - return new Gson().fromJson(str, Preview.class); - } - - public Info getVideoPreviewPlayInfo() { - return videoPreviewPlayInfo == null ? new Info() : videoPreviewPlayInfo; - } - - public String getDriveId() { - return TextUtils.isEmpty(driveId) ? "" : driveId; - } - - public String getFileId() { - return TextUtils.isEmpty(fileId) ? "" : fileId; - } - - public static class Info { - - @SerializedName("live_transcoding_task_list") - private List liveTranscodingTaskList; - @SerializedName("live_transcoding_subtitle_task_list") - private List liveTranscodingSubtitleTaskList; - - public List getLiveTranscodingTaskList() { - return liveTranscodingTaskList == null ? Collections.emptyList() : liveTranscodingTaskList; - } - - public List getLiveTranscodingSubtitleTaskList() { - return liveTranscodingSubtitleTaskList == null ? Collections.emptyList() : liveTranscodingSubtitleTaskList; - } - } - - public static class LiveTranscodingTask { - - @SerializedName("template_id") - private String templateId; - @SerializedName("language") - private String language; - @SerializedName("status") - private String status; - @SerializedName("url") - private String url; - - public String getTemplateId() { - return TextUtils.isEmpty(templateId) ? "" : templateId; - } - - public String getLanguage() { - return TextUtils.isEmpty(language) ? "" : language; - } - - public String getStatus() { - return TextUtils.isEmpty(status) ? "" : status; - } - - public String getUrl() { - return TextUtils.isEmpty(url) ? "" : url; - } - - public Sub getSub() { - return Sub.create().url(getUrl()).name(getLanguage()).lang(getLanguage()).ext("vtt"); - } - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Resp.java b/app/src/main/java/com/github/catvod/bean/ali/Resp.java deleted file mode 100644 index 65b14542..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Resp.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.Collections; -import java.util.List; - -public class Resp { - - @SerializedName("responses") - private List responses; - @SerializedName("body") - private Body body; - @SerializedName("id") - private String id; - @SerializedName("status") - private int status; - - public static Resp objectFrom(String str) { - return new Gson().fromJson(str, Resp.class); - } - - public List getResponses() { - return responses == null ? Collections.emptyList() : responses; - } - - public Resp getResponse() { - return getResponses().isEmpty() ? new Resp() : getResponses().get(0); - } - - public Body getBody() { - return body == null ? new Body() : body; - } - - public String getId() { - return TextUtils.isEmpty(id) ? "" : id; - } - - public int getStatus() { - return status; - } - - public static class Body { - - @SerializedName("domain_id") - private String domainId; - @SerializedName("drive_id") - private String driveId; - @SerializedName("file_id") - private String fileId; - @SerializedName("code") - private String code; - @SerializedName("message") - private String message; - - public String getDomainId() { - return TextUtils.isEmpty(domainId) ? "" : domainId; - } - - public String getDriveId() { - return TextUtils.isEmpty(driveId) ? "" : driveId; - } - - public String getFileId() { - return TextUtils.isEmpty(fileId) ? "" : fileId; - } - - public String getCode() { - return TextUtils.isEmpty(code) ? "" : code; - } - - public String getMessage() { - return TextUtils.isEmpty(message) ? "" : message; - } - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/Share.java b/app/src/main/java/com/github/catvod/bean/ali/Share.java deleted file mode 100644 index 40e2101f..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Share.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.Collections; -import java.util.List; - -public class Share { - - @SerializedName("share_id") - private String shareId; - @SerializedName("share_token") - private String shareToken; - @SerializedName("expire_time") - private String expireTime; - @SerializedName("expires_in") - private int expiresIn; - - @SerializedName("creator_id") - private String creatorId; - @SerializedName("creator_name") - private String creatorName; - @SerializedName("creator_phone") - private String creatorPhone; - @SerializedName("expiration") - private String expiration; - @SerializedName("updated_at") - private String updatedAt; - @SerializedName("vip") - private String vip; - @SerializedName("avatar") - private String avatar; - @SerializedName("share_name") - private String shareName; - @SerializedName("display_name") - private String displayName; - @SerializedName("share_title") - private String shareTitle; - @SerializedName("has_pwd") - private boolean hasPwd; - @SerializedName("file_infos") - private List fileInfos; - - private long time; - - public static Share objectFrom(String str) { - return new Gson().fromJson(str, Share.class); - } - - public String getShareId() { - return TextUtils.isEmpty(shareId) ? "" : shareId; - } - - public String getShareToken() { - return TextUtils.isEmpty(shareToken) ? "" : shareToken; - } - - public String getExpireTime() { - return TextUtils.isEmpty(expireTime) ? "" : expireTime; - } - - public int getExpiresIn() { - return expiresIn; - } - - public String getCreatorId() { - return TextUtils.isEmpty(creatorId) ? "" : creatorId; - } - - public String getCreatorName() { - return TextUtils.isEmpty(creatorName) ? "" : creatorName; - } - - public String getCreatorPhone() { - return TextUtils.isEmpty(creatorPhone) ? "" : creatorPhone; - } - - public String getExpiration() { - return TextUtils.isEmpty(expiration) ? "" : expiration; - } - - public String getUpdatedAt() { - return TextUtils.isEmpty(updatedAt) ? "" : updatedAt; - } - - public String getVip() { - return TextUtils.isEmpty(vip) ? "" : vip; - } - - public String getAvatar() { - return TextUtils.isEmpty(avatar) ? "" : avatar; - } - - public String getShareName() { - return TextUtils.isEmpty(shareName) ? "" : shareName; - } - - public String getDisplayName() { - return TextUtils.isEmpty(displayName) ? "" : displayName; - } - - public String getShareTitle() { - return TextUtils.isEmpty(shareTitle) ? "" : shareTitle; - } - - public boolean isHasPwd() { - return hasPwd; - } - - public List getFileInfos() { - return fileInfos == null ? Collections.emptyList() : fileInfos; - } - - public Share setTime() { - this.time = System.currentTimeMillis() + 60 * 60 * 1000; - return this; - } - - public Share setShareId(String shareId) { - this.shareId = shareId; - return this; - } - - public boolean alive(String shareId) { - return getShareId().equals(shareId) && System.currentTimeMillis() <= time; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/ali/User.java b/app/src/main/java/com/github/catvod/bean/ali/User.java deleted file mode 100644 index f332abd3..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/User.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.github.catvod.bean.ali; - -import android.text.TextUtils; - -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -public class User { - - @SerializedName("token_type") - private String tokenType; - @SerializedName("access_token") - private String accessToken; - @SerializedName("refresh_token") - private String refreshToken; - - public static User objectFrom(String str) { - User item = new Gson().fromJson(str, User.class); - return item == null ? new User() : item; - } - - public String getTokenType() { - return TextUtils.isEmpty(tokenType) ? "" : tokenType; - } - - public String getAccessToken() { - return TextUtils.isEmpty(accessToken) ? "" : accessToken; - } - - public String getRefreshToken() { - return TextUtils.isEmpty(refreshToken) ? "" : refreshToken; - } - - public void setRefreshToken(String refreshToken) { - this.refreshToken = refreshToken; - } - - public String getAuthorization() { - return getTokenType() + " " + getAccessToken(); - } - - public boolean isAuthed() { - return getTokenType().length() > 0 && getAccessToken().length() > 0; - } - - public void clean() { - this.refreshToken = ""; - this.accessToken = ""; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/star/Card.java b/app/src/main/java/com/github/catvod/bean/star/Card.java deleted file mode 100644 index 3c25110a..00000000 --- a/app/src/main/java/com/github/catvod/bean/star/Card.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.catvod.bean.star; - -import android.text.TextUtils; - -import com.github.catvod.bean.Vod; -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; -import com.google.gson.reflect.TypeToken; - -import java.lang.reflect.Type; -import java.util.Collections; -import java.util.List; - -public class Card { - - @SerializedName("name") - private String name; - @SerializedName(value = "img", alternate = "picurl") - private String img; - @SerializedName("id") - private String id; - @SerializedName("countStr") - private String countStr; - @SerializedName("url") - private String url; - @SerializedName("cards") - private List cards; - - public static List arrayFrom(String str) { - Type listType = new TypeToken>() {}.getType(); - return new Gson().fromJson(str, listType); - } - - public String getName() { - return TextUtils.isEmpty(name) ? "" : name; - } - - public String getImg() { - return TextUtils.isEmpty(img) ? "" : img; - } - - public String getId() { - return TextUtils.isEmpty(id) ? "" : id; - } - - public String getCountStr() { - return TextUtils.isEmpty(countStr) ? "" : countStr; - } - - public String getUrl() { - return TextUtils.isEmpty(url) ? "" : url; - } - - public List getCards() { - return cards == null ? Collections.emptyList() : cards; - } - - public Vod vod() { - return new Vod(getId(), getName(), getImg(), getCountStr()); - } -} diff --git a/app/src/main/java/com/github/catvod/bean/star/Condition.java b/app/src/main/java/com/github/catvod/bean/star/Condition.java deleted file mode 100644 index f3354405..00000000 --- a/app/src/main/java/com/github/catvod/bean/star/Condition.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.catvod.bean.star; - -import com.github.catvod.bean.Filter; -import com.google.gson.Gson; -import com.google.gson.annotations.SerializedName; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class Condition { - - @SerializedName("label") - private List> label; - @SerializedName("country") - private List country; - @SerializedName("time") - private List time; - - public static Condition objectFrom(String str) { - return new Gson().fromJson(str, Condition.class); - } - - public List> getLabel() { - return label == null ? Collections.emptyList() : label; - } - - public List getCountry() { - return country == null ? Collections.emptyList() : country; - } - - public List getTime() { - return time == null ? Collections.emptyList() : time; - } - - public List getFilter() { - List filters = new ArrayList<>(); - filters.add(new Filter("type", "類型", getTypeValues())); - filters.add(new Filter("area", "地區", getAreaValues())); - filters.add(new Filter("year", "年份", getYearValues())); - return filters; - } - - private List getTypeValues() { - List values = new ArrayList<>(); - values.add(new Filter.Value("全部", "")); - for (List list : getLabel()) values.add(new Filter.Value(list.get(0))); - return values; - } - - private List getAreaValues() { - List values = new ArrayList<>(); - values.add(new Filter.Value("全部", "")); - for (String text : getCountry()) values.add(new Filter.Value(text)); - return values; - } - - private List getYearValues() { - List values = new ArrayList<>(); - values.add(new Filter.Value("全部", "")); - Collections.sort(getTime(), Collections.reverseOrder()); - for (Integer year : getTime()) if (year >= 2010) values.add(new Filter.Value(String.valueOf(year))); - return values; - } -} diff --git a/app/src/main/java/com/github/catvod/bean/star/Group.java b/app/src/main/java/com/github/catvod/bean/star/Group.java deleted file mode 100644 index 9027f676..00000000 --- a/app/src/main/java/com/github/catvod/bean/star/Group.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.catvod.bean.star; - -import android.text.TextUtils; - -import com.google.gson.annotations.SerializedName; - -import java.util.Collections; -import java.util.List; - -public class Group { - - @SerializedName("name") - private String name; - @SerializedName("videos") - private List