You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
if (!saveDir.empty() && saveDir != server.saveDir) {
115
+
auto newSaveDirPath = geode::dirs::getSaveDir() / "gdpses" / saveDir;
116
+
auto oldSaveDirPath = geode::dirs::getSaveDir() / "gdpses" / server.saveDir;
117
+
118
+
if (std::filesystem::exists(newSaveDirPath)) {
119
+
auto gdpsesDir = geode::dirs::getSaveDir() / "gdpses";
120
+
if (!std::filesystem::canonical(newSaveDirPath).string().starts_with(gdpsesDir.string()) || std::filesystem::equivalent(newSaveDirPath, gdpsesDir)) {
121
+
log::warn("{} already exists and is not part of the gdpses subdirectory or is the gdpses directory itself - will not delete.", newSaveDirPath.string());
122
+
returnErr("Save directory already exists and cannot be overwritten.");
auto newSaveDir = m_saveInput->getString().empty() ? fmt::format("{}", m_server.id) : m_saveInput->getString();
162
+
if (newSaveDir != server.saveDir) {
163
+
auto path = geode::dirs::getSaveDir() / "gdpses" / newSaveDir;
164
+
if (std::filesystem::exists(path)) {
165
+
auto gdpsesDir = geode::dirs::getSaveDir() / "gdpses";
166
+
if (!std::filesystem::canonical(path).string().starts_with(gdpsesDir.string()) || std::filesystem::equivalent(path, gdpsesDir)) {
167
+
log::warn("{} already exists and is not part of the gdpses subdirectory or is the gdpses directory itself - will not delete.", path.string());
168
+
MDPopup::create("Hold up!", fmt::format("The save directory you chose already exists! GDPS Switcher will not automatically delete anything outside of `{}` or the directory itself to prevent extra data loss.", gdpsesDir.string()), "OK")->show();
169
+
return;
170
+
}
171
+
geode::createQuickPopup("Hold up!", "The save directory you chose already exists! Do you want to overwrite it?", "No", "Yes", [this, path, newSaveDir, sender](auto, bool yes) {
auto serverPath = geode::dirs::getSaveDir() / "gdpses" / m_server.saveDir;
254
+
auto gdpsesDir = geode::dirs::getSaveDir() / "gdpses";
255
+
if (std::filesystem::exists(serverPath)) {
256
+
if (std::filesystem::canonical(serverPath).string().starts_with(gdpsesDir.string()) && serverPath != gdpsesDir) {
257
+
log::debug("Deleting {}", serverPath);
258
+
std::filesystem::remove_all(serverPath);
259
+
} else {
260
+
log::warn("Attempted to delete a path outside or equal to the gdpses directory: {}", serverPath);
261
+
MDPopup::create("Did not delete save", fmt::format("To prevent unintentional extra data loss, your save was not deleted - only saves within {} will be deleted. If you want to delete this data, do it manually.", gdpsesDir), "OK")->show();
262
+
}
263
+
}
264
+
if (m_listLayer->m_selectedServer == m_server.id) {
0 commit comments