Code: Select all
InitNetwork()
Global hwnd.i = OpenWindow(#PB_Any,0,0,300,200,"Minification Calc Launcher",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
Global updateButton.i = ButtonGadget (#PB_Any,215,140,80,20,"Update")
Global startButton.i = ButtonGadget (#PB_Any,215,170,80,20,"Launch!")
Global webGadget = HyperLinkGadget(#PB_Any,7,180,120,15,"thecodingproject.bplaced.net",RGB(255,0,0))
Global we.i
Define *Buffer, Size.i, HeaderPos.i, File.i
Declare downloadFile(filename$)
Procedure.i checkFile(Directory$)
If ExamineDirectory(0, Directory$, "*.jar")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
Type$ = DirectoryEntryName(0)
If Type$ = "Calculator.jar"
If(DirectoryEntrySize(0))
FinishDirectory(0)
ProcedureReturn 1
EndIf
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
ProcedureReturn 0
EndProcedure
Procedure CheckGadgets(we)
Select we
Case updateButton
;downloadFile("http://dl.dropboxusercontent.com/u/76620573/Calculator.jar")
downloadFile("http://dl.dropbox.com/u/76620573/Calculator.jar")
If checkFile("")
RunProgram("javaw","-jar Calculator.jar","")
EndIf
End
Case startButton
If checkFile("")
RunProgram("javaw","-jar Calculator.jar","")
EndIf
End
Case webGadget
RunProgram("http://www.thecodingproject.bplaced.net")
EndSelect
EndProcedure
Repeat
we = WindowEvent ()
Select we
Case #PB_Event_Gadget
CheckGadgets(EventGadget())
EndSelect
Until we = #PB_Event_CloseWindow
Procedure.i HTTPGet2Mem(URL$)
Protected.i ConnectionID, TimeOutCounter, Laenge, Pos, Received, HelpLength, Length, HeaderEndPos, HeaderFinished, Size
Protected Server$, Header$, String$, Result$, Page$, Parameter$, Host$, *Buffer, *HelpBuffer, Location$
If LCase(Left(URL$, 7)) <> "http://"
URL$ = "http://" + URL$
EndIf
;Host$ = GetURLPart(URL$, #PB_URL_Site)
Host$ = Mid(URL$, 8, FindString(URL$, "/", 8) - 8)
Page$ = "/" + GetURLPart(URL$, #PB_URL_Path)
Parameter$ = GetURLPart(URL$, #PB_URL_Parameters)
If Parameter$
Page$ + "&" + Parameter$
EndIf
;Debug Host$
ConnectionID = OpenNetworkConnection(Host$, 80)
If ConnectionID
;Build header
Header$ = "GET " + Page$ + " HTTP/1.1" + #CRLF$
Header$ + "Host: " + Host$ + #CRLF$
;Header$ + "Accept: text/html" + #CRLF$
Header$ + "Content-Type: application/x-www-form-urlencoded" + #CRLF$
;String$ + "Connection: close" + #CRLF$
Header$ + #CRLF$
; header is finished
;Debug Header$
SendNetworkString(ConnectionID, Header$)
TimeOutCounter = 1000
Repeat
If NetworkClientEvent(ConnectionID) = #PB_NetworkEvent_Data
Break
EndIf
Delay(10)
TimeOutCounter -1
Until TimeOutCounter = 0
If TimeOutCounter <> 0
#Size = 10000
*HelpBuffer = AllocateMemory(#Size)
If *HelpBuffer
String$ = ""
Repeat
HelpLength = ReceiveNetworkData(ConnectionID, *HelpBuffer, #Size)
If HelpLength > 0
*Buffer = ReAllocateMemory(*Buffer, Length + HelpLength)
CopyMemory(*HelpBuffer, *Buffer + Length, HelpLength)
Length + HelpLength
;Debug Length
If Not HeaderFinished
HeaderEndPos = FindString(PeekS(*Buffer), #CRLF$ + #CRLF$)
If HeaderEndPos
Header$ = PeekS(*Buffer, HeaderEndPos)
HeaderFinished = #True
Pos = FindString(Header$, "Content-Length:")
;Debug Pos is zero!
If Pos
;Size = Val(PeekS(*Buffer + Pos + 15)) + HeaderEndPos + 3
Size = Val(Mid(Header$, Pos + 15))
Debug Size
EndIf
Pos = FindString(Header$, "302")
If Pos
Pos = FindString(Header$, "Location:")
If Pos
Location$ = Mid(Header$, Pos + 10, FindString(Header$, #CRLF$, Pos + 10) - (Pos + 10))
Debug Location$
*Buffer = ReAllocateMemory(*Buffer, Len(Location$) + 1)
PokeS(*Buffer, Location$)
Received = #True
EndIf
EndIf
EndIf
EndIf
;String$ = PeekS(*HelpBuffer + HelpLength - 10, 10, #PB_UTF8)
;String$ + PeekS(*HelpBuffer, -1, #PB_UTF8)
;Debug String$
EndIf
If Size > 0
If Length >= Size
Received = #True
EndIf
Else
If FindString(String$, "</html") > 0
Received = #True
EndIf
EndIf
Until Received
;is never reached
FreeMemory(*HelpBuffer)
EndIf
EndIf
CloseNetworkConnection(ConnectionID)
EndIf
ProcedureReturn *Buffer
EndProcedure
Procedure downloadFile(filename$)
While Len(filename$)
*Buffer = HTTPGet2Mem(filename$)
If *Buffer <> #Null
Size = MemorySize(*Buffer)
HeaderPos = FindString(PeekS(*Buffer, 1024), #CRLF$ + #CRLF$)
If HeaderPos
File = CreateFile(#PB_Any, "Calculator.jar")
If File
WriteData(File, *Buffer + HeaderPos + 3, Size - HeaderPos - 3)
CloseFile(File)
EndIf
filename$ = ""
Else
filename$ = PeekS(*Buffer)
EndIf
FreeMemory(*Buffer)
Else
MessageRequester("Error", "Not downloaded")
filename$ = ""
EndIf
Wend
EndProcedure