Commit 38a4bae1 authored by fallenstardust's avatar fallenstardust

登录后自动上传本地存在但未被云备份的卡组

parent d06f7832
...@@ -33,6 +33,7 @@ import cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse; ...@@ -33,6 +33,7 @@ import cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.SyncDecksResponse; import cn.garymb.ygomobile.deck_square.api_response.SyncDecksResponse;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.LogUtil; import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.OkhttpUtil; import cn.garymb.ygomobile.utils.OkhttpUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil; import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
...@@ -444,45 +445,58 @@ public class DeckSquareApiUtil { ...@@ -444,45 +445,58 @@ public class DeckSquareApiUtil {
} }
List<MyOnlineDeckDetail> onlineDecks = onlineDecksResponse.getData(); List<MyOnlineDeckDetail> onlineDecks = onlineDecksResponse.getData();
// 用于标记在线卡组是否在本地有对应 // 用于标记在线卡组是否在本地有对应
Map<String, Boolean> onlineDeckProcessed = new HashMap<>(); Map<String, Boolean> onlineDeckProcessed = new HashMap<>();
for (MyOnlineDeckDetail onlineDeck : onlineDecks) { for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
onlineDeckProcessed.put(onlineDeck.getDeckName(), false); onlineDeckProcessed.put(onlineDeck.getDeckName(), false);
} }
// 用于标记本地卡组是否在在线有对应
Map<String, Boolean> localDeckProcessed = new HashMap<>();
for (MyDeckItem localDeck : localDecks) {
String deckName = localDeck.getDeckName().replace(".ydk", "");
localDeckProcessed.put(deckName, false);
}
// 遍历本地卡组,处理同名卡组的情况 // 遍历本地卡组,处理同名卡组的情况
for (MyDeckItem localDeck : localDecks) { for (MyDeckItem localDeck : localDecks) {
String localDeckName = localDeck.getDeckName(); String localDeckName = localDeck.getDeckName().replace(".ydk", "");
localDeckName = localDeckName.replace(".ydk", "");
boolean foundOnlineDeck = false;
for (MyOnlineDeckDetail onlineDeck : onlineDecks) { for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
if (localDeckName.equals(onlineDeck.getDeckName())) { if (localDeckName.equals(onlineDeck.getDeckName())) {
// 标记该在线卡组已处理 // 标记该在线卡组已处理
onlineDeckProcessed.put(onlineDeck.getDeckName(), true); onlineDeckProcessed.put(onlineDeck.getDeckName(), true);
// 标记该本地卡组已处理
localDeckProcessed.put(localDeckName, true);
foundOnlineDeck = true;
// 比对更新时间 // 比对更新时间
String localUpdateDate = localDeck.getUpdateDate(); String localUpdateDate = localDeck.getUpdateDate();
String onlineUpdateDate =""; String onlineUpdateDate = "";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
LocalDateTime dateTime = LocalDateTime.parse(onlineDeck.getDeckUpdateDate()); LocalDateTime dateTime = LocalDateTime.parse(onlineDeck.getDeckUpdateDate());
onlineUpdateDate = String.valueOf(dateTime.toInstant(ZoneOffset.UTC).toEpochMilli()); onlineUpdateDate = String.valueOf(dateTime.toInstant(ZoneOffset.UTC).toEpochMilli());
} }
LogUtil.d("seesee", localUpdateDate +"//"+ onlineUpdateDate);
if (onlineUpdateDate != null) { if (onlineUpdateDate != null && onlineUpdateDate.compareTo(localUpdateDate) > 0) {
if (onlineUpdateDate.compareTo(localUpdateDate) > 0) { // 在线卡组更新时间更晚,下载在线卡组覆盖本地卡组
// 在线卡组更新时间更晚,下载在线卡组覆盖本地卡组
downloadOnlineDeck(onlineDeck, localDeck.getDeckPath());
} else {
// 本地卡组更新时间更晚,上传本地卡组覆盖在线卡组
uploadLocalDeck(localDeck, onlineDeck.getDeckId(), loginToken);
}
} else {
downloadOnlineDeck(onlineDeck, localDeck.getDeckPath()); downloadOnlineDeck(onlineDeck, localDeck.getDeckPath());
} else {
// 本地卡组更新时间更晚,上传本地卡组覆盖在线卡组
uploadLocalDeck(localDeck, onlineDeck.getDeckId(), loginToken);
} }
break; break;
} }
} }
// 本地卡组在在线列表中不存在,直接上传
if (!foundOnlineDeck) {
DeckFile deckFile = new DeckFile(localDeck.getDeckName(), new File(localDeck.getDeckPath()), DeckType.ServerType.MY_SQUARE, localDeck.getDeckId());
deckFile.setName(localDeck.getDeckName());
deckFile.setFirstCode(DeckUtil.getFirstCardCode(localDeck.getDeckPath()));
requestIdAndPushDeck(deckFile, loginToken);
}
} }
// 处理只存在于在线的卡组(即本地没有同名卡组) // 处理只存在于在线的卡组(即本地没有同名卡组)
...@@ -493,7 +507,6 @@ public class DeckSquareApiUtil { ...@@ -493,7 +507,6 @@ public class DeckSquareApiUtil {
} }
return true; return true;
} }
private static boolean downloadMissingDeckToLocal(MyOnlineDeckDetail onlineDeck) { private static boolean downloadMissingDeckToLocal(MyOnlineDeckDetail onlineDeck) {
...@@ -579,7 +592,7 @@ public class DeckSquareApiUtil { ...@@ -579,7 +592,7 @@ public class DeckSquareApiUtil {
try { try {
DeckFile deckFile = new DeckFile(localDeck.getDeckName(), new File(localDeck.getDeckPath()), DeckType.ServerType.MY_SQUARE, localDeck.getDeckId()); DeckFile deckFile = new DeckFile(localDeck.getDeckName(), new File(localDeck.getDeckPath()), DeckType.ServerType.MY_SQUARE, localDeck.getDeckId());
deckFile.setName(localDeck.getDeckName()); deckFile.setName(localDeck.getDeckName());
deckFile.setFirstCode(localDeck.getDeckCoverCard1()); deckFile.setFirstCode(DeckUtil.getFirstCardCode(localDeck.getDeckPath()));
// 上传本地卡组,使用在线卡组的deckId // 上传本地卡组,使用在线卡组的deckId
PushDeckResponse response = DeckSquareApiUtil.pushDeck(deckFile, loginToken, onlineDeckId); PushDeckResponse response = DeckSquareApiUtil.pushDeck(deckFile, loginToken, onlineDeckId);
if (response == null || !response.isData()) { if (response == null || !response.isData()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment