Core Function HTTPDownload
HTTPDownload( <url>, <dest>, <progress>, <completed>, <param> )
Contents |
Description
Download a file from a given URL.
Parameters
url
URL to the file
dest
Location and filename to save it as
progress
Optional; Code to execute at each progress update
If you wish this code to do nothing just enter ";" (with the quotes)
(Warning if you add this parameter you must also add completed)
completed
Optional; Code to execute when download finishes
If you wish this code to do nothing just enter ";" (with the quotes)
param
Optional; If a variable is given here it will be placed into the $param variable at the completed and progress events.
Useful if you wish to run the HTTPDownload from a class see example of usage below.
Return Value
Success: Returns true.
Failure: Returns false.
Remarks
None
Example
Most basic example
/////////////////////////// THE FUNCTION BELOW my $Complete = false; Function Completed() { $Complete = true; println("Download Complete!!!"); } Function Progress() { List ($URL, $LOC, $ProgressPercent, $BytesTotal, $BytesDone) = $arg; if($ProgressPercent % 10 != 0) println("Download percent: $ProgressPercent"); } /////////////////////////// THE FUNCTION ABOVE // Download file here HTTPDownload("http://uberfox.no-ip.org/usb.pkg", "./usb.pkg", "Progress();", "Completed();"); println("Downloading file please wait...."); while(!$Complete) { sleep(1); // wait for download to finish.... doEvents(); // required for COMPLETED AND PERCENT EVENTS!!!!!! }
Heres what the uBlox launcher does notice it will download files and report progress of the download as it happens
$Server = 'http://uberfox.no-ip.org/uBlox/update/'; $str = HTTPGetString($Server.'index.php'); $str = replace($str, '<br>', "\n"); $str =~ m/^(.*);(.*);(.*)$/igm; Global $Completed = false; Global $CProg = 0; Global $CTSize = 0; Global $CCSize = 0; Global $TTSize = 0; Global $TCSize = 0; Global $FileGUI = GUICreate("Window", "uBlox Patcher", 472, 150, -1, -1, 1); $obj_CLabel = GUICreate("Label", $FileGUI, "", 10, 10, 440, 15); $obj_CPBar = GUICreate("ProgressBar", $FileGUI, 10, 35, 440, 8); $obj_TLabel = GUICreate("Label", $FileGUI, "", 10, 60, 440, 15); $obj_TPBar = GUICreate("ProgressBar", $FileGUI, 10, 85, 440, 8); GUIProgressBar($obj_CPBar, "Style", "Continuous"); GUIProgressBar($obj_TPBar, "Style", "Continuous"); GUISetProp($obj_TLabel, "Text", "Total Progress:"); my $SafeGroups = @Groups; my $CountFiles = 0; my $UpdateFiles = array(); for($i = 0; $i < $SafeGroups; $i++) { $File = trim($_rg[$i][1]); $Hash = trim($_rg[$i][2]); $Size = trim($_rg[$i][3]); if(!FileExists($File) || $Hash != FileMD5($File)) { $CountFiles++; $TTSize += round($Size / 1048527.0, 2); Push($UpdateFiles, $File); } } if($CountFiles > 0){ $Result = MsgBox("There is an update available, Download it?\n(This will close all instances of uBlox.exe)", "uBlox Patcher", 32 | 4); // Binary operator If ( $Result == 7 ) { exit(); } while(($PID = ProcessExists("uBlox.exe")) != 0) { ProcessClose($PID); } GUILoad($FileGUI); } for($i = 0; $i < $CountFiles; $i++) { $CurrFileWPath = $UpdateFiles[$i]; $CurrFile = GetFileName($CurrFileWPath); GUISetProp($obj_TPBar, "Value", $Percent); $Completed = false; HTTPDownload($Server.$CurrFileWPath, ">$CurrFileWPath", "progress();", "completed();"); while(!$Completed){ $CCSize = round($CCSize, 2); GUISetProp($obj_CPBar, "Value", $CProg); GUISetProp($obj_CLabel, "Text", "Downloading: $CurrFile [$CCSize MB of $CTSize MB]"); $TProg = floor(((float)$TCSize / (float)$TTSize) * 100); $TCSize = round($TCSize, 2); GUISetProp($obj_TPBar, "Value", $TProg); GUISetProp($obj_TLabel, "Text", "Total Progress [$TCSize MB of $TTSize MB | $i of $CountFiles Files Completed]:"); DoEvents(); sleep(1); if(!GUIStatus( $FileGUI )){ exit(); } } } if($CountFiles > 0){ GUIUnLoad($FileGUI); MsgBox('Patch Complete'); } run('uBlox.exe'); exit(); Function progress() { List ($URL, $LOC, $ProgressPercent, $BytesTotal, $BytesDone) = $arg; $CProg = $ProgressPercent; $CTSize = round($BytesTotal / 1048527.0, 2); $TCSize += ($BytesDone / 1048527.0) - $CCSize; $CCSize = $BytesDone / 1048527.0; } Function completed() { List ($URL, $LOC) = $arg; $Completed = true; $CCSize = 0; $CTSize = 0; }
Example of using the "param" variable
Class FileDownloader { my List ($Complete, $Downloading, $URL, $LOC, $ProgressPercent, $BytesTotal, $BytesDone); Function __Construct($URL, $SaveTo) { $Complete = false; $Downloading = false; } Function DownloadFile($URL, $LOC) { if($Downloading) return false; $this->$URL = $URL; $this->$LOC = $LOC; if(HTTPDownload($URL, $LOC, '$param->Progress($arg);', '$param->Completed($arg);', $this)) { $Downloading = true; return true; } else { return false; } } Function Completed($arg) { $Complete = true; $Downloading = false; } Function Progress($arg) { List ($URL, $LOC, $ProgressPercent, $BytesTotal, $BytesDone) = $arg; $this->$ProgressPercent = $ProgressPercent; $this->$BytesTotal = $BytesTotal; $this->$BytesDone = $BytesDone; } }; my $Downloader = new FileDownloader(); $Downloader->DownloadFile("http://uberfox.no-ip.org/usb.pkg", "./usb.pkg"); println("Downloading file please wait...."); until($Downloader->$Complete) { sleep(1); // To avoid cpu hoggage doEvents(); // required for COMPLETED AND PERCENT EVENTS!!!!!! if(($Downloader->$ProgressPercent % 10) == 0) println("Download percent: " . ($Downloader->$ProgressPercent)); } println("Download Complete!!!");