From 37667ed70f0bd2a55e3b6b0facc04bae84af97c4 Mon Sep 17 00:00:00 2001 From: Jonathan Pietkiewicz Date: Tue, 25 Jan 2022 14:40:40 -0600 Subject: [PATCH] Fix crash when files are locked for writing (Fixes olivierkes#950) Wrap file opens in try-catch Applied fix for project file as well as other files that are opened during save --- manuskript/load_save/version_1.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index e78ecab..7150de3 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -327,7 +327,6 @@ def saveProject(zip=None): # Save to plain text else: - global cache # Project path @@ -378,11 +377,17 @@ def saveProject(zip=None): LOGGER.debug("* Writing file {} ({})".format(path, "not in cache" if path not in cache else "different")) # mode = "w" + ("b" if type(content) == bytes else "") if type(content) == bytes: - with open(filename, "wb") as f: - f.write(content) + try: + with open(filename, "wb") as f: + f.write(content) + except PermissionError as e: + LOGGER.error("Cannot open file " + filename + " for writing: " + e.strerror) else: - with open(filename, "w", encoding='utf8') as f: - f.write(content) + try: + with open(filename, "w", encoding='utf8') as f: + f.write(content) + except PermissionError as e: + LOGGER.error("Cannot open file " + filename + " for writing: " + e.strerror) cache[path] = content @@ -412,8 +417,12 @@ def saveProject(zip=None): pass # Write the project file's content - with open(project, "w", encoding='utf8') as f: - f.write("1") # Format number + try: + with open(project, "w", encoding='utf8') as f: + f.write("1") # Format number + except PermissionError as e: + LOGGER.error("Cannot open file " + project + " for writing: " + e.strerror) + return False return True