#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include "FTP_FileList_Recursiv3.au3"

Opt('MustDeclareVars', 1)

_CreateGui()

Func _CreateGui()
	Local $l_InternetSession = -99, $l_FTPSession
	Local $errOpen, $errFTP
	Local $nMsg
	Local $iMaxDepth=3;max 3 vereichnisebenen	 <1=unendliche Rekrusionstiefe
	Local $GUI = GUICreate("FTP-Downloader", 623, 450, 271, 235)
	Local $idLblLog = GUICtrlCreateEdit("", 8, 5, 467, 315, $ES_READONLY)
	Local $idPrgFile = GUICtrlCreateProgress(8, 344, 598, 25)
	Local $hGuiChild1 = GUICreate("Child1", 594, 21, 10, 346, $WS_POPUP, $WS_EX_MDICHILD, $GUI)
	Local $idLblFilePer = GUICtrlCreateLabel("", 2, 2, 590, 17, $SS_CENTER)
	GUICtrlSetFont(-1, 11, 2800)
	WinSetTrans($hGuiChild1, "", 180)
	GUISwitch($GUI)
	Local $idLblFile = GUICtrlCreateLabel("", 8, 322, 594, 17)
	Local $idPrgKB = GUICtrlCreateProgress(8, 392, 598, 25)
	Local $hGuiChild2 = GUICreate("Child2", 595, 23, 10, 394, $WS_POPUP, $WS_EX_MDICHILD, $GUI)
	Local $idLblKBPer = GUICtrlCreateLabel("", 2, 1, 590, 19, $SS_CENTER)
	GUICtrlSetFont(-1, 11, 2800)
	WinSetTrans($hGuiChild2, "", 180)
	GUISwitch($GUI)
	Local $idLblKB = GUICtrlCreateLabel("", 8, 372, 594, 17)
	Local $idInpMaxDepth= GUICtrlCreateInput("",483,5,35,22,$ES_NUMBER)
	GUICtrlSetTip(-1,'Maxinale Rekursionstiefe,<1=unendlich')
	Local $idBtnConnect = GUICtrlCreateButton("&Verbinden", 483, 40) ;verbinden mit FTP-Server
	Local $idBtnDisconnect = GUICtrlCreateButton("&Trennen", 483, 80) ;vom Server trennen
	Local $idBtnDL = GUICtrlCreateButton("&Download", 483, 120) ;Download starten
	Local $idBtnExit = GUICtrlCreateButton("Be&enden", 483, 160) ;Exit
	GUICtrlSetState($idBtnDL, $GUI_DISABLE)
	GUICtrlSetState($idBtnDisconnect, $GUI_DISABLE)

	#Region;falls aktiviert Positionen noch anpasser und Labeltext entfernen
	Local $idLblColapsedTime = GUICtrlCreateLabel("", 8, 420, 400, 17)

	Local $idLblKBperSec = GUICtrlCreateLabel("", 450, 420, 500, 17)
	#EndRegion
	GUISetState(@SW_SHOW, $hGuiChild1)
	GUISetState(@SW_SHOW, $hGuiChild2)
	GUISetState(@SW_SHOW, $GUI)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE, $idBtnExit
				If $l_InternetSession <> -99 Then _FTP_Close($l_InternetSession)
				Exit
			Case $idBtnConnect
				$l_InternetSession = _FTP_Open('AutoItZilla') ;Öffnet eine FTP Sitzung
				$errOpen = @error
				If Not @error Then
					$l_FTPSession = _FTP_Connect($l_InternetSession, 'ftp.csx.cam.ac.uk', '', '', 0) ;Verbindet zu einem FTP Server
					$errFTP = @error
					If Not @error Then
						GUICtrlSetState($idBtnDL, $GUI_ENABLE)
						GUICtrlSetState($idBtnDisconnect, $GUI_ENABLE)
						GUICtrlSetState($idBtnConnect, $GUI_DISABLE)
					Else
						;MsgBox(0, "Connect", "fehlgeschlagen")
						ConsoleWrite("Connect: " & " " & $errFTP & @CRLF)
					EndIf
				Else
					;MsgBox(0, "Open", "fehlgeschlagen")
					ConsoleWrite("Open " & " " & $errOpen & @CRLF)
				EndIf
			Case $idBtnDisconnect
				_FTP_Close($l_InternetSession)
				$l_InternetSession = -99
				GUICtrlSetState($idBtnDL, $GUI_DISABLE)
				GUICtrlSetState($idBtnDisconnect, $GUI_DISABLE)
				GUICtrlSetState($idBtnConnect, $GUI_ENABLE)
			Case $idBtnDL
				$iMaxDepth=Int(GUICtrlRead($idInpMaxDepth))
				GUICtrlSetState($idBtnDL, $GUI_DISABLE)
				GUICtrlSetState($idBtnExit, $GUI_DISABLE)
				GUICtrlSetState($idBtnDisconnect, $GUI_DISABLE)
				_getAllFTPFilesRekursiv($l_FTPSession, '/', @ScriptDir & "\Temp", $iMaxDepth, 1, $idPrgKB, $idLblKB, $idLblKBPer, $idPrgFile, $idLblFile, $idLblFilePer, $idLblColapsedTime, $idLblKBperSec, $idLblLog) ;<======= anpassen Remotepfad der inkl. aller Unerordner heruntergeladen werden soll
;_getAllFTPFilesRekursiv($l_FTPSession, $sRemote = "", $sLocal = @TempDir, $iMaxDepth , $iDebug, $idPrgKB, $idLblKB, $idLblKBPer, $idPrgFile, $idLblFile, $idLblFilePer, $idLblColapsed = 0, $idLblKBperSec, $idLblLog)
				GUICtrlSetState($idBtnDL, $GUI_ENABLE)
				GUICtrlSetState($idBtnExit, $GUI_ENABLE)
				GUICtrlSetState($idBtnDisconnect, $GUI_ENABLE)
		EndSwitch
	WEnd
EndFunc   ;==>_CreateGui
