Skip to content

Commit 441a64f

Browse files
committed
Update import/export deck functions
Rename "Base64" to "Ydke", made the export deck functions actually return a string rather than a char pointer, made ImportDeckYdke take a string view
1 parent cd01f7c commit 441a64f

File tree

3 files changed

+19
-22
lines changed

3 files changed

+19
-22
lines changed

gframe/deck_con.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,16 @@ void DeckBuilder::ImportDeck() {
137137
if(deck_string) {
138138
epro::wstringview text{ deck_string };
139139
if(starts_with(text, L"ydke://"))
140-
DeckManager::ImportDeckBase64(current_deck, text.data());
140+
DeckManager::ImportDeckYdke(current_deck, text.data());
141141
else
142142
(void)DeckManager::ImportDeckBase64Omega(current_deck, text);
143143
RefreshLimitationStatus();
144144
}
145145
}
146146
void DeckBuilder::ExportDeckToClipboard(bool plain_text) {
147-
auto deck_string = plain_text ? DeckManager::ExportDeckCardNames(current_deck) : DeckManager::ExportDeckBase64(current_deck);
148-
if(deck_string) {
149-
Utils::OSOperator->copyToClipboard(deck_string);
147+
auto deck_string = plain_text ? DeckManager::ExportDeckCardNames(current_deck) : DeckManager::ExportDeckYdke(current_deck);
148+
if(!deck_string.empty()) {
149+
Utils::OSOperator->copyToClipboard(deck_string.data());
150150
mainGame->stACMessage->setText(gDataManager->GetSysString(1368).data());
151151
} else {
152152
mainGame->stACMessage->setText(gDataManager->GetSysString(1369).data());
@@ -833,10 +833,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
833833
break;
834834
epro::wstringview text{ event.DropEvent.Text };
835835
if(starts_with(text, L"ydke://")) {
836-
gdeckManager->ImportDeckBase64(current_deck, event.DropEvent.Text);
836+
gdeckManager->ImportDeckYdke(current_deck, text);
837837
return true;
838838
}
839-
if(gdeckManager->ImportDeckBase64Omega(current_deck, event.DropEvent.Text))
839+
if(gdeckManager->ImportDeckBase64Omega(current_deck, text))
840840
return true;
841841
std::wstringstream ss(Utils::ToUpperNoAccents(text));
842842
std::wstring to;

gframe/deck_manager.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,7 @@ std::string DeckManager::MakeYdkEntryString(uint32_t code) {
471471
return epro::format("# {}\n{}\n", BufferIO::EncodeUTF8(gDataManager->GetName(code)), code);
472472
return epro::to_string(code) + "\n";
473473
}
474-
const wchar_t* DeckManager::ExportDeckBase64(const Deck& deck) {
475-
static std::wstring res;
474+
std::wstring DeckManager::ExportDeckYdke(const Deck& deck) {
476475
auto decktobuf = [](const auto& src) {
477476
static cardlist_type cards;
478477
cards.resize(src.size());
@@ -481,16 +480,14 @@ const wchar_t* DeckManager::ExportDeckBase64(const Deck& deck) {
481480
}
482481
return base64_encode((uint8_t*)cards.data(), cards.size() * sizeof(cardlist_type::value_type));
483482
};
484-
res = epro::format(L"ydke://{}!{}!{}!", decktobuf(deck.main), decktobuf(deck.extra), decktobuf(deck.side));
485-
return res.data();
483+
return epro::format(L"ydke://{}!{}!{}!", decktobuf(deck.main), decktobuf(deck.extra), decktobuf(deck.side));
486484
}
487-
const wchar_t* DeckManager::ExportDeckCardNames(Deck deck) {
488-
static std::wstring res;
489-
res.clear();
485+
std::wstring DeckManager::ExportDeckCardNames(Deck deck) {
486+
std::wstring res;
490487
std::sort(deck.main.begin(), deck.main.end(), DataManager::deck_sort_lv);
491488
std::sort(deck.extra.begin(), deck.extra.end(), DataManager::deck_sort_lv);
492489
std::sort(deck.side.begin(), deck.side.end(), DataManager::deck_sort_lv);
493-
auto serialize = [](const auto& list) {
490+
auto serialize = [&](const auto& list) {
494491
uint32_t prev = 0;
495492
uint32_t count = 0;
496493
for(const auto& card : list) {
@@ -531,14 +528,14 @@ const wchar_t* DeckManager::ExportDeckCardNames(Deck deck) {
531528
res.append(L"Side Deck:\n");
532529
serialize(deck.side);
533530
}
534-
return res.data();
531+
return res;
535532
}
536533
static cardlist_type BufferToCardlist(const std::vector<uint8_t>& input) {
537534
cardlist_type vect(input.size() / sizeof(uint32_t));
538535
memcpy(vect.data(), input.data(), vect.size() * sizeof(uint32_t));
539536
return vect;
540537
}
541-
void DeckManager::ImportDeckBase64(Deck& deck, const wchar_t* buffer) {
538+
void DeckManager::ImportDeckYdke(Deck& deck, epro::wstringview buffer) {
542539
buffer += L"ydke://"sv.size();
543540
size_t delimiters[3];
544541
int delim = 0;
@@ -549,9 +546,9 @@ void DeckManager::ImportDeckBase64(Deck& deck, const wchar_t* buffer) {
549546
}
550547
if(delim != 3)
551548
return;
552-
const auto mainlist = BufferToCardlist(base64_decode(buffer, delimiters[0]));
553-
const auto extralist = BufferToCardlist(base64_decode(buffer + delimiters[0] + 1, delimiters[1] - delimiters[0]));
554-
const auto sidelist = BufferToCardlist(base64_decode(buffer + delimiters[1] + 1, delimiters[2] - delimiters[1]));
549+
const auto mainlist = BufferToCardlist(base64_decode(buffer.substr(0, delimiters[0])));
550+
const auto extralist = BufferToCardlist(base64_decode(buffer.substr(delimiters[0] + 1, delimiters[1] - delimiters[0])));
551+
const auto sidelist = BufferToCardlist(base64_decode(buffer.substr(delimiters[1] + 1, delimiters[2] - delimiters[1])));
555552
LoadDeck(deck, mainlist, sidelist, &extralist);
556553
}
557554
template<size_t N>

gframe/deck_manager.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ class DeckManager {
7070
static bool SaveDeck(epro::path_stringview name, const Deck& deck);
7171
static bool SaveDeck(epro::path_stringview name, const cardlist_type& mainlist, const cardlist_type& extralist, const cardlist_type& sidelist);
7272
static std::string MakeYdkEntryString(uint32_t code);
73-
static const wchar_t* ExportDeckBase64(const Deck& deck);
74-
static const wchar_t* ExportDeckCardNames(Deck deck);
75-
static void ImportDeckBase64(Deck& deck, const wchar_t* buffer);
73+
static std::wstring ExportDeckYdke(const Deck& deck);
74+
static std::wstring ExportDeckCardNames(Deck deck);
75+
static void ImportDeckYdke(Deck& deck, epro::wstringview buffer);
7676
static bool ImportDeckBase64Omega(Deck& deck, epro::wstringview buffer);
7777
static bool DeleteDeck(Deck& deck, epro::path_stringview name);
7878
static bool RenameDeck(epro::path_stringview oldname, epro::path_stringview newname);

0 commit comments

Comments
 (0)