diff --git a/src/cli.rs b/src/cli.rs index 4e795ed..bd47093 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -881,9 +881,7 @@ pub fn run(sub: Subcommand, no_manifest_update: bool, try_manifest_update: bool) } // Restore - // - // TODO.2023-07-12 detect if there are differences between backed up - // and actual saves and skip the question if there is none + // TODO: Detect if saves are unchanged and skip the question? 'restore: { let Some(game_name) = game_name.as_ref() else { break 'restore; @@ -933,12 +931,10 @@ pub fn run(sub: Subcommand, no_manifest_update: bool, try_manifest_update: bool) } // Launch game - // - // TODO.2023-07-12 legendary returns immediately, handle this! + // TODO: Legendary returns immediately. Can we handle that? let result = Command::new(&commands[0]).args(&commands[1..]).status(); match result { Ok(status) => { - // TODO.2023-07-14 handle return status which indicate an error condition, e.g. != 0 log::debug!("WRAP::execute: Game command executed, returning status: {:#?}", status); } Err(err) => { diff --git a/src/gui/app.rs b/src/gui/app.rs index af4e790..5c81d94 100644 --- a/src/gui/app.rs +++ b/src/gui/app.rs @@ -988,6 +988,7 @@ impl App { return (name, false); }; + // TODO: Add an option to validate all backups at once. let valid = layout.validate(backup_id); (name, valid) }, @@ -1502,6 +1503,7 @@ impl Application for App { Command::none() } Message::EditedRedirect(action, field) => { + // TODO: Automatically refresh redirected paths in the game list. match action { EditAction::Add => { self.text_histories.redirects.push(Default::default()); diff --git a/src/scan/backup.rs b/src/scan/backup.rs index 649ea6f..e2f8cc2 100644 --- a/src/scan/backup.rs +++ b/src/scan/backup.rs @@ -26,6 +26,7 @@ impl BackupError { #[derive(Clone, Debug, Default)] pub struct BackupInfo { + // TODO: Use `StrictPath` as key instead of whole `ScannedFile`? pub failed_files: HashMap, pub failed_registry: HashMap, } diff --git a/src/scan/layout.rs b/src/scan/layout.rs index 9b41e37..7612459 100644 --- a/src/scan/layout.rs +++ b/src/scan/layout.rs @@ -1841,6 +1841,7 @@ impl GameLayout { } pub fn remove_irrelevant_backup_files(&self, backup: &str, relevant_files: &[StrictPath]) { + // TODO: Remove empty directories as well. log::trace!( "[{}] looking for irrelevant backup files in {}", self.mapping.name, @@ -1889,8 +1890,7 @@ impl GameLayout { } } - /// Checks the latest backup (full + diff) only. - /// Returns whether backup is valid. + /// Returns whether the backup is valid. pub fn validate(&self, backup_id: BackupId) -> bool { if let Some((backup, diff)) = self.find_by_id(&backup_id) { match backup.format() { diff --git a/src/scan/preview.rs b/src/scan/preview.rs index 405218b..31081e0 100644 --- a/src/scan/preview.rs +++ b/src/scan/preview.rs @@ -203,6 +203,7 @@ impl ScanInfo { } pub fn overall_change(&self) -> ScanChange { + // TODO: Disabled games can still be marked as new/updated. Should we suppress that? if self.is_total_removal() { ScanChange::Removed } else if self.is_brand_new() { diff --git a/src/scan/registry.rs b/src/scan/registry.rs index 3802117..d9b0716 100644 --- a/src/scan/registry.rs +++ b/src/scan/registry.rs @@ -194,6 +194,7 @@ pub fn try_read_registry_key(hive_name: &str, key: &str) -> Option { fn read_registry_key(key: &winreg::RegKey) -> Entries { let mut entries = Entries::default(); for (name, value) in key.enum_values().filter_map(|x| x.ok()) { + // TODO: The default value has an empty name. How should we represent it? let entry = Entry::from(value); if entry.is_set() { entries.0.insert(name, entry);