#!/usr/bin/python -u

import sys
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
import subprocess
from obmc.dbuslib.bindings import get_dbus


FLASH_DOWNLOAD_PATH = '/tmp'
DBUS_NAME = 'org.openbmc.managers.Download'
OBJ_NAME = '/org/openbmc/managers/Download'
TFTP_PORT = 69

class DownloadManagerObject(dbus.service.Object):
	def __init__(self,bus,name):
		dbus.service.Object.__init__(self,bus,name)
		bus.add_signal_receiver(self.DownloadHandler, 
			dbus_interface = "org.openbmc.Flash",
			signal_name = "Download", path_keyword = "path")
		bus.add_signal_receiver(self.TftpDownloadHandler,
			signal_name = "TftpDownload", path_keyword = "path")


	@dbus.service.signal(DBUS_NAME,signature='ss')
	def DownloadComplete(self,outfile,filename):
		print "Download Complete: "+outfile
		return outfile

	@dbus.service.signal(DBUS_NAME,signature='s')
	def DownloadError(self,filename):
		pass

	def TftpDownloadHandler(self,ip,filename,path = None):
		try:
			filename = str(filename)
			print "Downloading: "+filename+" from "+ip
			outfile = FLASH_DOWNLOAD_PATH+"/"+filename
			rc = subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",ip])
			if (rc == 0):
				self.DownloadComplete(outfile,filename)
			else:
				self.DownloadError(filename)


		except Exception as e:
			print "ERROR DownloadManager: "+str(e)
			self.DownloadError(filename)


	## TODO: this needs to be deprecated.  Shouldn't call flash interface from here
	def DownloadHandler(self,url,filename,path = None):
		try:
			filename = str(filename)
			print "Downloading: "+filename+" from "+url
			outfile = FLASH_DOWNLOAD_PATH+"/"+filename
			subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",url])
			obj = bus.get_object("org.openbmc.control.Flash",path)
			intf = dbus.Interface(obj,"org.openbmc.Flash")
			intf.update(outfile)

		except Exception as e:
			print "ERROR DownloadManager: "+str(e)
			obj = bus.get_object("org.openbmc.control.Flash",path)
			intf = dbus.Interface(obj,"org.openbmc.Flash")
			intf.error("Download Error: "+filename)


if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
    bus = get_dbus()
    obj = DownloadManagerObject(bus, OBJ_NAME)
    mainloop = gobject.MainLoop()
    name = dbus.service.BusName(DBUS_NAME, bus)
    
    print "Running Download Manager"
    mainloop.run()

