All pastes #416071 Raw Edit

Untitled

public text v1 · immutable
#416071 ·published 2007-03-30 01:25 UTC
rendered paste body
#!/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)