From 6858dc3b381820e00b47c7de37807b33027142e9 Mon Sep 17 00:00:00 2001 From: daleclack Date: Fri, 13 Oct 2023 23:37:02 +0800 Subject: [PATCH] Add support for list repeat mode --- Gtk4/gtk154_mediaplayer3/src/LyricsParser.cpp | 30 +++++++++++++++++-- .../gtk154_mediaplayer3/src/MyMediaPlayer.cpp | 7 +++-- Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.h | 2 ++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Gtk4/gtk154_mediaplayer3/src/LyricsParser.cpp b/Gtk4/gtk154_mediaplayer3/src/LyricsParser.cpp index 7916ccd..8d9d336 100644 --- a/Gtk4/gtk154_mediaplayer3/src/LyricsParser.cpp +++ b/Gtk4/gtk154_mediaplayer3/src/LyricsParser.cpp @@ -377,6 +377,32 @@ static gboolean get_media_stream_status(MyMediaPlayer *player, return FALSE; } +// Operations when a media play end +static void media_play_ended_handler(MyMediaPlayer *player) +{ + GtkMediaStream *stream; + + // Get Current Play mode + PlayMode play_mode = my_media_player_get_play_mode(player); + + switch (play_mode) + { + // Play a list of music once + case PlayMode::List_Once: + break; + case PlayMode::List_Repeat: + btnnext_clicked(NULL, player); + stream = gtk_video_get_media_stream(GTK_VIDEO( + my_media_player_get_video_widget(player))); + gtk_media_stream_play(stream); + break; + case PlayMode::List_Shuffle: + break; + case PlayMode::One_Repeat: + break; + } +} + // Time monitor gboolean lyric_time_func(gpointer data) { @@ -402,11 +428,11 @@ gboolean lyric_time_func(gpointer data) player); // The Media ended, reset the status - if (gtk_media_stream_get_ended(stream) && + if (gtk_media_stream_get_ended(stream) && my_media_player_get_music_loaded(player)) { my_media_player_set_music_loaded(player, FALSE); - g_print("Media ended!\n"); + media_play_ended_handler(player); } } } diff --git a/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.cpp b/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.cpp index 4c4769a..d63bad4 100644 --- a/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.cpp +++ b/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.cpp @@ -418,14 +418,14 @@ static void btnpriv_clicked(GtkButton *self, MyMediaPlayer *player) MyItem *item = MY_ITEM(g_list_model_get_item(G_LIST_MODEL(player->music_store), player->current_audio_index)); load_audio(item, player); - + // Update selected item gtk_single_selection_set_selected(player->music_selection, player->current_audio_index); } // Play next music -static void btnnext_clicked(GtkButton *self, MyMediaPlayer *player) +void btnnext_clicked(GtkButton *self, MyMediaPlayer *player) { // Clear stream for player GtkMediaStream *stream = gtk_video_get_media_stream(GTK_VIDEO(player->video)); @@ -621,6 +621,9 @@ static void my_media_player_init(MyMediaPlayer *self) // Check whether use dark icon name self->dark_mode = my_media_player_check_dark_theme(self); + // Default Play mode is List_Repeat mode + self->current_play_mode = PlayMode::List_Repeat; + // Add widgets gtk_box_append(GTK_BOX(self->main_box), self->video); gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(self->scrolled_lyrics), diff --git a/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.h b/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.h index ba98231..87c1afb 100644 --- a/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.h +++ b/Gtk4/gtk154_mediaplayer3/src/MyMediaPlayer.h @@ -24,4 +24,6 @@ PlayMode my_media_player_get_play_mode(MyMediaPlayer *self); char *my_media_player_get_filename(MyMediaPlayer *self); +void btnnext_clicked(GtkButton *self, MyMediaPlayer *player); + MyMediaPlayer *my_media_player_new(GtkApplication *app);