Merge pull request #34 from Excello-Recherche-Education/debug-multiple

Purge user folder for new version to avoid data conflict
This commit is contained in:
Adrien Ufferte
2025-07-03 12:08:03 +02:00
committed by GitHub
3 changed files with 41 additions and 1 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="Kalulu"
config/version="2.1.2"
config/version="2.1.3"
run/main_scene="res://sources/menus/splash_screen/splash_screen.tscn"
config/features=PackedStringArray("4.4", "Forward Plus")
boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 1)
+1
View File
@@ -25,6 +25,7 @@ const SUPPORTED_LOCALES: Array[String] = [
@export var teacher: String
@export var device_id: int
@export var language_versions: Dictionary = {} # locale: datetime
@export var game_version: String = "0.0.1"
@export var master_volume: float = 0.0:
set(volume):
@@ -35,8 +35,47 @@ func _ready() -> void:
if get_device_settings().teacher:
_load_teacher_settings()
purge_user_folders_if_needed()
user_database_synchronizer = UserDatabaseSynchronizer.new()
func purge_user_folders_if_needed() -> void:
var current_version: String = ProjectSettings.get_setting("application/config/version")
var previous_version: String = _device_settings.game_version
if previous_version == "" or compare_versions(previous_version, "2.1.3") < 0:
Logger.trace("UserDataManager: Version difference detected, need to purge user folder to avoid data incompatibility")
var dir: DirAccess = DirAccess.open("user://")
if dir:
dir.list_dir_begin()
var file_name: String = dir.get_next()
while file_name != "":
if dir.current_is_dir() and file_name != "." and file_name != "..":
var full_path: String = "user://".path_join(file_name)
_delete_dir(full_path)
var err: Error = DirAccess.remove_absolute(full_path)
if err != OK:
Logger.error("UserDataManager: Failed to delete folder %s. Error %s" % [full_path, error_string(err)])
file_name = dir.get_next()
dir.list_dir_end()
Logger.trace("UserDataManager: Purge completed")
_device_settings.game_version = current_version
ResourceSaver.save(_device_settings, "user://device_settings.tres")
func compare_versions(version_a: String, version_b: String) -> int:
var va: PackedStringArray = version_a.split(".")
var vb: PackedStringArray = version_b.split(".")
for index: int in 3:
var ai: int = int(va[index]) if index < va.size() else 0
var bi: int = int(vb[index]) if index < vb.size() else 0
if ai < bi:
return -1
elif ai > bi:
return 1
return 0
func _process(_delta: float) -> void:
if Engine.is_editor_hint():