[gnome-music] Lock switching to next song until it is not ready.



commit 982e24d8459dc93ed0cb0dcaa09b07d56e7c249f
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date:   Tue Jun 11 16:11:53 2013 +0200

    Lock switching to next song until it is not ready.
    
    Also don't update player.uri in loadNextTrack() and make sure we're starting playback correctly when a 
new song is loaded

 src/player.js  |   20 +++++++++-----------
 src/widgets.js |    1 -
 2 files changed, 9 insertions(+), 12 deletions(-)
---
diff --git a/src/player.js b/src/player.js
index b10c6d2..4f3634a 100644
--- a/src/player.js
+++ b/src/player.js
@@ -67,7 +67,9 @@ const Player = new Lang.Class({
 
         this.bus.connect("message::state-changed", Lang.bind(this, function(bus, message) {
             if (message.parse_state_changed()[1] == Gst.State.NULL){
-                this.loadNextTrack();
+                if (!this.load_next_track_lock) {
+                    this.loadNextTrack();
+                }
             }
         }));
         this.bus.connect("message::error", Lang.bind(this, function(bus, message) {
@@ -119,21 +121,16 @@ const Player = new Lang.Class({
     },
 
     loadNextTrack: function(){
-        if (this.timeout) {
-            GLib.source_remove(this.timeout);
-        }
+        this.load_next_track_lock = true;
         if (!this.playlist || !this.currentTrack || !this.playlist.iter_next(this.currentTrack))
             this.currentTrack=null;
         else {
-            this.load( this.playlist.get_value( this.currentTrack, this.playlistField));
-            this.progressScale.set_value(0);
-            this.player.set_state(Gst.State.PLAYING);
-            this.onProgressScaleChangeValue(this.progressScale);
-            this.timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1000, Lang.bind(this, 
this._updatePositionCallback));
+            this.load( this.playlist.get_value( this.currentTrack, this.playlistField), false);
+            this.play();
         }
     },
 
-    load: function(media) {
+    load: function(media, update_url=true) {
         this._setDuration(media.get_duration());
         this.songTotalTimeLabel.set_label(this.secondsToString (media.get_duration()));
         this.progressScale.sensitive = true;
@@ -180,8 +177,9 @@ const Player = new Lang.Class({
         }
 
         let url = media.get_url();
-        if (url != this.player.current_uri) {
+        if ((update_url) && (url != this.player.current_uri)) {
             this.player.uri = url;
+            this.load_next_track_lock = false;
         }
 
         // Store next available url
diff --git a/src/widgets.js b/src/widgets.js
index df59ec7..9039487 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -126,7 +126,6 @@ const AlbumWidget = new Lang.Class({
             function(widget, id, path) {
                 let iter = this.model.get_iter(path)[1];
                 if (this.model.get_value(iter, 7) != errorIconName) {
-                    this.player.stop();
                     if (this.iterToClean && this.player.playlistId == this.album){
                         let item = this.model.get_value(this.iterToClean, 5);
                         this.model.set_value(this.iterToClean, 0, item.get_title());


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]