#!/usr/bin/env ruby
require 'format'
require 'xmmsclient'
# Edit this for desired effect:
FORMAT = '%a%l%n'
def sort(list, first = 0, last = list.length - 1)
pivot = rand(last - first + 1) + first
if(first < last)
pivot = part(list, first, last, pivot)
sort(list, first, pivot - 1)
sort(list, pivot + 1, last)
end
end
def part(list, first, last, pivot)
pivot_val = list[pivot]
index = first
swap(list, pivot, last)
(first..last - 1).each do|i|
if(list[i] <= pivot_val)
swap(list, i, index)
index += 1
end
end
swap(list, last, index)
return index
end
def swap(list, a, b)
return if(a == b)
if(a < b)
@xmms.playlist_move(a, b).wait
@xmms.playlist_move(b - 1, a).wait
elsif(a > b)
@xmms.playlist_move(b, a).wait
@xmms.playlist_move(a - 1, b).wait
end
tmp = list[a]
list[a] = list[b]
list[b] = tmp
end
@xmms = Xmms::Client.new('Magic_SuperSorter')
@xmms.connect(ENV["XMMS_PATH"])
format = Format.new(FORMAT)
list = @xmms.playlist_list.wait.value.map do |entry|
res = @xmms.medialib_get_info(entry)
info = {}
res.wait.value.each do |from, key, val|
info[key] = val
end
info[:url_decoded] = res.decode_url(info[:url])
format.prettify(info)
end
sort(list)