From 8e617c9f359f4ad96474903769061ee35b8dcca7 Mon Sep 17 00:00:00 2001 From: Raymond Date: Mon, 18 Jan 2010 11:52:02 +0000 Subject: [PATCH] Fixed #63 (and #64). Changed the updateform a bit.. Made Cancel button behave more noob-friendly, and added a speed label -> "Downloading at x kB/s". git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@425 3f818213-9676-44b0-a9b4-5e4c4e03d09d --- Projects/SAMufasaGUI/framescript.pas | 5 ++-- Projects/SAMufasaGUI/updateform.lfm | 19 +++++++++---- Projects/SAMufasaGUI/updateform.lrs | 20 +++++++------ Projects/SAMufasaGUI/updateform.pas | 42 ++++++++++++++++++++++++---- Units/MMLAddon/updater.pas | 2 ++ 5 files changed, 66 insertions(+), 22 deletions(-) diff --git a/Projects/SAMufasaGUI/framescript.pas b/Projects/SAMufasaGUI/framescript.pas index 7f3b565..4abaf30 100644 --- a/Projects/SAMufasaGUI/framescript.pas +++ b/Projects/SAMufasaGUI/framescript.pas @@ -100,8 +100,9 @@ end; procedure TScriptFrame.SynEditDragDrop(Sender, Source: TObject; X, Y: Integer); begin - if TFunctionListFrame(Source).DraggingNode.Data <> nil then - SynEdit.InsertTextAtCaret( GetMethodName(PChar(TFunctionListFrame(Source).DraggingNode.Data),true)); + if Source is TFunctionListFrame then + if TFunctionListFrame(Source).DraggingNode.Data <> nil then + SynEdit.InsertTextAtCaret( GetMethodName(PChar(TFunctionListFrame(Source).DraggingNode.Data),true)); end; procedure TScriptFrame.SynEditDragOver(Sender, Source: TObject; X, Y: Integer; diff --git a/Projects/SAMufasaGUI/updateform.lfm b/Projects/SAMufasaGUI/updateform.lfm index b9ff63d..149534d 100644 --- a/Projects/SAMufasaGUI/updateform.lfm +++ b/Projects/SAMufasaGUI/updateform.lfm @@ -14,7 +14,7 @@ object SimbaUpdateForm: TSimbaUpdateForm object DownloadProgress: TProgressBar Left = 24 Height = 28 - Top = 72 + Top = 64 Width = 413 Anchors = [akTop, akLeft, akRight] Smooth = True @@ -23,7 +23,7 @@ object SimbaUpdateForm: TSimbaUpdateForm object UpdateButton: TButton Left = 24 Height = 40 - Top = 16 + Top = 8 Width = 413 Anchors = [akTop, akLeft, akRight] Caption = 'Update!' @@ -33,7 +33,7 @@ object SimbaUpdateForm: TSimbaUpdateForm object OkButton: TButton Left = 362 Height = 25 - Top = 344 + Top = 352 Width = 75 Anchors = [akRight, akBottom] Caption = 'Ok' @@ -43,7 +43,7 @@ object SimbaUpdateForm: TSimbaUpdateForm object CancelButton: TButton Left = 24 Height = 25 - Top = 344 + Top = 352 Width = 75 Anchors = [akLeft, akBottom] Caption = 'Cancel' @@ -53,9 +53,18 @@ object SimbaUpdateForm: TSimbaUpdateForm object UpdateLog: TMemo Left = 24 Height = 207 - Top = 120 + Top = 128 Width = 413 Anchors = [akTop, akLeft, akRight, akBottom] TabOrder = 4 end + object DownloadSpeed: TLabel + Left = 24 + Height = 14 + Top = 104 + Width = 78 + Caption = 'DownloadSpeed' + ParentColor = False + Visible = False + end end diff --git a/Projects/SAMufasaGUI/updateform.lrs b/Projects/SAMufasaGUI/updateform.lrs index 38a8547..570894b 100644 --- a/Projects/SAMufasaGUI/updateform.lrs +++ b/Projects/SAMufasaGUI/updateform.lrs @@ -6,17 +6,19 @@ LazarusResources.Add('TSimbaUpdateForm','FORMDATA',[ +'BorderIcons'#11#12'biSystemMenu'#10'biMinimize'#0#7'Caption'#6#12'Update Si' +'mba'#12'ClientHeight'#3#135#1#11'ClientWidth'#3#211#1#8'OnCreate'#7#10'Form' +'Create'#6'OnShow'#7#15'CleanUpdateForm'#10'LCLVersion'#6#6'0.9.29'#0#12'TPr' - +'ogressBar'#16'DownloadProgress'#4'Left'#2#24#6'Height'#2#28#3'Top'#2'H'#5'W' + +'ogressBar'#16'DownloadProgress'#4'Left'#2#24#6'Height'#2#28#3'Top'#2'@'#5'W' +'idth'#3#157#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#6'Smooth'#9#8'T' +'abOrder'#2#0#0#0#7'TButton'#12'UpdateButton'#4'Left'#2#24#6'Height'#2'('#3 - +'Top'#2#16#5'Width'#3#157#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#7 - +'Caption'#6#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0 - +#7'TButton'#8'OkButton'#4'Left'#3'j'#1#6'Height'#2#25#3'Top'#3'X'#1#5'Width' + +'Top'#2#8#5'Width'#3#157#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#7'C' + +'aption'#6#7'Update!'#7'OnClick'#7#17'UpdateButtonClick'#8'TabOrder'#2#1#0#0 + +#7'TButton'#8'OkButton'#4'Left'#3'j'#1#6'Height'#2#25#3'Top'#3'`'#1#5'Width' +#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#7'Caption'#6#2'Ok'#7'OnClick'#7 +#13'OkButtonClick'#8'TabOrder'#2#2#0#0#7'TButton'#12'CancelButton'#4'Left'#2 - +#24#6'Height'#2#25#3'Top'#3'X'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akB' + +#24#6'Height'#2#25#3'Top'#3'`'#1#5'Width'#2'K'#7'Anchors'#11#6'akLeft'#8'akB' +'ottom'#0#7'Caption'#6#6'Cancel'#7'OnClick'#7#17'CancelButtonClick'#8'TabOrd' - +'er'#2#3#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#24#6'Height'#3#207#0#3'Top'#2'x' - +#5'Width'#3#157#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8 - +'TabOrder'#2#4#0#0#0 -]); \ No newline at end of file + +'er'#2#3#0#0#5'TMemo'#9'UpdateLog'#4'Left'#2#24#6'Height'#3#207#0#3'Top'#3 + +#128#0#5'Width'#3#157#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBott' + +'om'#0#8'TabOrder'#2#4#0#0#6'TLabel'#13'DownloadSpeed'#4'Left'#2#24#6'Height' + +#2#14#3'Top'#2'h'#5'Width'#2'N'#7'Caption'#6#13'DownloadSpeed'#11'ParentColo' + +'r'#8#7'Visible'#8#0#0#0 +]); diff --git a/Projects/SAMufasaGUI/updateform.pas b/Projects/SAMufasaGUI/updateform.pas index b6722ab..dbfb050 100644 --- a/Projects/SAMufasaGUI/updateform.pas +++ b/Projects/SAMufasaGUI/updateform.pas @@ -22,6 +22,7 @@ type procedure Execute; override; end; TSimbaUpdateForm = class(TForm) + DownloadSpeed: TLabel; UpdateLog: TMemo; UpdateButton: TButton; OkButton: TButton; @@ -38,8 +39,12 @@ type { private declarations } Updater: TMMLFileDownloader; + FStartTime : longword; FCancelling: Boolean; FDone: Boolean; + FUpdating : boolean; + FOldSpeed : integer; + FLastUpdateSpeed : longword; FSimbaVersion: Integer; SimbaVersionThread : TSimbaVersionThread; private @@ -52,6 +57,9 @@ type FCancelled: Boolean; end; +const + DownloadSpeedTextRunning = 'Downloading at %d kB/s'; + DownloadSpeedTextEnded = 'Downloaded at %d kB/s'; var SimbaUpdateForm: TSimbaUpdateForm; @@ -59,7 +67,7 @@ var implementation uses - internets, TestUnit, simbasettings; + internets, TestUnit, simbasettings,lclintf; function TSimbaUpdateForm.CanUpdate: Boolean; begin @@ -104,7 +112,10 @@ end; procedure TSimbaUpdateForm.UpdateButtonClick(Sender: TObject); begin - Self.PerformUpdate; + if FUpdating then + UpdateLog.Lines.Add('Already performing an update!') + else + Self.PerformUpdate; end; procedure TSimbaUpdateForm.CancelButtonClick(Sender: TObject); @@ -124,11 +135,14 @@ begin Self.DownloadProgress.Position:=0; Self.UpdateLog.Clear; Self.UpdateLog.Lines.Add('---------- Update Session ----------'); + Self.DownloadSpeed.Visible:= false; end; procedure TSimbaUpdateForm.FormCreate(Sender: TObject); begin FDone := True; + FUpdating:= false; + end; procedure TSimbaUpdateForm.OkButtonClick(Sender: TObject); @@ -141,19 +155,29 @@ end; function TSimbaUpdateForm.OnUpdateBeat: Boolean; var Percentage: Integer; + NewSpeed : integer; begin Application.ProcessMessages; Percentage := Updater.GetPercentage(); if Percentage <> -1 then DownloadProgress.Position:=Percentage; - + // Formula for speed (kB/s) -> (Bytes div 1000) / (MSecSinceStart div 1000) = Bytes/ MSecSinceStart + NewSpeed :=(Updater.DownloadedSize) div ((GetTickCount-FStartTime)); + if abs(NewSpeed - FOldSpeed) > 1 then + if (GetTickCount - FLastUpdateSpeed) > 1000 then //Only update the speed text every second + begin; + FOldSpeed:= NewSpeed; + DownloadSpeed.Caption:= Format(DownloadSpeedTextRunning,[NewSpeed]); + FLastUpdateSpeed:= GetTickCount; + end; Result := FCancelling; end; procedure TSimbaUpdateForm.PerformUpdate; begin + FUpdating:= True; Updater := TMMLFileDownloader.Create; FDone := False; @@ -176,24 +200,30 @@ begin Self.UpdateLog.Lines.Add('Starting download of ' + Updater.FileURL + ' ...'); try Self.OkButton.Enabled := False; // grey out button + DownloadSpeed.Visible:= true; + DownloadSpeed.Caption:= Format(DownloadSpeedTextRunning,[0]); + FStartTime:= GetTickCount - 1;//Be sure that we don't get div 0 Updater.DownloadAndSave; + DownloadSpeed.Caption := Format(DownloadSpeedTextEnded,[Updater.FileSize div (GetTickCount-FStartTime)]); Self.UpdateLog.Lines.Add('Downloaded to ' + Updater.ReplacementFile + '_ ...'); Updater.Replace; Self.UpdateLog.Lines.Add('Renaming ' + Updater.ReplacementFile + ' to ' + Updater.ReplacementFile + '_old_'); Self.UpdateLog.Lines.Add('Renaming ' + Updater.ReplacementFile + '_ to ' + Updater.ReplacementFile); Self.UpdateLog.Lines.Add('Deleting ' + Updater.ReplacementFile + '_old_'); Updater.Free; + Self.UpdateLog.Lines.Add('Done ... '); + Self.UpdateLog.Lines.Add('Please restart all currently running Simba binaries.'); except FCancelling := False; FCancelled := True; - Self.UpdateLog.Lines.Add('Download stopped ...'); + DownloadSpeed.Visible:= false; + Self.UpdateLog.Lines.Add('Download stopped at '+inttostr(DownloadProgress.Position)+'%... Simba did not succesfully update.'); // more detailed info writeln('EXCEPTION IN UPDATEFORM: We either hit Cancel, or something went wrong with files'); end; FDone := True; - Self.UpdateLog.Lines.Add('Done ... '); - Self.UpdateLog.Lines.Add('Please restart all currently running Simba binaries.'); Self.OkButton.Enabled := True; // un-grey out button + FUpdating:= false; end; { TSimbaVersionThread } diff --git a/Units/MMLAddon/updater.pas b/Units/MMLAddon/updater.pas index fdfd114..07d0028 100644 --- a/Units/MMLAddon/updater.pas +++ b/Units/MMLAddon/updater.pas @@ -66,6 +66,8 @@ type { Called every 50ms } property OnBeat: TMMLFunctionBoolean read FOnBeat write FOnBeat; + property DownloadedSize : Integer read FTotal; + property FileSize : integer read FFileSize; function GetPercentage: Integer; private procedure TryToGetFileSize;