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
a2045025
Commit
a2045025
authored
Jul 21, 2025
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
同步卡组接口添加新字段时间戳、卡组分类
parent
fdc96632
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
67 additions
and
30 deletions
+67
-30
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
...ymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
+13
-8
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareFileUtil.java
...mb/ygomobile/ui/cards/deck_square/DeckSquareFileUtil.java
+4
-3
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/MyOnlineDeckDetail.java
...ui/cards/deck_square/api_response/MyOnlineDeckDetail.java
+11
-0
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushMultiDeck.java
...bile/ui/cards/deck_square/api_response/PushMultiDeck.java
+18
-0
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushSingleDeck.java
...ile/ui/cards/deck_square/api_response/PushSingleDeck.java
+9
-0
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/MyDeckItem.java
.../garymb/ygomobile/ui/cards/deck_square/bo/MyDeckItem.java
+12
-11
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/SyncMutliDeckResult.java
...gomobile/ui/cards/deck_square/bo/SyncMutliDeckResult.java
+0
-1
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/UserDeckIds.java
...garymb/ygomobile/ui/cards/deck_square/bo/UserDeckIds.java
+0
-7
No files found.
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
View file @
a2045025
...
@@ -204,6 +204,7 @@ public class DeckSquareApiUtil {
...
@@ -204,6 +204,7 @@ public class DeckSquareApiUtil {
deckData
.
setDeckId
(
deckId
);
deckData
.
setDeckId
(
deckId
);
deckData
.
setDeckName
(
deckfile
.
getName
());
deckData
.
setDeckName
(
deckfile
.
getName
());
deckData
.
setDeckType
(
deckfile
.
getTypeName
());
deckData
.
setDeckCoverCard1
(
deckfile
.
getFirstCode
());
deckData
.
setDeckCoverCard1
(
deckfile
.
getFirstCode
());
deckData
.
setDelete
(
false
);
deckData
.
setDelete
(
false
);
deckData
.
setDeckYdk
(
deckContent
);
deckData
.
setDeckYdk
(
deckContent
);
...
@@ -243,7 +244,7 @@ public class DeckSquareApiUtil {
...
@@ -243,7 +244,7 @@ public class DeckSquareApiUtil {
data
.
setDeckName
(
myDeckItem
.
getDeckName
());
data
.
setDeckName
(
myDeckItem
.
getDeckName
());
data
.
setDeckCoverCard1
(
myDeckItem
.
getDeckCoverCard1
());
data
.
setDeckCoverCard1
(
myDeckItem
.
getDeckCoverCard1
());
data
.
setDeckId
(
deckIdList
.
get
(
i
));
data
.
setDeckId
(
deckIdList
.
get
(
i
));
data
.
setDeckUpdateTime
(
myDeckItem
.
getUpdateTimestamp
());
decks
.
add
(
data
);
decks
.
add
(
data
);
}
}
return
pushMultiDecks
(
decks
,
loginToken
);
return
pushMultiDecks
(
decks
,
loginToken
);
...
@@ -327,12 +328,14 @@ public class DeckSquareApiUtil {
...
@@ -327,12 +328,14 @@ public class DeckSquareApiUtil {
if
(
deckIdResult
==
null
)
{
if
(
deckIdResult
==
null
)
{
return
null
;
return
null
;
}
}
List
<
String
>
deckId
=
deckIdResult
.
getDeckId
();
//从服务器获取
List
<
String
>
deckId
List
=
deckIdResult
.
getDeckId
();
//从服务器获取
if
(
deckId
==
null
)
{
if
(
deckId
List
==
null
)
{
return
null
;
return
null
;
}
else
{
LogUtil
.
i
(
TAG
,
"requestIdAndPushNewDecks deckIdList"
+
deckIdList
);
}
}
return
pushDecks
(
deckDataList
,
loginToken
,
deckId
);
return
pushDecks
(
deckDataList
,
loginToken
,
deckId
List
);
}
}
/**
/**
...
@@ -353,12 +356,14 @@ public class DeckSquareApiUtil {
...
@@ -353,12 +356,14 @@ public class DeckSquareApiUtil {
PushMultiDeck
.
DeckData
data
=
new
PushMultiDeck
.
DeckData
();
PushMultiDeck
.
DeckData
data
=
new
PushMultiDeck
.
DeckData
();
data
.
setDeckId
(
item
.
getDeckId
());
data
.
setDeckId
(
item
.
getDeckId
());
data
.
setDeckName
(
item
.
getDeckName
());
data
.
setDeckName
(
item
.
getDeckName
());
data
.
setDeckType
(
item
.
getDeckType
());
data
.
setDeckCoverCard1
(
item
.
getDeckCoverCard1
());
data
.
setDeckCoverCard1
(
item
.
getDeckCoverCard1
());
data
.
setDeckUpdateTime
(
item
.
getUpdateTimestamp
());
String
deckContent
=
DeckSquareFileUtil
.
setDeckId
(
item
.
getDeckPath
(),
loginToken
.
getUserId
(),
item
.
getDeckId
());
String
deckContent
=
DeckSquareFileUtil
.
setDeckId
(
item
.
getDeckPath
(),
loginToken
.
getUserId
(),
item
.
getDeckId
());
data
.
setDeckYdk
(
deckContent
);
data
.
setDeckYdk
(
deckContent
);
LogUtil
.
w
(
TAG
,
"s
eesee syncMyDecks*要上传的 本地卡组: "
+
data
.
getDeckName
()+
"//"
+
data
.
getDeckId
()+
"//"
+
data
.
getDeckCoverCard1
()+
"//"
+
data
.
getDeckYdk
());
LogUtil
.
w
(
TAG
,
"s
yncMyDecks *要上传的* 本地卡组: "
+
data
.
getDeckType
()
+
"//"
+
data
.
getDeckName
()+
"//"
+
data
.
getDeckId
()+
"//"
+
data
.
getDeckCoverCard1
()+
"//"
+
data
.
getDeckUpdateTime
());
dataList
.
add
(
data
);
dataList
.
add
(
data
);
}
}
return
pushMultiDecks
(
dataList
,
loginToken
);
return
pushMultiDecks
(
dataList
,
loginToken
);
...
@@ -743,8 +748,8 @@ public class DeckSquareApiUtil {
...
@@ -743,8 +748,8 @@ public class DeckSquareApiUtil {
// 剩余的在线卡组都是新卡组(云端独有,需要下载)
// 剩余的在线卡组都是新卡组(云端独有,需要下载)
backupDownloadDecks
.
addAll
(
onlineDecks
);
backupDownloadDecks
.
addAll
(
onlineDecks
);
LogUtil
.
w
(
TAG
,
"seesee +要下载的 云备份卡组: "
+
backupDownloadDecks
);
for
(
MyOnlineDeckDetail
onlineDeck
:
backupDownloadDecks
)
{
for
(
MyOnlineDeckDetail
onlineDeck
:
backupDownloadDecks
)
{
LogUtil
.
w
(
TAG
,
"synchronizeDecks(750) +要下载的 云备份卡组: "
+
onlineDeck
.
getDeckType
()
+
"//"
+
onlineDeck
.
getDeckName
()
+
"//"
+
onlineDeck
.
getDeckUpdateDate
());
// 确保文件名包含.ydk扩展名
// 确保文件名包含.ydk扩展名
String
fileName
=
onlineDeck
.
getDeckName
();
String
fileName
=
onlineDeck
.
getDeckName
();
if
(!
fileName
.
toLowerCase
().
endsWith
(
Constants
.
YDK_FILE_EX
))
{
if
(!
fileName
.
toLowerCase
().
endsWith
(
Constants
.
YDK_FILE_EX
))
{
...
@@ -755,9 +760,9 @@ public class DeckSquareApiUtil {
...
@@ -755,9 +760,9 @@ public class DeckSquareApiUtil {
// 保存在线卡组到本地
// 保存在线卡组到本地
boolean
saved
=
DeckSquareFileUtil
.
saveFileToPath
(
fileFullPath
,
onlineDeck
.
getDeckYdk
(),
onlineDeck
.
getDeckUpdateDate
());
boolean
saved
=
DeckSquareFileUtil
.
saveFileToPath
(
fileFullPath
,
onlineDeck
.
getDeckYdk
(),
onlineDeck
.
getDeckUpdateDate
());
if
(!
saved
)
LogUtil
.
e
(
TAG
,
"s
eesee Failed to save deck file
: "
+
fileFullPath
);
if
(!
saved
)
LogUtil
.
e
(
TAG
,
"s
ynchronizeDecks(761) 保存失败!的 云备份卡组
: "
+
fileFullPath
);
LogUtil
.
i
(
TAG
,
"s
eesee Deck saved to
: "
+
fileFullPath
);
LogUtil
.
i
(
TAG
,
"s
ynchronizeDecks(763) 保存成功√的 云备份卡组
: "
+
fileFullPath
);
}
}
// 上传本地卡组覆盖在线卡组
// 上传本地卡组覆盖在线卡组
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareFileUtil.java
View file @
a2045025
...
@@ -33,7 +33,7 @@ import ocgcore.data.Card;
...
@@ -33,7 +33,7 @@ import ocgcore.data.Card;
public
class
DeckSquareFileUtil
{
public
class
DeckSquareFileUtil
{
//
//
private
static
final
String
TAG
=
"
decksquareApi
Util"
;
private
static
final
String
TAG
=
"
DeckSquareFile
Util"
;
//将MyOnlineDeckDetail转MyDeckItem类型list,有时候会需要用到
//将MyOnlineDeckDetail转MyDeckItem类型list,有时候会需要用到
public
static
List
<
MyDeckItem
>
toDeckItemList
(
List
<
MyOnlineDeckDetail
>
serverDecks
)
{
public
static
List
<
MyDeckItem
>
toDeckItemList
(
List
<
MyOnlineDeckDetail
>
serverDecks
)
{
...
@@ -44,7 +44,7 @@ public class DeckSquareFileUtil {
...
@@ -44,7 +44,7 @@ public class DeckSquareFileUtil {
item
.
setDeckId
(
detail
.
getDeckId
());
item
.
setDeckId
(
detail
.
getDeckId
());
item
.
setUserId
(
detail
.
getUserId
());
item
.
setUserId
(
detail
.
getUserId
());
item
.
setDeckCoverCard1
(
detail
.
getDeckCoverCard1
());
item
.
setDeckCoverCard1
(
detail
.
getDeckCoverCard1
());
item
.
setUpdate
Date
(
detail
.
getDeckUpdateDate
());
item
.
setUpdate
Timestamp
(
detail
.
getDeckUpdateDate
());
item
.
setPublic
(
detail
.
isPublic
());
item
.
setPublic
(
detail
.
isPublic
());
myOnlineDecks
.
add
(
item
);
myOnlineDecks
.
add
(
item
);
}
}
...
@@ -74,7 +74,7 @@ public class DeckSquareFileUtil {
...
@@ -74,7 +74,7 @@ public class DeckSquareFileUtil {
}
}
// userId = Integer.parseInt(line.replaceAll("###", ""));
// userId = Integer.parseInt(line.replaceAll("###", ""));
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
LogUtil
.
e
(
TAG
,
"integer"
+
line
+
"parse error"
+
e
.
toString
());
LogUtil
.
e
(
TAG
,
"
getId(77):
integer"
+
line
+
"parse error"
+
e
.
toString
());
}
}
}
else
if
(
line
.
startsWith
(
"##"
))
{
}
else
if
(
line
.
startsWith
(
"##"
))
{
...
@@ -148,6 +148,7 @@ public class DeckSquareFileUtil {
...
@@ -148,6 +148,7 @@ public class DeckSquareFileUtil {
String
deckId
=
getId
(
file
);
String
deckId
=
getId
(
file
);
MyDeckItem
item
=
new
MyDeckItem
();
MyDeckItem
item
=
new
MyDeckItem
();
item
.
setDeckName
(
file
.
getName
());
item
.
setDeckName
(
file
.
getName
());
item
.
setDeckType
(
file
.
getParentFile
().
getName
());
item
.
setUpdateTimestamp
(
file
.
lastModified
());
item
.
setUpdateTimestamp
(
file
.
lastModified
());
item
.
setDeckPath
(
file
.
getPath
());
item
.
setDeckPath
(
file
.
getPath
());
if
(
deckId
!=
null
)
{
if
(
deckId
!=
null
)
{
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/MyOnlineDeckDetail.java
View file @
a2045025
...
@@ -11,6 +11,7 @@ public class MyOnlineDeckDetail implements Parcelable {
...
@@ -11,6 +11,7 @@ public class MyOnlineDeckDetail implements Parcelable {
private
String
deckId
;
private
String
deckId
;
private
String
deckContributor
;
private
String
deckContributor
;
private
String
deckName
;
private
String
deckName
;
private
String
deckType
;
private
String
deckRank
;
private
String
deckRank
;
private
String
deckLike
;
private
String
deckLike
;
private
long
deckUploadDate
;
private
long
deckUploadDate
;
...
@@ -31,6 +32,7 @@ public class MyOnlineDeckDetail implements Parcelable {
...
@@ -31,6 +32,7 @@ public class MyOnlineDeckDetail implements Parcelable {
deckId
=
in
.
readString
();
deckId
=
in
.
readString
();
deckContributor
=
in
.
readString
();
deckContributor
=
in
.
readString
();
deckName
=
in
.
readString
();
deckName
=
in
.
readString
();
deckType
=
in
.
readString
();
deckRank
=
in
.
readString
();
deckRank
=
in
.
readString
();
deckLike
=
in
.
readString
();
deckLike
=
in
.
readString
();
deckUploadDate
=
in
.
readLong
();
deckUploadDate
=
in
.
readLong
();
...
@@ -69,6 +71,7 @@ public class MyOnlineDeckDetail implements Parcelable {
...
@@ -69,6 +71,7 @@ public class MyOnlineDeckDetail implements Parcelable {
dest
.
writeString
(
deckId
);
dest
.
writeString
(
deckId
);
dest
.
writeString
(
deckContributor
);
dest
.
writeString
(
deckContributor
);
dest
.
writeString
(
deckName
);
dest
.
writeString
(
deckName
);
dest
.
writeString
(
deckType
);
dest
.
writeString
(
deckRank
);
dest
.
writeString
(
deckRank
);
dest
.
writeString
(
deckLike
);
dest
.
writeString
(
deckLike
);
dest
.
writeLong
(
deckUploadDate
);
dest
.
writeLong
(
deckUploadDate
);
...
@@ -110,6 +113,14 @@ public class MyOnlineDeckDetail implements Parcelable {
...
@@ -110,6 +113,14 @@ public class MyOnlineDeckDetail implements Parcelable {
this
.
deckName
=
deckName
;
this
.
deckName
=
deckName
;
}
}
public
void
setDeckType
(
String
deckType
)
{
this
.
deckType
=
deckType
;
}
public
String
getDeckType
()
{
return
deckType
;
}
public
String
getDeckRank
()
{
public
String
getDeckRank
()
{
return
deckRank
;
return
deckRank
;
}
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushMultiDeck.java
View file @
a2045025
...
@@ -39,11 +39,13 @@ public class PushMultiDeck {
...
@@ -39,11 +39,13 @@ public class PushMultiDeck {
public
static
class
DeckData
{
public
static
class
DeckData
{
private
String
deckId
;
private
String
deckId
;
private
String
deckName
;
private
String
deckName
;
private
String
deckType
;
private
Integer
deckCoverCard1
=
0
;
private
Integer
deckCoverCard1
=
0
;
private
Integer
deckCoverCard2
=
0
;
private
Integer
deckCoverCard2
=
0
;
private
Integer
deckCoverCard3
=
0
;
private
Integer
deckCoverCard3
=
0
;
private
Integer
deckCase
=
0
;
private
Integer
deckCase
=
0
;
private
Integer
deckProtector
=
0
;
private
Integer
deckProtector
=
0
;
private
long
timestamp
=
0
;
private
String
deckYdk
;
private
String
deckYdk
;
public
String
getDeckId
()
{
public
String
getDeckId
()
{
...
@@ -62,6 +64,14 @@ public class PushMultiDeck {
...
@@ -62,6 +64,14 @@ public class PushMultiDeck {
this
.
deckName
=
deckName
;
this
.
deckName
=
deckName
;
}
}
public
String
getDeckType
()
{
return
deckType
;
}
public
void
setDeckType
(
String
deckType
)
{
this
.
deckType
=
deckType
;
}
public
Integer
getDeckCoverCard1
()
{
public
Integer
getDeckCoverCard1
()
{
return
deckCoverCard1
;
return
deckCoverCard1
;
}
}
...
@@ -102,6 +112,14 @@ public class PushMultiDeck {
...
@@ -102,6 +112,14 @@ public class PushMultiDeck {
this
.
deckProtector
=
deckProtector
;
this
.
deckProtector
=
deckProtector
;
}
}
public
long
getDeckUpdateTime
()
{
return
timestamp
;
}
public
void
setDeckUpdateTime
(
long
deckUpdateTime
)
{
this
.
timestamp
=
deckUpdateTime
;
}
public
String
getDeckYdk
()
{
public
String
getDeckYdk
()
{
return
deckYdk
;
return
deckYdk
;
}
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/api_response/PushSingleDeck.java
View file @
a2045025
...
@@ -33,6 +33,7 @@ public class PushSingleDeck {
...
@@ -33,6 +33,7 @@ public class PushSingleDeck {
public
static
class
DeckData
{
public
static
class
DeckData
{
private
String
deckId
;
private
String
deckId
;
private
String
deckName
;
private
String
deckName
;
private
String
deckType
;
private
Integer
deckCoverCard1
=
0
;
private
Integer
deckCoverCard1
=
0
;
private
Integer
deckCoverCard2
=
0
;
private
Integer
deckCoverCard2
=
0
;
private
Integer
deckCoverCard3
=
0
;
private
Integer
deckCoverCard3
=
0
;
...
@@ -57,6 +58,14 @@ public class PushSingleDeck {
...
@@ -57,6 +58,14 @@ public class PushSingleDeck {
this
.
deckName
=
deckName
;
this
.
deckName
=
deckName
;
}
}
public
String
getDeckType
()
{
return
deckType
;
}
public
void
setDeckType
(
String
deckType
)
{
this
.
deckType
=
deckType
;
}
public
Integer
getDeckCoverCard1
(
Integer
firstCode
)
{
public
Integer
getDeckCoverCard1
(
Integer
firstCode
)
{
return
deckCoverCard1
;
return
deckCoverCard1
;
}
}
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/MyDeckItem.java
View file @
a2045025
...
@@ -5,11 +5,12 @@ public class MyDeckItem {
...
@@ -5,11 +5,12 @@ public class MyDeckItem {
private
int
idUploaded
;
private
int
idUploaded
;
private
int
userId
;
private
int
userId
;
private
String
deckName
;
private
String
deckName
;
private
String
deck
Id
;
private
String
deck
Type
;
private
long
updateDate
;
private
String
deckId
;
private
long
updateTimestamp
;
private
long
updateTimestamp
;
...
@@ -43,20 +44,20 @@ public class MyDeckItem {
...
@@ -43,20 +44,20 @@ public class MyDeckItem {
this
.
deckName
=
deckName
;
this
.
deckName
=
deckName
;
}
}
public
String
getDeck
Id
()
{
public
String
getDeck
Type
()
{
return
deck
Id
;
return
deck
Type
;
}
}
public
void
setDeck
Id
(
String
deckId
)
{
public
void
setDeck
Type
(
String
deckType
)
{
this
.
deck
Id
=
deckId
;
this
.
deck
Type
=
deckType
;
}
}
public
long
getUpdateDate
()
{
public
String
getDeckId
()
{
return
updateDate
;
return
deckId
;
}
}
public
void
set
UpdateDate
(
long
updateDate
)
{
public
void
set
DeckId
(
String
deckId
)
{
this
.
updateDate
=
updateDate
;
this
.
deckId
=
deckId
;
}
}
public
long
getUpdateTimestamp
()
{
public
long
getUpdateTimestamp
()
{
...
@@ -98,8 +99,8 @@ public class MyDeckItem {
...
@@ -98,8 +99,8 @@ public class MyDeckItem {
"idUploaded="
+
idUploaded
+
"idUploaded="
+
idUploaded
+
", userId="
+
userId
+
", userId="
+
userId
+
", deckName='"
+
deckName
+
'\''
+
", deckName='"
+
deckName
+
'\''
+
", deckType='"
+
deckType
+
'\''
+
", deckId='"
+
deckId
+
'\''
+
", deckId='"
+
deckId
+
'\''
+
", updateDate='"
+
updateDate
+
'\''
+
", updateTimestamp="
+
updateTimestamp
+
", updateTimestamp="
+
updateTimestamp
+
", deckPath='"
+
deckPath
+
'\''
+
", deckPath='"
+
deckPath
+
'\''
+
", deckCoverCard1="
+
deckCoverCard1
+
", deckCoverCard1="
+
deckCoverCard1
+
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/SyncMutliDeckResult.java
View file @
a2045025
...
@@ -5,7 +5,6 @@ import java.util.List;
...
@@ -5,7 +5,6 @@ import java.util.List;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.MyOnlineDeckDetail
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.MyOnlineDeckDetail
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.PushMultiResponse
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.PushMultiResponse
;
import
cn.garymb.ygomobile.ui.cards.deck_square.api_response.PushSingleDeckResponse
;
public
class
SyncMutliDeckResult
{
public
class
SyncMutliDeckResult
{
boolean
flag
=
false
;
boolean
flag
=
false
;
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/bo/UserDeckIds.java
deleted
100644 → 0
View file @
fdc96632
package
cn.garymb.ygomobile.ui.cards.deck_square.bo
;
import
java.util.List
;
public
class
UserDeckIds
{
public
List
<
String
>
deckId
;
}
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