From b9cbccab5e9df286f00ea96b0109d7ea387af4c7 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 12 Aug 2025 12:35:33 +0200 Subject: [PATCH] Add error management in important functions --- folder_unzipper.gd | 7 +++++++ folder_zipper.gd | 12 +++++++---- sources/language_tool/gp_list.gd | 7 +++++++ .../image_and_sound_gp_description.gd | 7 +++++++ sources/language_tool/tracing_builder.gd | 14 +++++++++++++ sources/language_tool/word_list.gd | 11 ++++++++++ sources/look_and_learn/tracing_manager.gd | 7 +++++++ .../language_selection/package_downloader.gd | 3 +++ sources/utils/autoloads/database.gd | 21 +++++++++++++++++++ sources/utils/autoloads/user_data_manager.gd | 7 +++++++ 10 files changed, 92 insertions(+), 4 deletions(-) diff --git a/folder_unzipper.gd b/folder_unzipper.gd index 8b6b8b2f..6ef9cd7e 100644 --- a/folder_unzipper.gd +++ b/folder_unzipper.gd @@ -27,6 +27,13 @@ func extract(zip_path: String, extract_path: String, extract_in_subfolder: bool if not DirAccess.dir_exists_absolute(folder_name): DirAccess.make_dir_recursive_absolute(folder_name) var file: FileAccess = FileAccess.open(file_name, FileAccess.WRITE) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("FolderUnzipper: Extract: Cannot open file %s. Error: %s" % [file_name, error_string(error)]) + return first_folder + if file == null: + Logger.error("FolderUnzipper: Extract: Cannot open file %s. File is null" % file_name) + return first_folder if file != null: file.store_buffer(read_file(sub_path)) file.close() diff --git a/folder_zipper.gd b/folder_zipper.gd index 2fcb337a..02640465 100644 --- a/folder_zipper.gd +++ b/folder_zipper.gd @@ -7,7 +7,7 @@ func write_folder_recursive(abs_path: String, rel_path: String) -> Error: var dir: DirAccess = DirAccess.open(full_path) if not dir: return DirAccess.get_open_error() - + dir.list_dir_begin() var file_name: String = dir.get_next() while file_name != "": @@ -15,7 +15,7 @@ func write_folder_recursive(abs_path: String, rel_path: String) -> Error: if file_name != "." and file_name != "..": var current_rel_path: String = rel_path.path_join(file_name) var current_full_path: String = full_path.path_join(file_name) - + if dir.current_is_dir(): var error: Error = write_folder_recursive(abs_path, current_rel_path) if error != OK: @@ -25,15 +25,19 @@ func write_folder_recursive(abs_path: String, rel_path: String) -> Error: var error: Error = start_file(current_rel_path) if error != OK: return error - + var file: FileAccess = FileAccess.open(current_full_path, FileAccess.READ) + error = DirAccess.get_open_error() + if error != OK: + Logger.error("FolderZipper: Extract: Cannot open file %s. Error: %s" % [file_name, error_string(error)]) + return error if file: write_file(file.get_buffer(file.get_length())) file.close() close_file() else: return FileAccess.get_open_error() - + file_name = dir.get_next() dir.list_dir_end() return OK diff --git a/sources/language_tool/gp_list.gd b/sources/language_tool/gp_list.gd index e8165d70..6ac6d05b 100644 --- a/sources/language_tool/gp_list.gd +++ b/sources/language_tool/gp_list.gd @@ -122,6 +122,13 @@ func _on_list_title_save_pressed() -> void: func _on_list_title_import_path_selected(path: String, match_to_file: bool) -> void: var file: FileAccess = FileAccess.open(path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("GPList: Cannot open file %s. Error: %s" % [path, error_string(error)]) + return + if file == null: + Logger.error("GPList: Cannot open file %s. File is null" % path) + return var line: PackedStringArray = file.get_csv_line() if line.size() < 4 or line[0] != "Grapheme" or line[1] != "Phoneme" or line[2] != "Type" or line[3] != "Exception": error_label.text = "Column names should be Grapheme, Phoneme, Type, Exception" diff --git a/sources/language_tool/image_and_sound_gp_description.gd b/sources/language_tool/image_and_sound_gp_description.gd index 51e62c5d..23d8a4a1 100644 --- a/sources/language_tool/image_and_sound_gp_description.gd +++ b/sources/language_tool/image_and_sound_gp_description.gd @@ -49,6 +49,13 @@ func set_sound_preview(sound_path: String) -> void: sound_preview.hide() else: var file: FileAccess = FileAccess.open(sound_path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("ImageAndSoundGPDescription: Cannot open file %s. Error: %s" % [sound_path, error_string(error)]) + return + if file == null: + Logger.error("ImageAndSoundGPDescription: Cannot open file %s. File is null" % sound_path) + return var sound: AudioStreamMP3 = AudioStreamMP3.new() sound.data = file.get_buffer(file.get_length()) sound_player.stream = sound diff --git a/sources/language_tool/tracing_builder.gd b/sources/language_tool/tracing_builder.gd index bfb7f9e8..3c186609 100644 --- a/sources/language_tool/tracing_builder.gd +++ b/sources/language_tool/tracing_builder.gd @@ -59,6 +59,13 @@ func _load_segments(segment_container: SegmentContainer, path: String) -> void: return var file: FileAccess = FileAccess.open(real_path(path), FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("TracingBuilder: Load segment: Cannot open file %s. Error: %s" % [real_path(path), error_string(error)]) + return + if file == null: + Logger.error("TracingBuilder: Load segment: Cannot open file %s. File is null" % real_path(path)) + return while not file.eof_reached(): var line: PackedStringArray = file.get_csv_line() var points: Array[Vector2] = [] @@ -75,6 +82,13 @@ func _load_segments(segment_container: SegmentContainer, path: String) -> void: func _save_segments(segments: Array[SegmentBuild], path: String) -> void: DirAccess.make_dir_recursive_absolute(Database.BASE_PATH.path_join(Database.language).path_join(Database.TRACING_DATA_FOLDER)) var file: FileAccess = FileAccess.open(real_path(path), FileAccess.WRITE) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("TracingBuilder: Save segment: Cannot open file %s. Error: %s" % [real_path(path), error_string(error)]) + return + if file == null: + Logger.error("TracingBuilder: Save segment: Cannot open file %s. File is null" % real_path(path)) + return for segment: SegmentBuild in segments: var values: PackedStringArray = [] for point: Vector2 in segment.points: diff --git a/sources/language_tool/word_list.gd b/sources/language_tool/word_list.gd index a4d8207a..670e7c20 100644 --- a/sources/language_tool/word_list.gd +++ b/sources/language_tool/word_list.gd @@ -227,7 +227,18 @@ func _on_word_gui_input(event: InputEvent) -> void: func _on_list_title_import_path_selected(path: String, match_to_file: bool) -> void: + if not FileAccess.file_exists(path): + Logger.error("WordList: File not found %s" % path) + error_label.text = "File not found" + return var file: FileAccess = FileAccess.open(path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("WordList: Cannot open file %s. Error: %s" % [path, error_string(error)]) + return + if file == null: + Logger.error("WordList: Cannot open file %s. File is null" % path) + return var line: PackedStringArray = file.get_csv_line() if line.size() < 2 or line[0] != "ORTHO" or line[1] != "GPMATCH": error_label.text = "Column names should be ORTHO, GPMATCH" diff --git a/sources/look_and_learn/tracing_manager.gd b/sources/look_and_learn/tracing_manager.gd index 2b715a97..16cae65f 100644 --- a/sources/look_and_learn/tracing_manager.gd +++ b/sources/look_and_learn/tracing_manager.gd @@ -83,6 +83,13 @@ func _load_tracing(path: String) -> Array: var segments: Array = [] var file: FileAccess = FileAccess.open(_real_path(path), FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("TracingManager: Load tracing: Cannot open file %s. Error: %s" % [_real_path(path), error_string(error)]) + return segments + if file == null: + Logger.error("TracingManager: Load tracing: Cannot open file %s. File is null" % _real_path(path)) + return segments while not file.eof_reached(): var points: Array[Vector2] = [] var line: PackedStringArray = file.get_csv_line() diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index 8d291f91..37f8673e 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -165,6 +165,9 @@ func _copy_data(this: PackageDownloader) -> void: # Extract the archive var subfolder: String = unzipper.extract(language_zip_path, USER_LANGUAGE_RESOURCES_PATH, false) + if subfolder == "": + Logger.error("PackageDownloader: Extraction failed for %s" % language_zip_path) + return # Move the data to the locale folder of the user var error: Error = DirAccess.rename_absolute(USER_LANGUAGE_RESOURCES_PATH.path_join(subfolder), current_language_path) diff --git a/sources/utils/autoloads/database.gd b/sources/utils/autoloads/database.gd index 38fd3820..5d97deb9 100644 --- a/sources/utils/autoloads/database.gd +++ b/sources/utils/autoloads/database.gd @@ -64,6 +64,13 @@ func load_additional_word_list() -> String: var word_list_path: String = get_additional_word_list_path() if FileAccess.file_exists(word_list_path): var file: FileAccess = FileAccess.open(word_list_path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("Database: Load additional word list: Cannot open file %s. Error: %s" % [word_list_path, error_string(error)]) + return "" + if file == null: + Logger.error("Database: Load additional word list: Cannot open file %s. File is null" % word_list_path) + return "" var title_line: PackedStringArray = file.get_csv_line() if (not "ORTHO" in title_line) or (not "PHON" in title_line) or (not "GPMATCH" in title_line): var msg: String = "word list should have columns ORTHO, PHON and GPMATCH" @@ -517,6 +524,13 @@ func get_gp_look_and_learn_sound(gp: Dictionary) -> AudioStream: return load(path) else: var file: FileAccess = FileAccess.open(path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("Database: Get GP look and learn sound: Cannot open file %s. Error: %s" % [path, error_string(error)]) + return null + if file == null: + Logger.error("Database: Get GP look and learn sound: Cannot open file %s. File is null" % path) + return null var sound: AudioStreamMP3 = AudioStreamMP3.new() sound.data = file.get_buffer(file.get_length()) return sound @@ -580,6 +594,13 @@ func load_external_sound(path: String) -> AudioStreamMP3: return null var file: FileAccess = FileAccess.open(path, FileAccess.READ) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("Database: Load external sound: Cannot open file %s. Error: %s" % [path, error_string(error)]) + return null + if file == null: + Logger.error("Database: Load external sound: Cannot open file %s. File is null" % path) + return null var audio_stream: AudioStreamMP3 = AudioStreamMP3.new() audio_stream.data = file.get_buffer(file.get_length()) file.close() diff --git a/sources/utils/autoloads/user_data_manager.gd b/sources/utils/autoloads/user_data_manager.gd index d21bd77c..41788621 100644 --- a/sources/utils/autoloads/user_data_manager.gd +++ b/sources/utils/autoloads/user_data_manager.gd @@ -166,6 +166,13 @@ func safe_load_and_fix_resource(path: String, old_texts: Array[String], new_text Logger.info("UserDataManager: Fix resource:" + path) content = content.replace(old_texts[index], new_texts[index]) var file: FileAccess = FileAccess.open(path, FileAccess.WRITE) + var error: Error = DirAccess.get_open_error() + if error != OK: + Logger.error("UserDataManager: Safe load and fix resource: Cannot open file %s. Error: %s" % [path, error_string(error)]) + return null + if file == null: + Logger.error("UserDataManager: Safe load and fix resource: Cannot open file %s. File is null" % path) + return null file.store_string(content) file.close()