Commit f95cb106 authored by fallenstardust's avatar fallenstardust

修复上传卡组时未上传decktype的问题

回滚同步修改
parent 429190da
...@@ -6,9 +6,8 @@ import android.widget.Toast; ...@@ -6,9 +6,8 @@ import android.widget.Toast;
import com.google.gson.Gson; import com.google.gson.Gson;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
...@@ -192,6 +191,7 @@ public class DeckSquareApiUtil { ...@@ -192,6 +191,7 @@ public class DeckSquareApiUtil {
String deckContent = DeckSquareFileUtil.setDeckId(myDeckItem.getDeckPath(), loginToken.getUserId(), deckIdList.get(i)); String deckContent = DeckSquareFileUtil.setDeckId(myDeckItem.getDeckPath(), loginToken.getUserId(), deckIdList.get(i));
PushMultiDeck.DeckData data = new PushMultiDeck.DeckData(); PushMultiDeck.DeckData data = new PushMultiDeck.DeckData();
data.setDeckYdk(deckContent); data.setDeckYdk(deckContent);
data.setDeckType(myDeckItem.getDeckType());
data.setDeckName(myDeckItem.getDeckName()); data.setDeckName(myDeckItem.getDeckName());
data.setDeckCoverCard1(myDeckItem.getDeckCoverCard1()); data.setDeckCoverCard1(myDeckItem.getDeckCoverCard1());
data.setDeckId(deckIdList.get(i)); data.setDeckId(deckIdList.get(i));
...@@ -435,37 +435,35 @@ public class DeckSquareApiUtil { ...@@ -435,37 +435,35 @@ public class DeckSquareApiUtil {
DeckManagerFragment.getOriginalData().clear(); DeckManagerFragment.getOriginalData().clear();
DeckManagerFragment.getOriginalData().addAll(onlineDecks); DeckManagerFragment.getOriginalData().addAll(onlineDecks);
// 创建在线卡组映射 name_type -> onlineDeck 用于快速查找 // 遍历本地卡组与云备份卡组,过滤差异项(使用迭代器避免ConcurrentModificationException)
Map<String, MyOnlineDeckDetail> onlineDeckMap = new HashMap<>();
for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
String key = (onlineDeck.getDeckType() != null ? onlineDeck.getDeckType() : "") + "_" + (onlineDeck.getDeckName() != null ? onlineDeck.getDeckName() : "");
onlineDeckMap.put(key, onlineDeck);
}
// 遍历本地卡组与云备份卡组,过滤差异项
List<MyDeckItem> syncUploadDecks = new ArrayList<>(); List<MyDeckItem> syncUploadDecks = new ArrayList<>();
// 1. 使用本地卡组的迭代器遍历(支持安全删除)
Iterator<MyDeckItem> localIterator = localDecks.iterator(); Iterator<MyDeckItem> localIterator = localDecks.iterator();
while (localIterator.hasNext()) { while (localIterator.hasNext()) {
MyDeckItem localDeck = localIterator.next(); MyDeckItem localDeck = localIterator.next();
// 预处理本地卡组 // 预处理本地卡组
String rawLocalName = localDeck.getDeckName(); String localDeckName = localDeck.getDeckName().replace(Constants.YDK_FILE_EX, "");
String localDeckName = rawLocalName.replace(Constants.YDK_FILE_EX, "");
localDeck.setDeckName(localDeckName); localDeck.setDeckName(localDeckName);
localDeck.setDeckCoverCard1(DeckUtil.getFirstCardCode(localDeck.getDeckPath())); localDeck.setDeckCoverCard1(DeckUtil.getFirstCardCode(localDeck.getDeckPath()));
localDeck.setDelete(false); localDeck.setDelete(false);
LogUtil.e(TAG,"本地卡组名称:"+localDeck.getDeckType()+"-"+localDeck.getDeckName()+" ID:"+localDeck.getDeckId());
LogUtil.d(TAG, "本地卡组名称:" + localDeck.getDeckType() + "-" + localDeck.getDeckName() + " 和 ID:" + localDeck.getDeckId()); // 2. 使用在线卡组的迭代器遍历(支持安全删除)
Iterator<MyOnlineDeckDetail> onlineIterator = onlineDecks.iterator();
String localKey = (localDeck.getDeckType() != null ? localDeck.getDeckType() : "") + "_" + (rawLocalName != null ? rawLocalName : ""); while (onlineIterator.hasNext()) {
MyOnlineDeckDetail matchedOnlineDeck = onlineDeckMap.remove(localKey); // 移除已匹配项防止重复处理 MyOnlineDeckDetail onlineDeck = onlineIterator.next();
String onLineDeckName = onlineDeck.getDeckName().replace(Constants.YDK_FILE_EX, "");
if (matchedOnlineDeck != null) { LogUtil.e(TAG,"在线备份名称:"+onlineDeck.getDeckType()+"/"+onLineDeckName+" 在线卡组ID:"+onlineDeck.getDeckId());
localDeck.setDeckId(matchedOnlineDeck.getDeckId()); // 匹配到同名卡组:加入同步上传列表,并从原始集合中删除(避免重复处理)
if (localDeckName.equals(onLineDeckName)) {// && localDeck.getDeckType().equals(onlineDeck.getDeckType())
localDeck.setDeckId(onlineDeck.getDeckId());
syncUploadDecks.add(localDeck); syncUploadDecks.add(localDeck);
localIterator.remove(); // 安全删除本地卡组 localIterator.remove(); // 安全删除本地卡组(迭代器方法)
onlineIterator.remove(); // 安全删除在线卡组(迭代器方法)
break; // 匹配后跳出内部循环
}
} }
// 若未匹配到在线卡组,该本地卡组会保留在localDecks中(后续作为新卡组上传)
} }
// 上传本地卡组覆盖在线卡组 // 上传本地卡组覆盖在线卡组
...@@ -481,40 +479,24 @@ public class DeckSquareApiUtil { ...@@ -481,40 +479,24 @@ public class DeckSquareApiUtil {
// 剩余的在线卡组都是云端独有,需要下载 // 剩余的在线卡组都是云端独有,需要下载
LogUtil.i(TAG, "剩余onlineDecks:" + onlineDecks); LogUtil.i(TAG, "剩余onlineDecks:" + onlineDecks);
for (MyOnlineDeckDetail onlineDeck : onlineDecks) { for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
LogUtil.d(TAG, "+要下载的 云备份卡组: \n卡组分类:" + onlineDeck.getDeckType() LogUtil.d(TAG, "synchronizeDecks +要下载的 云备份卡组: \n卡组分类:" + onlineDeck.getDeckType() + "\n卡组名:" + onlineDeck.getDeckName() + "\n卡组id:" + onlineDeck.getDeckId());
+ "\n卡组名:" + onlineDeck.getDeckName() + "\n卡组id:" + onlineDeck.getDeckId());
// 确保文件名包含.ydk扩展名 // 确保文件名包含.ydk扩展名
String fileName = onlineDeck.getDeckName(); String fileName = onlineDeck.getDeckName();
if (!fileName.toLowerCase().endsWith(Constants.YDK_FILE_EX)) { if (!fileName.toLowerCase().endsWith(Constants.YDK_FILE_EX)) {
fileName += Constants.YDK_FILE_EX; fileName += Constants.YDK_FILE_EX;
} }
String baseDir = AppsSettings.get().getDeckDir(); String fileFullPath = AppsSettings.get().getDeckDir() + "/" + fileName;
if (baseDir == null) { if (!onlineDeck.getDeckType().equals(""))
LogUtil.e(TAG, "Deck directory is not configured."); fileFullPath = AppsSettings.get().getDeckDir() + "/" + onlineDeck.getDeckType() + "/" + fileName;
continue;
}
Path filePath; // 保存在线卡组到本地
if (!onlineDeck.getDeckType().isEmpty()) {
filePath = Paths.get(baseDir, onlineDeck.getDeckType(), fileName);
} else {
filePath = Paths.get(baseDir, fileName);
}
String fileFullPath = filePath.toString();
try {
boolean saved = DeckSquareFileUtil.saveFileToPath(fileFullPath, onlineDeck.getDeckYdk(), onlineDeck.getDeckUpdateDate()); boolean saved = DeckSquareFileUtil.saveFileToPath(fileFullPath, onlineDeck.getDeckYdk(), onlineDeck.getDeckUpdateDate());
if (!saved) { if (!saved) {
LogUtil.e(TAG, "synchronizeDecks 保存失败!的 云备份卡组: " + fileFullPath); LogUtil.e(TAG, "synchronizeDecks 保存失败!的 云备份卡组: " + fileFullPath);
} else { } else {
LogUtil.d(TAG, "synchronizeDecks 保存成功√的 云备份卡组: " + fileFullPath); LogUtil.d(TAG, "synchronizeDecks 保存成功√的 云备份卡组: " + fileFullPath);
} }
} catch (Exception e) {
LogUtil.e(TAG, "Failed to save deck file: " + fileFullPath, e);
}
} }
} }
......
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