[mobile] support sync history - part 3

pull/123/head
FongMi 3 years ago
parent 9fcf11b619
commit 7855ecdfc6
  1. 23
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  2. 4
      app/src/main/java/com/fongmi/android/tv/net/OkHttp.java
  3. 30
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java
  4. 37
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.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<History> items) {
private static void sync(List<History> targets) {
for (History target : targets) {
List<History> 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<History> targets, Callback callback) {
App.execute(() -> {
sync(targets);
App.post(callback::success);
});
}
@NonNull

@ -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<String, String> params) {

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

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

Loading…
Cancel
Save