From 67d3a72c7e420a96d1d9774ce135fcae3d22d3e0 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 4 Jun 2023 22:44:39 +0800 Subject: [PATCH] Support sync replace mode --- .../java/com/fongmi/android/tv/db/dao/KeepDao.java | 2 +- .../tv/server/process/ActionRequestProcess.java | 11 ++++++++--- .../android/tv/ui/adapter/DeviceAdapter.java | 3 +++ .../android/tv/ui/custom/dialog/CastDialog.java | 5 +++++ .../android/tv/ui/custom/dialog/SyncDialog.java | 14 ++++++++++++-- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java b/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java index 0263ad25c..d70b5990e 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java +++ b/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java @@ -31,6 +31,6 @@ public abstract class KeepDao extends BaseDao { @Query("DELETE FROM Keep WHERE type = 0 AND cid = :cid") public abstract void delete(int cid); - @Query("DELETE FROM Keep") + @Query("DELETE FROM Keep WHERE type = 0") public abstract void delete(); } 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 39d15e7ca..c012695bf 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 @@ -74,10 +74,11 @@ public class ActionRequestProcess implements RequestProcess { } public void onSync(Map params) { + boolean sync = params.get("mode").equals("0"); boolean keep = params.get("type").equals("keep"); boolean history = params.get("type").equals("history"); Device device = Device.objectFrom(params.get("device")); - if (params.get("device") != null) { + if (params.get("device") != null && sync) { if (history) sendHistory(device, params); else if (keep) sendKeep(device); } @@ -94,7 +95,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(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&type=history"), body.build()).execute(); + OkHttp.newCall(OkHttp.client(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&mode=0&type=history"), body.build()).execute(); } catch (Exception e) { App.post(() -> Notify.show(e.getMessage())); } @@ -105,7 +106,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(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&type=keep"), body.build()).execute(); + OkHttp.newCall(OkHttp.client(Constant.TIMEOUT_SYNC), device.getIp().concat("/action?do=sync&mode=0&type=keep"), body.build()).execute(); } catch (Exception e) { App.post(() -> Notify.show(e.getMessage())); } @@ -115,8 +116,10 @@ public class ActionRequestProcess implements RequestProcess { String url = params.get("url"); if (TextUtils.isEmpty(url)) return; Config config = Config.find(url, 0); + boolean replace = params.get("mode").equals("1"); List targets = History.arrayFrom(params.get("targets")); if (ApiConfig.get().getConfig().equals(config)) { + if (replace) History.delete(config.getId()); History.sync(targets); } else { ApiConfig.load(config, getCallback(targets)); @@ -142,9 +145,11 @@ public class ActionRequestProcess implements RequestProcess { public void syncKeep(Map params) { List configs = Config.arrayFrom(params.get("configs")); List targets = Keep.arrayFrom(params.get("targets")); + boolean replace = params.get("mode").equals("1"); if (ApiConfig.getUrl() == null && configs.size() > 0) { ApiConfig.load(Config.find(configs.get(0), 0), getCallback(configs, targets)); } else { + if (replace) Keep.deleteAll(); Keep.sync(configs, targets); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java index a5e31e02f..86fc23dfd 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/DeviceAdapter.java @@ -26,6 +26,8 @@ public class DeviceAdapter extends RecyclerView.Adapter items) { @@ -71,6 +73,7 @@ public class DeviceAdapter extends RecyclerView.Adapter mListener.onItemClick(item)); + holder.binding.getRoot().setOnLongClickListener(v -> mListener.onLongClick(item)); } private int getIcon(Device item) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java index dc3206a96..67c93b5db 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java @@ -194,6 +194,11 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe }); } + @Override + public boolean onLongClick(Device item) { + return false; + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SyncDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SyncDialog.java index 3f0f95e91..841c05459 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SyncDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SyncDialog.java @@ -134,7 +134,17 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Override public void onItemClick(Device item) { - OkHttp.newCall(client, item.getIp().concat("/action?do=sync&type=").concat(type), body.build()).enqueue(new Callback() { + OkHttp.newCall(client, item.getIp().concat("/action?do=sync&mode=0&type=").concat(type), body.build()).enqueue(getCallback()); + } + + @Override + public boolean onLongClick(Device item) { + OkHttp.newCall(client, item.getIp().concat("/action?do=sync&mode=1&type=").concat(type), body.build()).enqueue(getCallback()); + return true; + } + + private Callback getCallback() { + return new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { App.post(() -> onSuccess()); @@ -144,7 +154,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe public void onFailure(@NonNull Call call, @NonNull IOException e) { App.post(() -> onError()); } - }); + }; } @Override