Fix some bug with playlist

This commit is contained in:
daleclack 2023-10-14 12:00:45 +08:00
parent febde53ced
commit c93ee2ddde
2 changed files with 38 additions and 9 deletions

View File

@ -388,8 +388,11 @@ static void media_play_ended_handler(MyMediaPlayer *player)
switch (play_mode)
{
// Play a list of music once
// g_print("%d", play_mode);
case PlayMode::List_Once:
// Only play music when current audio is not the end of the audio list
// g_print("%d %d\n", my_media_player_get_current_index(player),
// my_media_player_get_n_audios(player));
if (my_media_player_get_current_index(player) <
my_media_player_get_n_audios(player) - 1)
{
@ -416,9 +419,11 @@ static void media_play_ended_handler(MyMediaPlayer *player)
gtk_media_stream_play(stream);
break;
case PlayMode::List_Shuffle:
// Play music with random index
break;
case PlayMode::One_Repeat:
// Get media stream to control
stream = gtk_video_get_media_stream(GTK_VIDEO(
my_media_player_get_video_widget(player)));

View File

@ -272,6 +272,9 @@ static void column_view_activated(GtkColumnView *self, gint position, MyMediaPla
// Get selection and open the music file
item = MY_ITEM(gtk_single_selection_get_selected_item(player->music_selection));
load_audio(item, player);
// Update Column index
player->current_audio_index = gtk_single_selection_get_selected(player->music_selection);
}
static void filename_factory_setup(GtkListItemFactory *factory,
@ -359,6 +362,27 @@ static void my_media_player_expander_activate(GtkExpander *self, MyMediaPlayer *
}
}
// Create a button with dark icon support
static GtkWidget *player_button_new(const char *icon_name, gboolean dark_mode)
{
char *icon_name1;
GtkWidget *button;
// Change icon name string for dark mode
if (dark_mode)
{
icon_name1 = g_strdup_printf("%s-dark", icon_name);
}
else
{
icon_name1 = g_strdup_printf("%s", icon_name);
}
// Set icon name and free memory for icon name
button = gtk_button_new_from_icon_name(icon_name1);
g_free(icon_name1);
return button;
}
// Set button icon name with dark icon theme support
static void player_button_set_icon_name(GtkButton *button, const char *icon_name,
gboolean dark_mode)
@ -557,16 +581,19 @@ static void my_media_player_init(MyMediaPlayer *self)
gtk_window_set_default_size(GTK_WINDOW(self), 300, 270);
gtk_window_set_resizable(GTK_WINDOW(self), TRUE);
// Check whether use dark icon name
self->dark_mode = my_media_player_check_dark_theme(self);
// Create widgets
self->main_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
self->video = gtk_video_new();
self->label_lyrics = gtk_label_new(" ");
self->ctrl_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
self->btn_play = gtk_button_new_from_icon_name("media-playback-start");
self->btn_priv = gtk_button_new_from_icon_name("media-skip-backward");
self->btn_next = gtk_button_new_from_icon_name("media-skip-forward");
self->btn_stop = gtk_button_new_from_icon_name("media-playback-stop");
self->btn_playmode = gtk_button_new_from_icon_name("media-playlist-repeat");
self->btn_play = player_button_new("media-playback-start", self->dark_mode);
self->btn_priv = player_button_new("media-skip-backward", self->dark_mode);
self->btn_next = player_button_new("media-skip-forward", self->dark_mode);
self->btn_stop = player_button_new("media-playback-stop", self->dark_mode);
self->btn_playmode = player_button_new("media-playlist-repeat", self->dark_mode);
self->btn_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
self->btn_add = gtk_button_new_from_icon_name("list-add");
self->scrolled_window = gtk_scrolled_window_new();
@ -630,9 +657,6 @@ static void my_media_player_init(MyMediaPlayer *self)
// Load a default playlist
load_playlist("playlist.json", 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;