-- WLAN example: reads a test file from www.luaplayer.org
-- and provides a very simple webserver on the PSP

white = Color.new(255, 255, 255)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
offscreen = Image.createEmpty(480, 272)
offscreen:clear(Color.new(0, 0, 0))
y = 0
x = 0

function graphicsPrint(text)
	for i = 1, string.len(text) do
		char = string.sub(text, i, i)
		if char == "\n" then
			y = y + 8
			x = 0
		elseif char ~= "\r" then
			offscreen:print(x, y, char, white)
			x = x + 8
		end
	end
	screen:blit(0, 0, offscreen)
	screen.waitVblankStart()
	screen.flip()
end

function graphicsPrintln(text)
	graphicsPrint(text .. "\n")
end

-- start server socket
graphicsPrintln("open server socket...")
serverSocket = Socket.createServerSocket(80)

-- start connection and wait until it is connected
graphicsPrintln("waiting for WLAN init and determining IP address...")
while true do
	ipAddress = Wlan.getIP()
	if ipAddress then break end
	System.sleep(100)
end
graphicsPrintln("the PSP IP address is: " .. ipAddress)

filedl = "updateplayer.lua"--"hmupdate.lua"
urladdress = "www.homemister.axspace.com"
recvbuffer = 59
filesize = 2314 --1524
countadder = filesize/math.ceil(filesize)
currentversion = 5 --System.playerVer()

graphicsPrintln("connecting to "..urladdress)
socket, error = Socket.connect(urladdress, 80)
while not socket:isConnected() do System.sleep(100) end
graphicsPrintln("Conected to "..urladdress)

graphicsPrintln("Checking for Update Please Wait...")
bytesSent = socket:send("GET /verdat.info HTTP/1.0\r\n")
bytesSent = socket:send("host: "..urladdress.."\r\n\r\n")

-- read and display result
requestCount = 0
header = ""
headerFinished = false
count = 0
while true do
	-- read from test page
	buffer = socket:recv(recvbuffer)
	if string.len(buffer) > 0 then 
		if headerFinished then
			graphicsPrint(buffer)
		else
			header = header .. buffer
			startIndex, endIndex = string.find(header, "\r\n\r\n")
			if endIndex then
				newver = (string.sub(header, endIndex))
				newver = tonumber(newver)
				screen:clear()
				--screen:print(10,10,"Available LuaPlayerHM Version:"..newver,white)
				--screen:print(10,30,"Current LuaPlayerHM Version:"..currentversion,white)
				screen:flip()
				if newver > currentversion then
				System.message("There is a newer version of LuaPlayerHM Available\nWould you like to Update?",1)
				button = System.buttonPressed()
					if button == "yes" then
						socket:close()
						break
					end
					if button == "no" then
						socket:close()
						Wlan.term()
						System.Quit()
					end
					if button == "back" then
						socket:close()
						Wlan.term()
						System.Quit()
					end
				end
				if newver <= currentversion then
					System.message("There is no new version of LuaPlayerHM Available",0)
					socket:close()
					Wlan.term()
					break
				end
			end
		end
	end
	
	if Controls.read():start() then 
	socket:close()
	Wlan.term()
	break
	end
	screen.waitVblankStart()
end
--LSKALSkjakjd
-- send request
socket, error = Socket.connect(urladdress, 80)
while not socket:isConnected() do System.sleep(100) end
graphicsPrintln("Downloading Updater script Please Wait...")
bytesSent = socket:send("GET /"..filedl.." HTTP/1.0\r\n")
bytesSent = socket:send("host: "..urladdress.."\r\n\r\n")
file = io.open("ms0:/"..filedl,"w+")
file:close()

-- read and display result
requestCount = 0
header = ""
headerFinished = false
file = io.open("ms0:/"..filedl,"a")
count = 0
while true do
	-- read from test page
	buffer = socket:recv(recvbuffer)
	if string.len(buffer) > 0 then 
		if headerFinished then
			graphicsPrint(buffer)
		else
			header = header .. buffer
			startIndex, endIndex = string.find(header, "\r\n\r\n")
			if endIndex then
				datarecv = string.len(buffer)
				count = count + datarecv
				screen:clear()
				screen:print(10,10,"Downloading Updater script Please Wait...",white)
				percent = count*100/filesize
				screen:print(10,20,"Downloaded "..count.."/"..filesize,white)
				file:write(buffer)
				if percent == 100 then
					screen:print(10,70,"Download DONE",green)
					screen:print(10,90,"Continue in 3 seconds",green)
					screen:flip()
					file:close()
					socket:close()
					System.sleep(3000)
					dofile("ms0:/"..filedl)
				end
				screen:print(10,70,"Download completion"..percent.."%",red)
				screen:flip()
				System.memclean()
			end
		end
	end
	if Controls.read():start() then 
	socket:close()
	Wlan.term()
	file:close()
	break
	end
	screen.waitVblankStart()
end
