From 0a9f6f6675dd911db36697bb1789c27a525f7d3b Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 23 May 2023 00:02:12 +0800 Subject: [PATCH] Glide support okhttp --- app/build.gradle | 2 ++ .../java/com/fongmi/android/tv/Constant.java | 2 ++ .../com/fongmi/android/tv/player/ExoUtil.java | 7 +++-- .../server/process/ActionRequestProcess.java | 5 ++-- .../com/fongmi/android/tv/utils/ImgUtil.java | 9 ++++--- .../android/tv/utils/OkHttpGlideModule.java | 27 +++++++++++++++++++ .../java/com/github/catvod/net/OkHttp.java | 2 +- 7 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/fongmi/android/tv/utils/OkHttpGlideModule.java diff --git a/app/build.gradle b/app/build.gradle index a3769c279..166a00d1f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,6 +100,8 @@ dependencies { implementation 'cat.ereza:customactivityoncrash:2.4.0' implementation 'com.github.bassaer:materialdesigncolors:1.0.0' implementation 'com.github.bumptech.glide:glide:4.15.1' + implementation 'com.github.bumptech.glide:annotations:4.15.1' + implementation 'com.github.bumptech.glide:okhttp3-integration:4.15.1' implementation('com.github.thegrizzlylabs:sardine-android:0.8') { exclude group: 'com.squareup.okhttp3', module: 'okhttp' } implementation 'com.google.android.material:material:1.9.0' implementation 'com.google.code.gson:gson:' + gsonVersion diff --git a/app/src/main/java/com/fongmi/android/tv/Constant.java b/app/src/main/java/com/fongmi/android/tv/Constant.java index b5b52ab98..8bcdf1ce2 100644 --- a/app/src/main/java/com/fongmi/android/tv/Constant.java +++ b/app/src/main/java/com/fongmi/android/tv/Constant.java @@ -21,6 +21,8 @@ public class Constant { public static final int TIMEOUT_HTTP = 30 * 1000; //代理超時時間 public static final int TIMEOUT_GITHUB = 5 * 1000; + //代理超時時間 + public static final int TIMEOUT_SYNC = 2 * 1000; //搜尋線程數量 public static final int THREAD_POOL = 5; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index f315b7313..7e2ac60bf 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -12,12 +12,12 @@ import androidx.media3.database.DatabaseProvider; import androidx.media3.database.StandaloneDatabaseProvider; import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DefaultDataSource; -import androidx.media3.datasource.DefaultHttpDataSource; import androidx.media3.datasource.HttpDataSource; import androidx.media3.datasource.cache.Cache; import androidx.media3.datasource.cache.CacheDataSource; import androidx.media3.datasource.cache.NoOpCacheEvictor; import androidx.media3.datasource.cache.SimpleCache; +import androidx.media3.datasource.okhttp.OkHttpDataSource; import androidx.media3.exoplayer.DefaultLoadControl; import androidx.media3.exoplayer.DefaultRenderersFactory; import androidx.media3.exoplayer.LoadControl; @@ -40,6 +40,7 @@ import com.fongmi.android.tv.bean.Sub; import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.Sniffer; +import com.github.catvod.net.OkHttp; import com.google.common.net.HttpHeaders; import java.util.ArrayList; @@ -47,6 +48,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import okhttp3.Call; + public class ExoUtil { private static HttpDataSource.Factory httpDataSourceFactory; @@ -119,7 +122,7 @@ public class ExoUtil { } private static synchronized HttpDataSource.Factory getHttpDataSourceFactory() { - if (httpDataSourceFactory == null) httpDataSourceFactory = new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true); + if (httpDataSourceFactory == null) httpDataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) OkHttp.client()); return httpDataSourceFactory; } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/ActionRequestProcess.java b/app/src/main/java/com/fongmi/android/tv/server/process/ActionRequestProcess.java index 9c497e338..39d15e7ca 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/ActionRequestProcess.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/ActionRequestProcess.java @@ -3,6 +3,7 @@ package com.fongmi.android.tv.server.process; import android.text.TextUtils; import com.fongmi.android.tv.App; +import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Device; @@ -93,7 +94,7 @@ public class ActionRequestProcess implements RequestProcess { FormBody.Builder body = new FormBody.Builder(); body.add("url", url); body.add("targets", App.gson().toJson(History.get(Config.find(url, 0).getId()))); - OkHttp.newCall(OkHttp.client(1000), device.getIp().concat("/action?do=sync&type=history"), body.build()).execute(); + OkHttp.newCall(OkHttp.client(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&type=history"), body.build()).execute(); } catch (Exception e) { App.post(() -> Notify.show(e.getMessage())); } @@ -104,7 +105,7 @@ public class ActionRequestProcess implements RequestProcess { FormBody.Builder body = new FormBody.Builder(); body.add("targets", App.gson().toJson(Keep.getVod())); body.add("configs", App.gson().toJson(Config.findUrls())); - OkHttp.newCall(OkHttp.client(1000), device.getIp().concat("/action?do=sync&type=keep"), body.build()).execute(); + OkHttp.newCall(OkHttp.client(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&type=keep"), body.build()).execute(); } catch (Exception e) { App.post(() -> Notify.show(e.getMessage())); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java index 12332aa07..9d907c486 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java @@ -13,6 +13,7 @@ import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.DrawableImageViewTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.signature.ObjectKey; import com.fongmi.android.tv.App; @@ -27,25 +28,25 @@ public class ImgUtil { public static void load(String url, ImageView view, ImageView.ScaleType scaleType) { view.setScaleType(scaleType); if (TextUtils.isEmpty(url)) view.setImageResource(R.drawable.ic_img_error); - else Glide.with(App.get()).asBitmap().load(getUrl(url)).skipMemoryCache(true).dontAnimate().sizeMultiplier(Prefers.getThumbnail()).signature(new ObjectKey(url + "_" + Prefers.getQuality())).placeholder(R.drawable.ic_img_loading).listener(getListener(view, scaleType)).into(view); + else Glide.with(App.get()).asBitmap().load(getUrl(url)).skipMemoryCache(true).dontAnimate().sizeMultiplier(Prefers.getThumbnail()).signature(new ObjectKey(url + "_" + Prefers.getQuality())).placeholder(R.drawable.ic_img_loading).listener(getListener(view, scaleType)).into(new DrawableImageViewTarget(view).waitForLayout().getView()); } public static void loadKeep(String url, ImageView view) { view.setScaleType(ImageView.ScaleType.CENTER); if (TextUtils.isEmpty(url)) view.setImageResource(R.drawable.ic_img_error); - else Glide.with(App.get()).asBitmap().load(getUrl(url)).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).listener(getListener(view)).into(view); + else Glide.with(App.get()).asBitmap().load(getUrl(url)).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).listener(getListener(view)).into(new DrawableImageViewTarget(view).waitForLayout().getView()); } public static void loadHistory(String url, ImageView view) { view.setScaleType(ImageView.ScaleType.CENTER); if (TextUtils.isEmpty(url)) view.setImageResource(R.drawable.ic_img_error); - else Glide.with(App.get()).asBitmap().load(getUrl(url)).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).listener(getListener(view)).into(view); + else Glide.with(App.get()).asBitmap().load(getUrl(url)).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).listener(getListener(view)).into(new DrawableImageViewTarget(view).waitForLayout().getView()); } public static void loadLive(String url, ImageView view) { view.setVisibility(TextUtils.isEmpty(url) ? View.GONE : View.VISIBLE); if (TextUtils.isEmpty(url)) view.setImageResource(R.drawable.ic_img_empty); - else Glide.with(App.get()).asBitmap().load(url).skipMemoryCache(true).dontAnimate().signature(new ObjectKey(url)).error(R.drawable.ic_img_empty).into(view); + else Glide.with(App.get()).asBitmap().load(url).skipMemoryCache(true).dontAnimate().signature(new ObjectKey(url)).error(R.drawable.ic_img_empty).into(new DrawableImageViewTarget(view).waitForLayout().getView()); } public static Object getUrl(String url) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/OkHttpGlideModule.java b/app/src/main/java/com/fongmi/android/tv/utils/OkHttpGlideModule.java new file mode 100644 index 000000000..9c2c48124 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/utils/OkHttpGlideModule.java @@ -0,0 +1,27 @@ +package com.fongmi.android.tv.utils; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.Registry; +import com.bumptech.glide.annotation.GlideModule; +import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader; +import com.bumptech.glide.load.model.GlideUrl; +import com.bumptech.glide.module.AppGlideModule; +import com.github.catvod.net.OkHttp; + +import java.io.InputStream; + +import okhttp3.Call; + +@GlideModule +public class OkHttpGlideModule extends AppGlideModule { + + @Override + public void registerComponents(@NonNull Context context, @Nullable Glide glide, Registry registry) { + registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory((Call.Factory) OkHttp.client())); + } +} \ No newline at end of file diff --git a/catvod/src/main/java/com/github/catvod/net/OkHttp.java b/catvod/src/main/java/com/github/catvod/net/OkHttp.java index fc1029519..b57478e84 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkHttp.java +++ b/catvod/src/main/java/com/github/catvod/net/OkHttp.java @@ -59,7 +59,7 @@ public class OkHttp { } public static OkHttpClient client(int timeout) { - return new OkHttpClient.Builder().connectTimeout(timeout, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert).build(); + return new OkHttpClient.Builder().connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert).build(); } public static Call newCall(String url) {