Optimize history

pull/605/head
jhengazuki 6 months ago
parent 11c97c827e
commit 18b3ffb57f
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 58
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  3. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java

@ -1025,7 +1025,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
long position, duration;
mHistory.setPosition(position = mPlayers.getPosition());
mHistory.setDuration(duration = mPlayers.getDuration());
if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update());
if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save());
if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) {
checkEnded(false);
}

@ -210,6 +210,11 @@ public class History implements Diffable<History> {
this.cid = cid;
}
public History cid(int cid) {
setCid(cid);
return this;
}
public String getSiteName() {
return VodConfig.get().getSite(getSiteKey()).getName();
}
@ -254,38 +259,33 @@ public class History implements Diffable<History> {
return AppDatabase.get().getHistoryDao().find(VodConfig.getCid(), key);
}
public static void delete(int cid) {
AppDatabase.get().getHistoryDao().delete(cid);
public static List<History> findByName(String name) {
return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), name);
}
private void checkParam(History item) {
if (getOpening() <= 0) setOpening(item.getOpening());
if (getEnding() <= 0) setEnding(item.getEnding());
if (getSpeed() == 1) setSpeed(item.getSpeed());
public static void delete(int cid) {
AppDatabase.get().getHistoryDao().delete(cid);
}
private void merge(List<History> items, boolean force) {
for (History item : items) {
if (getDuration() > 0 && item.getDuration() > 0 && Math.abs(getDuration() - item.getDuration()) > TimeUnit.MINUTES.toMillis(10)) continue;
if (!force && getKey().equals(item.getKey())) continue;
checkParam(item);
item.delete();
}
private boolean shouldMerge(History item) {
if (getDuration() <= 0 || item.getDuration() <= 0) return true;
return Math.abs(getDuration() - item.getDuration()) <= TimeUnit.MINUTES.toMillis(10);
}
public void update() {
merge(find(), false);
save();
private History copyTo(History item) {
if (getOpening() > 0) item.setOpening(getOpening());
if (getEnding() > 0) item.setEnding(getEnding());
if (getSpeed() != 1) item.setSpeed(getSpeed());
return this;
}
public History update(int cid) {
return update(cid, find());
private History merge(List<History> items) {
for (History item : items) if (item.shouldMerge(this)) item.copyTo(this).delete();
return this;
}
public History update(int cid, List<History> items) {
setCid(cid);
merge(items, true);
return save();
public History save(int cid) {
return cid(cid).merge(findByName(getVodName())).save();
}
public History save() {
@ -299,10 +299,6 @@ public class History implements Diffable<History> {
return this;
}
public List<History> find() {
return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), getVodName());
}
public void findEpisode(List<Flag> flags) {
if (!flags.isEmpty()) {
setVodFlag(flags.get(0).getFlag());
@ -310,7 +306,7 @@ public class History implements Diffable<History> {
setVodRemarks(flags.get(0).getEpisodes().get(0).getName());
}
}
for (History item : find()) {
for (History item : findByName(getVodName())) {
if (getPosition() > 0) break;
for (Flag flag : flags) {
Episode episode = flag.find(item.getVodRemarks(), true);
@ -318,7 +314,7 @@ public class History implements Diffable<History> {
setVodFlag(flag.getFlag());
setPosition(item.getPosition());
setVodRemarks(episode.getName());
checkParam(item);
item.copyTo(this);
break;
}
}
@ -326,14 +322,14 @@ public class History implements Diffable<History> {
private static void startSync(List<History> targets) {
for (History target : targets) {
List<History> items = target.find();
List<History> items = findByName(target.getVodName());
if (items.isEmpty()) {
target.update(VodConfig.getCid(), items);
target.cid(VodConfig.getCid()).save();
continue;
}
for (History item : items) {
if (target.getCreateTime() > item.getCreateTime()) {
target.update(VodConfig.getCid(), items);
target.cid(VodConfig.getCid()).merge(items).save();
break;
}
}

@ -1121,7 +1121,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
long position, duration;
mHistory.setPosition(position = mPlayers.getPosition());
mHistory.setDuration(duration = mPlayers.getDuration());
if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update());
if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save());
if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) {
checkEnded(false);
}

@ -77,7 +77,7 @@ public class ReceiveDialog extends BaseDialog {
private void onReceiveCast() {
if (VodConfig.get().getConfig().equals(event.getConfig())) {
VideoActivity.cast(requireActivity(), event.getHistory().update(VodConfig.getCid()));
VideoActivity.cast(requireActivity(), event.getHistory().save(VodConfig.getCid()));
dismiss();
} else {
showProgress();

Loading…
Cancel
Save