about summary refs log tree commit homepage
path: root/lib/dtas
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dtas')
-rw-r--r--lib/dtas/player/client_handler.rb1
-rw-r--r--lib/dtas/tracklist.rb5
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/dtas/player/client_handler.rb b/lib/dtas/player/client_handler.rb
index c7dd31d..9697f39 100644
--- a/lib/dtas/player/client_handler.rb
+++ b/lib/dtas/player/client_handler.rb
@@ -547,6 +547,7 @@ module DTAS::Player::ClientHandler # :nodoc:
       case msg.shift
       when "true" then @tl.repeat = true
       when "false" then @tl.repeat = false
+      when "1" then @tl.repeat = 1
       when nil
         return io.emit("repeat #{@tl.repeat.to_s}")
       end
diff --git a/lib/dtas/tracklist.rb b/lib/dtas/tracklist.rb
index 644c57f..6ed22ee 100644
--- a/lib/dtas/tracklist.rb
+++ b/lib/dtas/tracklist.rb
@@ -6,7 +6,7 @@ require_relative 'serialize'
 # this is inspired by the MPRIS 2.0 TrackList spec
 class DTAS::Tracklist
   include DTAS::Serialize
-  attr_accessor :repeat
+  attr_accessor :repeat # true, false, 1
 
   SIVS = %w(list pos repeat)
   TL_DEFAULTS = {
@@ -67,7 +67,8 @@ class DTAS::Tracklist
 
   def advance_track(repeat_ok = true)
     return if @list.empty?
-    next_pos = @goto_pos || @pos + 1
+    # @repeat == 1 for single track repeat
+    next_pos = @goto_pos || @pos + (@repeat == 1 ? 0 : 1)
     next_off = @goto_off # nil by default
     @goto_pos = @goto_off = nil
     if @list[next_pos]