mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-13 01:29:10 +00:00
Some genius decided to put the entire MainWindow class into main.h and main.cpp, which is not only horrific practice but also completely destroys clangd beyond repair. Please, just don't do this. (this will probably merge conflict to hell and back) Also, fixes a bunch of issues with Ryujinx save data link: - Paths with spaces would cause mklink to fail - Add support for portable directories - Symlink detection was incorrect sometimes(????) - Some other stuff I'm forgetting Furthermore, when selecting "From Eden" and attempting to save in Ryujinx, Ryujinx would destroy the link for... some reason? So to get around this we just copy the Eden data to Ryujinx then treat it like a "From Ryujinx" op Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2929 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "common/common_types.h"
|
|
#include <filesystem>
|
|
#include <vector>
|
|
|
|
namespace Common::FS {
|
|
|
|
constexpr const char IMEN_MAGIC[4] = {0x49, 0x4d, 0x45, 0x4e};
|
|
constexpr const char IMKV_MAGIC[4] = {0x49, 0x4d, 0x4b, 0x56};
|
|
constexpr const u8 IMEN_SIZE = 0x8c;
|
|
|
|
std::filesystem::path GetKvdbPath();
|
|
std::filesystem::path GetKvdbPath(const std::filesystem::path &path);
|
|
std::filesystem::path GetRyuPathFromSavePath(const std::filesystem::path &path);
|
|
std::filesystem::path GetRyuSavePath(const u64 &save_id);
|
|
std::filesystem::path GetRyuSavePath(const std::filesystem::path &path, const u64 &save_id);
|
|
|
|
enum class IMENReadResult {
|
|
Nonexistent, // ryujinx not found
|
|
NoHeader, // file isn't big enough for header
|
|
InvalidMagic, // no IMKV or IMEN header
|
|
Misaligned, // file isn't aligned to expected IMEN boundaries
|
|
NoImens, // no-op, there are no IMENs
|
|
Success, // :)
|
|
};
|
|
|
|
struct IMEN
|
|
{
|
|
u64 title_id;
|
|
u64 save_id;
|
|
};
|
|
|
|
static_assert(sizeof(IMEN) == 0x10, "IMEN has incorrect size.");
|
|
|
|
IMENReadResult ReadKvdb(const std::filesystem::path &path, std::vector<IMEN> &imens);
|
|
|
|
} // namespace Common::FS
|