7#include "absl/strings/str_format.h"
16 : toast_manager_(toast_manager) {}
20 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
22 if (filename.empty()) {
23 return absl::InvalidArgumentError(
"No filename provided");
30 return absl::FailedPreconditionError(
"No ROM loaded to save");
41 absl::StrFormat(
"Failed to save ROM: %s", status.message()),
51 return absl::FailedPreconditionError(
"No ROM loaded to save");
53 if (filename.empty()) {
54 return absl::InvalidArgumentError(
"No filename provided for save as");
66 absl::StrFormat(
"Failed to save ROM as: %s", status.message()),
76 const std::string& filename) {
78 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
80 if (filename.empty()) {
81 return absl::InvalidArgumentError(
"No filename provided");
84 std::string extension = std::filesystem::path(filename).extension().string();
86 if (extension ==
".yaze" || extension ==
".json") {
87 return absl::UnimplementedError(
"Project file loading not yet implemented");
95 return absl::FailedPreconditionError(
"No ROM loaded to backup");
102 settings.
filename = backup_filename;
108 absl::StrFormat(
"Failed to create backup: %s", status.message()),
119 return absl::FailedPreconditionError(
"No valid ROM to validate");
122 if (rom->
size() < 512 * 1024 || rom->
size() > 8 * 1024 * 1024) {
123 return absl::InvalidArgumentError(
"ROM size is outside expected range");
125 if (rom->
title().empty()) {
126 return absl::InvalidArgumentError(
"ROM title is empty or invalid");
132 return absl::OkStatus();
147 const std::string& filename) {
149 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
152 return absl::InvalidArgumentError(
153 absl::StrFormat(
"Invalid ROM file: %s", filename));
160 absl::StrFormat(
"Failed to load ROM: %s", status.message()),
175 return absl::OkStatus();
179 const std::string& original_filename)
const {
180 std::filesystem::path path(original_filename);
181 std::string stem = path.stem().string();
182 std::string extension = path.extension().string();
184 auto now = std::chrono::system_clock::now();
185 auto time_t = std::chrono::system_clock::to_time_t(now);
187 return absl::StrFormat(
"%s_backup_%ld%s", stem, time_t, extension);
191 if (filename.empty()) {
195 if (!std::filesystem::exists(filename)) {
199 auto file_size = std::filesystem::file_size(filename);
202 if (file_size < 512 * 1024 || file_size > 8 * 1024 * 1024) {
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
absl::Status LoadFromFile(const std::string &filename, const LoadOptions &options=LoadOptions::Defaults())
absl::Status SaveToFile(const SaveSettings &settings)
std::string GenerateBackupFilename(const std::string &original_filename) const
absl::Status OpenRomOrProject(Rom *rom, const std::string &filename)
absl::Status ValidateRom(Rom *rom)
RomFileManager(ToastManager *toast_manager)
std::string GetRomFilename(Rom *rom) const
absl::Status CreateBackup(Rom *rom)
absl::Status LoadRom(Rom *rom, const std::string &filename)
absl::Status SaveRom(Rom *rom)
ToastManager * toast_manager_
absl::Status LoadRomFromFile(Rom *rom, const std::string &filename)
bool IsValidRomFile(const std::string &filename) const
absl::Status SaveRomAs(Rom *rom, const std::string &filename)
bool IsRomLoaded(Rom *rom) const
void Show(const std::string &message, ToastType type=ToastType::kInfo, float ttl_seconds=3.0f)
Editors are the view controllers for the application.