From fd4ce3834e15be6563a5f386db33afee7a4616c2 Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 26 Sep 2022 17:42:35 +0800 Subject: [PATCH] Support cache config --- .../tv/ui/activity/SettingActivity.java | 4 +-- .../tv/ui/activity/SplashActivity.java | 4 +-- .../com/fongmi/android/tv/api/ApiConfig.java | 15 ++++++++-- .../com/fongmi/android/tv/bean/Config.java | 30 ++++++++++++++----- .../java/com/fongmi/android/tv/bean/Site.java | 2 +- .../com/fongmi/android/tv/db/AppDatabase.java | 10 +++---- .../com/fongmi/android/tv/net/Callback.java | 2 +- .../com/fongmi/android/tv/player/ExoUtil.java | 2 +- 8 files changed, 45 insertions(+), 24 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java index ead434b18..7283e2e11 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java @@ -110,8 +110,8 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit private void loadConfig() { ApiConfig.get().clear().loadConfig(new Callback() { @Override - public void success() { - Config.save(); + public void success(String json) { + Config.save(json); setSite(0); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SplashActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SplashActivity.java index 7223aeea6..5827f977e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SplashActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SplashActivity.java @@ -50,9 +50,9 @@ public class SplashActivity extends BaseActivity { private void loadConfig() { ApiConfig.get().init().loadConfig(new Callback() { @Override - public void success() { + public void success(String json) { HomeActivity.start(getActivity()); - Config.save(); + Config.save(json); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java index 9adfb63b2..16a1b07d9 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java @@ -2,8 +2,10 @@ package com.fongmi.android.tv.api; import android.os.Handler; import android.os.Looper; +import android.text.TextUtils; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.bean.Parse; import com.fongmi.android.tv.bean.Site; @@ -16,6 +18,7 @@ import com.github.catvod.crawler.Spider; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; import org.json.JSONObject; @@ -91,7 +94,7 @@ public class ApiConfig { parseConfig(new Gson().fromJson(reader, JsonObject.class), callback); } catch (Exception e) { e.printStackTrace(); - handler.post(() -> callback.error(R.string.error_config_get)); + getCacheConfig(url, callback); } } @@ -100,16 +103,22 @@ public class ApiConfig { parseConfig(new Gson().fromJson(OKHttp.newCall(url).execute().body().string(), JsonObject.class), callback); } catch (Exception e) { e.printStackTrace(); - handler.post(() -> callback.error(R.string.error_config_get)); + getCacheConfig(url, callback); } } + private void getCacheConfig(String url, Callback callback) { + String json = Config.find(url).getJson(); + if (!TextUtils.isEmpty(json)) parseConfig(JsonParser.parseString(json).getAsJsonObject(), callback); + else handler.post(() -> callback.error(R.string.error_config_get)); + } + private void parseConfig(JsonObject object, Callback callback) { try { String spider = Json.safeString(object, "spider", ""); parseJson(object); parseJar(spider); - handler.post(callback::success); + handler.post(() -> callback.success(object.toString())); } catch (Exception e) { e.printStackTrace(); handler.post(() -> callback.error(R.string.error_config_parse)); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Config.java b/app/src/main/java/com/fongmi/android/tv/bean/Config.java index 33035bac8..a2d739ece 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Config.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Config.java @@ -17,6 +17,7 @@ public class Config { private int id; private long time; private String url; + private String json; public static Config create() { return new Config(Prefers.getUrl()); @@ -28,11 +29,6 @@ public class Config { this.id = (int) insert(); } - public Config setTime() { - setTime(System.currentTimeMillis()); - return this; - } - public int getId() { return id; } @@ -49,6 +45,14 @@ public class Config { this.url = url; } + public String getJson() { + return json; + } + + public void setJson(String json) { + this.json = json; + } + public long getTime() { return time; } @@ -65,14 +69,24 @@ public class Config { public static Config find(String url) { Config item = AppDatabase.get().getConfigDao().find(url); - return item == null ? Config.create() : item.setTime(); + return item == null ? Config.create() : item.newTime(); } - public static void save() { - Config item = find(Prefers.getUrl()); + public static void save(String json) { + Config item = find(Prefers.getUrl()).json(json); ApiConfig.get().setCid(item.update().getId()); } + public Config newTime() { + setTime(System.currentTimeMillis()); + return this; + } + + public Config json(String json) { + setJson(json); + return this; + } + public long insert() { return AppDatabase.get().getConfigDao().insert(this); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index d3ea6a5f9..e2a34781e 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -15,7 +15,7 @@ import com.google.gson.annotations.SerializedName; import java.util.Collections; import java.util.List; -@Entity(ignoredColumns = {"type", "api", "playUrl", "ext", "categories", "jar"}) +@Entity(ignoredColumns = {"type", "api", "playUrl", "ext", "jar", "categories"}) public class Site { @NonNull diff --git a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java index 3a7c53b88..ff95a73ed 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java +++ b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java @@ -20,7 +20,7 @@ import com.fongmi.android.tv.db.dao.SiteDao; @Database(entities = {Config.class, Site.class, History.class}, version = AppDatabase.VERSION, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { - public static final int VERSION = 7; + public static final int VERSION = 8; public static final String SYMBOL = "@@@"; private static volatile AppDatabase instance; @@ -31,7 +31,7 @@ public abstract class AppDatabase extends RoomDatabase { } private static AppDatabase create(Context context) { - return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_6_7).allowMainThreadQueries().fallbackToDestructiveMigration().build(); + return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_7_8).allowMainThreadQueries().fallbackToDestructiveMigration().build(); } public abstract SiteDao getSiteDao(); @@ -40,12 +40,10 @@ public abstract class AppDatabase extends RoomDatabase { public abstract HistoryDao getHistoryDao(); - static final Migration MIGRATION_6_7 = new Migration(6, 7) { + static final Migration MIGRATION_7_8 = new Migration(7, 8) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { - database.execSQL("ALTER TABLE History ADD COLUMN position INTEGER DEFAULT 0 NOT NULL"); - database.execSQL("UPDATE History set position = duration"); - database.execSQL("UPDATE History set duration = 0"); + database.execSQL("ALTER TABLE Config ADD COLUMN json TEXT DEFAULT NULL"); } }; } diff --git a/app/src/main/java/com/fongmi/android/tv/net/Callback.java b/app/src/main/java/com/fongmi/android/tv/net/Callback.java index c967876ce..426e6ab00 100644 --- a/app/src/main/java/com/fongmi/android/tv/net/Callback.java +++ b/app/src/main/java/com/fongmi/android/tv/net/Callback.java @@ -10,7 +10,7 @@ import okhttp3.Response; public abstract class Callback implements okhttp3.Callback { - public void success() { + public void success(String json) { } public void error(@StringRes int resId) { 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 90ecd622f..b55700b49 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 @@ -52,7 +52,7 @@ public class ExoUtil { String[] subs = result.getSub().split("\\$\\$\\$"); for (String sub : subs) { String[] divide = sub.split("#"); - items.add(new MediaItem.SubtitleConfiguration.Builder(Uri.parse(divide[2])).setLabel(divide[0]).setMimeType(divide[1]).build()); + items.add(new MediaItem.SubtitleConfiguration.Builder(Uri.parse(divide[2])).setLabel(divide[0]).setLanguage("zh").setMimeType(divide[1]).build()); } return items; }