diff options
author | Eric Wong <e@80x24.org> | 2015-12-07 09:50:26 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-12-07 09:50:26 +0000 |
commit | b08fe09e296524daf4de7ed16e0bed224f5008a2 (patch) | |
tree | c349b14b6e72f168469e3a8a732099d5bd5d681a /lib/dtas/tracklist.rb | |
parent | 3e013d3f24f0f935dce985d4c6bd155889e05dbb (diff) | |
download | dtas-b08fe09e296524daf4de7ed16e0bed224f5008a2.tar.gz |
This defaults to 16384? This is what mpd uses by default as well. Of course folks interacting with dtas-player directly can override this: dtas-tl max INTEGER dtas-tl max This is NOT meant to be a hard security measure for local users talking to dtas-player directly. It is only to prevent accidentally stupid things like flooding the playlist with a broken script and to prevent remote users from DoS-ing us via the to-be-written mpd proxy/emulation layer. Remember: dtas-player itself will ALWAYS remain capable of executing arbitrary code :)
Diffstat (limited to 'lib/dtas/tracklist.rb')
-rw-r--r-- | lib/dtas/tracklist.rb | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/dtas/tracklist.rb b/lib/dtas/tracklist.rb index f3dca31..d3db4e9 100644 --- a/lib/dtas/tracklist.rb +++ b/lib/dtas/tracklist.rb @@ -10,20 +10,27 @@ class DTAS::Tracklist # :nodoc: include DTAS::Serialize attr_accessor :repeat # true, false, 1 attr_reader :shuffle # false or shuffled @list + attr_accessor :max # integer - SIVS = %w(list pos repeat) TL_DEFAULTS = { - "list" => [], - "pos" => -1, - "repeat" => false, + 'list' => [], + 'pos' => -1, + 'repeat' => false, + 'max' => 20_000, } + SIVS = TL_DEFAULTS.keys def self.load(hash) obj = new obj.instance_eval do - list = hash["list"] and @list.replace(list.map { |s| new_track(s) }) - @pos = hash["pos"] || -1 - @repeat = hash["repeat"] || false + list = hash['list'] and @list.replace(list.map { |s| new_track(s) }) + %w(pos repeat max).each do |k| + instance_variable_set("@#{k}", hash[k] || TL_DEFAULTS[k]) + end + + # n.b.: we don't check @list.size against max here in case people + # are migrating + if hash['shuffle'] @shuffle = @list.shuffle @pos = _idx_of(@shuffle, @list[@pos].track_id) if @pos >= 0 @@ -121,6 +128,8 @@ class DTAS::Tracklist # :nodoc: end def add_track(track, after_track_id = nil, set_as_current = false) + return false if @list.size >= @max + track = new_track(track) if after_track_id idx = _idx_of(@list, after_track_id) or |