From 92dc2ed5e938a9a2db9a586933df74732980a358 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Wed, 7 Jun 2023 11:24:24 +0100
Subject: [PATCH] chore: improved image naming

---
 frontends/sdl/src/main.rs | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs
index c5fcbee7..04596c4e 100644
--- a/frontends/sdl/src/main.rs
+++ b/frontends/sdl/src/main.rs
@@ -340,7 +340,7 @@ impl Emulator {
                     Event::KeyDown {
                         keycode: Some(Keycode::I),
                         ..
-                    } => self.save_image("screen.png"),
+                    } => self.save_image(&self.image_name(Some("png"))),
                     Event::KeyDown {
                         keycode: Some(Keycode::T),
                         ..
@@ -626,6 +626,31 @@ impl Emulator {
             thread::sleep(ten_millis);
         }
     }
+
+    fn rom_name(&self) -> &str {
+        Path::new(&self.rom_path)
+            .file_stem()
+            .unwrap()
+            .to_str()
+            .unwrap()
+    }
+
+    fn image_name(&self, ext: Option<&str>) -> String {
+        let ext = ext.unwrap_or("png");
+        self.best_name(self.rom_name(), ext)
+    }
+
+    fn best_name(&self, base: &str, ext: &str) -> String {
+        let mut index = 0_usize;
+        let mut name = format!("{}.{}", base, ext);
+
+        while Path::new(&name).exists() {
+            index += 1;
+            name = format!("{}-{}.{}", base, index, ext);
+        }
+
+        name
+    }
 }
 
 #[derive(Parser, Debug)]
-- 
GitLab