#!/usr/bin/python

# rhythmdb_dump by Sam Morris <sam@robots.org.uk>
# version 1.0
#
# prints the paths of all songs in a rhythmdb.xml file

import xml.parsers.expat
import sys
import urlparse
import urllib

class state:
	stack = []
	data = None
	in_song = False

	def element_start (self, name, attrs):
		self.stack.append (name)
		if self.stack == ['rhythmdb']:
			if attrs ['version'] != '1.0':
				raise 'Unknown rhythmdb version ' + attrs ['version']
		elif self.stack == ['rhythmdb', 'entry']:
			if attrs ['type'] == 'song':
				self.in_song = True
			else:
				self.in_song = False
		elif self.stack == ['rhythmdb', 'entry', 'location']:
			if self.in_song == True:
				self.data = ''

	def element_end (self, name):
		self.stack.pop ()
		if self.data != None:
			path = urlparse.urlparse (self.data) [2]
			print urllib.unquote (path.encode ('ascii'))
			self.data = None

	def char_data (self, data):
		if self.data != None:
			self.data += data

p = xml.parsers.expat.ParserCreate ()
s = state ()

p.StartElementHandler = s.element_start
p.EndElementHandler = s.element_end
p.CharacterDataHandler = s.char_data

try:
	file = open (sys.argv [1], 'r')
except IndexError:
	file = sys.stdin

p.ParseFile (file)
