Support cache config

pull/137/head
FongMi 3 years ago
parent f28adf0464
commit fd4ce3834e
  1. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SplashActivity.java
  3. 15
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  4. 30
      app/src/main/java/com/fongmi/android/tv/bean/Config.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  6. 10
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  7. 2
      app/src/main/java/com/fongmi/android/tv/net/Callback.java
  8. 2
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.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);
}

@ -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

@ -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));

@ -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);
}

@ -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

@ -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");
}
};
}

@ -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) {

@ -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;
}

Loading…
Cancel
Save