mirror of
https://github.com/moparisthebest/Simba
synced 2024-11-11 11:55:02 -05:00
241 lines
5.3 KiB
Plaintext
241 lines
5.3 KiB
Plaintext
|
program ReflectionUpdater;
|
||
|
var
|
||
|
MainMenuItem, MenuCheck, MenuUpdate,AutoUpdate : TMenuItem;
|
||
|
started: Boolean;
|
||
|
Timer : TTimer;
|
||
|
Updating : boolean;
|
||
|
LocalR,OnlineR: Integer;
|
||
|
|
||
|
F: TForm;
|
||
|
Memo: TMemo;
|
||
|
but: TButton;
|
||
|
|
||
|
|
||
|
function GetNumbers(const str : string) : string;
|
||
|
var
|
||
|
i : integer;
|
||
|
begin;
|
||
|
for i := 1 to length(str) do
|
||
|
case str[i] of
|
||
|
'0'..'9': result := result + str[i];
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure GetOnlineVersion(out RefVersion : integer);
|
||
|
begin
|
||
|
RefVersion := strtointdef(GetNumbers(getpage('http://wizzup.org/static/srl/srl_refl_version')),-1);
|
||
|
end;
|
||
|
|
||
|
procedure GetLocalVersion(out RefVersion : integer);
|
||
|
begin
|
||
|
RefVersion := StrToIntDef(Settings.GetKeyValueDef('RefVersion','-1'),-1);
|
||
|
end;
|
||
|
|
||
|
|
||
|
function UpdateRef: boolean;
|
||
|
var
|
||
|
Contents : String;
|
||
|
DeContents : string;
|
||
|
Failed : boolean;
|
||
|
begin
|
||
|
Memo.Lines.Add('Downloading Reflection...');
|
||
|
Contents := GetPage('http://wizzup.org/static/srl/srlref.tar.bz2');
|
||
|
Failed := True;
|
||
|
Memo.Lines.Add('Uncompressing Reflection...');
|
||
|
if DecompressBZip2(Contents,DeContents,4096) then
|
||
|
if UnTarEx(DeContents,IncludePath,true) then
|
||
|
Failed := False;
|
||
|
if not Failed then
|
||
|
Settings.SetKeyValue('RefVersion',inttostr(OnlineR));
|
||
|
if Result then
|
||
|
Result := Failed;
|
||
|
if not Failed then
|
||
|
begin
|
||
|
Memo.Lines.Add('Succesfully updated your Reflection!');
|
||
|
Writeln('Succesfully updated your Reflection!');
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure DoUpdate(Sender: TObject);
|
||
|
begin
|
||
|
if LocalR < OnlineR then
|
||
|
begin
|
||
|
Memo.Lines.Add('Reflection update. Old version: ' + IntToStr(LocalR) +
|
||
|
' New version: ' + IntToStr(OnlineR));
|
||
|
UpdateRef;
|
||
|
end;
|
||
|
F.ModalResult := mrOk;
|
||
|
end;
|
||
|
|
||
|
|
||
|
function Update : boolean;
|
||
|
var
|
||
|
OpenForm: Boolean;
|
||
|
begin
|
||
|
Result := false;
|
||
|
if Updating then
|
||
|
Exit;
|
||
|
Updating := True;
|
||
|
|
||
|
GetLocalVersion(LocalR);
|
||
|
GetOnlineVersion(OnlineR);
|
||
|
|
||
|
if (LocalR < OnlineR) then
|
||
|
begin
|
||
|
case MessageDlg('Reflection Updater', 'Updates are available. '+
|
||
|
'Do you want to open the Updater now?',
|
||
|
mtConfirmation, [mbNo,mbYes],0) of
|
||
|
mrYes : OpenForm := True;
|
||
|
else
|
||
|
OpenForm := False;
|
||
|
end;
|
||
|
if not OpenForm then
|
||
|
begin
|
||
|
Updating := False;
|
||
|
Exit;
|
||
|
end;
|
||
|
Result := True;
|
||
|
f.ShowModal;
|
||
|
end else
|
||
|
begin
|
||
|
MessageDlg('Reflection Updater', 'No Reflection update' ,mtConfirmation, [mbYes],0);
|
||
|
writeln('No Reflection update');
|
||
|
end;
|
||
|
|
||
|
Updating := False;
|
||
|
|
||
|
end;
|
||
|
|
||
|
procedure OnReflectionCheckClick(Sender: TObject);
|
||
|
var
|
||
|
LocalR,OnlineR : integer;
|
||
|
begin
|
||
|
GetLocalVersion(LocalR);
|
||
|
GetOnlineVersion(OnlineR);
|
||
|
|
||
|
if (LocalR < OnlineR) then
|
||
|
begin
|
||
|
Writeln('A new Reflection version is available');
|
||
|
Update;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure SetAutoUpdate(Sender: TObject);
|
||
|
begin
|
||
|
AutoUpdate.Checked := not AutoUpdate.Checked;
|
||
|
Timer.Enabled := AutoUpdate.Checked;
|
||
|
if LowerCase(Settings.GetKeyValueDef('AutoUpdate','True')) = 'true' then
|
||
|
Settings.SetKeyValue('AutoUpdate', 'False')
|
||
|
else
|
||
|
Settings.SetKeyValue('AutoUpdate', 'True');
|
||
|
end;
|
||
|
|
||
|
procedure OnReflectionUpdateClick(Sender: TObject);
|
||
|
begin
|
||
|
Update;
|
||
|
end;
|
||
|
|
||
|
procedure OnUpdateTimer(Sender: TObject);
|
||
|
begin;
|
||
|
Timer.Interval := 30 * 60 * 1000; //Every half hour
|
||
|
Update;
|
||
|
end;
|
||
|
|
||
|
procedure Init;
|
||
|
begin;
|
||
|
MainMenuItem := TMenuItem.Create(Simba_MainMenu);
|
||
|
MainMenuItem.Caption := 'Reflection';
|
||
|
Simba_MainMenu.Items.Add(MainMenuItem);
|
||
|
|
||
|
MenuCheck := TMenuItem.Create(MainMenuItem);
|
||
|
MenuCheck.Caption := 'Check for new Reflection';
|
||
|
MenuCheck.OnClick := @OnReflectionCheckClick;
|
||
|
MainMenuItem.Add(MenuCheck);
|
||
|
|
||
|
MenuUpdate := TMenuItem.Create(MainMenuItem);
|
||
|
MenuUpdate.Caption := 'Update Reflection';
|
||
|
MenuUpdate.OnClick := @OnReflectionUpdateClick;
|
||
|
MainMenuItem.Add(MenuUpdate);
|
||
|
|
||
|
AutoUpdate := TMenuItem.Create(MainMenuItem);
|
||
|
AutoUpdate.Caption := 'Automatically update';
|
||
|
AutoUpdate.OnClick := @SetAutoUpdate;
|
||
|
AutoUpdate.Checked := LowerCase(Settings.GetKeyValueDef('AutoUpdate','True')) = 'true';
|
||
|
MainMenuItem.Add(AutoUpdate);
|
||
|
|
||
|
Timer := TTimer.Create(Simba);
|
||
|
Timer.Interval := 5000;
|
||
|
Timer.OnTimer := @OnUpdateTimer;
|
||
|
Timer.Enabled :=AutoUpdate.Checked;
|
||
|
|
||
|
F := TForm.Create(nil);
|
||
|
With F Do
|
||
|
begin
|
||
|
Visible := False;
|
||
|
Width := 300;
|
||
|
Height := 300;
|
||
|
BorderStyle := bsSingle;
|
||
|
Caption := 'Reflection Updater - Updates Available';
|
||
|
end;
|
||
|
|
||
|
but := TButton.Create(F);
|
||
|
|
||
|
with but do
|
||
|
begin
|
||
|
Parent := F;
|
||
|
Left := 10;
|
||
|
Top := 10;
|
||
|
Caption := 'Update';
|
||
|
Width := 280;
|
||
|
|
||
|
OnClick := @DoUpdate;
|
||
|
end;
|
||
|
|
||
|
Memo := TMemo.Create(F);
|
||
|
|
||
|
with Memo do
|
||
|
begin
|
||
|
Parent := F;
|
||
|
Left := 10;
|
||
|
Top := 40;
|
||
|
Width := 280;
|
||
|
Height := 250;
|
||
|
end;
|
||
|
|
||
|
started := True;
|
||
|
end;
|
||
|
|
||
|
procedure Free;
|
||
|
begin
|
||
|
if (started) then
|
||
|
Timer.Enabled := False;//Freeing the components is not needed, as they will be freed upon the freeing of Simba.
|
||
|
if F <> nil then
|
||
|
F.Free;
|
||
|
end;
|
||
|
|
||
|
procedure Attach;
|
||
|
begin;
|
||
|
Writeln('From now on, you shall be alerted as to when your Reflection is out of date!');
|
||
|
MainMenuItem.Visible := True;
|
||
|
Timer.Enabled := AutoUpdate.Checked;
|
||
|
end;
|
||
|
|
||
|
Procedure Detach;
|
||
|
begin
|
||
|
Timer.Enabled := False;
|
||
|
MainMenuItem.Visible := False;
|
||
|
end;
|
||
|
|
||
|
function GetName : string;
|
||
|
begin;
|
||
|
result := 'Reflection Updater';
|
||
|
end;
|
||
|
|
||
|
function GetVersion : string;
|
||
|
begin;
|
||
|
result := '1.0';
|
||
|
end;
|
||
|
|
||
|
begin
|
||
|
end.
|