#!/bin/bash

aide()
{
	nom="`basename "$0"`"
	cat >&2 <<TERMINE
$nom
Liste les fichiers d'une liste iTunes
© 2008 Guillaume Outters

Utilisation: $nom <liste>*
Les listes sont à choisir parmi les suivantes:
TERMINE
	osascript <<TERMINE
set liste to {}
tell application "iTunes"
	repeat with i from 1 to (count of playlists)
		set liste to liste & (i as string & "\\t" & name of playlist i & "\\n")
	end repeat
end tell
tell application "System Events"
	set f to open for access POSIX file "/tmp/temp.$$.liste" with write permission
	repeat with c in liste
		write c to f
	end repeat
	close access f
end tell
TERMINE
	iconv -f utf-16 < /tmp/temp.$$.liste >&2
	rm /tmp/temp.$$.liste
	exit 0
}

analyserParametres()
{
	while [ $# -gt 0 ]
	do
		case "$1" in
			-h) aide ;;
			*) liste[${#liste[@]}]="$1" ;;
		esac
		shift
	done
}

analyserParametres "$@"

if [ ${#liste[@]} = 0 ]
then
	aide
fi

n="`echo "${liste[@]}" | tr ' ' ,`"

osascript <<TERMINE
set liste to {}
tell application "iTunes"
	repeat with z in {$n}
		set p to playlist z
		repeat with i from (count of file tracks of p) to 1 by -1
			try
				if rating of file track i of p > 60 then
					set liste to liste & location of file track i of p
				end if
			end try
		end repeat
	end repeat
end tell

tell application "System Events"
	set f to open for access POSIX file "/tmp/temp.$$.liste" with write permission
		repeat with i from (count of items of liste) to 1 by -1
			set c to POSIX path of item i of liste & "\\n"
			write c to f
		end repeat
	close access f
end tell
TERMINE

cat /tmp/temp.$$.liste | iconv -f utf-16 | sort -u
rm /tmp/temp.$$.liste
