diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/BaseConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/BaseConfig.java index 0259c0798..89db5f3c2 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/BaseConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/BaseConfig.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.Config; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.utils.Notify; @@ -30,7 +31,11 @@ abstract class BaseConfig { protected abstract Config defaultConfig(); - protected abstract void doLoad(int id, Config config, Callback callback) throws Throwable; + protected abstract void load(Config config) throws Throwable; + + protected void postEvent() { + ConfigEvent.common(); + } public boolean needSync(String url) { return sync || TextUtils.isEmpty(config.getUrl()) || url.equals(config.getUrl()); @@ -59,26 +64,23 @@ abstract class BaseConfig { try { Server.get().start(); OkHttp.cancel(getTag()); - doLoad(id, config, callback); - if (taskId.get() == id && config.equals(this.config)) config.update(); + load(config); + if (taskId.get() != id) return; + if (config.equals(this.config)) config.update(); + App.post(() -> Notify.show(config.getNotice())); + App.post(callback::success); } catch (Throwable e) { e.printStackTrace(); if (isCanceled(e)) return; if (taskId.get() != id) return; if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error("")); else App.post(() -> callback.error(Notify.getError(R.string.error_config_get, e))); + } finally { + if (taskId.get() == id) postEvent(); } } protected boolean isCanceled(Throwable e) { return "Canceled".equals(e.getMessage()) || e instanceof InterruptedException || e instanceof InterruptedIOException || e.getCause() instanceof InterruptedIOException; } - - protected int getTaskId() { - return taskId.get(); - } - - protected int nextTaskId() { - return taskId.incrementAndGet(); - } } diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 9bce98f94..04762dbea 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -1,7 +1,5 @@ package com.fongmi.android.tv.api.config; -import com.fongmi.android.tv.App; -import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.Decoder; import com.fongmi.android.tv.api.LiveParser; @@ -14,9 +12,8 @@ import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.bean.Rule; import com.fongmi.android.tv.db.AppDatabase; -import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.impl.Callback; -import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.bean.Header; import com.github.catvod.bean.Proxy; @@ -94,10 +91,10 @@ public class LiveConfig extends BaseConfig { } public LiveConfig clear() { + ads = null; home = null; lives = null; rules = null; - ads = null; return this; } @@ -112,10 +109,16 @@ public class LiveConfig extends BaseConfig { } @Override - protected void doLoad(int id, Config config, Callback callback) throws Throwable { + protected void postEvent() { + super.postEvent(); + ConfigEvent.live(); + } + + @Override + protected void load(Config config) throws Throwable { String json = Decoder.getJson(UrlUtil.convert(config.getUrl()), TAG); - if (Json.isObj(json)) checkJson(id, config, callback, Json.parse(json).getAsJsonObject()); - else parseText(id, config, callback, json); + if (Json.isObj(json)) checkJson(config, Json.parse(json).getAsJsonObject()); + else parseText(config, json); } public void load() { @@ -123,43 +126,38 @@ public class LiveConfig extends BaseConfig { load(new Callback()); } - private void parseText(int id, Config config, Callback callback, String text) { + private void parseText(Config config, String text) { Live live = new Live(UrlUtil.getName(config.getUrl()), config.getUrl()).sync(); lives = new ArrayList<>(List.of(live)); LiveParser.text(live, text); setHome(config, live, false); - if (getTaskId() == id) App.post(callback::success); } - private void checkJson(int id, Config config, Callback callback, JsonObject object) { + private void checkJson(Config config, JsonObject object) throws Throwable { if (object.has("msg")) { - App.post(() -> callback.error(object.get("msg").getAsString())); + throw new Exception(object.get("msg").getAsString()); } else if (object.has("urls")) { - parseDepot(id, config, callback, object); + parseDepot(config, object); } else { - parseConfig(id, config, callback, object); + parseConfig(config, object); } } - private void parseDepot(int id, Config config, Callback callback, JsonObject object) { + private void parseDepot(Config config, JsonObject object) throws Throwable { List items = Depot.arrayFrom(object.getAsJsonArray("urls").toString()); List configs = new ArrayList<>(); for (Depot item : items) configs.add(Config.find(item, LIVE)); - loadConfig(id, this.config = configs.get(0), callback); + load(this.config = configs.get(0)); Config.delete(config.getUrl()); } - private void parseConfig(int id, Config config, Callback callback, JsonObject object) { - try { - initList(object); - initLive(config, object); - if (getTaskId() != id) return; - if (callback != null) App.post(callback::success); - } catch (Throwable e) { - e.printStackTrace(); - if (getTaskId() != id) return; - if (callback != null) App.post(() -> callback.error(Notify.getError(R.string.error_config_parse, e))); - } + private void parseConfig(Config config, JsonObject object) { + initList(object); + initLive(config, object); + } + + public void parse(JsonObject object) { + parseConfig(getConfig(), object); } private void initList(JsonObject object) { @@ -179,11 +177,6 @@ public class LiveConfig extends BaseConfig { setHome(config, getLives().isEmpty() ? new Live() : getLives().stream().filter(item -> item.getName().equals(config.getHome())).findFirst().orElse(getLives().get(0)), false); } - public void parse(JsonObject object) { - int id = nextTaskId(); - parseConfig(id, getConfig(), null, object); - } - public void setKeep(Channel channel) { if (home != null && !channel.getGroup().isHidden()) home.keep(channel).save(); } @@ -272,9 +265,9 @@ public class LiveConfig extends BaseConfig { private void setHome(Config config, Live live, boolean save) { home = live; home.setActivated(true); - config.home(home.getName()); + config.setHome(home.getName()); if (save) config.save(); getLives().forEach(item -> item.setActivated(home)); - if (!save && (home.isBoot() || Setting.isBootLive())) RefreshEvent.boot(); + if (!save && (home.isBoot() || Setting.isBootLive())) ConfigEvent.boot(); } } diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index 376a7d1c5..0197560f6 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -3,7 +3,6 @@ package com.fongmi.android.tv.api.config; import android.text.TextUtils; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.Decoder; import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Config; @@ -11,8 +10,9 @@ import com.fongmi.android.tv.bean.Depot; import com.fongmi.android.tv.bean.Parse; import com.fongmi.android.tv.bean.Rule; import com.fongmi.android.tv.bean.Site; +import com.fongmi.android.tv.event.ConfigEvent; +import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; -import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.bean.Doh; import com.github.catvod.bean.Header; @@ -84,15 +84,15 @@ public class VodConfig extends BaseConfig { } public VodConfig clear() { + ads = null; + doh = null; home = null; wall = null; parse = null; sites = null; - parses = null; - rules = null; - ads = null; - doh = null; flags = null; + rules = null; + parses = null; BaseLoader.get().clear(); return this; } @@ -108,44 +108,43 @@ public class VodConfig extends BaseConfig { } @Override - protected void doLoad(int id, Config config, Callback callback) throws Throwable { + protected void postEvent() { + super.postEvent(); + ConfigEvent.vod(); + } + + @Override + protected void load(Config config) throws Throwable { String json = Decoder.getJson(UrlUtil.convert(config.getUrl()), TAG); - checkJson(id, config, callback, Json.parse(json).getAsJsonObject()); + checkJson(config, Json.parse(json).getAsJsonObject()); } - private void checkJson(int id, Config config, Callback callback, JsonObject object) { + private void checkJson(Config config, JsonObject object) throws Throwable { if (object.has("msg")) { - App.post(() -> callback.error(object.get("msg").getAsString())); + throw new Exception(object.get("msg").getAsString()); } else if (object.has("urls")) { - parseDepot(id, config, callback, object); + parseDepot(config, object); } else { - parseConfig(id, config, callback, object); + parseConfig(config, object); } } - private void parseDepot(int id, Config config, Callback callback, JsonObject object) { + private void parseDepot(Config config, JsonObject object) throws Throwable { List items = Depot.arrayFrom(object.getAsJsonArray("urls").toString()); List configs = new ArrayList<>(); for (Depot item : items) configs.add(Config.find(item, VOD)); - loadConfig(id, this.config = configs.get(0), callback); + load(this.config = configs.get(0)); Config.delete(config.getUrl()); } - private void parseConfig(int id, Config config, Callback callback, JsonObject object) { - try { - initList(object); - initLive(config, object); - initWall(config, object); - initSite(config, object); - initParse(config, object); - config.logo(Json.safeString(object, "logo")); - if (getTaskId() != id) return; - App.post(callback::success); - } catch (Throwable e) { - e.printStackTrace(); - if (getTaskId() != id) return; - App.post(() -> callback.error(Notify.getError(R.string.error_config_parse, e))); - } + private void parseConfig(Config config, JsonObject object) { + initList(object); + initLive(config, object); + initWall(config, object); + initSite(config, object); + initParse(config, object); + config.setLogo(Json.safeString(object, "logo")); + config.setNotice(Json.safeString(object, "notice")); } private void initList(JsonObject object) { @@ -290,19 +289,20 @@ public class VodConfig extends BaseConfig { private void setParse(Config config, Parse parse, boolean save) { this.parse = parse; this.parse.setActivated(true); - config.parse(parse.getName()); + config.setParse(parse.getName()); getParses().forEach(item -> item.setActivated(parse)); if (save) config.save(); } public void setHome(Site site) { setHome(getConfig(), site, true); + RefreshEvent.home(); } private void setHome(Config config, Site site, boolean save) { home = site; home.setActivated(true); - config.home(home.getKey()); + config.setHome(home.getKey()); if (save) config.save(); getSites().forEach(item -> item.setActivated(home)); } diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 4ab24005b..140bbf85d 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -3,22 +3,18 @@ package com.fongmi.android.tv.api.config; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaMetadataRetriever; -import android.text.TextUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.bean.Config; -import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.utils.Download; import com.fongmi.android.tv.utils.FileUtil; -import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.UrlUtil; -import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Path; import java.io.File; @@ -76,57 +72,39 @@ public class WallConfig extends BaseConfig { } @Override - protected void doLoad(int id, Config config, Callback callback) throws Throwable { - download(id, config.getUrl(), callback); + protected void postEvent() { + super.postEvent(); + ConfigEvent.wall(); } @Override - protected void loadConfig(int id, Config config, Callback callback) { - try { - OkHttp.cancel(TAG); - doLoad(id, config, callback); - if (getTaskId() == id && config.equals(this.config)) config.update(); - } catch (Throwable e) { - e.printStackTrace(); - if (isCanceled(e)) return; - if (getTaskId() != id) return; - Setting.putWall(1); - RefreshEvent.wall(); - if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error("")); - else App.post(() -> callback.error(Notify.getError(R.string.error_config_get, e))); - } + protected void load(Config config) throws Throwable { + File file = FileUtil.getWall(0); + checkUrl(config.getUrl(), file); + setWallType(file); + setSnapshot(file); } - private void download(int id, String url, Callback callback) throws Throwable { - File file = FileUtil.getWall(0); + private void checkUrl(String url, File file) throws Throwable { if (url.startsWith("file")) Path.copy(Path.local(url), file); else Download.create(UrlUtil.convert(url), file).tag(TAG).get(); if (!Path.exists(file)) throw new FileNotFoundException(); - if (getTaskId() != id) return; - process(file); - RefreshEvent.wall(); - App.post(callback::success); - } - - private static void process(File file) throws Throwable { - setWallType(file); - setSnapshot(file); } - private static void setWallType(File file) { + private void setWallType(File file) { Setting.putWallType(0); if (isGif(file)) Setting.putWallType(1); else if (isVideo(file)) Setting.putWallType(2); } - private static void setSnapshot(File file) throws Throwable { + private void setSnapshot(File file) throws Throwable { Bitmap bitmap = Glide.with(App.get()).asBitmap().frame(0).load(file).override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).submit().get(); try (FileOutputStream fos = new FileOutputStream(FileUtil.getWallCache())) { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } } - private static boolean isVideo(File file) { + private boolean isVideo(File file) { try (MediaMetadataRetriever retriever = new MediaMetadataRetriever()) { retriever.setDataSource(file.getAbsolutePath()); return "yes".equalsIgnoreCase(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO)); @@ -135,7 +113,7 @@ public class WallConfig extends BaseConfig { } } - private static boolean isGif(File file) { + private boolean isGif(File file) { try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; 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 0fcdf5f41..27a6c1537 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 @@ -5,6 +5,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.room.Entity; +import androidx.room.Ignore; import androidx.room.Index; import androidx.room.PrimaryKey; @@ -41,6 +42,10 @@ public class Config { @SerializedName("parse") private String parse; + @Ignore + @SerializedName("notice") + private String notice; + public static List arrayFrom(String str) { Type listType = new TypeToken>() {}.getType(); List items = App.gson().fromJson(str, listType); @@ -135,6 +140,14 @@ public class Config { this.time = time; } + public String getNotice() { + return notice; + } + + public void setNotice(String notice) { + this.notice = notice; + } + public Config type(int type) { setType(type); return this; @@ -155,21 +168,6 @@ public class Config { return this; } - public Config logo(String logo) { - setLogo(logo); - return this; - } - - public Config home(String home) { - setHome(home); - return this; - } - - public Config parse(String parse) { - setParse(parse); - return this; - } - public boolean isEmpty() { return TextUtils.isEmpty(getUrl()); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java index fda26a6c1..614639719 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ActionEvent.java @@ -4,7 +4,7 @@ import com.fongmi.android.tv.BuildConfig; import org.greenrobot.eventbus.EventBus; -public class ActionEvent { +public record ActionEvent(String action) { public static String STOP = BuildConfig.APPLICATION_ID.concat(".stop"); public static String PREV = BuildConfig.APPLICATION_ID.concat(".prev"); @@ -16,8 +16,6 @@ public class ActionEvent { public static String REPLAY = BuildConfig.APPLICATION_ID.concat(".replay"); public static String UPDATE = BuildConfig.APPLICATION_ID.concat(".update"); - private final String action; - public static void send(String action) { EventBus.getDefault().post(new ActionEvent(action)); } @@ -54,15 +52,7 @@ public class ActionEvent { send(UPDATE); } - public ActionEvent(String action) { - this.action = action; - } - - public String getAction() { - return action; - } - public boolean isUpdate() { - return UPDATE.equals(getAction()); + return UPDATE.equals(action()); } } diff --git a/app/src/main/java/com/fongmi/android/tv/event/CastEvent.java b/app/src/main/java/com/fongmi/android/tv/event/CastEvent.java index da386dde9..77df7c25e 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/CastEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/CastEvent.java @@ -6,31 +6,9 @@ import com.fongmi.android.tv.bean.History; import org.greenrobot.eventbus.EventBus; -public class CastEvent { - - private final Config config; - private final Device device; - private final History history; +public record CastEvent(Config config, Device device, History history) { public static void post(Config config, Device device, History history) { EventBus.getDefault().post(new CastEvent(config, device, history)); } - - public CastEvent(Config config, Device device, History history) { - this.config = config; - this.device = device; - this.history = history; - } - - public History getHistory() { - return history; - } - - public Device getDevice() { - return device; - } - - public Config getConfig() { - return config; - } } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ConfigEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ConfigEvent.java new file mode 100644 index 000000000..4a2166da4 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/event/ConfigEvent.java @@ -0,0 +1,33 @@ +package com.fongmi.android.tv.event; + +import com.fongmi.android.tv.Setting; + +import org.greenrobot.eventbus.EventBus; + +public record ConfigEvent(Type type) { + + public static void common() { + EventBus.getDefault().post(new ConfigEvent(Type.COMMON)); + } + + public static void vod() { + EventBus.getDefault().post(new ConfigEvent(Type.VOD)); + } + + public static void live() { + EventBus.getDefault().post(new ConfigEvent(Type.LIVE)); + } + + public static void wall() { + EventBus.getDefault().post(new ConfigEvent(Type.WALL)); + } + + public static void boot() { + EventBus.getDefault().post(new ConfigEvent(Type.BOOT)); + Setting.putBootLive(false); + } + + public enum Type { + COMMON, VOD, LIVE, WALL, BOOT + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java b/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java index 5b6b81273..2c5d05e20 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java @@ -2,16 +2,13 @@ package com.fongmi.android.tv.event; import org.greenrobot.eventbus.EventBus; -public class PlayerEvent { +public record PlayerEvent(String tag, int state) { public static final int PREPARE = 0; public static final int PLAYING = 10; public static final int TRACK = 11; public static final int SIZE = 12; - private final String tag; - private final int state; - public static void prepare(String tag) { EventBus.getDefault().post(new PlayerEvent(tag, PREPARE)); } @@ -31,17 +28,4 @@ public class PlayerEvent { public static void state(String tag, int state) { EventBus.getDefault().post(new PlayerEvent(tag, state)); } - - private PlayerEvent(String tag, int state) { - this.state = state; - this.tag = tag; - } - - public String getTag() { - return tag; - } - - public int getState() { - return state; - } } diff --git a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java index f0492949d..fc153371b 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java @@ -1,6 +1,5 @@ package com.fongmi.android.tv.event; -import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.bean.Vod; import org.greenrobot.eventbus.EventBus; @@ -11,12 +10,8 @@ public class RefreshEvent { private String path; private Vod vod; - public static void config() { - EventBus.getDefault().post(new RefreshEvent(Type.CONFIG)); - } - - public static void video() { - EventBus.getDefault().post(new RefreshEvent(Type.VIDEO)); + public static void home() { + EventBus.getDefault().post(new RefreshEvent(Type.HOME)); } public static void history() { @@ -31,19 +26,10 @@ public class RefreshEvent { EventBus.getDefault().post(new RefreshEvent(Type.SIZE)); } - public static void wall() { - EventBus.getDefault().post(new RefreshEvent(Type.WALL)); - } - public static void live() { EventBus.getDefault().post(new RefreshEvent(Type.LIVE)); } - public static void boot() { - EventBus.getDefault().post(new RefreshEvent(Type.BOOT)); - Setting.putBootLive(false); - } - public static void detail() { EventBus.getDefault().post(new RefreshEvent(Type.DETAIL)); } @@ -91,6 +77,6 @@ public class RefreshEvent { } public enum Type { - CONFIG, VIDEO, HISTORY, KEEP, SIZE, WALL, LIVE, BOOT, DETAIL, PLAYER, SUBTITLE, DANMAKU, VOD + HOME, HISTORY, KEEP, SIZE, LIVE, DETAIL, PLAYER, SUBTITLE, DANMAKU, VOD } } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ScanEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ScanEvent.java index 511182412..3c97525a0 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ScanEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ScanEvent.java @@ -2,19 +2,9 @@ package com.fongmi.android.tv.event; import org.greenrobot.eventbus.EventBus; -public class ScanEvent { - - private final String address; +public record ScanEvent(String address) { public static void post(String address) { EventBus.getDefault().post(new ScanEvent(address)); } - - public ScanEvent(String address) { - this.address = address; - } - - public String getAddress() { - return address; - } } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java index 3eed9722e..330130304 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java @@ -2,11 +2,7 @@ package com.fongmi.android.tv.event; import org.greenrobot.eventbus.EventBus; -public class ServerEvent { - - private final Type type; - private final String text; - private final String name; +public record ServerEvent(Type type, String text, String name) { public static void search(String text) { EventBus.getDefault().post(new ServerEvent(Type.SEARCH, text)); @@ -28,24 +24,6 @@ public class ServerEvent { this(type, text, ""); } - private ServerEvent(Type type, String text, String name) { - this.type = type; - this.text = text; - this.name = name; - } - - public Type getType() { - return type; - } - - public String getText() { - return text; - } - - public String getName() { - return name; - } - public enum Type { SEARCH, PUSH, SETTING } diff --git a/app/src/main/java/com/fongmi/android/tv/event/StateEvent.java b/app/src/main/java/com/fongmi/android/tv/event/StateEvent.java index 0446218b4..3de6fc5a6 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/StateEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/StateEvent.java @@ -2,9 +2,7 @@ package com.fongmi.android.tv.event; import org.greenrobot.eventbus.EventBus; -public class StateEvent { - - private final Type type; +public record StateEvent(Type type) { public static void empty() { EventBus.getDefault().post(new StateEvent(Type.EMPTY)); @@ -18,14 +16,6 @@ public class StateEvent { EventBus.getDefault().post(new StateEvent(Type.CONTENT)); } - private StateEvent(Type type) { - this.type = type; - } - - public Type getType() { - return type; - } - public enum Type { EMPTY, PROGRESS, CONTENT } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java index 26dfd9801..830029d06 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java @@ -176,8 +176,6 @@ public class Action implements Process { if (force) History.delete(cid); History.sync(targets); RefreshEvent.history(); - RefreshEvent.config(); - RefreshEvent.video(); } @Override @@ -205,9 +203,6 @@ public class Action implements Process { public void success() { if (force) Keep.deleteAll(); Keep.sync(configs, targets); - RefreshEvent.history(); - RefreshEvent.config(); - RefreshEvent.video(); RefreshEvent.keep(); } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java index 971969b09..2b6fae8c6 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWallView.java @@ -20,7 +20,7 @@ import androidx.media3.ui.PlayerView; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.ViewWallBinding; -import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.ResUtil; @@ -66,8 +66,8 @@ public class CustomWallView extends FrameLayout implements DefaultLifecycleObser } @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - if (event.getType() == RefreshEvent.Type.WALL) refresh(); + public void onConfigEvent(ConfigEvent event) { + if (event.type() == ConfigEvent.Type.WALL) refresh(); } private void refresh() { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java index 3c3c44c7f..d4dfef708 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/DanmakuDialog.java @@ -1,4 +1,3 @@ - package com.fongmi.android.tv.ui.dialog; import android.app.Activity; diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index 0175e3269..861cd7280 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -97,7 +97,7 @@ public class FileUtil { public static long getDirectorySize(File dir) { long size = 0; if (dir == null) return 0; - if (dir.isDirectory()) for (File file: Path.list(dir)) size += getDirectorySize(file); + if (dir.isDirectory()) for (File file : Path.list(dir)) size += getDirectorySize(file); else size = dir.length(); return size; } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 82def6cdb..4576e3a91 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -125,7 +125,6 @@ 配置取得失败 - 配置解析失败 已经是最后一集了! 已经是第一集了! 播放地址解析失败 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 57aa03249..ed75bf81d 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -125,7 +125,6 @@ 配置取得失敗 - 配置解析失敗 已經是最後一集了! 已經是第一集了! 播放網址解析失敗 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 289e2d7fa..827c78c51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,7 +126,6 @@ Configuration get failed - Configuration parse failed It\'s the last episode! It\'s the first episode! Unable to parse url diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 9e8e1d754..a57b6e80f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -24,6 +24,7 @@ import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.databinding.ActivityHomeBinding; import com.fongmi.android.tv.db.AppDatabase; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.event.ServerEvent; import com.fongmi.android.tv.event.StateEvent; @@ -122,22 +123,14 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt private Callback getCallback() { return new Callback() { - @Override - public void success(String result) { - Notify.show(result); - } - @Override public void success() { checkAction(getIntent()); - RefreshEvent.config(); - RefreshEvent.video(); } @Override public void error(String msg) { checkAction(getIntent()); - RefreshEvent.config(); StateEvent.empty(); Notify.show(msg); } @@ -176,15 +169,20 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt } @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - if (event.getType().equals(RefreshEvent.Type.CONFIG)) setNavigation(); - if (event.getType().equals(RefreshEvent.Type.BOOT)) LiveActivity.start(this); + public void onConfigEvent(ConfigEvent event) { + if (event.type() == ConfigEvent.Type.VOD) { + RefreshEvent.home(); + } else if (event.type() == ConfigEvent.Type.COMMON) { + setNavigation(); + } else if (event.type() == ConfigEvent.Type.BOOT) { + LiveActivity.start(this); + } } @Subscribe(threadMode = ThreadMode.MAIN) public void onServerEvent(ServerEvent event) { - if (event.getType() != ServerEvent.Type.PUSH) return; - VideoActivity.push(this, event.getText()); + if (event.type() != ServerEvent.Type.PUSH) return; + VideoActivity.push(this, event.text()); } @Override @@ -205,7 +203,7 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt private void checkOrientation(Configuration newConfig) { if (orientation != newConfig.orientation) { orientation = newConfig.orientation; - RefreshEvent.video(); + RefreshEvent.home(); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java index db1af8e25..fbf2c974d 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java @@ -84,8 +84,6 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis @Override public void success() { VideoActivity.start(getActivity(), item.getSiteKey(), item.getVodId(), item.getVodName(), item.getVodPic()); - RefreshEvent.config(); - RefreshEvent.video(); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 037b26af3..20403b14f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -733,7 +733,6 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener @Override public void success() { - RefreshEvent.config(); setLive(getHome()); } @@ -783,18 +782,18 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener @Subscribe(threadMode = ThreadMode.MAIN) public void onActionEvent(ActionEvent event) { - if (ActionEvent.PLAY.equals(event.getAction())) { + if (ActionEvent.PLAY.equals(event.action())) { onPlay(); - } else if (ActionEvent.PAUSE.equals(event.getAction())) { + } else if (ActionEvent.PAUSE.equals(event.action())) { onPaused(); - } else if (ActionEvent.NEXT.equals(event.getAction())) { + } else if (ActionEvent.NEXT.equals(event.action())) { nextChannel(); - } else if (ActionEvent.PREV.equals(event.getAction())) { + } else if (ActionEvent.PREV.equals(event.action())) { prevChannel(); - } else if (ActionEvent.AUDIO.equals(event.getAction())) { + } else if (ActionEvent.AUDIO.equals(event.action())) { moveTaskToBack(true); setAudioOnly(true); - } else if (ActionEvent.STOP.equals(event.getAction())) { + } else if (ActionEvent.STOP.equals(event.action())) { finish(); } } @@ -813,8 +812,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerEvent(PlayerEvent event) { - if (!event.getTag().equals(tag)) return; - switch (event.getState()) { + if (!event.tag().equals(tag)) return; + switch (event.state()) { case PlayerEvent.PREPARE: setDecode(); break; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 0b07fb687..1b15883f7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1172,22 +1172,22 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onActionEvent(ActionEvent event) { if (isRedirect()) return; - if (ActionEvent.PLAY.equals(event.getAction())) { + if (ActionEvent.PLAY.equals(event.action())) { onPlay(); - } else if (ActionEvent.PAUSE.equals(event.getAction())) { + } else if (ActionEvent.PAUSE.equals(event.action())) { onPaused(); - } else if (ActionEvent.NEXT.equals(event.getAction())) { + } else if (ActionEvent.NEXT.equals(event.action())) { checkNext(); - } else if (ActionEvent.PREV.equals(event.getAction())) { + } else if (ActionEvent.PREV.equals(event.action())) { checkPrev(); - } else if (ActionEvent.LOOP.equals(event.getAction())) { + } else if (ActionEvent.LOOP.equals(event.action())) { onLoop(); - } else if (ActionEvent.REPLAY.equals(event.getAction())) { + } else if (ActionEvent.REPLAY.equals(event.action())) { onReplay(); - } else if (ActionEvent.AUDIO.equals(event.getAction())) { + } else if (ActionEvent.AUDIO.equals(event.action())) { moveTaskToBack(true); setAudioOnly(true); - } else if (ActionEvent.STOP.equals(event.getAction())) { + } else if (ActionEvent.STOP.equals(event.action())) { finish(); } } @@ -1204,8 +1204,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onPlayerEvent(PlayerEvent event) { - if (!event.getTag().equals(tag)) return; - switch (event.getState()) { + if (!event.tag().equals(tag)) return; + switch (event.state()) { case PlayerEvent.PREPARE: setDecode(); setPosition(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java index 160155498..553fe6b4e 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java @@ -156,7 +156,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Subscribe(threadMode = ThreadMode.MAIN) public void onScanEvent(ScanEvent event) { - scanTask.start(event.getAddress()); + scanTask.start(event.address()); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java index 64e22e432..7f0457e40 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java @@ -14,7 +14,6 @@ import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.databinding.DialogReceiveBinding; import com.fongmi.android.tv.event.CastEvent; -import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.ui.activity.VideoActivity; import com.fongmi.android.tv.utils.ImgUtil; @@ -52,9 +51,9 @@ public class ReceiveDialog extends BaseDialog { @Override protected void initView() { - History item = event.getHistory(); + History item = event.history(); binding.name.setText(item.getVodName()); - binding.from.setText(event.getDevice().getName()); + binding.from.setText(event.device().getName()); ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image); } @@ -76,12 +75,12 @@ public class ReceiveDialog extends BaseDialog { } private void onReceiveCast() { - if (VodConfig.get().getConfig().equals(event.getConfig())) { - VideoActivity.cast(requireActivity(), event.getHistory().save(VodConfig.getCid())); + if (VodConfig.get().getConfig().equals(event.config())) { + VideoActivity.cast(requireActivity(), event.history().save(VodConfig.getCid())); dismiss(); } else { showProgress(); - VodConfig.load(event.getConfig(), getCallback()); + VodConfig.load(event.config(), getCallback()); } } @@ -89,8 +88,6 @@ public class ReceiveDialog extends BaseDialog { return new Callback() { @Override public void success() { - RefreshEvent.config(); - RefreshEvent.video(); onReceiveCast(); hideProgress(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java index 373ff86e8..3399bb697 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java @@ -151,7 +151,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Subscribe(threadMode = ThreadMode.MAIN) public void onScanEvent(ScanEvent event) { - scanTask.start(event.getAddress()); + scanTask.start(event.address()); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java index dbf7dc243..237ee3d1d 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java @@ -24,6 +24,7 @@ import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.databinding.FragmentSettingBinding; import com.fongmi.android.tv.db.AppDatabase; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.impl.ConfigCallback; @@ -149,54 +150,42 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit private void load(Config config) { switch (config.getType()) { case 0: - VodConfig.load(config, getCallback(0)); + VodConfig.load(config, getCallback()); break; case 1: - LiveConfig.load(config, getCallback(1)); + LiveConfig.load(config, getCallback()); break; case 2: Setting.putWall(0); - WallConfig.load(config, getCallback(2)); + WallConfig.load(config, getCallback()); break; } } - private Callback getCallback(int type) { + private Callback getCallback() { return new Callback() { @Override public void start() { Notify.progress(requireActivity()); } - @Override - public void success(String result) { - Notify.show(result); - } - @Override public void success() { - setConfig(type); + Notify.dismiss(); + setCacheText(); } @Override public void error(String msg) { + Notify.dismiss(); Notify.show(msg); - setConfig(type); } }; } - private void setConfig(int type) { - setCacheText(); - Notify.dismiss(); - RefreshEvent.config(); - if (type == 0) RefreshEvent.video(); - } - @Override public void setSite(Site item) { VodConfig.get().setHome(item); - RefreshEvent.video(); } @Override @@ -257,12 +246,13 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit private void setWallDefault(View view) { Setting.putWall(Setting.getWall() == 4 ? 1 : Setting.getWall() + 1); - RefreshEvent.wall(); + Setting.putWallType(0); + ConfigEvent.wall(); } private void setWallRefresh(View view) { Setting.putWall(0); - WallConfig.get().load(getCallback(2)); + WallConfig.get().load(getCallback()); } private boolean onWallHistory(View view) { @@ -337,14 +327,14 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit } private void initConfig() { - VodConfig.get().init().load(getCallback(0)); + VodConfig.get().init().load(getCallback()); LiveConfig.get().init().load(); WallConfig.get().init().load(); } @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - if (event.getType() != RefreshEvent.Type.CONFIG) return; + public void onConfigEvent(ConfigEvent event) { + if (event.type() != ConfigEvent.Type.COMMON) return; mBinding.vodUrl.setText(VodConfig.getDesc()); mBinding.liveUrl.setText(LiveConfig.getDesc()); mBinding.wallUrl.setText(WallConfig.getDesc()); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 0267a6a5d..e481b6b0f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -28,6 +28,7 @@ import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.bean.Value; import com.fongmi.android.tv.databinding.FragmentVodBinding; import com.fongmi.android.tv.event.CastEvent; +import com.fongmi.android.tv.event.ConfigEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.event.StateEvent; import com.fongmi.android.tv.impl.Callback; @@ -233,19 +234,21 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { switch (event.getType()) { - case CONFIG: - setLogo(); - break; - case VIDEO: + case HOME: case SIZE: homeContent(); break; } } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onConfigEvent(ConfigEvent event) { + if (event.type() == ConfigEvent.Type.VOD) setLogo(); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onStateEvent(StateEvent event) { - switch (event.getType()) { + switch (event.type()) { case EMPTY: hideProgress(); break; @@ -273,9 +276,8 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal @Override public void success() { - RefreshEvent.config(); - RefreshEvent.video(); showContent(); + setLogo(); } @Override @@ -289,7 +291,6 @@ public class VodFragment extends BaseFragment implements ConfigCallback, SiteCal @Override public void setSite(Site item) { VodConfig.get().setHome(item); - homeContent(); } @Override