diff --git a/common/character_cache.gd b/common/character_cache.gd index 0818e22..c7f9803 100644 --- a/common/character_cache.gd +++ b/common/character_cache.gd @@ -34,6 +34,11 @@ static func folder() -> String: return Settings.config_dir().path_join(FOLDER_NAME) +## Deletes every cached picture. They are downloaded again when next asked for. +func clear() -> void: + _files.clear() + + ## Fetches the names of the characters and calls [param on_done] with them as an ## [code]Array[String][/code]. Cached pictures of characters no longer on the server are ## deleted. diff --git a/common/cover_cache.gd b/common/cover_cache.gd index 5d2f3bc..7da0e30 100644 --- a/common/cover_cache.gd +++ b/common/cover_cache.gd @@ -38,6 +38,11 @@ static func folder() -> String: return Settings.config_dir().path_join(FOLDER_NAME) +## Deletes every cached cover. They are downloaded again when next asked for. +func clear() -> void: + _files.clear() + + ## Deletes the covers of soundtracks that are not in [param covers] (UUID -> cover ## time), and those whose soundtrack no longer has a cover. func keep_only(covers: Dictionary) -> void: diff --git a/common/file_cache.gd b/common/file_cache.gd index ea77fcc..291e9a5 100644 --- a/common/file_cache.gd +++ b/common/file_cache.gd @@ -103,6 +103,29 @@ func keep_only(kept: Dictionary) -> void: save_index() +## Deletes every file in the folder, the index too, e.g. to free the space they take. +func clear() -> void: + _index = {} + if !DirAccess.dir_exists_absolute(folder()): + return + for file_name: String in DirAccess.get_files_at(folder()): + DirAccess.remove_absolute(folder().path_join(file_name)) + + +## How many bytes the files in [param dir] take, leaving out the paths in [param skip] +## and any subfolders. 0 when the folder doesn't exist. +static func folder_size(dir: String, skip: PackedStringArray = []) -> int: + if !DirAccess.dir_exists_absolute(dir): + return 0 + var total: int = 0 + for file_name: String in DirAccess.get_files_at(dir): + var path: String = dir.path_join(file_name) + var file: FileAccess = FileAccess.open(path, FileAccess.READ) + if file != null && !skip.has(path): + total += file.get_length() + return total + + func save_index() -> void: DirAccess.make_dir_recursive_absolute(folder()) var file: FileAccess = FileAccess.open(folder().path_join(INDEX_FILE_NAME), diff --git a/data/playlist.gd b/data/playlist.gd index 1f05775..3a024b6 100644 --- a/data/playlist.gd +++ b/data/playlist.gd @@ -175,6 +175,15 @@ func store_song(song_object: SongObject, mp3: PackedByteArray) -> void: ## Deletes the files of the songs downloaded so far, except those in [param keep]. +## The downloaded song files the playlist uses, which must be kept while it does. +func song_files_in_use() -> PackedStringArray: + var files: PackedStringArray = [] + for song_object: SongObject in song_object_array: + if !song_object.song_path.is_empty(): + files.append(song_object.song_path) + return files + + func clear_song_files(keep: PackedStringArray = []) -> void: if !DirAccess.dir_exists_absolute(songs_folder()): return diff --git a/main/main_window.gd b/main/main_window.gd index 9591934..16be0eb 100644 --- a/main/main_window.gd +++ b/main/main_window.gd @@ -39,6 +39,7 @@ func _ready() -> void: top_bar.settings_pressed.connect(settings_popup.open) settings_popup.server_changed.connect(quiz.on_server_changed) settings_popup.characters_changed.connect(quiz.character_select_popup.load_characters) + settings_popup.clear_cache_requested.connect(clear_cache) settings_popup.visibility_changed.connect(_on_settings_popup_visibility_changed) sync_popup.sync_started.connect(_on_sync_started) @@ -63,6 +64,14 @@ func _ready() -> void: show_about_if_new_version() +## Deletes the cached character pictures and covers. The characters are loaded again at +## once, so the character select has its pictures; covers come when they are shown. +func clear_cache() -> void: + quiz.character_select_popup.character_cache.clear() + statistics_view.covers.clear() + quiz.character_select_popup.load_characters() + + # The quiz finds a soundtrack's cover by the cover times in the soundtrack list func _remember_cover_times(soundtracks: Array[Soundtrack]) -> void: var times: Dictionary = {} diff --git a/popups/SettingsPopup.tscn b/popups/SettingsPopup.tscn index cac3827..11acd6f 100644 --- a/popups/SettingsPopup.tscn +++ b/popups/SettingsPopup.tscn @@ -253,6 +253,27 @@ layout_mode = 2 focus_mode = 0 text = "Open folder" +[node name="ClearCacheRow" type="HBoxContainer" parent="SettingsPanel/VBoxContainer"] +layout_mode = 2 + +[node name="Title" type="Label" parent="SettingsPanel/VBoxContainer/ClearCacheRow"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_type_variation = &"SettingsRowLabel" +text = "Downloaded pictures and songs" + +[node name="CacheSizeLabel" type="Label" parent="SettingsPanel/VBoxContainer/ClearCacheRow"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="ClearCacheButton" type="Button" parent="SettingsPanel/VBoxContainer/ClearCacheRow"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Deletes the downloaded character pictures, covers and songs. +They are downloaded again when needed. Songs in the current quiz are kept." +focus_mode = 0 +text = "Clear cache" + [node name="FolderDialog" type="FileDialog" parent="."] unique_name_in_owner = true title = "Choose a music folder" diff --git a/popups/settings_popup.gd b/popups/settings_popup.gd index 9acd09e..4bfe961 100644 --- a/popups/settings_popup.gd +++ b/popups/settings_popup.gd @@ -18,6 +18,8 @@ signal server_changed ## Emitted when a folder of characters is picked or Use server is pressed for them. signal characters_changed +## Emitted when Clear cache is pressed, for the caches to delete their files. +signal clear_cache_requested ## Space between the rows and the panel's edges. const PADDING: Vector2 = Vector2(20, 12) @@ -46,6 +48,8 @@ const PADDING: Vector2 = Vector2(20, 12) @onready var characters_error_label: Label = %CharactersErrorLabel @onready var character_folder_dialog: FileDialog = %CharacterFolderDialog @onready var open_config_folder_button: Button = %OpenConfigFolderButton +@onready var cache_size_label: Label = %CacheSizeLabel +@onready var clear_cache_button: Button = %ClearCacheButton ## Shows a folder in the system's file manager. The tests replace it, so no file manager ## opens while they run. @@ -77,6 +81,7 @@ func _ready() -> void: use_server_characters_button.pressed.connect(use_server_characters) open_config_folder_button.pressed.connect(open_config_folder) open_config_folder_button.tooltip_text = Settings.config_dir() + clear_cache_button.pressed.connect(clear_cache) play_order_button.item_selected.connect(_on_play_order_selected) lower_cache_button.pressed.connect(lower_cache) increase_cache_button.pressed.connect(increase_cache) @@ -136,6 +141,40 @@ func open_config_folder() -> void: show_folder.call(dir) +## Deletes the downloaded character pictures, covers and songs, except the songs the +## quiz uses, and shows how much space that freed. +func clear_cache() -> void: + var freed: int = cache_size() + clear_cache_requested.emit() + Playlist.clear_song_files(Playlist.song_files_in_use()) + cache_size_label.text = "Cleared " + size_text(freed) + clear_cache_button.disabled = true + + +## Shows how much space the downloaded files take. +func show_cache_size() -> void: + var size: int = cache_size() + cache_size_label.text = size_text(size) + clear_cache_button.disabled = size == 0 + + +## How many bytes the downloaded character pictures, covers and songs take, leaving out +## the songs the quiz uses, which clearing keeps. +static func cache_size() -> int: + return FileCache.folder_size(CharacterCache.folder()) \ + + FileCache.folder_size(CoverCache.folder()) \ + + FileCache.folder_size(Playlist.songs_folder(), Playlist.song_files_in_use()) + + +## [param bytes] for people, e.g. "350 KB" or "14.2 MB". +static func size_text(bytes: int) -> String: + if bytes == 0: + return "Nothing" + if bytes < 1 << 20: + return "%d KB" % ceili(bytes / 1024.0) + return "%.1f MB" % (bytes / float(1 << 20)) + + ## Reads the characters from the folder at [param path] instead of the server. A folder ## without pictures is not used, and the popup says so. func use_character_folder(path: String) -> void: @@ -189,6 +228,7 @@ func _use_server(new_server: int) -> void: func _on_visibility_changed() -> void: if visible: _update_fullscreen_button() + show_cache_size() random_mode_button.select(Settings.random_mode) add_to_database_button.set_pressed_no_signal(Settings.add_to_stats) else: diff --git a/tests/data/layout_baseline.json b/tests/data/layout_baseline.json index bd6fbca..f1fb546 100644 --- a/tests/data/layout_baseline.json +++ b/tests/data/layout_baseline.json @@ -2163,25 +2163,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 347.0, + 330.0, 231.0, 31.0 ], @@ -2190,7 +2190,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 347.0, + 330.0, 331.0, 31.0 ], @@ -2199,7 +2199,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 720.0, - 347.0, + 330.0, 48.0, 23.0 ], @@ -2208,7 +2208,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -2217,7 +2217,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -2226,7 +2226,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -2235,7 +2235,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -2244,7 +2244,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 347.0, + 330.0, 199.0, 31.0 ], @@ -2253,7 +2253,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -2262,7 +2262,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -2271,7 +2271,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 96.0, 31.0 ], @@ -2280,16 +2280,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 330.0, + 381.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 720.0, + 330.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 330.0, + 259.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 324.0, 31.0 ], @@ -2298,7 +2334,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 117.0, 31.0 ], @@ -2307,7 +2343,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 203.0, 31.0 ], @@ -2316,7 +2352,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -2325,7 +2361,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -2334,7 +2370,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -2343,7 +2379,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -2352,7 +2388,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 108.0, 31.0 ], @@ -2361,7 +2397,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -2370,7 +2406,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 347.0, + 330.0, 127.0, 31.0 ], @@ -2379,7 +2415,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 97.0, 35.0 ], @@ -2388,7 +2424,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -2397,7 +2433,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -2406,7 +2442,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -2415,7 +2451,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 347.0, + 330.0, 310.0, 31.0 ], @@ -2424,7 +2460,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 31.0 ], @@ -2433,7 +2469,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 126.0, 31.0 ], @@ -2442,7 +2478,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 347.0, + 330.0, 196.0, 31.0 ], @@ -2451,7 +2487,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -2460,7 +2496,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 40.0, 20.0 ], @@ -2469,7 +2505,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 62.0, 31.0 ], @@ -2478,7 +2514,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 347.0, + 330.0, 249.0, 31.0 ], @@ -2487,7 +2523,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 20.0 ], @@ -2496,7 +2532,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 65.0, 31.0 ], @@ -6845,25 +6881,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 666.0, + 649.0, 480.0, 31.0 ], @@ -6872,7 +6908,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 596.0, + 579.0, 480.0, 31.0 ], @@ -6881,7 +6917,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 1084.0, - 600.0, + 583.0, 48.0, 23.0 ], @@ -6890,7 +6926,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 596.0, + 579.0, 360.0, 31.0 ], @@ -6899,7 +6935,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 1170.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -6908,7 +6944,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 1136.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -6917,7 +6953,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -6926,7 +6962,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 456.0, + 439.0, 480.0, 31.0 ], @@ -6935,7 +6971,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 820.0, - 460.0, + 443.0, 282.0, 23.0 ], @@ -6944,7 +6980,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 1106.0, - 456.0, + 439.0, 94.0, 31.0 ], @@ -6953,7 +6989,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 456.0, + 439.0, 96.0, 31.0 ], @@ -6962,16 +6998,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 456.0, + 439.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 719.0, + 480.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 1030.0, + 723.0, + 53.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 1087.0, + 719.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 719.0, + 306.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 701.0, + 684.0, 480.0, 31.0 ], @@ -6980,7 +7052,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 1083.0, - 701.0, + 684.0, 117.0, 31.0 ], @@ -6989,7 +7061,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 701.0, + 684.0, 359.0, 31.0 ], @@ -6998,7 +7070,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -7007,7 +7079,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 421.0, + 404.0, 480.0, 31.0 ], @@ -7016,7 +7088,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 1106.0, - 421.0, + 404.0, 94.0, 31.0 ], @@ -7025,7 +7097,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 832.0, - 425.0, + 408.0, 270.0, 23.0 ], @@ -7034,7 +7106,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 421.0, + 404.0, 108.0, 31.0 ], @@ -7043,7 +7115,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 421.0, + 404.0, 106.0, 31.0 ], @@ -7052,7 +7124,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 526.0, + 509.0, 480.0, 31.0 ], @@ -7061,7 +7133,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, 35.0 ], @@ -7070,7 +7142,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -7079,7 +7151,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -7088,7 +7160,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -7097,7 +7169,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 631.0, + 614.0, 480.0, 31.0 ], @@ -7106,7 +7178,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 1020.0, - 631.0, + 614.0, 180.0, 31.0 ], @@ -7115,7 +7187,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 631.0, + 614.0, 296.0, 31.0 ], @@ -7124,7 +7196,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 561.0, + 544.0, 480.0, 31.0 ], @@ -7133,7 +7205,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 386.0, + 369.0, 480.0, 31.0 ], @@ -7142,7 +7214,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 786.0, - 386.0, + 369.0, 414.0, 31.0 ], @@ -7151,7 +7223,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 386.0, + 369.0, 62.0, 31.0 ], @@ -7160,7 +7232,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 491.0, + 474.0, 480.0, 31.0 ], @@ -7169,7 +7241,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 1020.0, - 491.0, + 474.0, 180.0, 31.0 ], @@ -7178,7 +7250,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 491.0, + 474.0, 296.0, 31.0 ], @@ -14317,25 +14389,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 347.0, + 330.0, 231.0, 31.0 ], @@ -14344,7 +14416,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 347.0, + 330.0, 331.0, 31.0 ], @@ -14353,7 +14425,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 720.0, - 347.0, + 330.0, 48.0, 23.0 ], @@ -14362,7 +14434,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -14371,7 +14443,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -14380,7 +14452,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -14389,7 +14461,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -14398,7 +14470,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 347.0, + 330.0, 199.0, 31.0 ], @@ -14407,7 +14479,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -14416,7 +14488,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -14425,7 +14497,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 96.0, 31.0 ], @@ -14434,16 +14506,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 330.0, + 381.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 720.0, + 330.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 330.0, + 259.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 324.0, 31.0 ], @@ -14452,7 +14560,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 117.0, 31.0 ], @@ -14461,7 +14569,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 203.0, 31.0 ], @@ -14470,7 +14578,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -14479,7 +14587,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -14488,7 +14596,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -14497,7 +14605,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -14506,7 +14614,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 108.0, 31.0 ], @@ -14515,7 +14623,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -14524,7 +14632,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 347.0, + 330.0, 127.0, 31.0 ], @@ -14533,7 +14641,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 97.0, 35.0 ], @@ -14542,7 +14650,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -14551,7 +14659,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -14560,7 +14668,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -14569,7 +14677,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 347.0, + 330.0, 310.0, 31.0 ], @@ -14578,7 +14686,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 31.0 ], @@ -14587,7 +14695,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 126.0, 31.0 ], @@ -14596,7 +14704,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 347.0, + 330.0, 196.0, 31.0 ], @@ -14605,7 +14713,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -14614,7 +14722,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 40.0, 20.0 ], @@ -14623,7 +14731,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 62.0, 31.0 ], @@ -14632,7 +14740,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 347.0, + 330.0, 249.0, 31.0 ], @@ -14641,7 +14749,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 20.0 ], @@ -14650,7 +14758,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 65.0, 31.0 ], @@ -18837,25 +18945,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 347.0, + 330.0, 231.0, 31.0 ], @@ -18864,7 +18972,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 347.0, + 330.0, 331.0, 31.0 ], @@ -18873,7 +18981,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 720.0, - 347.0, + 330.0, 48.0, 23.0 ], @@ -18882,7 +18990,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -18891,7 +18999,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -18900,7 +19008,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -18909,7 +19017,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -18918,7 +19026,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 347.0, + 330.0, 199.0, 31.0 ], @@ -18927,7 +19035,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -18936,7 +19044,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -18945,7 +19053,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 96.0, 31.0 ], @@ -18954,16 +19062,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 330.0, + 381.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 720.0, + 330.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 330.0, + 259.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 324.0, 31.0 ], @@ -18972,7 +19116,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 117.0, 31.0 ], @@ -18981,7 +19125,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 203.0, 31.0 ], @@ -18990,7 +19134,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -18999,7 +19143,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -19008,7 +19152,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -19017,7 +19161,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -19026,7 +19170,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 108.0, 31.0 ], @@ -19035,7 +19179,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -19044,7 +19188,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 347.0, + 330.0, 127.0, 31.0 ], @@ -19053,7 +19197,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 97.0, 35.0 ], @@ -19062,7 +19206,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -19071,7 +19215,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -19080,7 +19224,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -19089,7 +19233,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 347.0, + 330.0, 310.0, 31.0 ], @@ -19098,7 +19242,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 31.0 ], @@ -19107,7 +19251,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 126.0, 31.0 ], @@ -19116,7 +19260,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 347.0, + 330.0, 196.0, 31.0 ], @@ -19125,7 +19269,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -19134,7 +19278,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 40.0, 20.0 ], @@ -19143,7 +19287,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 62.0, 31.0 ], @@ -19152,7 +19296,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 347.0, + 330.0, 249.0, 31.0 ], @@ -19161,7 +19305,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 20.0 ], @@ -19170,7 +19314,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 65.0, 31.0 ], @@ -22552,18 +22696,425 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": true }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { + "rect": [ + 720.0, + 649.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { + "rect": [ + 720.0, + 579.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { + "rect": [ + 1084.0, + 583.0, + 48.0, + 23.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { + "rect": [ + 720.0, + 579.0, + 360.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { + "rect": [ + 1170.0, + 579.0, + 30.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { + "rect": [ + 1136.0, + 579.0, + 30.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 26.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { + "rect": [ + 720.0, + 439.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { + "rect": [ + 820.0, + 443.0, + 282.0, + 23.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { + "rect": [ + 1106.0, + 439.0, + 94.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { + "rect": [ + 720.0, + 439.0, + 96.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { + "rect": [ + 720.0, + 439.0, + 106.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 719.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 1030.0, + 723.0, + 53.0, + 23.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 1087.0, + 719.0, + 113.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 719.0, + 306.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { + "rect": [ + 720.0, + 684.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { + "rect": [ + 1083.0, + 684.0, + 117.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { + "rect": [ + 720.0, + 684.0, + 359.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 26.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { + "rect": [ + 720.0, + 404.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { + "rect": [ + 1106.0, + 404.0, + 94.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { + "rect": [ + 832.0, + 408.0, + 270.0, + 23.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { + "rect": [ + 720.0, + 404.0, + 108.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { + "rect": [ + 720.0, + 404.0, + 106.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { + "rect": [ + 720.0, + 509.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/Label": { + "rect": [ + 720.0, + 330.0, + 480.0, + 35.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { + "rect": [ + 720.0, + 330.0, + 314.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { + "rect": [ + 720.0, + 330.0, + 123.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { + "rect": [ + 720.0, + 330.0, + 187.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { + "rect": [ + 720.0, + 614.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { + "rect": [ + 1020.0, + 614.0, + 180.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { + "rect": [ + 720.0, + 614.0, + 296.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { + "rect": [ + 720.0, + 544.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { + "rect": [ + 720.0, + 369.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { + "rect": [ + 786.0, + 369.0, + 414.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { + "rect": [ + 720.0, + 369.0, + 62.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { + "rect": [ + 720.0, + 474.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { + "rect": [ + 1020.0, + 474.0, + 180.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { + "rect": [ + 720.0, + 474.0, + 296.0, + 31.0 + ], + "visible": true + } + }, + "popup_SettingsWindow_offline": { + "SettingsPopup": { + "rect": [ + 700.0, + 405.0, + 1920.0, + 1080.0 + ], + "visible": true + }, + "SettingsPopup/CharacterFolderDialog": { + "rect": [ + 0.0, + 0.0, + 800.0, + 500.0 + ], + "visible": false + }, + "SettingsPopup/FolderDialog": { + "rect": [ + 0.0, + 0.0, + 800.0, + 500.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel": { + "rect": [ + 700.0, + 300.0, + 520.0, + 479.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer": { + "rect": [ + 720.0, + 312.0, + 480.0, + 455.0 ], "visible": true }, @@ -22624,7 +23175,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 312.0, 1.0, 26.0 ], @@ -22675,6 +23226,42 @@ ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 736.0, + 480.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 1030.0, + 740.0, + 53.0, + 23.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 1087.0, + 736.0, + 113.0, + 31.0 + ], + "visible": true + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 736.0, + 306.0, + 31.0 + ], + "visible": true + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, @@ -22705,7 +23292,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 312.0, 1.0, 26.0 ], @@ -22714,7 +23301,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 421.0, + 386.0, 480.0, 31.0 ], @@ -22722,8 +23309,8 @@ }, "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ - 1106.0, - 421.0, + 996.0, + 386.0, 94.0, 31.0 ], @@ -22732,8 +23319,8 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 832.0, - 425.0, - 270.0, + 390.0, + 160.0, 23.0 ], "visible": true @@ -22741,7 +23328,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 421.0, + 386.0, 108.0, 31.0 ], @@ -22749,12 +23336,12 @@ }, "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ - 720.0, - 421.0, + 1094.0, + 386.0, 106.0, 31.0 ], - "visible": false + "visible": true }, "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ @@ -22768,7 +23355,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 312.0, 480.0, 35.0 ], @@ -22777,29 +23364,29 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, - 314.0, + 421.0, + 480.0, 31.0 ], - "visible": false + "visible": true }, "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ - 720.0, - 347.0, + 1077.0, + 421.0, 123.0, 31.0 ], - "visible": false + "visible": true }, "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, - 187.0, + 421.0, + 353.0, 31.0 ], - "visible": false + "visible": true }, "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ @@ -22840,7 +23427,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 386.0, + 351.0, 480.0, 31.0 ], @@ -22849,7 +23436,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 786.0, - 386.0, + 351.0, 414.0, 31.0 ], @@ -22858,7 +23445,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 386.0, + 351.0, 62.0, 31.0 ], @@ -22892,377 +23479,6 @@ "visible": true } }, - "popup_SettingsWindow_offline": { - "SettingsPopup": { - "rect": [ - 700.0, - 405.0, - 1920.0, - 1080.0 - ], - "visible": true - }, - "SettingsPopup/CharacterFolderDialog": { - "rect": [ - 0.0, - 0.0, - 800.0, - 500.0 - ], - "visible": false - }, - "SettingsPopup/FolderDialog": { - "rect": [ - 0.0, - 0.0, - 800.0, - 500.0 - ], - "visible": false - }, - "SettingsPopup/SettingsPanel": { - "rect": [ - 700.0, - 318.0, - 520.0, - 444.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer": { - "rect": [ - 720.0, - 330.0, - 480.0, - 420.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { - "rect": [ - 720.0, - 684.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { - "rect": [ - 720.0, - 614.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { - "rect": [ - 1084.0, - 618.0, - 48.0, - 23.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { - "rect": [ - 720.0, - 614.0, - 360.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { - "rect": [ - 1170.0, - 614.0, - 30.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { - "rect": [ - 1136.0, - 614.0, - 30.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { - "rect": [ - 720.0, - 330.0, - 1.0, - 26.0 - ], - "visible": false - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { - "rect": [ - 720.0, - 474.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { - "rect": [ - 820.0, - 478.0, - 282.0, - 23.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { - "rect": [ - 1106.0, - 474.0, - 94.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { - "rect": [ - 720.0, - 474.0, - 96.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { - "rect": [ - 720.0, - 474.0, - 106.0, - 31.0 - ], - "visible": false - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { - "rect": [ - 720.0, - 719.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { - "rect": [ - 1083.0, - 719.0, - 117.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { - "rect": [ - 720.0, - 719.0, - 359.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { - "rect": [ - 720.0, - 330.0, - 1.0, - 26.0 - ], - "visible": false - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { - "rect": [ - 720.0, - 404.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { - "rect": [ - 996.0, - 404.0, - 94.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { - "rect": [ - 832.0, - 408.0, - 160.0, - 23.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { - "rect": [ - 720.0, - 404.0, - 108.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { - "rect": [ - 1094.0, - 404.0, - 106.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { - "rect": [ - 720.0, - 544.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/Label": { - "rect": [ - 720.0, - 330.0, - 480.0, - 35.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { - "rect": [ - 720.0, - 439.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { - "rect": [ - 1077.0, - 439.0, - 123.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { - "rect": [ - 720.0, - 439.0, - 353.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { - "rect": [ - 720.0, - 649.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { - "rect": [ - 1020.0, - 649.0, - 180.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { - "rect": [ - 720.0, - 649.0, - 296.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { - "rect": [ - 720.0, - 579.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { - "rect": [ - 720.0, - 369.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { - "rect": [ - 786.0, - 369.0, - 414.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { - "rect": [ - 720.0, - 369.0, - 62.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { - "rect": [ - 720.0, - 509.0, - 480.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { - "rect": [ - 1020.0, - 509.0, - 180.0, - 31.0 - ], - "visible": true - }, - "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { - "rect": [ - 720.0, - 509.0, - 296.0, - 31.0 - ], - "visible": true - } - }, "popup_ShortcutsWindow": { "ShortcutsPopup": { "rect": [ @@ -28989,25 +29205,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 347.0, + 330.0, 231.0, 31.0 ], @@ -29016,7 +29232,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 347.0, + 330.0, 331.0, 31.0 ], @@ -29025,7 +29241,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 720.0, - 347.0, + 330.0, 48.0, 23.0 ], @@ -29034,7 +29250,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -29043,7 +29259,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -29052,7 +29268,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 720.0, - 347.0, + 330.0, 30.0, 31.0 ], @@ -29061,7 +29277,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -29070,7 +29286,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 347.0, + 330.0, 199.0, 31.0 ], @@ -29079,7 +29295,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -29088,7 +29304,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -29097,7 +29313,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 96.0, 31.0 ], @@ -29106,16 +29322,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 330.0, + 381.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 720.0, + 330.0, + 1.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 720.0, + 330.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 330.0, + 259.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 324.0, 31.0 ], @@ -29124,7 +29376,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 117.0, 31.0 ], @@ -29133,7 +29385,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 203.0, 31.0 ], @@ -29142,7 +29394,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -29151,7 +29403,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 347.0, + 330.0, 211.0, 31.0 ], @@ -29160,7 +29412,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 720.0, - 347.0, + 330.0, 94.0, 31.0 ], @@ -29169,7 +29421,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 23.0 ], @@ -29178,7 +29430,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 108.0, 31.0 ], @@ -29187,7 +29439,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -29196,7 +29448,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 347.0, + 330.0, 127.0, 31.0 ], @@ -29205,7 +29457,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 97.0, 35.0 ], @@ -29214,7 +29466,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -29223,7 +29475,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -29232,7 +29484,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -29241,7 +29493,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 347.0, + 330.0, 310.0, 31.0 ], @@ -29250,7 +29502,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 31.0 ], @@ -29259,7 +29511,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 126.0, 31.0 ], @@ -29268,7 +29520,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 347.0, + 330.0, 196.0, 31.0 ], @@ -29277,7 +29529,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 347.0, + 330.0, 106.0, 31.0 ], @@ -29286,7 +29538,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 720.0, - 347.0, + 330.0, 40.0, 20.0 ], @@ -29295,7 +29547,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 62.0, 31.0 ], @@ -29304,7 +29556,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 347.0, + 330.0, 249.0, 31.0 ], @@ -29313,7 +29565,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 720.0, - 347.0, + 330.0, 180.0, 20.0 ], @@ -29322,7 +29574,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 65.0, 31.0 ], @@ -45147,25 +45399,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 666.0, + 649.0, 480.0, 31.0 ], @@ -45174,7 +45426,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 596.0, + 579.0, 480.0, 31.0 ], @@ -45183,7 +45435,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 1084.0, - 600.0, + 583.0, 48.0, 23.0 ], @@ -45192,7 +45444,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 596.0, + 579.0, 360.0, 31.0 ], @@ -45201,7 +45453,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 1170.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -45210,7 +45462,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 1136.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -45219,7 +45471,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -45228,7 +45480,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 456.0, + 439.0, 480.0, 31.0 ], @@ -45237,7 +45489,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 820.0, - 460.0, + 443.0, 282.0, 23.0 ], @@ -45246,7 +45498,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 1106.0, - 456.0, + 439.0, 94.0, 31.0 ], @@ -45255,7 +45507,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 456.0, + 439.0, 96.0, 31.0 ], @@ -45264,16 +45516,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 456.0, + 439.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 719.0, + 480.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 1030.0, + 723.0, + 53.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 1087.0, + 719.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 719.0, + 306.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 701.0, + 684.0, 480.0, 31.0 ], @@ -45282,7 +45570,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 1083.0, - 701.0, + 684.0, 117.0, 31.0 ], @@ -45291,7 +45579,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 701.0, + 684.0, 359.0, 31.0 ], @@ -45300,7 +45588,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -45309,7 +45597,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 421.0, + 404.0, 480.0, 31.0 ], @@ -45318,7 +45606,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 1106.0, - 421.0, + 404.0, 94.0, 31.0 ], @@ -45327,7 +45615,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 832.0, - 425.0, + 408.0, 270.0, 23.0 ], @@ -45336,7 +45624,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 421.0, + 404.0, 108.0, 31.0 ], @@ -45345,7 +45633,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 421.0, + 404.0, 106.0, 31.0 ], @@ -45354,7 +45642,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 526.0, + 509.0, 480.0, 31.0 ], @@ -45363,7 +45651,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, 35.0 ], @@ -45372,7 +45660,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -45381,7 +45669,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -45390,7 +45678,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -45399,7 +45687,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 631.0, + 614.0, 480.0, 31.0 ], @@ -45408,7 +45696,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 1020.0, - 631.0, + 614.0, 180.0, 31.0 ], @@ -45417,7 +45705,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 631.0, + 614.0, 296.0, 31.0 ], @@ -45426,7 +45714,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 561.0, + 544.0, 480.0, 31.0 ], @@ -45435,7 +45723,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 386.0, + 369.0, 480.0, 31.0 ], @@ -45444,7 +45732,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 786.0, - 386.0, + 369.0, 414.0, 31.0 ], @@ -45453,7 +45741,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 386.0, + 369.0, 62.0, 31.0 ], @@ -45462,7 +45750,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 491.0, + 474.0, 480.0, 31.0 ], @@ -45471,7 +45759,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 1020.0, - 491.0, + 474.0, 180.0, 31.0 ], @@ -45480,7 +45768,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 491.0, + 474.0, 296.0, 31.0 ], @@ -50265,25 +50553,25 @@ "SettingsPopup/SettingsPanel": { "rect": [ 700.0, - 335.0, + 318.0, 520.0, - 409.0 + 444.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, - 385.0 + 420.0 ], "visible": false }, "SettingsPopup/SettingsPanel/VBoxContainer/AddToDatabaseCheckButton": { "rect": [ 720.0, - 666.0, + 649.0, 480.0, 31.0 ], @@ -50292,7 +50580,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow": { "rect": [ 720.0, - 596.0, + 579.0, 480.0, 31.0 ], @@ -50301,7 +50589,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheLabel": { "rect": [ 1084.0, - 600.0, + 583.0, 48.0, 23.0 ], @@ -50310,7 +50598,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/CacheTitleLabel": { "rect": [ 720.0, - 596.0, + 579.0, 360.0, 31.0 ], @@ -50319,7 +50607,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/IncreaseCacheButton": { "rect": [ 1170.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -50328,7 +50616,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CacheRow/LowerCacheButton": { "rect": [ 1136.0, - 596.0, + 579.0, 30.0, 31.0 ], @@ -50337,7 +50625,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -50346,7 +50634,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow": { "rect": [ 720.0, - 456.0, + 439.0, 480.0, 31.0 ], @@ -50355,7 +50643,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/CharactersLabel": { "rect": [ 820.0, - 460.0, + 443.0, 282.0, 23.0 ], @@ -50364,7 +50652,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/ChooseCharactersButton": { "rect": [ 1106.0, - 456.0, + 439.0, 94.0, 31.0 ], @@ -50373,7 +50661,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/Title": { "rect": [ 720.0, - 456.0, + 439.0, 96.0, 31.0 ], @@ -50382,16 +50670,52 @@ "SettingsPopup/SettingsPanel/VBoxContainer/CharactersRow/UseServerCharactersButton": { "rect": [ 720.0, - 456.0, + 439.0, 106.0, 31.0 ], "visible": false }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow": { + "rect": [ + 720.0, + 719.0, + 480.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/CacheSizeLabel": { + "rect": [ + 1030.0, + 723.0, + 53.0, + 23.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/ClearCacheButton": { + "rect": [ + 1087.0, + 719.0, + 113.0, + 31.0 + ], + "visible": false + }, + "SettingsPopup/SettingsPanel/VBoxContainer/ClearCacheRow/Title": { + "rect": [ + 720.0, + 719.0, + 306.0, + 31.0 + ], + "visible": false + }, "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow": { "rect": [ 720.0, - 701.0, + 684.0, 480.0, 31.0 ], @@ -50400,7 +50724,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/OpenConfigFolderButton": { "rect": [ 1083.0, - 701.0, + 684.0, 117.0, 31.0 ], @@ -50409,7 +50733,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ConfigFolderRow/Title": { "rect": [ 720.0, - 701.0, + 684.0, 359.0, 31.0 ], @@ -50418,7 +50742,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderErrorLabel": { "rect": [ 720.0, - 347.0, + 330.0, 1.0, 26.0 ], @@ -50427,7 +50751,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow": { "rect": [ 720.0, - 421.0, + 404.0, 480.0, 31.0 ], @@ -50436,7 +50760,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/ChooseFolderButton": { "rect": [ 1106.0, - 421.0, + 404.0, 94.0, 31.0 ], @@ -50445,7 +50769,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/FolderLabel": { "rect": [ 832.0, - 425.0, + 408.0, 270.0, 23.0 ], @@ -50454,7 +50778,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/Title": { "rect": [ 720.0, - 421.0, + 404.0, 108.0, 31.0 ], @@ -50463,7 +50787,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FolderRow/UseServerButton": { "rect": [ 720.0, - 421.0, + 404.0, 106.0, 31.0 ], @@ -50472,7 +50796,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/FullscreenButton": { "rect": [ 720.0, - 526.0, + 509.0, 480.0, 31.0 ], @@ -50481,7 +50805,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/Label": { "rect": [ 720.0, - 347.0, + 330.0, 480.0, 35.0 ], @@ -50490,7 +50814,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow": { "rect": [ 720.0, - 347.0, + 330.0, 314.0, 31.0 ], @@ -50499,7 +50823,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/PlayOrderButton": { "rect": [ 720.0, - 347.0, + 330.0, 123.0, 31.0 ], @@ -50508,7 +50832,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/PlayOrderRow/Title": { "rect": [ 720.0, - 347.0, + 330.0, 187.0, 31.0 ], @@ -50517,7 +50841,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow": { "rect": [ 720.0, - 631.0, + 614.0, 480.0, 31.0 ], @@ -50526,7 +50850,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/RandomModeButton": { "rect": [ 1020.0, - 631.0, + 614.0, 180.0, 31.0 ], @@ -50535,7 +50859,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/RandomModeRow/Title": { "rect": [ 720.0, - 631.0, + 614.0, 296.0, 31.0 ], @@ -50544,7 +50868,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ReduceAnimationsButton": { "rect": [ 720.0, - 561.0, + 544.0, 480.0, 31.0 ], @@ -50553,7 +50877,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow": { "rect": [ 720.0, - 386.0, + 369.0, 480.0, 31.0 ], @@ -50562,7 +50886,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/SelectServerButton": { "rect": [ 786.0, - 386.0, + 369.0, 414.0, 31.0 ], @@ -50571,7 +50895,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ServerRow/Title": { "rect": [ 720.0, - 386.0, + 369.0, 62.0, 31.0 ], @@ -50580,7 +50904,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow": { "rect": [ 720.0, - 491.0, + 474.0, 480.0, 31.0 ], @@ -50589,7 +50913,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/ThemeButton": { "rect": [ 1020.0, - 491.0, + 474.0, 180.0, 31.0 ], @@ -50598,7 +50922,7 @@ "SettingsPopup/SettingsPanel/VBoxContainer/ThemeRow/Title": { "rect": [ 720.0, - 491.0, + 474.0, 296.0, 31.0 ], diff --git a/tests/integration/test_clear_cache.gd b/tests/integration/test_clear_cache.gd new file mode 100644 index 0000000..2dbcd70 --- /dev/null +++ b/tests/integration/test_clear_cache.gd @@ -0,0 +1,100 @@ +extends MainWindowTestSuite +## Clear cache in the settings: deletes the downloaded character pictures, covers and +## songs, but not the songs the quiz uses, the settings or the saved quiz. + +var _popup: SettingsPopup + + +func before_test() -> void: + # The cache is kept next to the settings, which the tests keep in a folder of their own + OS.set_environment(Settings.CONFIG_DIR_ENV, create_temp_dir("clear_cache_%d" % randi())) + await super() + _popup = _window.get_node("SettingsPopup") + + +func _write(path: String, size: int) -> void: + DirAccess.make_dir_recursive_absolute(path.get_base_dir()) + var file: FileAccess = FileAccess.open(path, FileAccess.WRITE) + var bytes: PackedByteArray = PackedByteArray() + bytes.resize(size) + file.store_buffer(bytes) + file.close() + + +func _files_in(dir: String) -> PackedStringArray: + return DirAccess.get_files_at(dir) if DirAccess.dir_exists_absolute(dir) \ + else PackedStringArray() + + +func _fill_cache() -> String: + _write(CharacterCache.folder().path_join("Crono.png"), 3000) + _write(CoverCache.folder().path_join("st-1"), 2000) + var old_song: String = Playlist.songs_folder().path_join("old.mp3") + _write(old_song, 5000) + return old_song + + +func test_shows_how_much_the_cache_takes() -> void: + _fill_cache() + + _popup.open() + + assert_str(_popup.cache_size_label.text).is_equal( + SettingsPopup.size_text(SettingsPopup.cache_size())) + assert_int(SettingsPopup.cache_size()).is_greater_equal(10000) + assert_bool(_popup.clear_cache_button.disabled).is_false() + + +func test_clear_cache_deletes_pictures_covers_and_old_songs() -> void: + var old_song: String = _fill_cache() + var playing: PackedStringArray = Playlist.song_files_in_use() + assert_array(playing).is_not_empty() + var lists_before: int = _server.count("/character/list") + _popup.open() + + _popup.clear_cache() + + assert_array(_files_in(CharacterCache.folder())).is_empty() + assert_array(_files_in(CoverCache.folder())).is_empty() + assert_bool(FileAccess.file_exists(old_song)).is_false() + # The quiz's songs stay, so they can still be played + for path: String in playing: + assert_bool(FileAccess.file_exists(path)).is_true() + assert_str(_popup.cache_size_label.text).starts_with("Cleared ") + assert_bool(_popup.clear_cache_button.disabled).is_true() + # The characters are loaded again at once + assert_int(_server.count("/character/list")).is_greater(lists_before) + + +func test_clear_cache_keeps_the_settings_and_the_saved_quiz() -> void: + Settings.save_settings() + _quiz.save_soon() + await _runner.simulate_frames(1) + _popup.open() + + _popup.clear_cache() + + assert_bool(FileAccess.file_exists(Settings.saved_settings_path())).is_true() + assert_bool(FileAccess.file_exists(QuizSave.path())).is_true() + + +func test_nothing_to_clear() -> void: + for dir: String in [CharacterCache.folder(), CoverCache.folder()]: + for file_name: String in _files_in(dir): + DirAccess.remove_absolute(dir.path_join(file_name)) + Playlist.clear_song_files(Playlist.song_files_in_use()) + + _popup.open() + + assert_str(_popup.cache_size_label.text).is_equal("Nothing") + assert_bool(_popup.clear_cache_button.disabled).is_true() + + +@warning_ignore("unused_parameter") +func test_size_text(bytes: int, text: String, test_parameters: Array = [ + [0, "Nothing"], + [1, "1 KB"], + [350 * 1024, "350 KB"], + [int(14.2 * 1024 * 1024), "14.2 MB"], +]) -> void: + assert_str(SettingsPopup.size_text(bytes)).is_equal(text) diff --git a/tests/integration/test_clear_cache.gd.uid b/tests/integration/test_clear_cache.gd.uid new file mode 100644 index 0000000..400be32 --- /dev/null +++ b/tests/integration/test_clear_cache.gd.uid @@ -0,0 +1 @@ +uid://da5wh1me3wncq