diff --git a/app/src/main/java/com/fongmi/android/tv/bean/History.java b/app/src/main/java/com/fongmi/android/tv/bean/History.java index bfc8a251e..1d20237ce 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/History.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/History.java @@ -7,9 +7,11 @@ import androidx.annotation.NonNull; import androidx.room.Entity; import androidx.room.PrimaryKey; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.db.AppDatabase; +import com.fongmi.android.tv.net.Callback; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; @@ -312,8 +314,27 @@ public class History { } } - public static void sync(List items) { + private static void sync(List targets) { + for (History target : targets) { + List items = AppDatabase.get().getHistoryDao().findByName(ApiConfig.getCid(), target.getVodName()); + if (items.isEmpty()) { + target.update(ApiConfig.getCid()); + continue; + } + for (History item : items) { + if (target.getCreateTime() > item.getCreateTime()) { + target.update(ApiConfig.getCid()); + break; + } + } + } + } + public static void sync(List targets, Callback callback) { + App.execute(() -> { + sync(targets); + App.post(callback::success); + }); } @NonNull diff --git a/app/src/main/java/com/fongmi/android/tv/net/OkHttp.java b/app/src/main/java/com/fongmi/android/tv/net/OkHttp.java index 7d6effec7..f728a7ed5 100644 --- a/app/src/main/java/com/fongmi/android/tv/net/OkHttp.java +++ b/app/src/main/java/com/fongmi/android/tv/net/OkHttp.java @@ -52,8 +52,8 @@ public class OkHttp { return client().newCall(new Request.Builder().url(buildUrl(url, params)).build()); } - public static Call newCall(String url, RequestBody body) { - return client().newCall(new Request.Builder().url(url).post(body).build()); + public static Call newCall(OkHttpClient client, String url, RequestBody body) { + return client.newCall(new Request.Builder().url(url).post(body).build()); } private static HttpUrl buildUrl(String url, ArrayMap params) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java index bf2ad06be..3bac96983 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java @@ -10,16 +10,12 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.Product; import com.fongmi.android.tv.R; -import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.databinding.ActivityHistoryBinding; import com.fongmi.android.tv.event.RefreshEvent; -import com.fongmi.android.tv.event.SyncEvent; -import com.fongmi.android.tv.net.Callback; import com.fongmi.android.tv.ui.adapter.HistoryAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.dialog.SyncDialog; -import com.fongmi.android.tv.utils.Notify; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.greenrobot.eventbus.Subscribe; @@ -83,32 +79,6 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl if (event.getType().equals(RefreshEvent.Type.HISTORY)) getHistory(); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onSyncEvent(SyncEvent event) { - if (ApiConfig.get().getConfig().equals(event.getConfig())) { - History.sync(event.getHistory()); - getHistory(); - } else { - ApiConfig.get().clear().config(event.getConfig()).load(getCallback(event)); - } - } - - private Callback getCallback(SyncEvent event) { - return new Callback() { - @Override - public void success() { - RefreshEvent.config(); - RefreshEvent.video(); - onSyncEvent(event); - } - - @Override - public void error(int resId) { - Notify.show(resId); - } - }; - } - @Override public void onItemClick(History item) { DetailActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName()); 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 8e7b47c22..14a811a39 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 @@ -18,12 +18,14 @@ import androidx.viewpager.widget.ViewPager; import com.fongmi.android.tv.App; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Class; +import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Hot; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.databinding.FragmentVodBinding; import com.fongmi.android.tv.event.CastEvent; import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.event.SyncEvent; import com.fongmi.android.tv.impl.FilterCallback; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.model.SiteViewModel; @@ -40,6 +42,7 @@ import com.fongmi.android.tv.ui.custom.dialog.FilterDialog; import com.fongmi.android.tv.ui.custom.dialog.LinkDialog; import com.fongmi.android.tv.ui.custom.dialog.ReceiveDialog; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; +import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.Trans; import com.google.common.net.HttpHeaders; @@ -232,6 +235,31 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal return mResult == null ? new Result() : mResult; } + private Callback getCallback() { + return new Callback() { + @Override + public void success() { + RefreshEvent.history(); + } + }; + } + + private Callback getCallback(SyncEvent event) { + return new Callback() { + @Override + public void success() { + RefreshEvent.config(); + RefreshEvent.video(); + onSyncEvent(event); + } + + @Override + public void error(int resId) { + Notify.show(resId); + } + }; + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { switch (event.getType()) { @@ -250,6 +278,15 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal ReceiveDialog.create().event(event).show(this); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onSyncEvent(SyncEvent event) { + if (ApiConfig.get().getConfig().equals(event.getConfig())) { + History.sync(event.getHistory(), getCallback()); + } else { + ApiConfig.get().clear().config(event.getConfig()).load(getCallback(event)); + } + } + @Override public void setSite(Site item) { ApiConfig.get().setHome(item);