All checks were successful
eden-license / license-header (pull_request) Successful in 23s
Previously, if the user had their NAND in a nonstandard location, profiles.dat would be read from the standard Eden path and thus return effectively garbage data. What this would result in is: - The Qt profile manager would be completely nonfunctional - "Open Save Data Location" would put you into the completely wrong place - Games would read from incorrect locations for their saves To solve this, I made it so that profiles.dat is re-read *after* QtConfig initializes. It's not the perfect solution, but it works. Additionally, this adds an orphaned profiles finder: - walks through the save folders in nand/user/save/000.../ - for each subdirectory, checks to see if profiles.dat contains a corresponding UUID - If not, the profile is "orphaned". It may contain legit save data, so let the user decide how to handle it (famous last words) - Empty profiles are just removed. If they really matter, they're instantly recreated anyways. The orphaned profiles check runs right *after* the decryption keys check, but before the game list ever gets populated Signed-off-by: crueter <crueter@eden-emu.dev>
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#ifndef QT_GAME_UTIL_H
|
|
#define QT_GAME_UTIL_H
|
|
|
|
#include <QObject>
|
|
#include <QStandardPaths>
|
|
#include "common/fs/path_util.h"
|
|
|
|
namespace QtCommon::Game {
|
|
|
|
enum class InstalledEntryType {
|
|
Game,
|
|
Update,
|
|
AddOnContent,
|
|
};
|
|
|
|
enum class GameListRemoveTarget {
|
|
GlShaderCache,
|
|
VkShaderCache,
|
|
AllShaderCache,
|
|
CustomConfiguration,
|
|
CacheStorage,
|
|
};
|
|
|
|
enum class ShortcutTarget {
|
|
Desktop,
|
|
Applications,
|
|
};
|
|
|
|
enum class ShortcutMessages{
|
|
Fullscreen = 0,
|
|
Success = 1,
|
|
Volatile = 2,
|
|
Failed = 3
|
|
};
|
|
|
|
bool CreateShortcutLink(const std::filesystem::path& shortcut_path,
|
|
const std::string& comment,
|
|
const std::filesystem::path& icon_path,
|
|
const std::filesystem::path& command,
|
|
const std::string& arguments,
|
|
const std::string& categories,
|
|
const std::string& keywords,
|
|
const std::string& name);
|
|
|
|
bool MakeShortcutIcoPath(const u64 program_id,
|
|
const std::string_view game_file_name,
|
|
std::filesystem::path& out_icon_path);
|
|
|
|
void OpenEdenFolder(const Common::FS::EdenPath &path);
|
|
void OpenRootDataFolder();
|
|
void OpenNANDFolder();
|
|
void OpenSaveFolder();
|
|
void OpenSDMCFolder();
|
|
void OpenModFolder();
|
|
void OpenLogFolder();
|
|
|
|
void RemoveBaseContent(u64 program_id, InstalledEntryType type);
|
|
void RemoveUpdateContent(u64 program_id, InstalledEntryType type);
|
|
void RemoveAddOnContent(u64 program_id, InstalledEntryType type);
|
|
|
|
void RemoveTransferableShaderCache(u64 program_id, GameListRemoveTarget target);
|
|
void RemoveVulkanDriverPipelineCache(u64 program_id);
|
|
void RemoveAllTransferableShaderCaches(u64 program_id);
|
|
void RemoveCustomConfiguration(u64 program_id, const std::string& game_path);
|
|
void RemoveCacheStorage(u64 program_id);
|
|
|
|
// Metadata //
|
|
void ResetMetadata(bool show_message = true);
|
|
|
|
// Shortcuts //
|
|
void CreateShortcut(const std::string& game_path,
|
|
const u64 program_id,
|
|
const std::string& game_title_,
|
|
const ShortcutTarget& target,
|
|
std::string arguments_,
|
|
const bool needs_title);
|
|
|
|
constexpr std::string GetShortcutPath(ShortcutTarget target);
|
|
void CreateHomeMenuShortcut(ShortcutTarget target);
|
|
|
|
}
|
|
|
|
#endif // QT_GAME_UTIL_H
|