8#include "absl/status/status.h"
9#include "absl/strings/ascii.h"
10#include "absl/strings/match.h"
11#include "absl/strings/str_format.h"
26 absl::AsciiStrToLower(&value);
27 if (absl::StartsWith(value,
"0x")) {
28 value = value.substr(2);
30 value.erase(std::remove_if(value.begin(), value.end(),
31 [](
unsigned char c) { return std::isspace(c); }),
39 : rom_file_manager_(deps.rom_file_manager),
40 session_coordinator_(deps.session_coordinator),
41 toast_manager_(deps.toast_manager),
42 popup_manager_(deps.popup_manager),
43 project_(deps.project) {}
71 if (expected.empty() || actual.empty()) {
74 return expected != actual;
79 return absl::OkStatus();
86 if (expected.empty() || actual.empty() || expected == actual) {
87 return absl::OkStatus();
91 return absl::OkStatus();
97 "ROM write blocked: project expects a different ROM hash",
100 return absl::PermissionDeniedError(
101 "ROM write blocked by project write policy");
113 return absl::CancelledError(
"ROM write confirmation required");
116 return absl::OkStatus();
121 return absl::InvalidArgumentError(
"ROM not loaded");
127 return absl::OkStatus();
138 if (preflight.ok()) {
139 return absl::OkStatus();
142 const auto& first = preflight.errors.front();
145 first.code, first.message.c_str()),
148 return preflight.ToStatus();
208 return absl::FailedPreconditionError(
"No ROM loaded");
211 return absl::FailedPreconditionError(
"No ROM file manager");
217 bool enabled,
const std::string& folder,
int retention_count,
218 bool keep_daily,
int keep_daily_days) {
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
bool HasProjectRegistry() const
bool loaded() const
Check if the manifest has been loaded.
void SetBackupRetentionCount(int count)
absl::Status PruneBackups(const std::string &rom_filename) const
std::vector< BackupEntry > ListBackups(const std::string &rom_filename) const
void SetBackupBeforeSave(bool enabled)
void SetBackupFolder(const std::string &folder)
void SetBackupKeepDailyDays(int days)
void SetBackupKeepDaily(bool enabled)
void UpdateCurrentRomHash(Rom *rom)
Recompute the hash of the current ROM.
std::vector< RomFileManager::BackupEntry > GetRomBackups(Rom *rom) const
void SetPotItemConfirmPending(int unloaded_rooms, int total_rooms)
Set pot-item confirmation pending (called by SaveRom when needed).
bool pending_rom_write_confirm_
int pending_pot_item_total_rooms_
bool pending_pot_item_save_confirm_
bool IsRomHashMismatch() const
Check whether the ROM hash mismatches the project's expected hash.
std::string current_rom_hash_
RomFileManager * rom_file_manager_
PopupManager * popup_manager_
void CancelRomWriteConfirm()
bool suppress_pot_item_save_once_
PotItemSaveDecision ResolvePotItemSaveConfirmation(PotItemSaveDecision decision)
RomLifecycleManager()=default
int pending_pot_item_unloaded_rooms_
bool bypass_rom_write_confirm_once_
absl::Status CheckRomWritePolicy(Rom *rom)
Enforce project write policy; may set pending_rom_write_confirm.
absl::Status CheckOracleRomSafetyPreSave(Rom *rom)
Run Oracle-specific ROM safety preflight before saving.
bool bypass_pot_item_confirm_once_
void Initialize(Dependencies deps)
absl::Status PruneRomBackups(Rom *rom)
ToastManager * toast_manager_
project::YazeProject * project_
void ApplyDefaultBackupPolicy(bool enabled, const std::string &folder, int retention_count, bool keep_daily, int keep_daily_days)
Apply default backup policy from user settings.
SessionCoordinator * session_coordinator_
void Show(const std::string &message, ToastType type=ToastType::kInfo, float ttl_seconds=3.0f)
std::string NormalizeHash(std::string value)
Editors are the view controllers for the application.
std::string ComputeRomHash(const uint8_t *data, size_t size)
OracleRomSafetyPreflightResult RunOracleRomSafetyPreflight(Rom *rom, const OracleRomSafetyPreflightOptions &options)
SessionCoordinator * session_coordinator
RomFileManager * rom_file_manager
project::YazeProject * project
PopupManager * popup_manager
ToastManager * toast_manager
bool project_opened() const
core::HackManifest hack_manifest
bool validate_custom_collision_maps
bool require_custom_collision_write_support
bool require_water_fill_reserved_region
bool validate_water_fill_table