Commit 63715915 authored by wangfugui's avatar wangfugui

添加卡组公开状态设置功能

parent 284ab46c
......@@ -17,6 +17,7 @@ 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.PushCardJson;
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.utils.LogUtil;
......@@ -200,7 +201,7 @@ public class DeckSquareApiUtil {
* @return
* @throws IOException
*/
public static PushDeckResponse pushDeck(String deckPath, String deckName, LoginToken loginToken, String deckId) throws IOException {
private static PushDeckResponse pushDeck(String deckPath, String deckName, LoginToken loginToken, String deckId) throws IOException {
String deckContent = DeckSquareFileUtil.setDeckId(deckPath, loginToken.getUserId(), deckId);
PushDeckResponse result = null;
......@@ -236,7 +237,7 @@ public class DeckSquareApiUtil {
}
/**
* 异步方法,给卡组点赞
* 阻塞方法,给卡组点赞
*
* @param deckId
*/
......@@ -257,6 +258,40 @@ public class DeckSquareApiUtil {
return result;
}
/**
* 阻塞方法,给卡组点赞
*
* @param deckId
*/
public static BasicResponse setDeckPublic(String deckId, LoginToken loginToken, boolean publicState) throws IOException {
BasicResponse result = null;
String url = "http://rarnu.xyz:38383/api/mdpro3/deck/public";
Map<String, String> headers = new HashMap<>();
headers.put("ReqSource", "MDPro3");
headers.put("token", loginToken.getServerToken());
Gson gson = new Gson();
PushDeckPublicState pushData = new PushDeckPublicState();
pushData.setPublic(publicState);
pushData.setDeckId(deckId);
pushData.setUserId(loginToken.getUserId());
String json = gson.toJson(pushData);
Response response = OkhttpUtil.postJson(url, json, headers, 1000);
String responseBodyString = response.body().string();
result = gson.fromJson(responseBodyString, BasicResponse.class);
LogUtil.i(TAG, responseBodyString);
return result;
}
public static LoginResponse login(String username, String password) throws IOException {
......
......@@ -17,6 +17,8 @@ public class MyDeckItem {
public int deckCoverCard1;
public Boolean isPublic;
public int getIdUploaded() {
return idUploaded;
}
......@@ -81,4 +83,27 @@ public class MyDeckItem {
public void setDeckPath(String deckPath) {
this.deckPath = deckPath;
}
public Boolean getPublic() {
return isPublic;
}
public void setPublic(Boolean aPublic) {
isPublic = aPublic;
}
@Override
public String toString() {
return "MyDeckItem{" +
"idUploaded=" + idUploaded +
", userId=" + userId +
", deckName='" + deckName + '\'' +
", deckId='" + deckId + '\'' +
", updateDate='" + updateDate + '\'' +
", deckSouce=" + deckSouce +
", deckPath='" + deckPath + '\'' +
", deckCoverCard1=" + deckCoverCard1 +
", isPublic=" + isPublic +
'}';
}
}
......@@ -11,6 +11,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.deck_square.api_response.BasicResponse;
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;
......@@ -28,6 +29,7 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
private ImageLoader imageLoader;
// 添加监听器变量
private OnDeckDeleteListener deleteListener;
private OnDeckManipulateListener manipulateListener;
public MyDeckListAdapter(int layoutResId) {
super(layoutResId);
......@@ -35,10 +37,20 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
imageLoader = new ImageLoader();
}
public interface OnDeckManipulateListener {
void onDeckHide();
void onDeckCancelHide();
void onDeckDeleteFinished();
}
// 在MyDeckListAdapter中添加接口
public interface OnDeckDeleteListener {
void onDeckDeleteStarted();
void onDeckDeleteProgress(int secondsRemaining);
void onDeckDeleteFinished();
}
......@@ -106,6 +118,7 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
item.setDeckId(detail.getDeckId());
item.setUserId(detail.getUserId());
item.setUpdateDate(detail.getDeckUpdateDate());
item.setPublic(detail.isPublic());
myOnlineDecks.add(item);
}
}
......@@ -126,17 +139,19 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
}
private void deleteMyDeckOnLine(MyDeckItem item) {
if (deleteListener != null) {
deleteListener.onDeckDeleteStarted();
}
if (item != null) {
item.getDeckId();
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
if (loginToken == null) {
return;
}
//放在登录检查后面,否则:如果未通过登录检查,本函数return后将无法调用onDeckDeleteFinished()
if (deleteListener != null) {
deleteListener.onDeckDeleteStarted();
}
VUiKit.defer().when(() -> {
PushDeckResponse result = DeckSquareApiUtil.deleteDeck(item.getDeckId(), loginToken);
return result;
......@@ -166,12 +181,65 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
}
}
/**
* 注意,更新卡组状态要过很久才生效(实测延迟偶尔达5s)
* @param item
*/
private void changeDeckPublicState(MyDeckItem item) {
if (item != null) {
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
if (loginToken == null) {
return;
}
//放在登录检查后面,否则:如果未通过登录检查,本函数return后将无法调用onDeckDeleteFinished()
if (deleteListener != null) {
deleteListener.onDeckDeleteStarted();
}
VUiKit.defer().when(() -> {
BasicResponse result = DeckSquareApiUtil.setDeckPublic(item.getDeckId(), loginToken, !item.getPublic());
return result;
}).fail(e -> {
if (deleteListener != null) {
deleteListener.onDeckDeleteFinished();
}
LogUtil.i(TAG, "square deck detail fail" + e.getMessage());
}).done(data -> {
if (data.isMessageTrue()) {
/*
*服务器的api有问题:获取指定用户的卡组列表(无已删卡组)
*删除成功后,通过http://rarnu.xyz:38383/api/mdpro3/sync/795610/nodel接口查询用户卡组时
*要等待2~3秒api响应内容才会对应更新
*/
if (item.getPublic()) {//注意,item是修改前的值,因此item.isPublic为true代表修改前为公开卡组
YGOUtil.showTextToast("已将卡组设为私有");
} else {
YGOUtil.showTextToast("已将卡组公开");
}
startButtonCountdown();
} else {
YGOUtil.showTextToast("操作失败");
}
});
}
}
@Override
protected void convert(BaseViewHolder helper, MyDeckItem item) {
helper.setText(R.id.my_deck_name, item.getDeckName());
helper.setText(R.id.deck_update_date, item.getUpdateDate());
ImageView cardImage = helper.getView(R.id.deck_info_image);
long code = item.getDeckCoverCard1();
if (item.getPublic()) {
helper.setText(R.id.change_show_or_hide, R.string.in_public);
} else {
helper.setText(R.id.change_show_or_hide, R.string.in_personal_use);
}
LogUtil.i(TAG, code + " " + item.getDeckName());
if (code != 0) {
imageLoader.bindImage(cardImage, code, null, ImageLoader.Type.small);
......@@ -179,7 +247,14 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckItem, BaseViewHold
imageLoader.bindImage(cardImage, -1, null, ImageLoader.Type.small);
}
helper.getView(R.id.delete_my_online_deck_btn).setOnClickListener(view -> { deleteMyDeckOnLine(item); });
helper.getView(R.id.delete_my_online_deck_btn).setOnClickListener(view -> {
deleteMyDeckOnLine(item);
});
helper.getView(R.id.ll_switch_show).setOnClickListener(view -> {
LogUtil.i(TAG, "current " + item.toString());
changeDeckPublicState(item);
});
// else if (item.getDeckSouce() == 1) {
// helper.setText(R.id.my_deck_id, item.getDeckId());
// imageView.setImageResource(R.drawable.ic_server_download);
......
......@@ -20,4 +20,13 @@ public class BasicResponse {
public void setMessage(String message) {
this.message = message;
}
/**
* 后端设计的有点怪,接口成功时,message的内容为“true”
* @return
*/
public boolean isMessageTrue(){
return message.equals("true");
}
}
......@@ -23,8 +23,8 @@ public class MyOnlineDeckDetail implements Parcelable {
private String deckMainSerial;
private String deckYdk;
private Integer userId;
private String isPublic;
private String isDelete;
private boolean isPublic;
private boolean isDelete;
protected MyOnlineDeckDetail(Parcel in) {
......@@ -43,8 +43,8 @@ public class MyOnlineDeckDetail implements Parcelable {
deckMainSerial = in.readString();
deckYdk = in.readString();
userId = in.readInt();
isPublic = in.readString();
isDelete = in.readString();
isPublic = (in.readByte() != 0);
isDelete = (in.readByte() != 0);
}
public static final Creator<MyOnlineDeckDetail> CREATOR = new Creator<MyOnlineDeckDetail>() {
......@@ -81,8 +81,8 @@ public class MyOnlineDeckDetail implements Parcelable {
dest.writeString(deckMainSerial);
dest.writeString(deckYdk);
dest.writeInt(userId);
dest.writeString(isPublic);
dest.writeString(isDelete);
dest.writeByte((byte) (isPublic ? 1 : 0));
dest.writeByte((byte) (isDelete ? 1 : 0));
}
......@@ -206,21 +206,19 @@ public class MyOnlineDeckDetail implements Parcelable {
this.userId = userId;
}
public String getIsPublic() {
public boolean isPublic() {
return isPublic;
}
public void setIsPublic(String isPublic) {
this.isPublic = isPublic;
public void setPublic(boolean aPublic) {
isPublic = aPublic;
}
public String getIsDelete() {
public boolean isDelete() {
return isDelete;
}
public void setIsDelete(String isDelete) {
this.isDelete = isDelete;
public void setDelete(boolean delete) {
isDelete = delete;
}
}
\ No newline at end of file
package cn.garymb.ygomobile.deck_square.api_response;
public class PushDeckPublicState {
private Integer userId;
private String deckId;
private boolean isPublic;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getDeckId() {
return deckId;
}
public void setDeckId(String deckId) {
this.deckId = deckId;
}
public boolean isPublic() {
return isPublic;
}
public void setPublic(boolean aPublic) {
isPublic = aPublic;
}
}
......@@ -76,8 +76,8 @@
<ImageView
android:id="@+id/show_on_deck_square"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginLeft="5dp"
android:src="@drawable/baseline_remove_red_eye_24" />
......
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