diff --git a/src/playbin.vala b/src/playbin.vala index f1b87e1..34494f9 100644 --- a/src/playbin.vala +++ b/src/playbin.vala @@ -36,10 +36,8 @@ class Playbin : GLib.Object { } public uint play_queue_position { get; private set; } - public Subsonic.Song? song { get; private set; } - private bool notify_next_playing; - public signal void now_playing (); + public signal void now_playing (Subsonic.Song now, Subsonic.Song? next); public signal void stopped (); public double position { get; private set; default = 0.0; } @@ -118,14 +116,14 @@ class Playbin : GLib.Object { if (data.parse_int64 () < 0) { debug ("playlist-pos is null, sending stopped event"); this.play_queue_position = this.play_queue.get_n_items (); - this.song = null; this.state = PlaybinState.STOPPED; this.stopped (); } else { this.play_queue_position = (uint) data.parse_int64 (); debug (@"playlist-pos has been updated to $(this.play_queue_position)"); - this.song = (Subsonic.Song) this.play_queue.get_item (this.play_queue_position); - this.now_playing (); + this.now_playing ( + (Subsonic.Song) this.play_queue.get_item (this.play_queue_position), + (Subsonic.Song?) this.play_queue.get_item (this.play_queue_position+1)); } break; @@ -169,10 +167,6 @@ class Playbin : GLib.Object { { assert (this.mpv.command ({"playlist-play-index", position.to_string ()}) >= 0); this.state = PlaybinState.PLAYING; - this.play_queue_position = position; - this.song = (Subsonic.Song) this.play_queue.get_item (position); - this.now_playing (); - this.notify_next_playing = false; } public void pause () { diff --git a/src/ui/window.blp b/src/ui/window.blp index fc925e2..fe9ed93 100644 --- a/src/ui/window.blp +++ b/src/ui/window.blp @@ -103,21 +103,21 @@ template $UiWindow: Adw.ApplicationWindow { styles [ "heading" ] xalign: 0; halign: start; - label: bind $song_title (template.playbin as <$Playbin>.song) as ; + label: bind $song_title (template.song) as ; ellipsize: end; } Label { styles [ "caption" ] xalign: 0; - label: bind $song_artist (template.playbin as <$Playbin>.song) as ; + label: bind $song_artist (template.song) as ; ellipsize: end; } Label { styles [ "caption" ] xalign: 0; - label: bind $song_album (template.playbin as <$Playbin>.song) as ; + label: bind $song_album (template.song) as ; ellipsize: end; } } diff --git a/src/ui/window.vala b/src/ui/window.vala index a5b5e42..a45a9d7 100644 --- a/src/ui/window.vala +++ b/src/ui/window.vala @@ -20,6 +20,8 @@ class Ui.Window : Adw.ApplicationWindow { set { this.playbin.mute = value; } } + public Subsonic.Song? song { get; private set; } + private Cancellable cancel_loading_art; public bool cover_art_loading { get; set; default = false; } public Gdk.Paintable playing_cover_art { get; set; } @@ -54,8 +56,9 @@ class Ui.Window : Adw.ApplicationWindow { this.api = api; this.playbin.api = api; - this.playbin.now_playing.connect (() => { - api.scrobble.begin (playbin.song.id); + this.playbin.now_playing.connect ((playbin, now, next) => { + this.song = now; + api.scrobble.begin (this.song.id); this.play_queue.selection.playbin_select (playbin.play_queue_position); if (this.cancel_loading_art != null) { @@ -64,10 +67,10 @@ class Ui.Window : Adw.ApplicationWindow { this.cancel_loading_art = new GLib.Cancellable (); this.playing_cover_art = Gdk.Paintable.empty (1, 1); - if (playbin.song != null) { + if (this.song != null) { this.cover_art_loading = true; - string song_id = playbin.song.id; + string song_id = this.song.id; this.api.cover_art.begin (song_id, this.cancel_loading_art, (obj, res) => { try { this.playing_cover_art = Gdk.Texture.for_pixbuf (this.api.cover_art.end (res));