diff --git a/tools/linuxfs/overlay/usr/local/bin/droiddeck-game-env b/tools/linuxfs/overlay/usr/local/bin/droiddeck-game-env index 8271b6551..505b75e02 100755 --- a/tools/linuxfs/overlay/usr/local/bin/droiddeck-game-env +++ b/tools/linuxfs/overlay/usr/local/bin/droiddeck-game-env @@ -156,8 +156,8 @@ UBISOFT_SETTINGS = "drive_c/users/steamuser/AppData/Local/Ubisoft Game Launcher/ def overlay_off(text): lines = text.splitlines() try: - start = lines.index("overlay:") - except ValueError: + start = next(i for i, line in enumerate(lines) if re.fullmatch(r"overlay:\s*(#.*)?", line)) + except StopIteration: if lines and not lines[-1].strip(): lines.pop() return "\n".join(lines + ["overlay:", " enabled: false", " warning_enabled: false"]) + "\n" @@ -193,6 +193,8 @@ def ubisoft_overlay_off(env): try: with os.fdopen(handle, "w", encoding="utf-8") as target: target.write(updated) + if settings.exists(): + os.chmod(staged, settings.stat().st_mode & 0o7777) os.replace(staged, settings) except BaseException: os.unlink(staged) diff --git a/tools/tests/test_game_environment.py b/tools/tests/test_game_environment.py index b936556e5..208e4b1dd 100644 --- a/tools/tests/test_game_environment.py +++ b/tools/tests/test_game_environment.py @@ -1239,6 +1239,10 @@ class UbisoftOverlayTest(unittest.TestCase): self.assertEqual(MODULE["overlay_off"]("overlay:\n fps_enabled: true\n\nmisc:\n a: 1\n"), "overlay:\n fps_enabled: true\n enabled: false\n warning_enabled: false\n\nmisc:\n a: 1\n") + def test_an_annotated_overlay_header_is_the_same_section(self): + self.assertEqual(MODULE["overlay_off"]("overlay: # in-game\n enabled: true\n"), + "overlay: # in-game\n enabled: false\n warning_enabled: false\n") + def test_only_prefixes_with_ubisoft_connect_are_touched(self): with tempfile.TemporaryDirectory() as tmp: prefix = Path(tmp) / "447040/pfx" @@ -1251,8 +1255,11 @@ class UbisoftOverlayTest(unittest.TestCase): MODULE["ubisoft_overlay_off"](env) self.assertEqual(settings.read_text(), "overlay:\n enabled: false\n warning_enabled: false\n") settings.write_text(self.SETTINGS) + settings.chmod(0o644) MODULE["ubisoft_overlay_off"](env) self.assertEqual(settings.read_text(), self.SETTINGS.replace("enabled: true", "enabled: false")) + self.assertEqual(settings.stat().st_mode & 0o777, 0o644) + self.assertEqual(sorted(p.name for p in settings.parent.iterdir()), ["settings.yaml"]) if __name__ == "__main__":