7#include "absl/strings/str_format.h"
15 : toast_manager_(toast_manager) {}
19 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
21 if (filename.empty()) {
22 return absl::InvalidArgumentError(
"No filename provided");
29 return absl::FailedPreconditionError(
"No ROM loaded to save");
40 absl::StrFormat(
"Failed to save ROM: %s", status.message()),
50 return absl::FailedPreconditionError(
"No ROM loaded to save");
52 if (filename.empty()) {
53 return absl::InvalidArgumentError(
54 "No filename provided for save as");
66 absl::StrFormat(
"Failed to save ROM as: %s", status.message()),
70 absl::StrFormat(
"ROM saved as: %s", filename),
77 const std::string& filename) {
79 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
81 if (filename.empty()) {
82 return absl::InvalidArgumentError(
"No filename provided");
85 std::string extension =
86 std::filesystem::path(filename).extension().string();
88 if (extension ==
".yaze" || extension ==
".json") {
89 return absl::UnimplementedError(
90 "Project file loading not yet implemented");
98 return absl::FailedPreconditionError(
"No ROM loaded to backup");
105 settings.
filename = backup_filename;
111 absl::StrFormat(
"Failed to create backup: %s", status.message()),
115 absl::StrFormat(
"Backup created: %s", backup_filename),
123 return absl::FailedPreconditionError(
"No valid ROM to validate");
126 if (rom->
size() < 512 * 1024 || rom->
size() > 8 * 1024 * 1024) {
127 return absl::InvalidArgumentError(
"ROM size is outside expected range");
129 if (rom->
title().empty()) {
130 return absl::InvalidArgumentError(
"ROM title is empty or invalid");
136 return absl::OkStatus();
151 Rom* rom,
const std::string& filename) {
153 return absl::InvalidArgumentError(
"ROM pointer cannot be null");
156 return absl::InvalidArgumentError(
157 absl::StrFormat(
"Invalid ROM file: %s", filename));
164 absl::StrFormat(
"Failed to load ROM: %s", status.message()),
174 return absl::OkStatus();
178 const std::string& original_filename)
const {
179 std::filesystem::path path(original_filename);
180 std::string stem = path.stem().string();
181 std::string extension = path.extension().string();
183 auto now = std::chrono::system_clock::now();
184 auto time_t = std::chrono::system_clock::to_time_t(now);
186 return absl::StrFormat(
"%s_backup_%ld%s", stem, time_t, extension);
190 if (filename.empty()) {
194 if (!std::filesystem::exists(filename)) {
198 auto file_size = std::filesystem::file_size(filename);
199 if (file_size < 1024 * 1024 || file_size > 8 * 1024 * 1024) {
The Rom class is used to load, save, and modify Rom data.
absl::Status LoadFromFile(const std::string &filename, bool z3_load=true)
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.