Merge pull request #403 from okcaptain/release

update
pull/411/head
okcaptain 2 years ago committed by GitHub
commit 3af697b797
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      app/build.gradle
  2. 27
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 2
      app/src/leanback/res/layout/adapter_type.xml
  4. 14
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java
  5. 6
      app/src/main/java/com/fongmi/android/tv/utils/Util.java
  6. 15
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  7. 11
      app/src/mobile/res/drawable/ic_battery_00.xml
  8. 9
      app/src/mobile/res/drawable/ic_battery_25.xml
  9. 9
      app/src/mobile/res/drawable/ic_battery_50.xml
  10. 9
      app/src/mobile/res/drawable/ic_battery_75.xml
  11. 9
      app/src/mobile/res/drawable/ic_battery_full.xml
  12. 31
      app/src/mobile/res/layout/view_control_vod.xml
  13. 1
      catvod/build.gradle
  14. 45
      catvod/src/main/java/com/github/catvod/net/OkCookieJar.java
  15. 4
      catvod/src/main/java/com/github/catvod/net/OkHttp.java
  16. 33
      catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java
  17. 20
      catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java
  18. 4
      quickjs/src/main/java/com/fongmi/quickjs/method/Global.java
  19. 3
      quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java
  20. 1
      quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java

@ -11,7 +11,7 @@ android {
minSdk 21
targetSdk 28
versionCode 233
versionName "2.3.3"
versionName "0502"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
@ -121,7 +121,7 @@ dependencies {
implementation 'com.github.bumptech.glide:okhttp3-integration:4.16.0'
implementation 'com.github.ctiao:DanmakuFlameMaster:0.9.25'
implementation 'com.github.jahirfiquitiva:TextDrawable:1.0.3'
implementation('com.github.TeamNewPipe:NewPipeExtractor:v0.23.1') { exclude group: 'org.jsoup', module: 'jsoup' }
implementation('com.github.teamnewpipe:NewPipeExtractor:v0.23.1') { exclude group: 'org.jsoup', module: 'jsoup' }
implementation 'com.github.thegrizzlylabs:sardine-android:0.9'
implementation 'com.google.android.material:material:1.11.0'
implementation 'com.google.net.cronet:cronet-okhttp:0.1.0'

@ -145,7 +145,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private boolean initAuto;
private boolean autoMode;
private boolean useParse;
private int currentFlag;
private int toggleCount;
private int groupSize;
private Runnable mR1;
@ -250,13 +249,18 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private Flag getFlag() {
return (Flag) mFlagAdapter.get(mBinding.flag.getSelectedPosition());
return (Flag) mFlagAdapter.get(getFlagPosition());
}
private Episode getEpisode() {
return (Episode) mEpisodeAdapter.get(getEpisodePosition());
}
private int getFlagPosition() {
for (int i = 0; i < mFlagAdapter.size(); i++) if (((Flag) mFlagAdapter.get(i)).isActivated()) return i;
return 0;
}
private int getEpisodePosition() {
for (int i = 0; i < mEpisodeAdapter.size(); i++) if (((Episode) mEpisodeAdapter.get(i)).isActivated()) return i;
return 0;
@ -699,13 +703,12 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
public void setEpisodeActivated(Episode item) {
int flagPosition = getFlagPosition();
if (shouldEnterFullscreen(item)) return;
setCurrentFlag(mBinding.flag.getSelectedPosition());
for (int i = 0; i < mFlagAdapter.size(); i++) ((Flag) mFlagAdapter.get(i)).toggle(getCurrentFlag() == i, item);
if (isFullscreen()) Notify.show(getString(R.string.play_ready, item.getName()));
for (int i = 0; i < mFlagAdapter.size(); i++) ((Flag) mFlagAdapter.get(i)).toggle(flagPosition == i, item);
setEpisodeSelectedPosition(getEpisodePosition());
notifyItemChanged(getEpisodeView(), mEpisodeAdapter);
if (mEpisodeAdapter.size() == 0) return;
if (isFullscreen()) Notify.show(getString(R.string.play_ready, item.getName()));
onRefresh();
}
@ -824,7 +827,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mBinding.video.requestFocus();
mBinding.video.setForeground(null);
mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
mBinding.flag.setSelectedPosition(getCurrentFlag());
mBinding.flag.setSelectedPosition(getFlagPosition());
mDanmakuContext.setScaleTextSize(1.2f * Setting.getDanmuSize());
setSubtitle(Setting.getSubtitle());
mKeyDown.setFull(true);
@ -1431,7 +1434,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void checkFlag() {
int position = isGone(mBinding.flag) ? -1 : mBinding.flag.getSelectedPosition();
int position = isGone(mBinding.flag) ? -1 : getFlagPosition();
if (position == mFlagAdapter.size() - 1) checkSearch(false);
else nextFlag(position);
}
@ -1582,14 +1585,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
this.useParse = useParse;
}
public int getCurrentFlag() {
return currentFlag;
}
public void setCurrentFlag(int currentFlag) {
this.currentFlag = currentFlag;
}
public int getToggleCount() {
return toggleCount;
}

@ -9,5 +9,5 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:textColor="@color/white"
android:textSize="18sp"
android:textSize="16sp"
tools:text="電影" />

@ -14,7 +14,6 @@ import com.tencent.smtt.export.external.interfaces.SslError;
import com.tencent.smtt.export.external.interfaces.SslErrorHandler;
import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
import com.tencent.smtt.sdk.CookieManager;
import com.tencent.smtt.sdk.QbSdk;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebView;
@ -31,6 +30,7 @@ import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.impl.ParseCallback;
import com.fongmi.android.tv.utils.Sniffer;
import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkCookieJar;
import com.google.common.net.HttpHeaders;
import com.orhanobut.logger.Logger;
@ -90,7 +90,6 @@ public class CustomWebView extends WebView {
getSettings().setMediaPlaybackRequiresUserGesture(false);
getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
CookieManager.getInstance().setAcceptThirdPartyCookies(this, true);
setWebViewClient(webViewClient());
setWebChromeClient(webChromeClient());
}
@ -107,13 +106,14 @@ public class CustomWebView extends WebView {
}
private void start(String url, Map<String, String> headers) {
OkCookieJar.setAcceptThirdPartyCookies(this);
checkHeader(url, headers);
loadUrl(url, headers);
}
private void checkHeader(String url, Map<String, String> headers) {
for (String key : headers.keySet()) {
if (HttpHeaders.COOKIE.equalsIgnoreCase(key)) CookieManager.getInstance().setCookie(url, headers.get(key));
if (HttpHeaders.COOKIE.equalsIgnoreCase(key)) OkCookieJar.sync(url, headers.get(key));
if (HttpHeaders.USER_AGENT.equalsIgnoreCase(key)) getSettings().setUserAgentString(headers.get(key));
}
}
@ -128,7 +128,7 @@ public class CustomWebView extends WebView {
if (TextUtils.isEmpty(host) || VodConfig.get().getAds().contains(host)) return empty;
if (url.contains("challenges.cloudflare.com/cdn-cgi")) App.post(() -> showDialog());
if (detect && url.contains("player/?url=")) onParseAdd(headers, url);
else if (isVideoFormat(url)) interrupt(headers, url);
else if (isVideoFormat(url)) onParseSuccess(headers, url);
return super.shouldInterceptRequest(view, request);
}
@ -210,12 +210,6 @@ public class CustomWebView extends WebView {
}
}
private void interrupt(Map<String, String> headers, String url) {
String cookie = CookieManager.getInstance().getCookie(url);
if (cookie != null) headers.put(HttpHeaders.COOKIE, cookie);
onParseSuccess(headers, url);
}
private void onParseAdd(Map<String, String> headers, String url) {
App.post(() -> CustomWebView.create(App.get()).start(key, from, headers, url, click, callback, false));
}

@ -10,6 +10,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.os.BatteryManager;
import android.os.Build;
import android.os.IBinder;
import android.os.Parcelable;
@ -180,4 +181,9 @@ public class Util {
return false;
}
public static int batteryLevel() {
BatteryManager batteryManager = (BatteryManager) App.get().getSystemService(Context.BATTERY_SERVICE);
return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
}
}

@ -107,6 +107,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -310,7 +311,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mObserveSearch = this::setSearch;
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
mClock = Clock.create(mBinding.display.time);
mClock = Clock.create(Arrays.asList(mBinding.display.time, mBinding.control.time));
mR0 = this::stopService;
mR1 = this::hideControl;
mR2 = this::setTraffic;
@ -1029,6 +1030,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.control.danmu.setVisibility(isLock() || !mBinding.danmaku.isPrepared() ? View.GONE : View.VISIBLE);
mBinding.control.danmuSetting.setVisibility(isLock() || !Setting.isDanmuLoad() || !isVisible(mBinding.danmaku) ? View.GONE : View.VISIBLE);
mBinding.control.setting.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE);
mBinding.control.batteryInfo.setVisibility(isFullscreen() ? View.VISIBLE : View.GONE);
mBinding.control.right.rotate.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE);
mBinding.control.keep.setVisibility(mHistory == null ? View.GONE : View.VISIBLE);
mBinding.control.right.back.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE);
@ -1043,6 +1045,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.control.getRoot().setVisibility(View.VISIBLE);
showDisplayInfo();
checkPlayImg(mPlayers.isPlaying());
checkBatteryImg();
setR1Callback();
}
@ -1173,6 +1176,16 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.control.danmu.setImageResource(Setting.isDanmu() ? R.drawable.ic_control_danmu_on : R.drawable.ic_control_danmu_off);
}
private void checkBatteryImg() {
int batteryLevel = Util.batteryLevel();
int resId = R.drawable.ic_battery_00;
if (batteryLevel >= 90) resId = R.drawable.ic_battery_full;
else if (batteryLevel >= 60) resId = R.drawable.ic_battery_75;
else if (batteryLevel >= 40) resId = R.drawable.ic_battery_50;
else if (batteryLevel >= 10) resId = R.drawable.ic_battery_25;
mBinding.control.battery.setImageResource(resId);
}
private void createKeep() {
Keep keep = new Keep();
keep.setKey(getHistoryKey());

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#ffffff"
android:pathData="M938.7,426.7l0,-85.3c0,-46.9 -38.4,-85.3 -85.3,-85.3L128,256c-46.9,0 -85.3,38.4 -85.3,85.3l0,341.3c0,46.9 38.4,85.3 85.3,85.3l725.3,0c46.9,0 85.3,-38.4 85.3,-85.3l0,-85.3c23.5,0 42.7,-19.2 42.7,-42.7l0,-85.3C981.3,445.9 962.1,426.7 938.7,426.7zM896,469.3l0,85.3 0,128c0,23.5 -19.2,42.7 -42.7,42.7L128,725.3c-23.5,0 -42.7,-19.2 -42.7,-42.7L85.3,341.3c0,-23.5 19.2,-42.7 42.7,-42.7l725.3,0c23.5,0 42.7,19.2 42.7,42.7L896,469.3z" />
</vector>

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M128,682.7l213.3,0L341.3,341.3 128,341.3 128,682.7zM938.7,426.7l0,-85.3c0,-46.9 -38.4,-85.3 -85.3,-85.3L128,256c-46.9,0 -85.3,38.4 -85.3,85.3l0,341.3c0,46.9 38.4,85.3 85.3,85.3l725.3,0c46.9,0 85.3,-38.4 85.3,-85.3l0,-85.3c23.5,0 42.7,-19.2 42.7,-42.7l0,-85.3C981.3,445.9 962.1,426.7 938.7,426.7zM896,682.7c0,23.5 -19.2,42.7 -42.7,42.7L128,725.3c-23.5,0 -42.7,-19.2 -42.7,-42.7L85.3,341.3c0,-23.5 19.2,-42.7 42.7,-42.7l725.3,0c23.5,0 42.7,19.2 42.7,42.7L896,682.7z"
android:fillColor="#ffffff"/>
</vector>

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M938.7,426.7l0,-85.3c0,-46.9 -38.4,-85.3 -85.3,-85.3L128,256c-46.9,0 -85.3,38.4 -85.3,85.3l0,341.3c0,46.9 38.4,85.3 85.3,85.3l725.3,0c46.9,0 85.3,-38.4 85.3,-85.3l0,-85.3c23.5,0 42.7,-19.2 42.7,-42.7l0,-85.3C981.3,445.9 962.1,426.7 938.7,426.7zM896,682.7c0,23.5 -19.2,42.7 -42.7,42.7L128,725.3c-23.5,0 -42.7,-19.2 -42.7,-42.7L85.3,341.3c0,-23.5 19.2,-42.7 42.7,-42.7l725.3,0c23.5,0 42.7,19.2 42.7,42.7L896,682.7zM128,682.7l384,0L512,341.3 128,341.3 128,682.7z"
android:fillColor="#ffffff"/>
</vector>

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M938.7,426.7l0,-85.3c0,-46.9 -38.4,-85.3 -85.3,-85.3L128,256c-46.9,0 -85.3,38.4 -85.3,85.3l0,341.3c0,46.9 38.4,85.3 85.3,85.3l725.3,0c46.9,0 85.3,-38.4 85.3,-85.3l0,-85.3c23.5,0 42.7,-19.2 42.7,-42.7l0,-85.3C981.3,445.9 962.1,426.7 938.7,426.7zM896,469.3l0,85.3 0,128c0,23.5 -19.2,42.7 -42.7,42.7L128,725.3c-23.5,0 -42.7,-19.2 -42.7,-42.7L85.3,341.3c0,-23.5 19.2,-42.7 42.7,-42.7l725.3,0c23.5,0 42.7,19.2 42.7,42.7L896,469.3zM128,682.7l554.7,0L682.7,341.3 128,341.3 128,682.7z"
android:fillColor="#ffffff"/>
</vector>

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M128,682.7l725.3,0L853.3,341.3 128,341.3 128,682.7zM938.7,426.7l0,-85.3c0,-46.9 -38.4,-85.3 -85.3,-85.3L128,256c-46.9,0 -85.3,38.4 -85.3,85.3l0,341.3c0,46.9 38.4,85.3 85.3,85.3l725.3,0c46.9,0 85.3,-38.4 85.3,-85.3l0,-85.3c23.5,0 42.7,-19.2 42.7,-42.7l0,-85.3C981.3,445.9 962.1,426.7 938.7,426.7zM896,469.3l0,85.3 0,128c0,23.5 -19.2,42.7 -42.7,42.7L128,725.3c-23.5,0 -42.7,-19.2 -42.7,-42.7L85.3,341.3c0,-23.5 19.2,-42.7 42.7,-42.7l725.3,0c23.5,0 42.7,19.2 42.7,42.7L896,469.3z"
android:fillColor="#ffffff"/>
</vector>

@ -79,6 +79,37 @@
android:padding="8dp"
android:src="@drawable/ic_control_setting" />
<LinearLayout
android:id="@+id/batteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="8dp"
android:orientation="vertical">
<ImageView
android:id="@+id/battery"
android:layout_width="22dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_battery_full" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_gravity="center"
android:textSize="8sp"
android:maxLength="5"
android:layout_marginTop="-4dp"
android:background="?attr/selectableItemBackgroundBorderless"
tools:text="20:00:00" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -20,4 +20,5 @@ dependencies {
api 'com.squareup.okhttp3:okhttp:' + okhttpVersion
api 'com.squareup.okhttp3:okhttp-dnsoverhttps:' + okhttpVersion
api 'org.nanohttpd:nanohttpd:2.3.1'
api 'com.tencent.tbs:tbssdk:44286'
}

@ -1,12 +1,12 @@
package com.github.catvod.net;
import android.text.TextUtils;
import android.webkit.CookieManager;
import com.tencent.smtt.sdk.CookieManager;
import com.tencent.smtt.sdk.WebView;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@ -16,23 +16,56 @@ import okhttp3.HttpUrl;
public class OkCookieJar implements CookieJar {
private CookieManager manager;
private static class Loader {
static volatile OkCookieJar INSTANCE = new OkCookieJar();
}
public static OkCookieJar get() {
return Loader.INSTANCE;
}
private OkCookieJar() {
try {
manager = CookieManager.getInstance();
} catch (Throwable ignored) {
}
}
public static void setAcceptThirdPartyCookies(WebView view) {
try {
get().manager.setAcceptThirdPartyCookies(view, true);
} catch (Throwable ignored) {
}
}
public static void sync(String url, String cookie) {
try {
if (TextUtils.isEmpty(cookie)) return;
for (String split : cookie.split(";")) get().manager.setCookie(url, split);
} catch (Throwable ignored) {
}
}
@NonNull
@Override
public synchronized List<Cookie> loadForRequest(@NonNull HttpUrl url) {
try {
List<Cookie> items = new ArrayList<>();
String cookie = CookieManager.getInstance().getCookie(url.toString());
if (!TextUtils.isEmpty(cookie)) for (String split : cookie.split(";")) items.add(Cookie.parse(url, split));
String cookie = manager.getCookie(url.toString());
if (TextUtils.isEmpty(cookie)) return Collections.emptyList();
for (String split : cookie.split(";")) items.add(Cookie.parse(url, split));
return items;
} catch (Throwable e) {
return new ArrayList<>();
return Collections.emptyList();
}
}
@Override
public synchronized void saveFromResponse(@NonNull HttpUrl url, @NonNull List<Cookie> cookies) {
try {
for (Cookie cookie : cookies) CookieManager.getInstance().setCookie(url.toString(), cookie.toString());
for (Cookie cookie : cookies) manager.setCookie(url.toString(), cookie.toString());
} catch (Throwable ignored) {
}
}

@ -5,6 +5,8 @@ import android.text.TextUtils;
import androidx.collection.ArrayMap;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.interceptor.RequestInterceptor;
import com.github.catvod.net.interceptor.ResponseInterceptor;
import com.github.catvod.utils.Path;
import java.net.ProxySelector;
@ -131,7 +133,7 @@ public class OkHttp {
}
private static OkHttpClient.Builder getBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(new OkCookieJar()).addNetworkInterceptor(new OkInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).followRedirects(true).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(OkCookieJar.get()).addInterceptor(new RequestInterceptor()).addNetworkInterceptor(new ResponseInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).followRedirects(true).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
builder.proxySelector(get().proxy ? selector() : defaultSelector);
return builder;
}

@ -0,0 +1,33 @@
package com.github.catvod.net.interceptor;
import androidx.annotation.NonNull;
import com.github.catvod.Proxy;
import com.github.catvod.net.OkCookieJar;
import com.github.catvod.utils.Util;
import com.google.common.net.HttpHeaders;
import java.io.IOException;
import java.net.URI;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class RequestInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request();
URI uri = request.url().uri();
String url = request.url().toString();
Request.Builder builder = request.newBuilder();
OkCookieJar.sync(url, request.header(HttpHeaders.COOKIE));
boolean local = url.contains(":" + Proxy.getPort() + "/");
if (url.contains("+") && local) builder.url(url.replace("+", "%2B"));
if (url.contains("gitcode.net")) builder.header(HttpHeaders.USER_AGENT, Util.CHROME);
if (uri.getUserInfo() != null) builder.header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo()));
return chain.proceed(builder.build());
}
}

@ -1,33 +1,30 @@
package com.github.catvod.net;
package com.github.catvod.net.interceptor;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.github.catvod.Proxy;
import com.github.catvod.utils.Util;
import com.google.common.net.HttpHeaders;
import java.io.IOException;
import java.net.URI;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
public class OkInterceptor implements Interceptor {
public class ResponseInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Response response = chain.proceed(getRequest(chain.request()));
Response response = chain.proceed(chain.request());
String location = response.header(HttpHeaders.LOCATION);
String encoding = response.header(HttpHeaders.CONTENT_ENCODING);
if (response.isRedirect() && location != null) checkAuth(response, location);
@ -35,17 +32,6 @@ public class OkInterceptor implements Interceptor {
return response;
}
private Request getRequest(Request request) {
URI uri = request.url().uri();
String url = request.url().toString();
Request.Builder builder = request.newBuilder();
boolean local = url.contains(":" + Proxy.getPort() + "/");
if (url.contains("+") && local) builder.url(url.replace("+", "%2B"));
if (url.contains("gitcode.net")) builder.header(HttpHeaders.USER_AGENT, Util.CHROME);
if (uri.getUserInfo() != null) builder.header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo()));
return builder.build();
}
private void checkAuth(Response response, String location) {
try {
Uri uri = Uri.parse(location);

@ -150,8 +150,8 @@ public class Global {
@Keep
@JSMethod
public String md5X(String text) {
String result = Crypto.md5(text);
Logger.t("md5X").d("text:%s\nresult:\n%s" , text, result);
String result = Crypto.md5(text);
Logger.t("md5X").d("text:%s\nresult:\n%s", text, result);
return result;
}

@ -1,6 +1,7 @@
package com.fongmi.quickjs.utils;
import com.fongmi.quickjs.bean.Req;
import com.github.catvod.net.OkCookieJar;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util;
@ -75,7 +76,7 @@ public class Connect {
}
private static RequestBody getJsonBody(Req req) {
return RequestBody.create(req.getData().toString(), MediaType.get("application/json"));
return RequestBody.create(req.getData().toString(), MediaType.get("application/json; charset=utf-8"));
}
private static RequestBody getRawBody(Req req) {

@ -27,7 +27,6 @@ public class Crypto {
}
}
public static String aes(String mode, boolean encrypt, String input, boolean inBase64, String key, String iv, boolean outBase64) {
try {
byte[] keyBuf = key.getBytes();

Loading…
Cancel
Save