Skip to content

Commit 8ba88ac

Browse files
committed
h
1 parent f5ce7a3 commit 8ba88ac

File tree

9 files changed

+91
-13
lines changed

9 files changed

+91
-13
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ else()
88
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
99
endif()
1010

11-
project(GDPSSwitcher VERSION 1.4.1)
11+
project(GDPSSwitcher VERSION 1.4.2)
1212

1313
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
1414
src/*.cpp

changelog.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
# 1.4.2
2+
### Some minor fixes
3+
- <cy>Fix saving from GDPS Hub and a deletion issue (found by tt_kybersport)</c>
4+
- <cy>Make deleting a server delete the save file</c>
15
# 1.4.1
26
### API Fix
3-
- <cy>Fix API for mods like GDPS Hub</c>
7+
- <cy>Fix API for mods like GDPS Hub (found by tt_kybersport)</c>
48
# 1.4.0
59
### Major changes
610
- <cg>Added regex to urls</c>

mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"mac": "2.2074",
77
"ios": "2.2074"
88
},
9-
"version": "1.4.1",
9+
"version": "1.4.2",
1010
"id": "km7dev.gdps-switcher",
1111
"name": "GDPS Switcher",
1212
"developer": "km7dev",

src/apis/GDPSUtils.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// MUST be defined before including the header.
22
#define GEODE_DEFINE_EVENT_EXPORTS
33
#include <GDPSUtils.hpp>
4+
#include "../ui/ServerListLayer.hpp"
45
#include "../utils/GDPSMain.hpp"
6+
#include <km7dev.server_api/include/ServerAPIEvents.hpp>
57

68
using namespace geode::prelude;
79

@@ -21,6 +23,7 @@ Result<int> GDPSUtils::createServer(std::string name, std::string url, std::stri
2123
server.id = id;
2224
server.saveDir = saveDir.empty() ? fmt::format("{}", id) : saveDir;
2325
GDPSMain::get()->m_servers[id] = server;
26+
GDPSMain::get()->save();
2427
return Ok(id);
2528
}
2629

@@ -59,10 +62,14 @@ Result<bool> GDPSUtils::deleteServer(int id) {
5962
if (it == GDPSMain::get()->m_servers.end()) {
6063
return Err("Server not found");
6164
}
62-
GDPSMain::get()->m_servers.erase(it);
6365
if (GDPSMain::get()->m_currentServer == id) {
64-
GDPSMain::get()->m_currentServer = -1;
66+
ServerListLayer::m_selectedServer = -2;
67+
Mod::get()->setSavedValue("current", -2);
68+
GDPSMain::get()->m_shouldSaveGameData = false;
69+
std::filesystem::remove_all(geode::dirs::getSaveDir() / "gdpses" / it->second.saveDir);
6570
}
71+
GDPSMain::get()->m_servers.erase(it);
72+
GDPSMain::get()->save();
6673
return Ok(true);
6774
}
6875

@@ -98,5 +105,8 @@ Result<bool> GDPSUtils::setServerInfo(int id, std::string name, std::string url,
98105
if (!saveDir.empty()) {
99106
server.saveDir = saveDir;
100107
}
108+
if (GDPSMain::get()->m_currentServer == id) {
109+
ServerAPIEvents::updateServer(GDPSMain::get()->m_serverApiId, server.url);
110+
}
101111
return Ok(true);
102112
}

src/hooks/GManager.cpp

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,41 @@
66
using namespace geode::prelude;
77

88
class $modify(GSGManager, GManager) {
9-
void setup() override {
9+
10+
struct Fields {
11+
static std::vector<GSGManager*> m_managers;
12+
std::string m_originalFileName;
13+
};
14+
15+
void setup() override {
16+
if (getUserObject("GDPS_DONT_CHANGE"_spr)) return GManager::setup();
17+
const auto main = GDPSMain::get();
18+
if (!main->isActive()) return GManager::setup();
19+
if (m_fields->m_originalFileName != "") return GManager::setup();
20+
21+
m_fields->m_originalFileName = m_fileName;
22+
GSGManager::Fields::m_managers.push_back(this);
23+
24+
auto server = main->m_servers[main->m_currentServer];
25+
const auto dir = geode::dirs::getSaveDir() / "gdpses" / server.saveDir;
26+
27+
std::error_code error;
28+
if (!std::filesystem::exists(dir) && !std::filesystem::create_directory(dir, error)) {
29+
main->registerIssue(fmt::format("Failed to setup save file: {}", error.message()));
30+
return log::error("Failed to create directory '{}', data will not save: {}", dir.string(), error.message());
31+
}
32+
33+
m_fileName = fmt::format("gdpses/{}/{}", server.saveDir, m_fileName);
34+
GManager::setup();
35+
}
36+
void save() {
37+
if (GDPSMain::get()->m_shouldSaveGameData) GManager::save();
38+
}
39+
static void updateFileName() {
40+
41+
42+
43+
for (auto manager : Fields::m_managers) {
1044
const auto main = GDPSMain::get();
1145
auto server = main->m_servers[main->m_currentServer];
1246
const auto dir = geode::dirs::getSaveDir() / "gdpses" / server.saveDir;
@@ -16,8 +50,10 @@ class $modify(GSGManager, GManager) {
1650
return log::error("Failed to create directory '{}', data will not save: {}", dir.string(), error.message());
1751
}
1852
if (main->isActive()) {
19-
m_fileName = fmt::format("gdpses/{}/{}", server.saveDir, m_fileName);
53+
manager->m_fileName = fmt::format("gdpses/{}/{}", server.saveDir, manager->m_fields->m_originalFileName);
2054
}
21-
GManager::setup();
2255
}
23-
};
56+
}
57+
};
58+
59+
std::vector<GSGManager*> GSGManager::Fields::m_managers = {};

src/hooks/MusicDownloadManager.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "../utils/GDPSMain.hpp"
2+
3+
#include <Geode/Geode.hpp>
4+
#include <Geode/modify/MusicDownloadManager.hpp>
5+
6+
using namespace geode::prelude;
7+
8+
class $modify(GSMDM, MusicDownloadManager) {
9+
10+
gd::string pathForSFXFolder(int p0) {
11+
gd::string ret = MusicDownloadManager::pathForSFXFolder(p0);
12+
log::info("{}", ret);
13+
return ret;
14+
}
15+
16+
gd::string pathForSongFolder(int p0) {
17+
gd::string ret = MusicDownloadManager::pathForSongFolder(p0);
18+
log::info("{}", ret);
19+
return ret;
20+
}
21+
};

src/ui/ModifyServerPopup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void ModifyServerPopup::onSave(cocos2d::CCObject *sender) {
161161
server.url = m_urlInput->getString();
162162
server.saveDir = m_saveInput->getString().empty() ? fmt::format("{}", m_server.id) : m_saveInput->getString();
163163
if (gdpsMain->m_currentServer == server.id) {
164-
ServerAPIEvents::updateServer(server.id, server.url);
164+
ServerAPIEvents::updateServer(GDPSMain::get()->m_serverApiId, server.url);
165165
}
166166
ServerInfoManager::get()->fetch(server);
167167
}

src/ui/ServerNode.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,16 @@ void ServerNode::onEdit(CCObject *sender) {
246246

247247
void ServerNode::onDelete(CCObject *sender) {
248248
if (m_locked) return;
249-
createQuickPopup("Delete Server", fmt::format("Are you sure you want to delete {}?", m_server.name), "No", "Yes", [this](auto, bool second) {
249+
createQuickPopup("Delete Server", fmt::format("Are you sure you want to delete {}? This will delete your save data for the server.", m_server.name), "No", "Yes", [this](auto, bool second) {
250250
if (second) {
251-
GDPSMain::get()->m_servers.erase(m_server.id);
252-
GDPSMain::get()->save();
251+
auto main = GDPSMain::get();
252+
main->m_shouldSaveGameData = false;
253+
std::filesystem::remove_all(geode::dirs::getSaveDir() / "gdpses" / m_server.saveDir);
254+
log::debug("Deleting {}", geode::dirs::getSaveDir() / "gdpses" / m_server.saveDir);
255+
main->m_servers.erase(m_server.id);
256+
main->save();
257+
m_listLayer->m_selectedServer = -2;
258+
Mod::get()->setSavedValue("current", -2);
253259
m_listLayer->updateList();
254260
}
255261
});

src/utils/GDPSMain.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ class GDPSMain {
2424
std::map<int, GDPSTypes::Server> m_servers;
2525
int m_currentServer = -2;
2626
int m_serverApiId = 0;
27+
bool m_shouldSaveGameData = true;
2728
};

0 commit comments

Comments
 (0)