Optimize history save

release^2
jhengazuki 2 months ago
parent 18b3ffb57f
commit 37bafe8507
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/bean/Flag.java
  3. 44
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/db/dao/HistoryDao.java
  5. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -1403,6 +1403,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
protected void onPause() {
super.onPause();
if (isRedirect()) onPaused();
if (mHistory != null) mHistory.merge();
}
@Override

@ -111,7 +111,7 @@ public class Flag implements Parcelable {
public Episode find(String remarks, boolean strict) {
int number = Util.getDigit(remarks);
if (getEpisodes().size() == 0) return null;
if (getEpisodes().isEmpty()) return null;
if (getEpisodes().size() == 1) return getEpisodes().get(0);
for (Episode item : getEpisodes()) if (item.rule1(remarks)) return item;
for (Episode item : getEpisodes()) if (item.rule2(number)) return item;

@ -260,14 +260,19 @@ public class History implements Diffable<History> {
}
public static List<History> findByName(String name) {
return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), name);
try {
return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), name);
} catch (Exception e) {
return Collections.emptyList();
}
}
public static void delete(int cid) {
AppDatabase.get().getHistoryDao().delete(cid);
}
private boolean shouldMerge(History item) {
private boolean shouldMerge(History item, boolean force) {
if (!force && getKey().equals(item.getKey())) return false;
if (getDuration() <= 0 || item.getDuration() <= 0) return true;
return Math.abs(getDuration() - item.getDuration()) <= TimeUnit.MINUTES.toMillis(10);
}
@ -279,13 +284,21 @@ public class History implements Diffable<History> {
return this;
}
private History merge(List<History> items) {
for (History item : items) if (item.shouldMerge(this)) item.copyTo(this).delete();
public void merge() {
merge(false);
}
private History merge(boolean force) {
return merge(findByName(getVodName()), force);
}
private History merge(List<History> items, boolean force) {
for (History item : items) if (item.shouldMerge(this, force)) item.copyTo(this).delete();
return this;
}
public History save(int cid) {
return cid(cid).merge(findByName(getVodName())).save();
return cid(cid).merge(true).save();
}
public History save() {
@ -300,21 +313,17 @@ public class History implements Diffable<History> {
}
public void findEpisode(List<Flag> flags) {
if (!flags.isEmpty()) {
setVodFlag(flags.get(0).getFlag());
if (!flags.get(0).getEpisodes().isEmpty()) {
setVodRemarks(flags.get(0).getEpisodes().get(0).getName());
}
}
if (flags.isEmpty()) return;
setVodFlag(flags.get(0).getFlag());
if (!flags.get(0).getEpisodes().isEmpty()) setVodRemarks(flags.get(0).getEpisodes().get(0).getName());
for (History item : findByName(getVodName())) {
if (getPosition() > 0) break;
for (Flag flag : flags) {
Episode episode = flag.find(item.getVodRemarks(), true);
if (episode == null) continue;
item.copyTo(this);
setVodFlag(flag.getFlag());
setPosition(item.getPosition());
setVodRemarks(episode.getName());
item.copyTo(this);
break;
}
}
@ -327,12 +336,15 @@ public class History implements Diffable<History> {
target.cid(VodConfig.getCid()).save();
continue;
}
long latestLocalTime = 0;
for (History item : items) {
if (target.getCreateTime() > item.getCreateTime()) {
target.cid(VodConfig.getCid()).merge(items).save();
break;
if (item.getCreateTime() > latestLocalTime) {
latestLocalTime = item.getCreateTime();
}
}
if (target.getCreateTime() > latestLocalTime) {
target.cid(VodConfig.getCid()).merge(items, true).save();
}
}
}

@ -13,13 +13,13 @@ public abstract class HistoryDao extends BaseDao<History> {
@Query("SELECT * FROM History")
public abstract List<History> findAll();
@Query("SELECT * FROM History WHERE cid = :cid AND createTime >= :createTime ORDER BY createTime DESC")
@Query("SELECT * FROM History WHERE cid = :cid AND createTime >= :createTime ORDER BY createTime DESC LIMIT 60")
public abstract List<History> find(int cid, long createTime);
@Query("SELECT * FROM History WHERE cid = :cid AND `key` = :key")
public abstract History find(int cid, String key);
@Query("SELECT * FROM History WHERE cid = :cid AND vodName = :vodName")
@Query("SELECT * FROM History WHERE cid = :cid AND vodName = :vodName AND position > 0 ORDER BY createTime DESC")
public abstract List<History> findByName(int cid, String vodName);
@Query("DELETE FROM History WHERE cid = :cid AND `key` = :key")

@ -1646,6 +1646,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
protected void onPause() {
super.onPause();
if (isRedirect()) onPaused();
if (mHistory != null) mHistory.merge();
}
@Override

Loading…
Cancel
Save