From 1e02fbf0710d3c4ec976e2a57a276835e04f8e1e Mon Sep 17 00:00:00 2001 From: Dark98 Date: Fri, 30 Jan 2026 09:57:26 +0000 Subject: [PATCH] Config File Saving Updates *Save Config On Exit *Handle New Lines A Bit Better --- .../java/com/dark98/santoku/MainActivity.java | 8 ++++- .../main/java/com/dark98/santoku/Santoku.java | 31 +++++++++++++++++-- .../santoku/components/bed_menu/FileMenu.java | 4 +-- .../dark98/santoku/config/ConfigObject.java | 7 ++++- .../santoku/slic3r/Slic3rConfigWrapper.java | 14 +++++++-- 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/dark98/santoku/MainActivity.java b/app/src/main/java/com/dark98/santoku/MainActivity.java index 857bb1d..d5f5a80 100644 --- a/app/src/main/java/com/dark98/santoku/MainActivity.java +++ b/app/src/main/java/com/dark98/santoku/MainActivity.java @@ -879,6 +879,12 @@ public class MainActivity extends AppCompatActivity { delegate.onPause(); } + @Override + protected void onStop() { + super.onStop(); + Santoku.saveConfig(); + } + @Override protected void onDestroy() { super.onDestroy(); @@ -889,4 +895,4 @@ public class MainActivity extends AppCompatActivity { delegate.onDestroy(); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/dark98/santoku/Santoku.java b/app/src/main/java/com/dark98/santoku/Santoku.java index 7f90a89..1acc11c 100644 --- a/app/src/main/java/com/dark98/santoku/Santoku.java +++ b/app/src/main/java/com/dark98/santoku/Santoku.java @@ -75,13 +75,40 @@ public class Santoku extends Application { } public static void saveConfig() { + if (CONFIG == null) { + return; + } Santoku.CONFIG_UID++; File f = getConfigFile(); + File dir = f.getParentFile(); + if (dir != null && !dir.exists()) { + // Best effort: ensure app files dir exists before saving. + //noinspection ResultOfMethodCallIgnored + dir.mkdirs(); + } + String serialized = CONFIG.serialize(); try { - FileOutputStream fos = new FileOutputStream(f); - fos.write(CONFIG.serialize().getBytes(StandardCharsets.UTF_8)); + File tmp = new File(f.getParentFile(), f.getName() + ".tmp"); + FileOutputStream fos = new FileOutputStream(tmp); + fos.write(serialized.getBytes(StandardCharsets.UTF_8)); + fos.getFD().sync(); fos.close(); + if (f.exists() && !f.delete()) { + Log.w("Config", "Failed to delete old config before rename: " + f.getAbsolutePath()); + } + if (!tmp.renameTo(f)) { + // Fallback to direct write if rename fails. + FileOutputStream direct = new FileOutputStream(f); + direct.write(serialized.getBytes(StandardCharsets.UTF_8)); + direct.getFD().sync(); + direct.close(); + //noinspection ResultOfMethodCallIgnored + tmp.delete(); + } + + // Current config should be regenerated on next slice/export. + //noinspection ResultOfMethodCallIgnored getCurrentConfigFile().delete(); } catch (Exception e) { Log.e("Config", "Failed to save config", e); diff --git a/app/src/main/java/com/dark98/santoku/components/bed_menu/FileMenu.java b/app/src/main/java/com/dark98/santoku/components/bed_menu/FileMenu.java index 71bfd2c..827c104 100644 --- a/app/src/main/java/com/dark98/santoku/components/bed_menu/FileMenu.java +++ b/app/src/main/java/com/dark98/santoku/components/bed_menu/FileMenu.java @@ -235,7 +235,7 @@ public class FileMenu extends ListBedMenu { Activity act = (Activity) fragment.getContext(); Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT); i.setType("application/ini"); - i.putExtra(Intent.EXTRA_TITLE, "SliceBeam_config_bundle.ini"); + i.putExtra(Intent.EXTRA_TITLE, "Santoku_config_bundle.ini"); act.startActivityForResult(i, MainActivity.REQUEST_CODE_EXPORT_PROFILES); } }) @@ -251,7 +251,7 @@ public class FileMenu extends ListBedMenu { Activity act = (Activity) fragment.getContext(); Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT); i.setType("application/3mf"); - i.putExtra(Intent.EXTRA_TITLE, "SliceBeam_project.3mf"); + i.putExtra(Intent.EXTRA_TITLE, "Santoku_project.3mf"); act.startActivityForResult(i, MainActivity.REQUEST_CODE_EXPORT_3MF); } }) diff --git a/app/src/main/java/com/dark98/santoku/config/ConfigObject.java b/app/src/main/java/com/dark98/santoku/config/ConfigObject.java index 38225fa..8bc2736 100644 --- a/app/src/main/java/com/dark98/santoku/config/ConfigObject.java +++ b/app/src/main/java/com/dark98/santoku/config/ConfigObject.java @@ -83,7 +83,12 @@ public class ConfigObject implements ProfileListFragment.ProfileListItem { StringBuilder sb = new StringBuilder(); sb.append("# generated by Slice Beam ").append(BuildConfig.VERSION_NAME).append("\n\n"); for (Map.Entry en : values.entrySet()) { - sb.append(en.getKey()).append(" = ").append(en.getValue().replace("\n", "\\n")).append("\n"); + String value = en.getValue(); + if (value != null) { + value = value.replace("\r\n", "\n").replace("\r", "\n"); + value = value.replace("\n", "\\n"); + } + sb.append(en.getKey()).append(" = ").append(value).append("\n"); } return sb.toString(); } diff --git a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java index d51fb89..806ef03 100644 --- a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java +++ b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java @@ -200,7 +200,12 @@ public class Slic3rConfigWrapper { sb.append("[").append(key).append(":").append(cfg.getTitle()).append("]\n"); for (Map.Entry en : cfg.values.entrySet()) { - sb.append(en.getKey()).append(" = ").append(en.getValue().replace("\n", "\\n")).append("\n"); + String value = en.getValue(); + if (value != null) { + value = value.replace("\r\n", "\n").replace("\r", "\n"); + value = value.replace("\n", "\\n"); + } + sb.append(en.getKey()).append(" = ").append(value).append("\n"); } sb.append("\n"); } @@ -216,7 +221,12 @@ public class Slic3rConfigWrapper { if (presets != null) { sb.append("[presets]\n"); for (Map.Entry en : presets.values.entrySet()) { - sb.append(en.getKey()).append(" = ").append(en.getValue().replace("\n", "\\n")).append("\n"); + String value = en.getValue(); + if (value != null) { + value = value.replace("\r\n", "\n").replace("\r", "\n"); + value = value.replace("\n", "\\n"); + } + sb.append(en.getKey()).append(" = ").append(value).append("\n"); } }