From 1acc7579818ca5f743e09dfd27a6daba360dbae6 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 5 Oct 2026 20:05:48 +0200 Subject: [PATCH] Fill the song cache when the settings menu is closed Raising the cache size used to have no effect until the next song was played. Downloads now start when the settings window closes, so clicking the number up and down while it is open does not start any downloads. --- MainWindow.gd | 7 ++++ tests/integration/test_main_window.gd | 56 +++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/MainWindow.gd b/MainWindow.gd index 4ab78dd..7c28c98 100644 --- a/MainWindow.gd +++ b/MainWindow.gd @@ -174,6 +174,7 @@ func _ready() -> void: music_player_container.connect("play_next_song", play_next_song) music_player_container.connect("update_song_list", update_song_list) settings_window.connect("server_changed", server_updated) + settings_window.visibility_changed.connect(_on_settings_window_visibility_changed) sync_window.connect("sync_started", _on_sync_started) sync_window.connect("sync_finished", _on_sync_finished) @@ -277,6 +278,12 @@ func play_next_song() -> void: #"/music/rand" #"/music/addQue" #"/music/info" +# The cache size can be changed in the settings. Waiting until the settings are closed +# avoids starting downloads while the user is still clicking the number up and down. +func _on_settings_window_visibility_changed() -> void: + if !settings_window.visible && !Playlist.is_song_downloading && Playlist.should_preload_more_songs(): + fetch_song() + func fetch_song() -> void: print("fetch_song") Playlist.is_song_downloading = true diff --git a/tests/integration/test_main_window.gd b/tests/integration/test_main_window.gd index c2094f9..49c7f52 100644 --- a/tests/integration/test_main_window.gd +++ b/tests/integration/test_main_window.gd @@ -158,3 +158,59 @@ func test_cache_keeps_filling_after_a_failed_download() -> void: assert_int(Playlist.get_preloaded_songs()).is_equal(3) assert_bool(Playlist.is_song_downloading).is_false() + + +func _open_settings() -> void: + _press("SettingsButton") + + +func _close_settings() -> void: + (_window.get_node("SettingsWindow") as Control).visible = false + + +func _press_settings_button(unique_name: String) -> void: + (_window.get_node("SettingsWindow").get_node("%" + unique_name) as Button).pressed.emit() + + +func test_raising_cache_size_does_not_download_while_settings_are_open() -> void: + var downloads_before: int = _server.count("/music/rand") + _open_settings() + + _press_settings_button("IncreaseCacheButton") + _press_settings_button("IncreaseCacheButton") + + assert_int(Playlist.number_of_tracks_to_preload).is_equal(3) + assert_int(_server.count("/music/rand")).is_equal(downloads_before) + + +func test_closing_settings_fills_cache_to_new_size() -> void: + _open_settings() + _press_settings_button("IncreaseCacheButton") + _press_settings_button("IncreaseCacheButton") + + _close_settings() + + assert_int(Playlist.get_preloaded_songs()).is_equal(3) + + +func test_changing_cache_size_back_and_forth_downloads_only_what_is_needed() -> void: + var downloads_before: int = _server.count("/music/rand") + _open_settings() + for i: int in 5: + _press_settings_button("IncreaseCacheButton") + _press_settings_button("LowerCacheButton") + _press_settings_button("IncreaseCacheButton") + + _close_settings() + + assert_int(_server.count("/music/rand") - downloads_before).is_equal(1) + assert_int(Playlist.get_preloaded_songs()).is_equal(2) + + +func test_closing_settings_with_full_cache_downloads_nothing() -> void: + var downloads_before: int = _server.count("/music/rand") + _open_settings() + + _close_settings() + + assert_int(_server.count("/music/rand")).is_equal(downloads_before)