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
da003669
Commit
da003669
authored
Jul 15, 2025
by
Dark Zane
Committed by
GitHub
Jul 15, 2025
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fallenstardust:master' into YGOMOBILE-1
parents
748a873d
ec9c731a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
43 additions
and
37 deletions
+43
-37
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
...ava/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
+2
-1
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckManageDialog.java
...rymb/ygomobile/ui/cards/deck_square/DeckManageDialog.java
+1
-1
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
...ymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
+38
-33
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushMultiDeck.java
...bile/ui/cards/deck_square/api_response/PushMultiDeck.java
+1
-1
mobile/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
...e/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
+1
-1
No files found.
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
View file @
da003669
...
...
@@ -261,7 +261,8 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
}
return
0
;
}).
fail
((
e
)
->
{
YGOUtil
.
showTextToast
(
"Sync decks failed: "
+
e
);
LogUtil
.
e
(
TAG
,
"Sync decks failed: "
+
e
);
//YGOUtil.showTextToast("Sync decks failed: " + e);
}).
done
((
result
)
->
{
});
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckManageDialog.java
View file @
da003669
...
...
@@ -51,7 +51,7 @@ public class DeckManageDialog extends DialogFragment implements YGODeckDialogUti
ViewPager2
viewPager
=
view
.
findViewById
(
R
.
id
.
deck_view_pager
);
TabLayout
tabLayout
=
view
.
findViewById
(
R
.
id
.
deck_manager_tab_layout
);
viewPager
.
setUserInputEnabled
(
false
);
// Setup adapter
ViewPagerAdapter
adapter
=
new
ViewPagerAdapter
(
this
,
mOnDeckMenuListener
,
this
);
viewPager
.
setAdapter
(
adapter
);
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
View file @
da003669
package
cn.garymb.ygomobile.ui.cards.deck_square
;
import
android.util.Log
;
import
android.widget.Toast
;
import
com.google.gson.Gson
;
...
...
@@ -9,6 +8,7 @@ import java.io.File;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -16,6 +16,7 @@ import cn.garymb.ygomobile.AppsSettings;
import
cn.garymb.ygomobile.Constants
;
import
cn.garymb.ygomobile.bean.DeckType
;
import
cn.garymb.ygomobile.bean.events.DeckFile
;
import
cn.garymb.ygomobile.lite.R
;
import
cn.garymb.ygomobile.ui.cards.DeckManagerFragment
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.BasicResponse
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.DeckIdResponse
;
...
...
@@ -72,7 +73,7 @@ public class DeckSquareApiUtil {
Integer
serverUserId
=
SharedPreferenceUtil
.
getServerUserId
();
if
(
serverToken
==
null
||
serverUserId
==
-
1
)
{
YGOUtil
.
showTextToast
(
"Please login first!"
);
YGOUtil
.
showTextToast
(
R
.
string
.
login_mycard
);
return
null
;
}
return
new
LoginToken
(
serverUserId
,
serverToken
);
...
...
@@ -357,6 +358,7 @@ public class DeckSquareApiUtil {
String
deckContent
=
DeckSquareFileUtil
.
setDeckId
(
item
.
getDeckPath
(),
loginToken
.
getUserId
(),
item
.
getDeckId
());
data
.
setDeckYdk
(
deckContent
);
LogUtil
.
w
(
TAG
,
"seesee syncMyDecks*要上传的 本地卡组: "
+
data
.
getDeckName
()+
"//"
+
data
.
getDeckId
()+
"//"
+
data
.
getDeckCoverCard1
()+
"//"
+
data
.
getDeckYdk
());
dataList
.
add
(
data
);
}
return
pushMultiDecks
(
dataList
,
loginToken
);
...
...
@@ -692,52 +694,56 @@ public class DeckSquareApiUtil {
// 获取本地卡组列表
List
<
MyDeckItem
>
localDecks
=
DeckSquareFileUtil
.
getMyDeckItem
();
// 获取在线卡组列表
VUiKit
.
defer
().
when
(()
->
{
MyDeckResponse
result
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
//调用获取云备份卡组的接口方法
if
(
result
==
null
)
return
null
;
else
return
result
.
getData
();
}).
fail
((
e
)
->
{
LogUtil
.
e
(
TAG
,
"load mycard from server failed: "
+
e
);
}).
done
((
serverDecks
)
->
{
if
(
serverDecks
!=
null
)
{
//将服务端的卡组也放到OrignalData里,
DeckManagerFragment
.
getOriginalData
().
clear
();
DeckManagerFragment
.
getOriginalData
().
addAll
(
serverDecks
);
}
});
List
<
MyOnlineDeckDetail
>
onlineDecks
=
DeckManagerFragment
.
getOriginalData
();
MyDeckResponse
onlineDecksResponse
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
if
(
onlineDecksResponse
==
null
||
onlineDecksResponse
.
getData
()
==
null
)
{
LogUtil
.
e
(
TAG
,
"load my online decks failed!"
);
return
;
}
List
<
MyOnlineDeckDetail
>
onlineDecks
=
onlineDecksResponse
.
getData
();
//遍历本地卡组与云备份卡组,过滤出差异项
// 缓存原始在线卡组(使用副本避免后续修改影响缓存)
DeckManagerFragment
.
getOriginalData
().
clear
();
DeckManagerFragment
.
getOriginalData
().
addAll
(
new
ArrayList
<>(
onlineDecks
));
// 遍历本地卡组与云备份卡组,过滤差异项(使用迭代器避免ConcurrentModificationException)
List
<
MyDeckItem
>
syncUploadDecks
=
new
ArrayList
<>();
List
<
MyDeckItem
>
newPushDecks
=
new
ArrayList
<>();
List
<
MyOnlineDeckDetail
>
backupDownloadDecks
=
new
ArrayList
<>();
for
(
MyDeckItem
localDeck
:
localDecks
)
{
//预处理每个本地卡组
// 1. 使用本地卡组的迭代器遍历(支持安全删除)
Iterator
<
MyDeckItem
>
localIterator
=
localDecks
.
iterator
();
while
(
localIterator
.
hasNext
())
{
MyDeckItem
localDeck
=
localIterator
.
next
();
// 预处理本地卡组
String
localDeckName
=
localDeck
.
getDeckName
().
replace
(
Constants
.
YDK_FILE_EX
,
""
);
localDeck
.
setDeckName
(
localDeckName
);
localDeck
.
setDeckCoverCard1
(
DeckUtil
.
getFirstCardCode
(
localDeck
.
getDeckPath
()));
for
(
MyOnlineDeckDetail
onlineDeck
:
onlineDecks
)
{
boolean
isMatched
=
false
;
// 2. 使用在线卡组的迭代器遍历(支持安全删除)
Iterator
<
MyOnlineDeckDetail
>
onlineIterator
=
onlineDecks
.
iterator
();
while
(
onlineIterator
.
hasNext
())
{
MyOnlineDeckDetail
onlineDeck
=
onlineIterator
.
next
();
String
onLineDeckName
=
onlineDeck
.
getDeckName
().
replace
(
Constants
.
YDK_FILE_EX
,
""
);
if
(
localDeckName
.
equals
(
onLineDeckName
))
{
localDeck
.
setDeckId
(
onlineDeck
.
getDeckId
());
//为本地卡组添加同名云备份卡组的deckid
// 将每个本地卡组作为数组元素添加入syncUploadDecks
syncUploadDecks
.
add
(
localDeck
);
// 将匹配到的本地卡组放入待上传的list中
localDecks
.
remove
(
localDeck
);
// 移除云备份已存在的本地卡组,最后剩下的就是本地独有的卡组
onlineDecks
.
remove
(
onlineDeck
);
// 移除匹配到的云备份卡组,最后剩下的就是云备份独有的卡组
break
;
if
(
localDeckName
.
equals
(
onLineDeckName
))
{
// 匹配到同名卡组:加入同步上传列表,并从原始集合中删除(避免重复处理)
localDeck
.
setDeckId
(
onlineDeck
.
getDeckId
());
syncUploadDecks
.
add
(
localDeck
);
localIterator
.
remove
();
// 安全删除本地卡组(迭代器方法)
onlineIterator
.
remove
();
// 安全删除在线卡组(迭代器方法)
isMatched
=
true
;
break
;
// 匹配后跳出内部循环
}
}
// 若未匹配到在线卡组,该本地卡组会保留在localDecks中(后续作为新卡组上传)
}
newPushDecks
.
addAll
(
localDecks
);
// 将剩下的本地卡组传入待新上传的list,与syncUploadDecks并不执行相同的上传接口
backupDownloadDecks
.
addAll
(
onlineDecks
);
// 将剩下的在线卡组传入待新下载的list
// 剩余的本地卡组都是新卡组(本地独有,需要上传)
newPushDecks
.
addAll
(
localDecks
);
// 剩余的在线卡组都是新卡组(云端独有,需要下载)
backupDownloadDecks
.
addAll
(
onlineDecks
);
LogUtil
.
w
(
TAG
,
"seesee +要下载的 云备份卡组: "
+
backupDownloadDecks
);
for
(
MyOnlineDeckDetail
onlineDeck
:
backupDownloadDecks
)
{
...
...
@@ -762,7 +768,6 @@ public class DeckSquareApiUtil {
requestIdAndPushNewDecks
(
newPushDecks
,
loginToken
);
LogUtil
.
w
(
TAG
,
"seesee +要上传的 本地卡组: "
+
newPushDecks
);
}
}
private
static
SyncMutliDeckResult
.
DownloadResult
downloadMissingDeckToLocal
(
MyOnlineDeckDetail
onlineDeck
,
Long
onlineUpdateDate
)
{
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushMultiDeck.java
View file @
da003669
...
...
@@ -62,7 +62,7 @@ public class PushMultiDeck {
this
.
deckName
=
deckName
;
}
public
Integer
getDeckCoverCard1
(
Integer
firstCode
)
{
public
Integer
getDeckCoverCard1
()
{
return
deckCoverCard1
;
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/utils/OkhttpUtil.java
View file @
da003669
...
...
@@ -29,7 +29,7 @@ public class OkhttpUtil {
.
readTimeout
(
30
,
TimeUnit
.
SECONDS
)
.
writeTimeout
(
30
,
TimeUnit
.
SECONDS
)
// keep-alive and connection pool defaults
.
connectionPool
(
new
ConnectionPool
(
2
,
4
0
,
TimeUnit
.
SECONDS
))
.
connectionPool
(
new
ConnectionPool
(
2
,
2
0
,
TimeUnit
.
SECONDS
))
.
build
();
...
...
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