diff --git a/Userland/Applications/SoundPlayer/Player.cpp b/Userland/Applications/SoundPlayer/Player.cpp index d9ffbbb86d..153d7060ac 100644 --- a/Userland/Applications/SoundPlayer/Player.cpp +++ b/Userland/Applications/SoundPlayer/Player.cpp @@ -48,7 +48,7 @@ void Player::play_file_path(String const& path) return; } - if (path.ends_with(".m3u", AK::CaseSensitivity::CaseInsensitive) || path.ends_with(".m3u8", AK::CaseSensitivity::CaseInsensitive)) { + if (is_playlist(path)) { playlist_loaded(path, m_playlist.load(path)); return; } @@ -69,6 +69,12 @@ void Player::play_file_path(String const& path) play(); } +bool Player::is_playlist(String const& path) +{ + return (path.ends_with(".m3u", AK::CaseSensitivity::CaseInsensitive) + || path.ends_with(".m3u8", AK::CaseSensitivity::CaseInsensitive)); +} + void Player::set_play_state(PlayState state) { if (m_play_state != state) { diff --git a/Userland/Applications/SoundPlayer/Player.h b/Userland/Applications/SoundPlayer/Player.h index 1666032384..d215ae6989 100644 --- a/Userland/Applications/SoundPlayer/Player.h +++ b/Userland/Applications/SoundPlayer/Player.h @@ -33,6 +33,7 @@ public: virtual ~Player() { } void play_file_path(String const& path); + bool is_playlist(String const& path); Playlist& playlist() { return m_playlist; } String const& loaded_filename() const { return m_loaded_filename; } diff --git a/Userland/Applications/SoundPlayer/main.cpp b/Userland/Applications/SoundPlayer/main.cpp index 3b0c6b17b1..e7a8a882ba 100644 --- a/Userland/Applications/SoundPlayer/main.cpp +++ b/Userland/Applications/SoundPlayer/main.cpp @@ -43,6 +43,8 @@ ErrorOr serenity_main(Main::Arguments arguments) if (arguments.argc > 1) { StringView path = arguments.strings[1]; player->play_file_path(path); + if (player->is_playlist(path)) + player->set_loop_mode(Player::LoopMode::Playlist); } auto file_menu = TRY(window->try_add_menu("&File")); @@ -61,10 +63,9 @@ ErrorOr serenity_main(Main::Arguments arguments) auto playback_menu = TRY(window->try_add_menu("&Playback")); GUI::ActionGroup loop_actions; loop_actions.set_exclusive(true); - auto loop_none = TRY(GUI::Action::try_create("&No Loop", [&](auto&) { + auto loop_none = GUI::Action::create_checkable("&No Loop", { Mod_Ctrl, Key_N }, [&](auto&) { player->set_loop_mode(Player::LoopMode::None); - })); - loop_none->set_checked(true); + }); loop_actions.add_action(loop_none); TRY(playback_menu->try_add_action(loop_none)); @@ -90,8 +91,12 @@ ErrorOr serenity_main(Main::Arguments arguments) auto playlist_toggle = GUI::Action::create_checkable("&Show Playlist", [&](auto& action) { static_cast(player)->set_playlist_visible(action.is_checked()); }); - if (player->loop_mode() == Player::LoopMode::Playlist) + if (player->loop_mode() == Player::LoopMode::Playlist) { playlist_toggle->set_checked(true); + loop_playlist->set_checked(true); + } else { + loop_none->set_checked(true); + } TRY(playback_menu->try_add_action(playlist_toggle)); auto shuffle_mode = GUI::Action::create_checkable("S&huffle Playlist", [&](auto& action) {