Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile
Commits
c712acdc
Commit
c712acdc
authored
Nov 30, 2025
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化删除判断避免因为空指错误造成在线备份删除失败
parent
a5164af5
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
74 additions
and
46 deletions
+74
-46
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
...ava/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
+19
-8
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
...ymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
+55
-38
No files found.
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
View file @
c712acdc
...
@@ -599,7 +599,14 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -599,7 +599,14 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
// 关闭加载对话框并设置当前卡牌包
// 关闭加载对话框并设置当前卡牌包
dlg
.
dismiss
();
dlg
.
dismiss
();
// 根据资源路径判断是否进入卡包展示模式
// 根据资源路径判断是否进入卡包展示模式
isPackMode
=
rs
.
source
.
getParent
().
equals
(
mSettings
.
getPackDeckDir
())
||
rs
.
source
.
getParent
().
equals
(
mSettings
.
getCacheDeckDir
());
if
(
rs
!=
null
&&
rs
.
source
!=
null
)
{
String
parentPath
=
rs
.
source
.
getParent
();
isPackMode
=
parentPath
!=
null
&&
(
parentPath
.
equals
(
mSettings
.
getPackDeckDir
())
||
parentPath
.
equals
(
mSettings
.
getCacheDeckDir
()));
}
else
{
isPackMode
=
false
;
}
setCurDeck
(
rs
,
isPackMode
);
setCurDeck
(
rs
,
isPackMode
);
});
});
}
}
...
@@ -652,7 +659,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -652,7 +659,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
mCardSearcher
.
initItems
();
mCardSearcher
.
initItems
();
initLimitListSpinners
(
mLimitSpinner
,
mCardLoader
.
getLimitList
());
initLimitListSpinners
(
mLimitSpinner
,
mCardLoader
.
getLimitList
());
// 根据资源路径判断是否进入卡包展示模式
// 根据资源路径判断是否进入卡包展示模式
if
(
rs
.
source
!=
null
)
{
if
(
rs
!=
null
&&
rs
.
source
!=
null
)
{
String
parentPath
=
rs
.
source
.
getParent
();
String
parentPath
=
rs
.
source
.
getParent
();
isPackMode
=
parentPath
!=
null
&&
isPackMode
=
parentPath
!=
null
&&
(
parentPath
.
equals
(
mSettings
.
getPackDeckDir
())
||
(
parentPath
.
equals
(
mSettings
.
getPackDeckDir
())
||
...
@@ -661,7 +668,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -661,7 +668,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
isPackMode
=
false
;
isPackMode
=
false
;
}
}
// 设置当前卡组显示
// 设置当前卡组显示
if
(
rs
.
source
!=
null
)
{
if
(
rs
!=
null
&&
rs
.
source
!=
null
)
{
setCurDeck
(
rs
,
isPackMode
);
setCurDeck
(
rs
,
isPackMode
);
}
else
{
}
else
{
setCurDeck
(
rs
,
false
);
setCurDeck
(
rs
,
false
);
...
@@ -1266,11 +1273,13 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -1266,11 +1273,13 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
builder
.
setMessageGravity
(
Gravity
.
CENTER_HORIZONTAL
);
builder
.
setMessageGravity
(
Gravity
.
CENTER_HORIZONTAL
);
builder
.
setLeftButtonListener
((
dlg
,
rs
)
->
{
builder
.
setLeftButtonListener
((
dlg
,
rs
)
->
{
if
(
mDeckAdapater
.
getYdkFile
()
!=
null
)
{
if
(
mDeckAdapater
.
getYdkFile
()
!=
null
)
{
FileUtils
.
deleteFile
(
mDeckAdapater
.
getYdkFile
());
// 先删除在线卡组
// 统一调用批量删除在线卡组(这里只有1个)
List
<
DeckFile
>
deckFileList
=
new
ArrayList
<>();
List
<
DeckFile
>
deckFileList
=
new
ArrayList
<>();
deckFileList
.
add
(
new
DeckFile
(
mDeckAdapater
.
getYdkFile
()));
deckFileList
.
add
(
new
DeckFile
(
mDeckAdapater
.
getYdkFile
()));
onDeckDel
(
deckFileList
);
DeckSquareApiUtil
.
deleteDecks
(
deckFileList
);
// 再删除本地文件
FileUtils
.
deleteFile
(
mDeckAdapater
.
getYdkFile
());
YGOUtil
.
showTextToast
(
R
.
string
.
done
);
YGOUtil
.
showTextToast
(
R
.
string
.
done
);
dlg
.
dismiss
();
dlg
.
dismiss
();
File
file
=
getFirstYdk
();
File
file
=
getFirstYdk
();
...
@@ -1770,7 +1779,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -1770,7 +1779,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
return
;
return
;
String
currentDeckPath
=
deck
.
getAbsolutePath
();
String
currentDeckPath
=
deck
.
getAbsolutePath
();
for
(
DeckFile
deckFile
:
deckFileList
)
{
for
(
DeckFile
deckFile
:
deckFileList
)
{
LogUtil
.
w
(
TAG
,
"要删除的卡组:"
+
"\n卡组分类
"
+
deckFile
.
getTypeName
()
+
"\n卡组名称:"
+
deckFile
.
getFileName
()
+
"\n卡组id
"
+
deckFile
.
getDeckId
());
LogUtil
.
w
(
TAG
,
"要删除的卡组:"
+
"\n卡组分类
: "
+
deckFile
.
getTypeName
()
+
"\n卡组名称:"
+
deckFile
.
getFileName
()
+
"\n卡组id:
"
+
deckFile
.
getDeckId
());
if
(
TextUtils
.
equals
(
deckFile
.
getPath
(),
currentDeckPath
))
{
if
(
TextUtils
.
equals
(
deckFile
.
getPath
(),
currentDeckPath
))
{
List
<
File
>
files
=
getYdkFiles
();
List
<
File
>
files
=
getYdkFiles
();
File
file
=
null
;
File
file
=
null
;
...
@@ -1782,10 +1791,12 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
...
@@ -1782,10 +1791,12 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
}
else
{
}
else
{
setCurDeck
(
new
DeckInfo
(),
false
);
setCurDeck
(
new
DeckInfo
(),
false
);
}
}
// 对于当前卡组,也应该删除在线卡组
DeckSquareApiUtil
.
deleteDecks
(
Arrays
.
asList
(
deckFile
));
return
;
return
;
}
}
}
}
//删除在线的同名卡组们
//
删除在线的同名卡组们
DeckSquareApiUtil
.
deleteDecks
(
deckFileList
);
DeckSquareApiUtil
.
deleteDecks
(
deckFileList
);
YGOUtil
.
showTextToast
(
R
.
string
.
done
);
YGOUtil
.
showTextToast
(
R
.
string
.
done
);
}
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
View file @
c712acdc
...
@@ -6,13 +6,14 @@ import android.widget.Toast;
...
@@ -6,13 +6,14 @@ 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.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
import
cn.garymb.ygomobile.AppsSettings
;
import
cn.garymb.ygomobile.AppsSettings
;
import
cn.garymb.ygomobile.Constants
;
import
cn.garymb.ygomobile.Constants
;
...
@@ -275,7 +276,7 @@ public class DeckSquareApiUtil {
...
@@ -275,7 +276,7 @@ public class DeckSquareApiUtil {
deckContent
=
DeckSquareFileUtil
.
setDeckId
(
item
.
getDeckPath
(),
loginToken
.
getUserId
(),
item
.
getDeckId
());
deckContent
=
DeckSquareFileUtil
.
setDeckId
(
item
.
getDeckPath
(),
loginToken
.
getUserId
(),
item
.
getDeckId
());
}
}
data
.
setDeckYdk
(
deckContent
);
data
.
setDeckYdk
(
deckContent
);
LogUtil
.
w
(
TAG
,
"*要上传的* 本地卡组:"
+
data
.
getDeckType
()
+
"、"
+
data
.
getDeckName
()
+
"++id: "
+
data
.
getDeckId
());
LogUtil
.
w
(
TAG
,
"*要上传的* 本地卡组:"
+
data
.
getDeckType
()
+
"、"
+
data
.
getDeckName
()
+
"++id: "
+
data
.
getDeckId
()
+
" "
+
data
.
isDelete
()
);
dataList
.
add
(
data
);
dataList
.
add
(
data
);
}
}
return
pushMultiDecks
(
dataList
,
loginToken
);
return
pushMultiDecks
(
dataList
,
loginToken
);
...
@@ -447,13 +448,13 @@ public class DeckSquareApiUtil {
...
@@ -447,13 +448,13 @@ public class DeckSquareApiUtil {
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
.
d
(
TAG
,
"本地卡组名称:"
+
localDeck
.
getDeckType
()+
"-"
+
localDeck
.
getDeckName
()+
" ID:"
+
localDeck
.
getDeckId
());
LogUtil
.
d
(
TAG
,
"本地卡组名称:"
+
localDeck
.
getDeckType
()
+
"-"
+
localDeck
.
getDeckName
()
+
" ID:"
+
localDeck
.
getDeckId
());
// 2. 使用在线卡组的迭代器遍历(支持安全删除)
// 2. 使用在线卡组的迭代器遍历(支持安全删除)
Iterator
<
MyOnlineDeckDetail
>
onlineIterator
=
onlineDecks
.
iterator
();
Iterator
<
MyOnlineDeckDetail
>
onlineIterator
=
onlineDecks
.
iterator
();
while
(
onlineIterator
.
hasNext
())
{
while
(
onlineIterator
.
hasNext
())
{
MyOnlineDeckDetail
onlineDeck
=
onlineIterator
.
next
();
MyOnlineDeckDetail
onlineDeck
=
onlineIterator
.
next
();
String
onLineDeckName
=
onlineDeck
.
getDeckName
().
replace
(
Constants
.
YDK_FILE_EX
,
""
);
String
onLineDeckName
=
onlineDeck
.
getDeckName
().
replace
(
Constants
.
YDK_FILE_EX
,
""
);
LogUtil
.
e
(
TAG
,
"在线备份名称:"
+
onlineDeck
.
getDeckType
()+
"/"
+
onLineDeckName
+
" 在线卡组ID:"
+
onlineDeck
.
getDeckId
());
LogUtil
.
e
(
TAG
,
"在线备份名称:"
+
onlineDeck
.
getDeckType
()
+
"/"
+
onLineDeckName
+
" 在线卡组ID:"
+
onlineDeck
.
getDeckId
());
// 匹配到同名卡组:加入同步上传列表,并从原始集合中删除(避免重复处理)
// 匹配到同名卡组:加入同步上传列表,并从原始集合中删除(避免重复处理)
if
(
localDeckName
.
equals
(
onLineDeckName
))
{
// && localDeck.getDeckType().equals(onlineDeck.getDeckType())
if
(
localDeckName
.
equals
(
onLineDeckName
))
{
// && localDeck.getDeckType().equals(onlineDeck.getDeckType())
localDeck
.
setDeckId
(
onlineDeck
.
getDeckId
());
localDeck
.
setDeckId
(
onlineDeck
.
getDeckId
());
...
@@ -507,35 +508,53 @@ public class DeckSquareApiUtil {
...
@@ -507,35 +508,53 @@ public class DeckSquareApiUtil {
return
;
return
;
}
}
if
(
SharedPreferenceUtil
.
getServerToken
()
!=
null
)
{
String
serverToken
=
SharedPreferenceUtil
.
getServerToken
();
if
(
serverToken
==
null
)
{
LogUtil
.
w
(
TAG
,
"服务器 Token 无效,无法执行删除操作"
);
return
;
}
LoginToken
loginToken
=
new
LoginToken
(
LoginToken
loginToken
=
new
LoginToken
(
SharedPreferenceUtil
.
getServerUserId
(),
SharedPreferenceUtil
.
getServerUserId
(),
SharedPreferenceUtil
.
getServerToken
()
serverToken
);
);
VUiKit
.
defer
().
when
(()
->
{
VUiKit
.
defer
().
when
(()
->
{
List
<
MyOnlineDeckDetail
>
originalData
=
DeckManagerFragment
.
getOriginalData
();
List
<
MyOnlineDeckDetail
>
originalData
=
DeckManagerFragment
.
getOriginalData
();
synchronized
(
originalData
)
{
// 加锁防止并发修改
synchronized
(
originalData
)
{
if
(
originalData
.
isEmpty
())
{
if
(
originalData
.
isEmpty
())
{
MyDeckResponse
result
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
MyDeckResponse
result
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
if
(
result
!=
null
&&
result
.
getData
()
!=
null
)
{
if
(
result
!=
null
&&
result
.
getData
()
!=
null
)
{
originalData
.
addAll
(
result
.
getData
());
originalData
.
addAll
(
result
.
getData
());
}
else
{
throw
new
RuntimeException
(
"获取用户卡组信息失败"
);
}
}
}
// 提前过滤掉 null 元素
List
<
DeckFile
>
validDeckFiles
=
deckFileList
.
stream
()
.
filter
(
Objects:
:
nonNull
)
.
collect
(
Collectors
.
toList
());
for
(
DeckFile
deleteDeckFile
:
validDeckFiles
)
{
String
name
=
deleteDeckFile
.
getName
();
String
typeName
=
deleteDeckFile
.
getTypeName
();
if
(
name
==
null
||
typeName
==
null
)
{
LogUtil
.
w
(
TAG
,
"跳过无效卡组文件: name="
+
name
+
", type="
+
typeName
);
continue
;
}
}
for
(
DeckFile
deleteDeckFile
:
deckFileList
)
{
LogUtil
.
d
(
TAG
,
"准备删除卡组:"
+
typeName
+
"/"
+
name
);
if
(
deleteDeckFile
==
null
)
continue
;
for
(
MyOnlineDeckDetail
onlineDeckDetail
:
originalData
)
{
for
(
MyOnlineDeckDetail
onlineDeckDetail
:
originalData
)
{
if
(
deleteDeckFile
.
getName
()
!=
null
&&
if
(
name
.
equals
(
onlineDeckDetail
.
getDeckName
())
&&
deleteDeckFile
.
getTypeName
()
!=
null
&&
typeName
.
equals
(
onlineDeckDetail
.
getDeckType
()))
{
deleteDeckFile
.
getName
().
equals
(
onlineDeckDetail
.
getDeckName
())
&&
deleteDeckFile
.
getTypeName
().
equals
(
onlineDeckDetail
.
getDeckType
()))
{
onlineDeckDetail
.
setDelete
(
true
);
onlineDeckDetail
.
setDelete
(
true
);
deleteDeckFile
.
setDeckId
(
onlineDeckDetail
.
getDeckId
());
deleteDeckFile
.
setDeckId
(
onlineDeckDetail
.
getDeckId
());
break
;
// 匹配成功即跳出内层循环
break
;
}
}
}
}
}
}
...
@@ -544,13 +563,11 @@ public class DeckSquareApiUtil {
...
@@ -544,13 +563,11 @@ public class DeckSquareApiUtil {
syncMyDecks
(
toDeckItemList
(
originalData
),
loginToken
);
syncMyDecks
(
toDeckItemList
(
originalData
),
loginToken
);
return
true
;
return
true
;
}).
fail
((
e
)
->
{
}).
fail
((
e
)
->
{
LogUtil
.
e
(
TAG
,
"删除卡组失败!"
,
e
);
// 增强日志输出
LogUtil
.
e
(
TAG
,
"删除卡组失败!"
,
e
);
}).
done
((
result
)
->
{
}).
done
((
result
)
->
{
LogUtil
.
d
(
TAG
,
"卡组删除同步成功"
);
LogUtil
.
d
(
TAG
,
"卡组删除同步成功"
);
});
});
}
else
{
LogUtil
.
w
(
TAG
,
"服务器 Token 无效,无法执行删除操作"
);
}
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment