Commit 7afcada0 authored by wangfugui's avatar wangfugui

删除旧版本:本地卡组列表中显示在线卡组

parent e3fab5c8
上传新卡组调用api:
首先获得卡组id:
【get] http://rarnu.xyz:38383/api/mdpro3/deck/deckId
将获得的卡组id作为json body的一部分,上传到服务器:
http://rarnu.xyz:38383/api/mdpro3/sync/single
json body格式如下:
{
"deckContributor": "zhb_con",
"userId": 795610,
"deck": {
"deckId": "0007b1ad19",
"deckName": "zhb_test_deck2",
"deckCoverCard1": 0,
"deckCoverCard2": 0,
"deckCoverCard3": 0,
"deckCase": 0,
"deckProtector": 0,
"deckYdk": "#created by
mdpro3\r\n#main\r\n89943723\r\n89943724\r\n89943724\r\n79856792\r\n58153103\r\n83965310\r\n14124483\r\n13256226\r\n13256226\r\n9411399\r\n9411399\r\n18094166\r\n18094166\r\n40044918\r\n40044918\r\n59392529\r\n63060238\r\n50720316\r\n50720316\r\n27780618\r\n27780618\r\n16605586\r\n16605586\r\n43237273\r\n80344569\r\n22865492\r\n22865492\r\n17955766\r\n14558127\r\n14558127\r\n14558127\r\n23434538\r\n23434538\r\n23434538\r\n40740224\r\n6186304\r\n18144506\r\n213326\r\n213326\r\n8949584\r\n8949584\r\n10186633\r\n32807848\r\n21143940\r\n21143940\r\n80170678\r\n52947044\r\n45906428\r\n45906428\r\n24094653\r\n24094653\r\n14088859\r\n14088859\r\n24224830\r\n24224830\r\n65681983\r\n24299458\r\n75047173\r\n10045474\r\n75047173\r\n#extra\r\n90050480\r\n86346643\r\n31817415\r\n32828466\r\n40080312\r\n56733747\r\n29095552\r\n40854197\r\n46759931\r\n60461804\r\n93347961\r\n64655485\r\n22908820\r\n58481572\r\n58004362\r\n!
side\r\n27204311\r\n27204311\r\n83965311\r\n59438930\r\n59438930\r\n24508238\r\n24508238\r\n94145021\r\n94145021\r\n26964762\r\n90846359\r\n83326048\r\n83326048\r\n83326048\r\n#pickup\r\n#case\r\n1081008#\r\n#protector\r\n1070008#\r\n#field\r\n1090009#\r\n#grave\r\n1100009#\r\n#stand\r\n1110001#\r\n#mate\r\n1000007#\r\n##\r\n###",
"isDelete": false
}
}
注意:deckId字段为[get]方法获得的id,deckName字段对应于卡组名称,服务端会检查该字段,不允许同一卡组名称上传多次(如果第二次上传某个卡组名,会返回false,上传失败)
上传成功后,服务器响应为:
{
"code": 0,
"message": "",
"data": true
}
上传失败后,服务器响应为:
更新已在云上存在的卡组:
仍然用上述body,但是其中deckId、deckName必须与云上的记录严格对应。
示例:
[1]云上存在卡组deckId=111,deckName=双打水产。
上传json中,deckId=111,deckName=双打水产,代表更新云上的该卡组的内容。
[2]云上存在卡组deckId=111,deckName=双打水产,
上传json中,deckId=110,deckName=双打水产,服务端会返回错误,本次上传失败。
即,如果服务器上已存在卡组名称XXX,则再上传“卡组名为XXX,卡组id不同”的卡组,会返回错误
[3]云上存在卡组deckId=111,deckName=双打水产,
上传json中,deckId=111,deckName=双打水产B,代表更新卡组名称,本次上传成功。
总结:
将对应于deckId、deckName的卡组内容json推送到服务器。
如果在服务器上不存在deckId、deckName对应的记录,则创建新卡组
如果在服务器存在deckId相同的记录,则更新卡组,deckName会覆盖服务器上的卡组名
如果在服务器存在deckName相同、deckId不同的记录,则更新失败
\ No newline at end of file
...@@ -64,6 +64,22 @@ public class DeckManageDialog extends DialogFragment implements YGODeckDialogUti ...@@ -64,6 +64,22 @@ public class DeckManageDialog extends DialogFragment implements YGODeckDialogUti
@Override @Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText("Tab " + (position + 1)); tab.setText("Tab " + (position + 1));
switch (position) {
case 0:
tab.setText("本地卡组");
break;
case 1:
tab.setText("卡组广场");
break;
case 2:
tab.setText("我的在线卡组");
break;
case 3:
tab.setText("登录");
break;
}
} }
}).attach(); }).attach();
} }
...@@ -99,9 +115,9 @@ public class DeckManageDialog extends DialogFragment implements YGODeckDialogUti ...@@ -99,9 +115,9 @@ public class DeckManageDialog extends DialogFragment implements YGODeckDialogUti
case 0: case 0:
return new DeckSelectFragment(mOnDeckMenuListener, onDeckDialogListener); return new DeckSelectFragment(mOnDeckMenuListener, onDeckDialogListener);
case 1: case 1:
return new DeckSquareFragment(); return new DeckSquareFragment(mOnDeckMenuListener, onDeckDialogListener);
case 2: case 2:
return new DeckSquareMyDeckFragment(); return new DeckSquareMyDeckFragment(mOnDeckMenuListener, onDeckDialogListener);
case 3: case 3:
return new MCOnlineManageFragment(); return new MCOnlineManageFragment();
default: default:
......
...@@ -34,10 +34,6 @@ import cn.garymb.ygomobile.AppsSettings; ...@@ -34,10 +34,6 @@ import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.bean.DeckType; import cn.garymb.ygomobile.bean.DeckType;
import cn.garymb.ygomobile.bean.events.DeckFile; import cn.garymb.ygomobile.bean.events.DeckFile;
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.OnlineDeckDetail;
import cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.lite.databinding.FragmentDeckSelectBinding; import cn.garymb.ygomobile.lite.databinding.FragmentDeckSelectBinding;
import cn.garymb.ygomobile.ui.adapters.DeckListAdapter; import cn.garymb.ygomobile.ui.adapters.DeckListAdapter;
...@@ -45,16 +41,13 @@ import cn.garymb.ygomobile.ui.adapters.SimpleListAdapter; ...@@ -45,16 +41,13 @@ import cn.garymb.ygomobile.ui.adapters.SimpleListAdapter;
import cn.garymb.ygomobile.ui.adapters.TextSelectAdapter; import cn.garymb.ygomobile.ui.adapters.TextSelectAdapter;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil; import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.DeckUtil; import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils; import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGODeckDialogUtil; import cn.garymb.ygomobile.utils.YGODeckDialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
//卡组选择的Fragment,选择后在卡组编辑页面中显示卡片 //在dialog中卡组选择的Fragment,选中页面中某项后,在卡组编辑页面中显示卡片
public class DeckSelectFragment extends Fragment { public class DeckSelectFragment extends Fragment {
private FragmentDeckSelectBinding binding; private FragmentDeckSelectBinding binding;
...@@ -70,9 +63,14 @@ public class DeckSelectFragment extends Fragment { ...@@ -70,9 +63,14 @@ public class DeckSelectFragment extends Fragment {
List<DeckType> typeList = null; List<DeckType> typeList = null;
List<DeckFile> deckList = null; //存储当前卡组分类下的所有卡组 List<DeckFile> deckList = null; //存储当前卡组分类下的所有卡组
private YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener; private YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener;//通知外部调用方,(如调用本fragment的activity)
private YGODeckDialogUtil.OnDeckDialogListener mDialogListener; private YGODeckDialogUtil.OnDeckDialogListener mDialogListener;
/**
*
* @param onDeckMenuListener 通知容纳dialog的外部页面,已选中了某项卡组
* @param dialogListener 通知容纳本fragment的dialog,调用dismiss()方法,关闭dialog显示
*/
DeckSelectFragment(YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener, YGODeckDialogUtil.OnDeckDialogListener dialogListener) { DeckSelectFragment(YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener, YGODeckDialogUtil.OnDeckDialogListener dialogListener) {
super(); super();
this.onDeckMenuListener = onDeckMenuListener; this.onDeckMenuListener = onDeckMenuListener;
...@@ -102,57 +100,7 @@ public class DeckSelectFragment extends Fragment { ...@@ -102,57 +100,7 @@ public class DeckSelectFragment extends Fragment {
public void onItemSelect(int position, DeckType item) { public void onItemSelect(int position, DeckType item) {
clearDeckSelect(); clearDeckSelect();
deckList.clear(); deckList.clear();
if (item.getOnServer() == DeckType.ServerType.SQUARE_DECK) {
VUiKit.defer().when(() -> {
SquareDeckResponse result = DeckSquareApiUtil.getSquareDecks();
if (result == null) {
return null;
} else {
return result.getData().getRecords();
}
}).fail(e -> {
YGOUtil.showTextToast("Fetch square deck fail");
}).done(exCardDataList -> {
if (exCardDataList != null) {
LogUtil.i(TAG, "Get square deck success");
for (OnlineDeckDetail deckRecord : exCardDataList) {
DeckFile deckFile = new DeckFile(deckRecord.getDeckName(), "", DeckType.ServerType.SQUARE_DECK, deckRecord.getDeckId());
deckList.add(deckFile);
}
deckAdp.notifyDataSetChanged();
}
});
} else if (item.getOnServer() == DeckType.ServerType.MY_SQUARE) {
VUiKit.defer().when(() -> {
String serverToken = SharedPreferenceUtil.getServerToken();
Integer serverUserId = SharedPreferenceUtil.getServerUserId();
MyDeckResponse result = DeckSquareApiUtil.getUserDecks(serverUserId, serverToken);
if (result == null) {
return null;
} else {
return result.getData();
}
}).fail(e -> {
YGOUtil.showTextToast("Fetch square deck fail");
}).done(exCardDataList -> {
if (exCardDataList != null) {
LogUtil.i(TAG, "Get square deck success");
for (MyOnlineDeckDetail deckRecord : exCardDataList) {
DeckFile deckFile = new DeckFile(deckRecord.getDeckName(), "", DeckType.ServerType.MY_SQUARE, deckRecord.getDeckId());
deckList.add(deckFile);
}
deckAdp.notifyDataSetChanged();
}
});
} else {
deckList.addAll(DeckUtil.getDeckList(item.getPath())); deckList.addAll(DeckUtil.getDeckList(item.getPath()));
if (position == 0) { if (position == 0) {
if (AppsSettings.get().isReadExpansions()) { if (AppsSettings.get().isReadExpansions()) {
...@@ -166,7 +114,7 @@ public class DeckSelectFragment extends Fragment { ...@@ -166,7 +114,7 @@ public class DeckSelectFragment extends Fragment {
} }
} }
deckAdp.notifyDataSetChanged(); deckAdp.notifyDataSetChanged();
}
} }
}); });
deckAdp.setOnItemSelectListener(new DeckListAdapter.OnItemSelectListener<DeckFile>() { deckAdp.setOnItemSelectListener(new DeckListAdapter.OnItemSelectListener<DeckFile>() {
...@@ -186,13 +134,15 @@ public class DeckSelectFragment extends Fragment { ...@@ -186,13 +134,15 @@ public class DeckSelectFragment extends Fragment {
} }
} }
}); });
//对话框中长点击某一卡组名称后,触发该事件 //对话框中长点击某一卡组名称后,触发该事件
deckAdp.setOnItemLongClickListener(new OnItemLongClickListener() { deckAdp.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override @Override
public boolean onItemLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) { public boolean onItemLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
DeckFile item = (DeckFile) adapter.getItem(position); DeckFile item = (DeckFile) adapter.getItem(position);
//即使为local,也有可能为卡包预览,因此过滤掉selectposition==0 //即使为local,也有可能为卡包预览,因此过滤掉selectposition==0
if (deckAdp.isSelect() || !item.isLocal() || typeAdp.getSelectPosition() == 0) if (deckAdp.isSelect() || typeAdp.getSelectPosition() == 0)
return true; return true;
deckAdp.setManySelect(true); deckAdp.setManySelect(true);
......
...@@ -9,14 +9,24 @@ import androidx.annotation.NonNull; ...@@ -9,14 +9,24 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import cn.garymb.ygomobile.bean.DeckType;
import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.deck_square.api_response.OnlineDeckDetail; import cn.garymb.ygomobile.deck_square.api_response.OnlineDeckDetail;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareBinding; import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareBinding;
import cn.garymb.ygomobile.utils.YGODeckDialogUtil;
public class DeckSquareFragment extends Fragment { public class DeckSquareFragment extends Fragment {
private FragmentDeckSquareBinding binding; private FragmentDeckSquareBinding binding;
private DeckSquareListAdapter deckSquareListAdapter; private DeckSquareListAdapter deckSquareListAdapter;
private YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener;//通知外部调用方,(如调用本fragment的activity)
private YGODeckDialogUtil.OnDeckDialogListener mDialogListener;
public DeckSquareFragment(YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener, YGODeckDialogUtil.OnDeckDialogListener mDialogListener) {
this.onDeckMenuListener = onDeckMenuListener;
this.mDialogListener = mDialogListener;
}
@Override @Override
public View onCreateView( public View onCreateView(
...@@ -33,16 +43,25 @@ public class DeckSquareFragment extends Fragment { ...@@ -33,16 +43,25 @@ public class DeckSquareFragment extends Fragment {
deckSquareListAdapter.loadData(); deckSquareListAdapter.loadData();
// Set click listener in your adapter deckSquareListAdapter.setOnItemLongClickListener((adapter, view, position) -> {
deckSquareListAdapter.setOnItemClickListener((adapter, view, position) -> {
// Handle item click
OnlineDeckDetail item = (OnlineDeckDetail) adapter.getItem(position);
OnlineDeckDetail item = (OnlineDeckDetail) adapter.getItem(position);
// Show the dialog // Show the dialog
SquareDeckDetailDialog dialog = new SquareDeckDetailDialog(getContext(), item); SquareDeckDetailDialog dialog = new SquareDeckDetailDialog(getContext(), item);
dialog.show(); dialog.show();
return true;
});
// Set click listener in your adapter
deckSquareListAdapter.setOnItemClickListener((adapter, view, position) -> {
OnlineDeckDetail item = (OnlineDeckDetail) adapter.getItem(position);
//调用
mDialogListener.onDismiss();
DeckFile deckFile = new DeckFile(item.getDeckId(), DeckType.ServerType.SQUARE_DECK);
onDeckMenuListener.onDeckSelect(deckFile);
}); });
return binding.getRoot(); return binding.getRoot();
......
...@@ -9,8 +9,12 @@ import androidx.annotation.NonNull; ...@@ -9,8 +9,12 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import cn.garymb.ygomobile.bean.DeckType;
import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.deck_square.api_response.OnlineDeckDetail;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareMyDeckBinding; import cn.garymb.ygomobile.lite.databinding.FragmentDeckSquareMyDeckBinding;
import cn.garymb.ygomobile.utils.YGODeckDialogUtil;
//打开页面后,先扫描本地的卡组,读取其是否包含deckId,是的话代表平台上可能有 //打开页面后,先扫描本地的卡组,读取其是否包含deckId,是的话代表平台上可能有
//之后读取平台上的卡组,与本地卡组列表做比较。 //之后读取平台上的卡组,与本地卡组列表做比较。
...@@ -20,6 +24,14 @@ public class DeckSquareMyDeckFragment extends Fragment { ...@@ -20,6 +24,14 @@ public class DeckSquareMyDeckFragment extends Fragment {
private FragmentDeckSquareMyDeckBinding binding; private FragmentDeckSquareMyDeckBinding binding;
private MyDeckListAdapter deckListAdapter; private MyDeckListAdapter deckListAdapter;
private YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener;//通知外部调用方,(如调用本fragment的activity)
private YGODeckDialogUtil.OnDeckDialogListener mDialogListener;
public DeckSquareMyDeckFragment(YGODeckDialogUtil.OnDeckMenuListener onDeckMenuListener, YGODeckDialogUtil.OnDeckDialogListener mDialogListener) {
this.onDeckMenuListener = onDeckMenuListener;
this.mDialogListener = mDialogListener;
}
@Override @Override
public View onCreateView( public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container, @NonNull LayoutInflater inflater, ViewGroup container,
...@@ -42,16 +54,24 @@ public class DeckSquareMyDeckFragment extends Fragment { ...@@ -42,16 +54,24 @@ public class DeckSquareMyDeckFragment extends Fragment {
} }
}); });
deckListAdapter.setOnItemLongClickListener((adapter, view, position) -> {
MyDeckItem item = (MyDeckItem) adapter.getItem(position);
MyDeckDetailDialog dialog = new MyDeckDetailDialog(getContext(), item);
dialog.show();
return true;
});
//点击“我的卡组”中的某个卡组后,弹出dialog,dialog根据卡组的同步情况自动显示对应的下载/上传按钮 //点击“我的卡组”中的某个卡组后,弹出dialog,dialog根据卡组的同步情况自动显示对应的下载/上传按钮
deckListAdapter.setOnItemClickListener( deckListAdapter.setOnItemClickListener(
(adapter, view, position) -> { (adapter, view, position) -> {
// Handle item click
MyDeckItem item = (MyDeckItem) adapter.getItem(position);
MyDeckDetailDialog dialog = new MyDeckDetailDialog(getContext(), item); MyDeckItem item = (MyDeckItem) adapter.getItem(position);
mDialogListener.onDismiss();
DeckFile deckFile = new DeckFile(item.getDeckId(), DeckType.ServerType.MY_SQUARE);
onDeckMenuListener.onDeckSelect(deckFile);
dialog.show();
} }
); );
......
...@@ -13,9 +13,9 @@ import androidx.recyclerview.widget.RecyclerView; ...@@ -13,9 +13,9 @@ import androidx.recyclerview.widget.RecyclerView;
import java.util.List; import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.deck_square.api_response.MyOnlineDeckDetail;
import cn.garymb.ygomobile.deck_square.api_response.DownloadDeckResponse; import cn.garymb.ygomobile.deck_square.api_response.DownloadDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.LoginToken;
import cn.garymb.ygomobile.deck_square.api_response.MyOnlineDeckDetail;
import cn.garymb.ygomobile.deck_square.api_response.PushDeckResponse; import cn.garymb.ygomobile.deck_square.api_response.PushDeckResponse;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.adapters.DeckPreviewListAdapter; import cn.garymb.ygomobile.ui.adapters.DeckPreviewListAdapter;
...@@ -47,7 +47,7 @@ public class MyDeckDetailDialog extends Dialog { ...@@ -47,7 +47,7 @@ public class MyDeckDetailDialog extends Dialog {
requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_square_my_deck_detail); setContentView(R.layout.dialog_square_my_deck_detail);
Button btnDownload = findViewById(R.id.dialog_my_deck_btn_download); Button deleteMyOnlineDeckBtn = findViewById(R.id.delete_my_online_deck_btn);
Button btnPush = findViewById(R.id.dialog_my_deck_btn_push); Button btnPush = findViewById(R.id.dialog_my_deck_btn_push);
LinearLayout downloadLayout = findViewById(R.id.server_download_layout); LinearLayout downloadLayout = findViewById(R.id.server_download_layout);
...@@ -77,15 +77,13 @@ public class MyDeckDetailDialog extends Dialog { ...@@ -77,15 +77,13 @@ public class MyDeckDetailDialog extends Dialog {
//上传卡组 //上传卡组
btnPush.setOnClickListener(v -> { btnPush.setOnClickListener(v -> {
Integer userId = SharedPreferenceUtil.getServerUserId(); LoginToken loginToken = DeckSquareApiUtil.getLoginData();
String serverToken = SharedPreferenceUtil.getServerToken();//todo serverToken要外部传入还是此处获取?考虑 if (loginToken == null) {
if (userId == null || serverToken == null) {
YGOUtil.showTextToast("Please login first!");
return; return;
} }
VUiKit.defer().when(() -> { VUiKit.defer().when(() -> {
PushDeckResponse result = DeckSquareApiUtil.pushDeck(mItem.getDeckPath(), mItem.getDeckName(), userId, serverToken); PushDeckResponse result = DeckSquareApiUtil.requestIdAndPushDeck(mItem.getDeckPath(), mItem.getDeckName(), loginToken);
return result; return result;
}).fail(e -> { }).fail(e -> {
...@@ -102,11 +100,30 @@ public class MyDeckDetailDialog extends Dialog { ...@@ -102,11 +100,30 @@ public class MyDeckDetailDialog extends Dialog {
}); });
//下载用户在平台上的卡组 //下载用户在平台上的卡组
btnDownload.setOnClickListener(v -> { deleteMyOnlineDeckBtn.setOnClickListener(v -> {
if (mItem != null) {
mItem.getDeckId();
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
if (loginToken == null) {
return;
}
if (mMyOnlineDeckDetail != null) { VUiKit.defer().when(() -> {
String path = AppsSettings.get().getDeckDir(); PushDeckResponse result = DeckSquareApiUtil.deleteDeck(mItem.getDeckId(), loginToken);
DeckSquareFileUtil.saveFileToPath(path, mMyOnlineDeckDetail.getDeckName() + ".ydk", mMyOnlineDeckDetail.getDeckYdk()); return result;
}).fail(e -> {
LogUtil.i(TAG, "square deck detail fail" + e.getMessage());
}).done(data -> {
if (data.isData()) {
YGOUtil.showTextToast("delete success!");
} else {
YGOUtil.showTextToast("delete fail " + data.getMessage());
}
});
} }
}); });
......
...@@ -46,7 +46,7 @@ public class SquareDeckDetailDialog extends Dialog { ...@@ -46,7 +46,7 @@ public class SquareDeckDetailDialog extends Dialog {
requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_square_deck_detail); setContentView(R.layout.dialog_square_deck_detail);
Button btnDownload = findViewById(R.id.dialog_square_deck_btn_download); //Button btnDownload = findViewById(R.id.dialog_square_deck_btn_download);
Button btnLike = findViewById(R.id.btnLike); Button btnLike = findViewById(R.id.btnLike);
previewDeckCard(); previewDeckCard();
...@@ -59,19 +59,20 @@ public class SquareDeckDetailDialog extends Dialog { ...@@ -59,19 +59,20 @@ public class SquareDeckDetailDialog extends Dialog {
mListView.setAdapter(mListAdapter); mListView.setAdapter(mListAdapter);
//下载卡组广场的卡组 //下载卡组广场的卡组
btnDownload.setOnClickListener(v -> { // btnDownload.setOnClickListener(v -> {
if (mMyOnlineDeckDetail != null) { // if (mMyOnlineDeckDetail != null) {
String path = AppsSettings.get().getDeckDir(); // //todo 删除云上的卡组
boolean result = DeckSquareFileUtil.saveFileToPath(path, mMyOnlineDeckDetail.getDeckName() + ".ydk", mMyOnlineDeckDetail.getDeckYdk()); // String path = AppsSettings.get().getDeckDir();
if (result) { // boolean result = DeckSquareFileUtil.saveFileToPath(path, mMyOnlineDeckDetail.getDeckName() + ".ydk", mMyOnlineDeckDetail.getDeckYdk());
// if (result) {
YGOUtil.showTextToast("Download deck success!"); //
} else { // YGOUtil.showTextToast("Download deck success!");
// } else {
YGOUtil.showTextToast("Download deck fail!"); //
} // YGOUtil.showTextToast("Download deck fail!");
} // }
}); // }
// });
//给卡组点赞 //给卡组点赞
btnLike.setOnClickListener(v -> { btnLike.setOnClickListener(v -> {
......
package cn.garymb.ygomobile.deck_square.api_response;
public class DeleteCardJson {
private String deckContributor;
private Integer userId;
private DeckData deck;
public String getDeckContributor() {
return deckContributor;
}
public void setDeckContributor(String deckContributor) {
this.deckContributor = deckContributor;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public DeckData getDeck() {
return deck;
}
public void setDeck(DeckData deck) {
this.deck = deck;
}
public static class DeckData {
private boolean isDelete = false;
public boolean isDelete() {
return isDelete;
}
public void setDelete(boolean delete) {
isDelete = delete;
}
}
}
...@@ -19,10 +19,17 @@ import cn.garymb.ygomobile.bean.Deck; ...@@ -19,10 +19,17 @@ import cn.garymb.ygomobile.bean.Deck;
import cn.garymb.ygomobile.bean.DeckInfo; import cn.garymb.ygomobile.bean.DeckInfo;
import cn.garymb.ygomobile.bean.TextSelect; import cn.garymb.ygomobile.bean.TextSelect;
import cn.garymb.ygomobile.bean.events.DeckFile; import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.deck_square.DeckSquareApiUtil;
import cn.garymb.ygomobile.deck_square.DeckSquareListAdapter;
import cn.garymb.ygomobile.deck_square.api_response.LoginToken;
import cn.garymb.ygomobile.deck_square.api_response.PushDeckResponse;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader; import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.DeckLoader; import cn.garymb.ygomobile.loader.DeckLoader;
import cn.garymb.ygomobile.loader.ImageLoader; import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.data.LimitList; import ocgcore.data.LimitList;
...@@ -41,6 +48,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D ...@@ -41,6 +48,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D
private boolean isManySelect;//标志位,是否选中多个卡组 private boolean isManySelect;//标志位,是否选中多个卡组
private final List<T> selectList; private final List<T> selectList;
private static final String TAG = DeckSquareListAdapter.class.getSimpleName();
public DeckListAdapter(Context context, List<T> data, int select) { public DeckListAdapter(Context context, List<T> data, int select) {
super(R.layout.item_deck_list_swipe, data); super(R.layout.item_deck_list_swipe, data);
this.selectPosition = select; this.selectPosition = select;
...@@ -66,27 +75,46 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D ...@@ -66,27 +75,46 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D
deckInfo = new DeckInfo(); deckInfo = new DeckInfo();
mLimitList = DataManager.get().getLimitManager().getTopLimit(); mLimitList = DataManager.get().getLimitManager().getTopLimit();
mContext = context; mContext = context;
addChildClickViewIds(R.id.local_deck_upload_btn);
LogUtil.i(TAG, "DeckListAdapter constructor");
setOnItemChildClickListener((adapter, view, position) -> {
//判断是否登录,如果未登录,直接返回
LoginToken loginToken = DeckSquareApiUtil.getLoginData();
if (loginToken == null) {
return;
}
//获得点击的卡组
DeckFile deckFile = (DeckFile) adapter.getData().get(position);
LogUtil.i(TAG, "deckFile " + deckFile.toString());
//上传卡组
VUiKit.defer().when(() -> {
PushDeckResponse result = DeckSquareApiUtil.requestIdAndPushDeck(deckFile.getPath(), deckFile.getName(),loginToken);
return result;
}).fail(e -> {
LogUtil.i(TAG, "square deck detail fail" + e.getMessage());
}).done(pushDeckResponse -> {
if (pushDeckResponse.isData()) {
YGOUtil.showTextToast("push success!");
} else {
YGOUtil.showTextToast("卡组上传失败!");
}
});
});
} }
@SuppressLint("ResourceType") @SuppressLint("ResourceType")
@Override @Override
protected void convert(DeckViewHolder holder, T item) { protected void convert(DeckViewHolder holder, T item) {
int position = holder.getAdapterPosition(); int position = holder.getAdapterPosition();
//item是deckFile类型 //item是deckFile类型
this.deckFile = (DeckFile) item; this.deckFile = (DeckFile) item;
if (!deckFile.isLocal()) {
//卡组位于服务器上
holder.deckId.setVisibility(View.VISIBLE);
holder.deck_info.setVisibility(View.GONE);
holder.deckName.setText(item.getName());
holder.deckId.setText(((DeckFile) item).getDeckId());
} else {
//卡组位于本地
holder.deckId.setVisibility(View.GONE);
holder.deck_info.setVisibility(View.VISIBLE);
holder.deckName.setText(item.getName()); holder.deckName.setText(item.getName());
//预读卡组信息 //预读卡组信息
this.deckInfo = DeckLoader.readDeck(mCardLoader, deckFile.getPathFile(), mLimitList); this.deckInfo = DeckLoader.readDeck(mCardLoader, deckFile.getPathFile(), mLimitList);
...@@ -119,7 +147,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D ...@@ -119,7 +147,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D
holder.side.setText("-"); holder.side.setText("-");
holder.side.setTextColor(Color.RED); holder.side.setTextColor(Color.RED);
} }
if (deckFile.getTypeName().equals(YGOUtil.s(R.string.category_pack)) || deckFile.getPath().contains("cacheDeck")) {//卡包展示时不显示额外和副卡组数量文本 if (deckFile.getTypeName().equals(YGOUtil.s(R.string.category_pack)) || deckFile.getPath().contains("cacheDeck")) {
//卡包展示时不显示额外和副卡组数量文本
holder.ll_extra_n_side.setVisibility(View.GONE); holder.ll_extra_n_side.setVisibility(View.GONE);
} else { } else {
holder.ll_extra_n_side.setVisibility(View.VISIBLE); holder.ll_extra_n_side.setVisibility(View.VISIBLE);
...@@ -192,7 +221,6 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D ...@@ -192,7 +221,6 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D
holder.item_deck_list.setBackgroundResource(Color.TRANSPARENT); holder.item_deck_list.setBackgroundResource(Color.TRANSPARENT);
} }
} }
}
public void setSelectPosition(int selectPosition) { public void setSelectPosition(int selectPosition) {
this.selectPosition = selectPosition; this.selectPosition = selectPosition;
...@@ -242,6 +270,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D ...@@ -242,6 +270,8 @@ public class DeckListAdapter<T extends TextSelect> extends BaseQuickAdapter<T, D
public interface OnItemSelectListener<T> { public interface OnItemSelectListener<T> {
void onItemSelect(int position, T item); void onItemSelect(int position, T item);
} }
} }
class DeckViewHolder extends com.chad.library.adapter.base.viewholder.BaseViewHolder { class DeckViewHolder extends com.chad.library.adapter.base.viewholder.BaseViewHolder {
......
...@@ -79,8 +79,7 @@ public class DeckUtil { ...@@ -79,8 +79,7 @@ public class DeckUtil {
deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_pack), AppsSettings.get().getPackDeckDir(), DeckType.ServerType.LOCAL)); deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_pack), AppsSettings.get().getPackDeckDir(), DeckType.ServerType.LOCAL));
deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_windbot_deck), AppsSettings.get().getAiDeckDir(), DeckType.ServerType.LOCAL)); deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_windbot_deck), AppsSettings.get().getAiDeckDir(), DeckType.ServerType.LOCAL));
deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_Uncategorized), AppsSettings.get().getDeckDir(), DeckType.ServerType.LOCAL)); deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_Uncategorized), AppsSettings.get().getDeckDir(), DeckType.ServerType.LOCAL));
deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_online_deck), "", DeckType.ServerType.SQUARE_DECK));
deckTypeList.add(new DeckType(YGOUtil.s(R.string.category_my_online_deck), "", DeckType.ServerType.MY_SQUARE));
File[] files = new File(AppsSettings.get().getDeckDir()).listFiles(); File[] files = new File(AppsSettings.get().getDeckDir()).listFiles();
if (files != null) { if (files != null) {
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
android:orientation="vertical" android:orientation="vertical"
android:padding="16dp"> android:padding="16dp">
<!--
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -19,9 +20,10 @@ ...@@ -19,9 +20,10 @@
android:id="@+id/dialog_square_deck_btn_download" android:id="@+id/dialog_square_deck_btn_download"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/Download" /> android:text="@string/delete" />
</LinearLayout> </LinearLayout>
-->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
android:src="@drawable/ic_server_download" /> android:src="@drawable/ic_server_download" />
<Button <Button
android:id="@+id/dialog_my_deck_btn_download" android:id="@+id/delete_my_online_deck_btn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/Download" /> android:text="@string/Download" />
......
...@@ -22,15 +22,6 @@ ...@@ -22,15 +22,6 @@
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<TextView
android:id="@+id/open_deck_square"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="bottom|right"
android:layout_marginBottom="100dp"
android:background="@drawable/ic_deck_square"
android:text="卡组广场"
android:textAlignment="center" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -27,8 +27,14 @@ ...@@ -27,8 +27,14 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_weight="4"
android:orientation="vertical"> android:orientation="vertical">
<cn.garymb.ygomobile.ui.widget.AlwaysMarqueeTextView <cn.garymb.ygomobile.ui.widget.AlwaysMarqueeTextView
...@@ -121,4 +127,13 @@ ...@@ -121,4 +127,13 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<Button
android:id="@+id/local_deck_upload_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="上传" />
</LinearLayout>
</LinearLayout> </LinearLayout>
\ No newline at end of file
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