#!/usr/bin/python
#
# A script to upload music to PlaysForSure infected Creative Zen players
# Requires pyid3lib and gphoto2
#
# (C) 2006 Mattias Merilai
# Distributed under the terms of the GNU General Public Licence
#
# -*- coding: utf8 -*- 

import sys, os, eyeD3, re

musicdir = os.listdir( sys.argv[1] )
musicdir.sort()

artist = "unknown artist"
album = "unkonwn album"

confdir = os.environ.get( "HOME" ) + "/.buddha/"


# Cleans the musicdir[] of anything not an mp3
for file in musicdir:
	if file[-3:] !=  "mp3":
		musicdir.remove(file)
		continue


# Extracts artist and album info from the first file
for file in musicdir:
	tag = eyeD3.Tag()
	tag.link( sys.argv[1] + "/" + file )
	artist = tag.getArtist().replace( " ", "_" )
	album = tag.getAlbum().replace( " ", "_" )
	break


# Creates metadata folders if needed
metadir = confdir + "metadata/" + artist + "/" + album + "/"
if not os.path.exists( metadir ):
	os.makedirs( metadir )


# Creates metadata files
for file in musicdir:
	tag = eyeD3.Tag()
	tag.link( sys.argv[1] + "/" + file )
	fil = eyeD3.Mp3AudioFile( sys.argv[1] + "/" + file )
	duration = str( fil.getPlayTime() ) + "000"
	metafile = metadir + "/" + file

	track = 0
	for number in tag.getTrackNum():
		track = number
		break
	metadata = open( metafile, 'w' )
	metadata.write( "<Artist>" + tag.getArtist() + "</Artist>\n" )
	metadata.write( "<AlbumName>" + tag.getAlbum() + "</AlbumName>\n" )
	metadata.write( "<Track>" + str(track) + "</Track>\n" )
	metadata.write( "<Name>" + tag.getTitle() + "</Name>\n" )
	metadata.write( "<ObjectFileName>" + file + "</ObjectFileName>\n" )
	metadata.write( "<OriginalReleaseDate>" + str(tag.getYear()) + "</OriginalReleaseDate>\n" )
	metadata.write( "<Duration>" + duration + "</Duration>\n" )
	metadata.close


# Checks for and creates folders on teh Zen
zenroot = "/store_00010001/Music/"
artistf = ( zenroot + artist + "/" )
albumf = ( zenroot + artist + "/" + album + "/" )

print( "Checking for folders on Zen:" )

inart, outart, errart = os.popen3( "gphoto2 -f" + zenroot + artist + "/ -l" )
arterror = errart.read()
inart.close(); outart.close(); errart.close()
if len( arterror ) == 0:
	print( "[   FOUND   ]\t" + artistf )
else:
	print( "[ CREATING  ]\t" + artistf )
	os.popen( "gphoto2 -f\"" + zenroot + "\" -m\"" + artist + "\"" )

inalb, outalb, erralb = os.popen3( "gphoto2 -f" + artistf + album + "/ -l" )
alberror = erralb.read()
inalb.close(); outalb.close(); erralb.close()
if len( alberror ) == 0:
	print( "[   FOUND   ]\t" + albumf )
else:
	print( "[ CREATING  ]\t" + albumf )
	os.popen( "gphoto2 -f\"" + artistf + "\" -m\"" + album + "\"" )


# Uploads teh music
print( "Starting to transfer files:" )

zenlist = os.popen( "gphoto2 -f\"" + albumf + "\" -L" ).read()

for file in musicdir:
	grep = re.compile( file ).search( zenlist )
	if grep:
		print( "[   FOUND   ]\t" + file )
	else:
		print( "[ UPLOADING ]\t" + file )
		folder = "-f\"" + albumf + "\" "
		upload = "-u\"" + sys.argv[1] + file + "\" "
		metadata = "--upload-metadata=\"" + metadir + file + "\" "
		os.popen( "gphoto2 " + folder + upload + metadata )
