Add Clear cache to the settings
A new row, "Downloaded pictures and songs", shows how much space the cached character pictures, covers and downloaded songs take, with a Clear cache button. Clearing deletes them, but keeps the songs the current quiz uses, the settings, config.ini and the saved quiz. The characters are loaded again at once; covers come back when they are shown. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
06421bb63e
commit
c03c0e4efe
10 files changed
+1216
-679
No files matched your search
@@ -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"
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user