Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile-Cn-Ko-En
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-Cn-Ko-En
Commits
8b4221a8
Commit
8b4221a8
authored
Jun 30, 2025
by
wangfugui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
卡组自动同步功能,修改同步比较
parent
1416c0c5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
177 additions
and
8 deletions
+177
-8
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareApiUtil.java
...va/cn/garymb/ygomobile/deck_square/DeckSquareApiUtil.java
+66
-4
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareFileUtil.java
...a/cn/garymb/ygomobile/deck_square/DeckSquareFileUtil.java
+4
-0
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareMyDeckFragment.java
...arymb/ygomobile/deck_square/DeckSquareMyDeckFragment.java
+25
-2
mobile/src/main/java/cn/garymb/ygomobile/deck_square/api_response/PushMultiDeck.java
...ymb/ygomobile/deck_square/api_response/PushMultiDeck.java
+82
-2
No files found.
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareApiUtil.java
View file @
8b4221a8
...
...
@@ -23,11 +23,11 @@ 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.MyOnlineDeckDetail
;
import
cn.garymb.ygomobile.deck_square.api_response.PushSingleDeck
;
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.deck_square.api_response.PushMultiDeck
;
import
cn.garymb.ygomobile.deck_square.api_response.PushSingleDeck
;
import
cn.garymb.ygomobile.deck_square.api_response.SquareDeckResponse
;
import
cn.garymb.ygomobile.deck_square.api_response.SyncDecksResponse
;
import
cn.garymb.ygomobile.ui.plus.VUiKit
;
import
cn.garymb.ygomobile.utils.LogUtil
;
...
...
@@ -75,6 +75,7 @@ public class DeckSquareApiUtil {
/**
* 根据条件,分页查询卡组的列表(不查询卡组的内容,只查询卡组名、卡组id等概括性信息)
*
* @param condition
* @return
* @throws IOException
...
...
@@ -253,14 +254,14 @@ public class DeckSquareApiUtil {
return
result
;
}
/**
*
* @param deckDataList
* @param loginToken
* @return
* @throws IOException
*/
public
static
SyncDecksResponse
syncDecks
(
List
<
Push
Single
Deck
.
DeckData
>
deckDataList
,
LoginToken
loginToken
)
throws
IOException
{
public
static
SyncDecksResponse
syncDecks
(
List
<
Push
Multi
Deck
.
DeckData
>
deckDataList
,
LoginToken
loginToken
)
throws
IOException
{
SyncDecksResponse
result
=
null
;
String
url
=
"http://rarnu.xyz:38383/api/mdpro3/sync/multi"
;
Map
<
String
,
String
>
headers
=
new
HashMap
<>();
...
...
@@ -423,6 +424,67 @@ public class DeckSquareApiUtil {
String
url
=
"http://rarnu.xyz:38383/api/mdpro3/deck/"
+
deckId
;
}
public
static
boolean
synchronizeDecksV2
()
throws
IOException
{
// 检查用户是否登录
LoginToken
loginToken
=
DeckSquareApiUtil
.
getLoginData
();
if
(
loginToken
==
null
)
{
return
false
;
}
// 获取本地卡组列表
List
<
MyDeckItem
>
localDecks
=
DeckSquareFileUtil
.
getMyDeckItem
();
// 获取在线卡组列表
MyDeckResponse
onlineDecksResponse
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
if
(
onlineDecksResponse
==
null
||
onlineDecksResponse
.
getData
()
==
null
)
{
return
false
;
}
List
<
MyOnlineDeckDetail
>
onlineDecks
=
onlineDecksResponse
.
getData
();
// 用于标记在线卡组是否在本地有对应
Map
<
String
,
Boolean
>
onlineDeckProcessed
=
new
HashMap
<>();
for
(
MyOnlineDeckDetail
onlineDeck
:
onlineDecks
)
{
onlineDeckProcessed
.
put
(
onlineDeck
.
getDeckName
(),
false
);
}
// 遍历本地卡组,处理同名卡组的情况
for
(
MyDeckItem
localDeck
:
localDecks
)
{
String
localDeckName
=
localDeck
.
getDeckName
();
localDeckName
=
localDeckName
.
replace
(
".ydk"
,
""
);
for
(
MyOnlineDeckDetail
onlineDeck
:
onlineDecks
)
{
if
(
localDeckName
.
equals
(
onlineDeck
.
getDeckName
()))
{
// 标记该在线卡组已处理
onlineDeckProcessed
.
put
(
onlineDeck
.
getDeckName
(),
true
);
// 比对更新时间
String
localUpdateDate
=
localDeck
.
getUpdateDate
();
String
onlineUpdateDate
=
String
.
valueOf
(
0
);
//todo 这里应该把2025-05-19T06:11:17转成毫秒,onlineDeck.getDeckUpdateDate();
if
(
onlineUpdateDate
!=
null
&&
(
localUpdateDate
==
null
||
onlineUpdateDate
.
compareTo
(
localUpdateDate
)
>
0
))
{
// 在线卡组更新时间更晚,下载在线卡组覆盖本地卡组
downloadOnlineDeck
(
onlineDeck
,
localDeck
.
getDeckPath
());
}
else
{
// 本地卡组更新时间更晚,上传本地卡组覆盖在线卡组
uploadLocalDeck
(
localDeck
,
onlineDeck
.
getDeckId
(),
loginToken
);
}
break
;
}
}
}
// 处理只存在于在线的卡组(即本地没有同名卡组)
for
(
MyOnlineDeckDetail
onlineDeck
:
onlineDecks
)
{
if
(!
onlineDeckProcessed
.
get
(
onlineDeck
.
getDeckName
()))
{
downloadMissingDeckToLocal
(
onlineDeck
);
}
}
return
true
;
}
public
static
void
synchronizeDecks
()
{
// 检查用户是否登录
LoginToken
loginToken
=
DeckSquareApiUtil
.
getLoginData
();
...
...
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareFileUtil.java
View file @
8b4221a8
...
...
@@ -98,6 +98,10 @@ public class DeckSquareFileUtil {
String
deckId
=
getId
(
file
);
MyDeckItem
item
=
new
MyDeckItem
();
item
.
deckName
=
file
.
getName
();
item
.
setUpdateDate
(
String
.
valueOf
(
file
.
lastModified
()));
item
.
setDeckSouce
(
0
);
item
.
setDeckPath
(
file
.
getPath
());
if
(
deckId
!=
null
)
{
...
...
mobile/src/main/java/cn/garymb/ygomobile/deck_square/DeckSquareMyDeckFragment.java
View file @
8b4221a8
...
...
@@ -23,6 +23,7 @@ import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import
cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement
;
import
cn.garymb.ygomobile.ui.plus.DialogPlus
;
import
cn.garymb.ygomobile.ui.plus.VUiKit
;
import
cn.garymb.ygomobile.utils.LogUtil
;
import
cn.garymb.ygomobile.utils.SharedPreferenceUtil
;
import
cn.garymb.ygomobile.utils.YGODeckDialogUtil
;
import
cn.garymb.ygomobile.utils.YGOUtil
;
...
...
@@ -56,7 +57,7 @@ public class DeckSquareMyDeckFragment extends Fragment {
binding
.
tvMycardUserName
.
setText
(
SharedPreferenceUtil
.
getMyCardUserName
());
GlideCompat
.
with
(
getActivity
()).
load
(
ChatMessage
.
getAvatarUrl
(
SharedPreferenceUtil
.
getMyCardUserName
())).
into
(
binding
.
myDeckAvatar
);
//刷新头像图片
}
DeckSquareApiUtil
.
synchronizeDecks
();
//
DeckSquareApiUtil.synchronizeDecks();
binding
.
btnLogin
.
setOnClickListener
(
v
->
attemptLogin
());
binding
.
btnRegister
.
setOnClickListener
(
v
->
WebActivity
.
open
(
getContext
(),
getString
(
R
.
string
.
register
),
MyCard
.
URL_MC_SIGN_UP
));
deckListAdapter
=
new
MyDeckListAdapter
(
R
.
layout
.
item_my_deck
,
onDeckMenuListener
,
mDialogListener
);
...
...
@@ -115,6 +116,17 @@ public class DeckSquareMyDeckFragment extends Fragment {
deckListAdapter
.
filter
(
s
.
toString
());
}
}
});
/** 自动同步 */
VUiKit
.
defer
().
when
(()
->
{
return
DeckSquareApiUtil
.
synchronizeDecksV2
();
}).
fail
((
e
)
->
{
LogUtil
.
i
(
TAG
,
"Like deck fail"
+
e
.
getMessage
());
}).
done
((
result
)
->
{
});
return
binding
.
getRoot
();
...
...
@@ -191,6 +203,17 @@ public class DeckSquareMyDeckFragment extends Fragment {
}
});
DeckSquareApiUtil
.
synchronizeDecks
();
/** 自动同步 */
VUiKit
.
defer
().
when
(()
->
{
return
DeckSquareApiUtil
.
synchronizeDecksV2
();
}).
fail
((
e
)
->
{
LogUtil
.
i
(
TAG
,
"Like deck fail"
+
e
.
getMessage
());
}).
done
((
result
)
->
{
});
//DeckSquareApiUtil.synchronizeDecks();
}
}
mobile/src/main/java/cn/garymb/ygomobile/deck_square/api_response/PushMultiDeck.java
View file @
8b4221a8
...
...
@@ -30,7 +30,87 @@ public class PushMultiDeck {
return
decks
;
}
public
void
setDecks
(
List
<
DeckData
>
_deckDataList
)
{
this
.
decks
=
_deckDataList
;
public
void
setDecks
(
List
<
DeckData
>
decks_
)
{
this
.
decks
=
decks_
;
}
public
static
class
DeckData
{
private
String
deckId
;
private
String
deckName
;
private
Integer
deckCoverCard1
=
0
;
private
Integer
deckCoverCard2
=
0
;
private
Integer
deckCoverCard3
=
0
;
private
Integer
deckCase
=
0
;
private
Integer
deckProtector
=
0
;
private
String
deckYdk
;
public
String
getDeckId
()
{
return
deckId
;
}
public
void
setDeckId
(
String
deckId
)
{
this
.
deckId
=
deckId
;
}
public
String
getDeckName
()
{
return
deckName
;
}
public
void
setDeckName
(
String
deckName
)
{
this
.
deckName
=
deckName
;
}
public
Integer
getDeckCoverCard1
(
Integer
firstCode
)
{
return
deckCoverCard1
;
}
public
void
setDeckCoverCard1
(
Integer
deckCoverCard1
)
{
this
.
deckCoverCard1
=
deckCoverCard1
;
}
public
Integer
getDeckCoverCard2
()
{
return
deckCoverCard2
;
}
public
void
setDeckCoverCard2
(
Integer
deckCoverCard2
)
{
this
.
deckCoverCard2
=
deckCoverCard2
;
}
public
Integer
getDeckCoverCard3
()
{
return
deckCoverCard3
;
}
public
void
setDeckCoverCard3
(
Integer
deckCoverCard3
)
{
this
.
deckCoverCard3
=
deckCoverCard3
;
}
public
Integer
getDeckCase
()
{
return
deckCase
;
}
public
void
setDeckCase
(
Integer
deckCase
)
{
this
.
deckCase
=
deckCase
;
}
public
Integer
getDeckProtector
()
{
return
deckProtector
;
}
public
void
setDeckProtector
(
Integer
deckProtector
)
{
this
.
deckProtector
=
deckProtector
;
}
public
String
getDeckYdk
()
{
return
deckYdk
;
}
public
void
setDeckYdk
(
String
deckYdk
)
{
this
.
deckYdk
=
deckYdk
;
}
}
}
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