#!/usr/bin/env python
# -*- coding: utf-8 -*-

import dbus, syslog, gobject, time, os
from dbus.mainloop.glib import DBusGMainLoop

#############################

def writeData(DataString) :
	global ScrobblerLogFile
	global ScrobblerLogFileName
	
	if os.access(ScrobblerLogFileName, os.F_OK) :
		#Log file already exists
		
		#check if already opened
		if ScrobblerLogFile is None :
			syslog.syslog(IDStr+'Log file already exists, appending')
			ScrobblerLogFile=open(ScrobblerLogFileName, 'a')
	else :
		#initialize log file
		syslog.syslog(IDStr+'Log file does not exist, creating and initializing')
		
		ScrobblerLogFile=open(ScrobblerLogFileName, 'w')
		ScrobblerLogFile.write('#AUDIOSCROBBLER/1.1\n#TZ/UNKNOWN\n#CLIENT/Nokia N810\n\n')
	
	ScrobblerLogFile.write(DataString)
	ScrobblerLogFile.flush()

#############################

def songInfoReceiver(Data):
	if Data['has_video']==1:
		syslog.syslog(IDStr + 'Received a signal, but this appears to be a video. Skipping')
		return
	
	#get timestamp
	TimeStamp=str(int(time.mktime(time.localtime())))
	
	syslog.syslog(IDStr+'Received Signal: ' + Data['artist'].encode("utf-8") + ' - ' + Data['title'].encode("utf-8") + ' (' + Data['album'].encode("utf-8") + ' [' + Data['track number'.encode("utf-8") +']) @ ' + TimeStamp)
	
	#output to the local file
	writeData(Data['artist'].encode("utf-8") + '\t' + Data['album'].encode("utf-8") + '\t' + Data['title'].encode("utf-8") + '\t' + Data['track number'].encode("utf-8") + '\t' + str(int(Data['length'])/1000) + '\tL\t' + TimeStamp + '\t\n')

#############################

def main():
	syslog.syslog(IDStr+'Startup')
	
	#init main loop for dbus
	DBusGMainLoop(set_as_default=True)
	
	#open the local file
	syslog.syslog(IDStr+'Opening a local file for logging')
	LocalTime=time.strftime('%Y-%m-%d', time.localtime())
	
	global ScrobblerLogFileName
	ScrobblerLogFileName='/media/mmc1/Scrobbler/'+LocalTime+'.log'
	
	syslog.syslog(IDStr+'Opening DBUS session bus')
	bus = dbus.SessionBus()
	
	#syslog.syslog(IDStr+'Getting DBUS proxy')
	#proxy = bus.get_object('com.nokia.osso_media_server', '/com/nokia/osso_media_server', 'com.nokia.osso_media_server.music')
	
	syslog.syslog(IDStr+'Adding signal receiver')
	bus.add_signal_receiver(songInfoReceiver, dbus_interface="com.nokia.osso_media_server.music", signal_name="details_received")
	
	syslog.syslog(IDStr+'Entering MainLoop')
	loop = gobject.MainLoop()
	loop.run()
	
	#ScrobblerLog.close()

#############################

if __name__ == "__main__":
	# Define all global variables and data structures
	global ScrobblerLogFile
	ScrobblerLogFile = None
	
	global ScrobblerLogFileName
	ScrobblerLogFileName = None
	
	global IDStr
	IDStr='Dr. Ivan\'s N810 Scrobbler: '
	
	main()
