Commit 8b4221a8 authored by wangfugui's avatar wangfugui

卡组自动同步功能,修改同步比较

parent 1416c0c5
......@@ -23,11 +23,11 @@ import cn.garymb.ygomobile.deck_square.api_response.LoginResponse;
import cn.garymb.ygomobile.deck_square.api_response.LoginToken;
import cn.garymb.ygomobile.deck_square.api_response.MyDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.MyOnlineDeckDetail;
import cn.garymb.ygomobile.deck_square.api_response.PushSingleDeck;
import cn.garymb.ygomobile.deck_square.api_response.PushDeckPublicState;
import cn.garymb.ygomobile.deck_square.api_response.PushDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.PushMultiDeck;
import cn.garymb.ygomobile.deck_square.api_response.PushSingleDeck;
import cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.SyncDecksResponse;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil;
......@@ -75,6 +75,7 @@ public class DeckSquareApiUtil {
/**
* 根据条件,分页查询卡组的列表(不查询卡组的内容,只查询卡组名、卡组id等概括性信息)
*
* @param condition
* @return
* @throws IOException
......@@ -253,14 +254,14 @@ public class DeckSquareApiUtil {
return result;
}
/**
*
* @param deckDataList
* @param loginToken
* @return
* @throws IOException
*/
public static SyncDecksResponse syncDecks(List<PushSingleDeck.DeckData> deckDataList, LoginToken loginToken) throws IOException {
public static SyncDecksResponse syncDecks(List<PushMultiDeck.DeckData> deckDataList, LoginToken loginToken) throws IOException {
SyncDecksResponse result = null;
String url = "http://rarnu.xyz:38383/api/mdpro3/sync/multi";
Map<String, String> headers = new HashMap<>();
......@@ -423,6 +424,67 @@ public class DeckSquareApiUtil {
String url = "http://rarnu.xyz:38383/api/mdpro3/deck/" + deckId;
}
public static boolean synchronizeDecksV2() throws IOException {
// 检查用户是否登录
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
if (loginToken == null) {
return false;
}
// 获取本地卡组列表
List<MyDeckItem> localDecks = DeckSquareFileUtil.getMyDeckItem();
// 获取在线卡组列表
MyDeckResponse onlineDecksResponse = DeckSquareApiUtil.getUserDecks(loginToken);
if (onlineDecksResponse == null || onlineDecksResponse.getData() == null) {
return false;
}
List<MyOnlineDeckDetail> onlineDecks = onlineDecksResponse.getData();
// 用于标记在线卡组是否在本地有对应
Map<String, Boolean> onlineDeckProcessed = new HashMap<>();
for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
onlineDeckProcessed.put(onlineDeck.getDeckName(), false);
}
// 遍历本地卡组,处理同名卡组的情况
for (MyDeckItem localDeck : localDecks) {
String localDeckName = localDeck.getDeckName();
localDeckName = localDeckName.replace(".ydk", "");
for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
if (localDeckName.equals(onlineDeck.getDeckName())) {
// 标记该在线卡组已处理
onlineDeckProcessed.put(onlineDeck.getDeckName(), true);
// 比对更新时间
String localUpdateDate = localDeck.getUpdateDate();
String onlineUpdateDate = String.valueOf(0);//todo 这里应该把2025-05-19T06:11:17转成毫秒,onlineDeck.getDeckUpdateDate();
if (onlineUpdateDate != null && (localUpdateDate == null || onlineUpdateDate.compareTo(localUpdateDate) > 0)) {
// 在线卡组更新时间更晚,下载在线卡组覆盖本地卡组
downloadOnlineDeck(onlineDeck, localDeck.getDeckPath());
} else {
// 本地卡组更新时间更晚,上传本地卡组覆盖在线卡组
uploadLocalDeck(localDeck, onlineDeck.getDeckId(), loginToken);
}
break;
}
}
}
// 处理只存在于在线的卡组(即本地没有同名卡组)
for (MyOnlineDeckDetail onlineDeck : onlineDecks) {
if (!onlineDeckProcessed.get(onlineDeck.getDeckName())) {
downloadMissingDeckToLocal(onlineDeck);
}
}
return true;
}
public static void synchronizeDecks() {
// 检查用户是否登录
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
......
......@@ -98,6 +98,10 @@ public class DeckSquareFileUtil {
String deckId = getId(file);
MyDeckItem item = new MyDeckItem();
item.deckName = file.getName();
item.setUpdateDate(String.valueOf(file.lastModified()));
item.setDeckSouce(0);
item.setDeckPath(file.getPath());
if (deckId != null) {
......
......@@ -23,6 +23,7 @@ import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGODeckDialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
......@@ -56,7 +57,7 @@ public class DeckSquareMyDeckFragment extends Fragment {
binding.tvMycardUserName.setText(SharedPreferenceUtil.getMyCardUserName());
GlideCompat.with(getActivity()).load(ChatMessage.getAvatarUrl(SharedPreferenceUtil.getMyCardUserName())).into(binding.myDeckAvatar);//刷新头像图片
}
DeckSquareApiUtil.synchronizeDecks();
//DeckSquareApiUtil.synchronizeDecks();
binding.btnLogin.setOnClickListener(v -> attemptLogin());
binding.btnRegister.setOnClickListener(v -> WebActivity.open(getContext(), getString(R.string.register), MyCard.URL_MC_SIGN_UP));
deckListAdapter = new MyDeckListAdapter(R.layout.item_my_deck, onDeckMenuListener, mDialogListener);
......@@ -115,6 +116,17 @@ public class DeckSquareMyDeckFragment extends Fragment {
deckListAdapter.filter(s.toString());
}
}
});
/** 自动同步 */
VUiKit.defer().when(() -> {
return DeckSquareApiUtil.synchronizeDecksV2();
}).fail((e) -> {
LogUtil.i(TAG, "Like deck fail" + e.getMessage());
}).done((result) -> {
});
return binding.getRoot();
......@@ -191,6 +203,17 @@ public class DeckSquareMyDeckFragment extends Fragment {
}
});
DeckSquareApiUtil.synchronizeDecks();
/** 自动同步 */
VUiKit.defer().when(() -> {
return DeckSquareApiUtil.synchronizeDecksV2();
}).fail((e) -> {
LogUtil.i(TAG, "Like deck fail" + e.getMessage());
}).done((result) -> {
});
//DeckSquareApiUtil.synchronizeDecks();
}
}
......@@ -30,7 +30,87 @@ public class PushMultiDeck {
return decks;
}
public void setDecks(List<DeckData> _deckDataList) {
this.decks = _deckDataList;
public void setDecks(List<DeckData> decks_) {
this.decks = decks_;
}
public static class DeckData {
private String deckId;
private String deckName;
private Integer deckCoverCard1 = 0;
private Integer deckCoverCard2 = 0;
private Integer deckCoverCard3 = 0;
private Integer deckCase = 0;
private Integer deckProtector = 0;
private String deckYdk;
public String getDeckId() {
return deckId;
}
public void setDeckId(String deckId) {
this.deckId = deckId;
}
public String getDeckName() {
return deckName;
}
public void setDeckName(String deckName) {
this.deckName = deckName;
}
public Integer getDeckCoverCard1(Integer firstCode) {
return deckCoverCard1;
}
public void setDeckCoverCard1(Integer deckCoverCard1) {
this.deckCoverCard1 = deckCoverCard1;
}
public Integer getDeckCoverCard2() {
return deckCoverCard2;
}
public void setDeckCoverCard2(Integer deckCoverCard2) {
this.deckCoverCard2 = deckCoverCard2;
}
public Integer getDeckCoverCard3() {
return deckCoverCard3;
}
public void setDeckCoverCard3(Integer deckCoverCard3) {
this.deckCoverCard3 = deckCoverCard3;
}
public Integer getDeckCase() {
return deckCase;
}
public void setDeckCase(Integer deckCase) {
this.deckCase = deckCase;
}
public Integer getDeckProtector() {
return deckProtector;
}
public void setDeckProtector(Integer deckProtector) {
this.deckProtector = deckProtector;
}
public String getDeckYdk() {
return deckYdk;
}
public void setDeckYdk(String deckYdk) {
this.deckYdk = deckYdk;
}
}
}
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