Commit 49b0d508 authored by fallenstardust's avatar fallenstardust

优化批量删除卡组的同步线程,可在在线备份界面看出刚被删除卡组的颜色区别

parent c9a904f3
...@@ -245,49 +245,50 @@ public class DeckSquareApiUtil { ...@@ -245,49 +245,50 @@ public class DeckSquareApiUtil {
return pushDecks(deckDataList, loginToken, deckIdList); return pushDecks(deckDataList, loginToken, deckIdList);
} }
public static PushMultiResponse deleteDecks(List<DeckFile> deckFileList) throws IOException { public static void deleteDecks(List<DeckFile> deckFileList) {
if (SharedPreferenceUtil.getServerToken() != null) { if (SharedPreferenceUtil.getServerToken() != null) {
LoginToken loginToken = new LoginToken( LoginToken loginToken = new LoginToken(
SharedPreferenceUtil.getServerUserId(), SharedPreferenceUtil.getServerUserId(),
SharedPreferenceUtil.getServerToken() SharedPreferenceUtil.getServerToken()
); );
// 创建一个局部变量来持有deckFileList的引用,因为有时候异步执行会导致获取不到传参的deckFileList // 创建局部变量持有引用
final List<DeckFile> deleteDeckList = new ArrayList<>(deckFileList); final List<DeckFile> deleteDeckList = new ArrayList<>(deckFileList);
List<MyOnlineDeckDetail> onlineDecks = new ArrayList<>();
// 先判断缓存表是否正常获取到了 // 使用VUiKit避开UI线程进行网络请求
if (DeckManagerFragment.getOriginalData().isEmpty()) { VUiKit.defer().when(() -> {
// 获取在线卡组列表(异步处理) // 先判断缓存表是否需要更新
VUiKit.defer().when(() -> { if (DeckManagerFragment.getOriginalData().isEmpty()) {
return DeckSquareApiUtil.getUserDecks(loginToken); // 同步获取在线卡组列表(在后台线程中可以安全执行网络操作)
}).fail((e) -> { MyDeckResponse result = DeckSquareApiUtil.getUserDecks(loginToken);
LogUtil.e(TAG, "getUserDecks failed: " + e); if (result != null && result.getData() != null) {
}).done((result) -> { DeckManagerFragment.getOriginalData().addAll(result.getData());
if (result == null || result.getData() == null) {
return;
} }
}
onlineDecks.addAll(DeckManagerFragment.getOriginalData());
// 处理删除标记
for (DeckFile deleteDeckFile : deleteDeckList) {
for (MyOnlineDeckDetail onlineDeckDetail : onlineDecks) {
if (deleteDeckFile.getName().equals(onlineDeckDetail.getDeckName()) && deleteDeckFile.getTypeName().equals(onlineDeckDetail.getDeckType())) {
DeckManagerFragment.getOriginalData().addAll(result.getData()); onlineDeckDetail.setDelete(true);
});
}
for (DeckFile deleteDeckFile : deleteDeckList) { deleteDeckFile.setDeckId(onlineDeckDetail.getDeckId());
for (MyOnlineDeckDetail onlineDeckDetail : DeckManagerFragment.getOriginalData()) { }
if (deleteDeckFile.getFileName().equals(onlineDeckDetail.getDeckName()) && deleteDeckFile.getTypeName().equals(onlineDeckDetail.getDeckType())) {
onlineDeckDetail.setDelete(true);// 将要删除的列表元素的isDelete值设置过
//顺带设置一下
deleteDeckFile.setDeckId(onlineDeckDetail.getDeckId());
} }
} }
DeckManagerFragment.getOriginalData().clear();
} DeckManagerFragment.getOriginalData().addAll(onlineDecks);
try { LogUtil.d(TAG,onlineDecks.toString());
syncMyDecks(toDeckItemList(DeckManagerFragment.getOriginalData()),loginToken); // 执行同步操作(在UI线程不得不进行网络请求,须转在后台线程)
} catch (IOException e) { syncMyDecks(toDeckItemList(DeckManagerFragment.getOriginalData()), loginToken);//TODO 需要解决无法
return true;
}).fail((e) -> {
LogUtil.e(TAG, "删除卡组失败:" + e); LogUtil.e(TAG, "删除卡组失败:" + e);
} }).done((result) -> {
LogUtil.d(TAG, "卡组删除同步成功");
});
} }
return null;
} }
/** /**
...@@ -311,6 +312,7 @@ public class DeckSquareApiUtil { ...@@ -311,6 +312,7 @@ public class DeckSquareApiUtil {
data.setDeckType(item.getDeckType()); data.setDeckType(item.getDeckType());
data.setDeckCoverCard1(item.getDeckCoverCard1()); data.setDeckCoverCard1(item.getDeckCoverCard1());
data.setDeckUpdateTime(item.getUpdateTimestamp()); data.setDeckUpdateTime(item.getUpdateTimestamp());
data.setDelete(item.isDelete());
String deckContent = DeckSquareFileUtil.setDeckId(item.getDeckPath(), loginToken.getUserId(), item.getDeckId()); String deckContent = DeckSquareFileUtil.setDeckId(item.getDeckPath(), loginToken.getUserId(), item.getDeckId());
......
...@@ -152,6 +152,12 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base ...@@ -152,6 +152,12 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base
@Override @Override
protected void convert(BaseViewHolder helper, MyOnlineDeckDetail item) { protected void convert(BaseViewHolder helper, MyOnlineDeckDetail item) {
ImageView iv_box = helper.findView(R.id.iv_box);
if (item.isDelete()) {
iv_box.setColorFilter(YGOUtil.c(R.color.bottom_bg));
} else {
iv_box.clearColorFilter();
}
helper.setText(R.id.my_online_deck_type,item.getDeckType().equals("") ? "" : "-"+item.getDeckType()+"-"); helper.setText(R.id.my_online_deck_type,item.getDeckType().equals("") ? "" : "-"+item.getDeckType()+"-");
helper.setText(R.id.my_deck_name, item.getDeckName()); helper.setText(R.id.my_deck_name, item.getDeckName());
helper.setText(R.id.deck_update_date, convertToGMTDate(item.getDeckUpdateDate())); helper.setText(R.id.deck_update_date, convertToGMTDate(item.getDeckUpdateDate()));
......
...@@ -243,6 +243,7 @@ public class MyOnlineDeckDetail implements Parcelable { ...@@ -243,6 +243,7 @@ public class MyOnlineDeckDetail implements Parcelable {
", deckCoverCard1=" + deckCoverCard1 + ", deckCoverCard1=" + deckCoverCard1 +
", deckLike='" + deckLike + '\'' + ", deckLike='" + deckLike + '\'' +
", isPublic='" + isPublic + '\'' + ", isPublic='" + isPublic + '\'' +
", isDelete='" + isDelete + '\'' +
", deckYdk='" + deckYdk + '\'' + ", deckYdk='" + deckYdk + '\'' +
'}'; '}';
} }
......
...@@ -47,7 +47,7 @@ public class PushMultiDeck { ...@@ -47,7 +47,7 @@ public class PushMultiDeck {
private Integer deckProtector = 0; private Integer deckProtector = 0;
private long timestamp = 0; private long timestamp = 0;
private String deckYdk; private String deckYdk;
private boolean isDeleting = false; private boolean isDelete = false;
public String getDeckId() { public String getDeckId() {
return deckId; return deckId;
...@@ -129,9 +129,9 @@ public class PushMultiDeck { ...@@ -129,9 +129,9 @@ public class PushMultiDeck {
this.deckYdk = deckYdk; this.deckYdk = deckYdk;
} }
public boolean getDeleting() {return isDeleting;} public boolean isDelete() {return isDelete;}
public void setDeleting(boolean isDeleting) {this.isDeleting = isDeleting;} public void setDelete(boolean isDelete) {this.isDelete = isDelete;}
} }
} }
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
android:src="@drawable/unknown" /> android:src="@drawable/unknown" />
<ImageView <ImageView
android:id="@+id/iv_box"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:adjustViewBounds="true" android:adjustViewBounds="true"
......
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