Advertisement
mixster

mixster

Apr 11th, 2010
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.74 KB | None | 0 0
  1. program SRLInstaller;
  2. var
  3.   MainMenuItem, MenuCheck, MenuUpdate, MenuMove, MenuSetVersion: TMenuItem;
  4.   started: Boolean;
  5.  
  6. procedure init;
  7. begin
  8. end;
  9.  
  10. procedure free;
  11. begin
  12. end;
  13.  
  14. function GetNumbers(const str : string) : string;
  15. var
  16.   i : integer;
  17. begin;
  18.   for i := 1 to length(str) do
  19.     case str[i] of
  20.       '0'..'9': result := result + str[i];
  21.     end;
  22. end;
  23.  
  24. function PosEx(find, str: string; start: Integer): Integer;
  25. var
  26.   o, t: Integer;
  27. begin
  28.   Result := 0;
  29.   o := 0;
  30.   repeat
  31.     t := Pos(find, str);
  32.     if (t + o >= start) or (t = 0) then
  33.       Break;
  34.     Delete(str, 1, t);
  35.     o := o + t;
  36.   Until Length(str) < start;
  37.  
  38.   if (t + o >= start) then
  39.     Result := t + o;
  40. end;
  41.  
  42. function Between(start, finish, str: string): string;
  43. var
  44.   b, e: Integer;
  45. begin
  46.   Result := '';
  47.   b := Pos(start, str);
  48.   if (b <> 0) then
  49.   begin
  50.     e := PosEx(finish, str, b + 1);
  51.     if (e <> 0) then
  52.       Result := Copy(str, b, e - b);
  53.   end;
  54. end;
  55.  
  56. function GetRemoteSRLVersion(tryagain: Boolean): Integer;
  57. begin
  58.   Result := StrToIntDef(GetNumbers(GetPage('http://wizzup.org/simba/srl/srl_version')), -1);
  59.   if (Result = -1) then
  60.   begin
  61.     if (tryagain) then
  62.     begin
  63.       Writeln('Error retrieving remote SRL version. Trying again');
  64.       Result := GetRemoteSRLVersion(False);
  65.     end
  66.     else
  67.     begin
  68.       Writeln('Error retrieving the remote SRL version. Not trying again');
  69.     end;
  70.   end;
  71. end;
  72.  
  73. function IsSRLDownloaded(out uptodate: Boolean): Boolean;
  74. var
  75.   remoteVersion, localVersion: Integer;
  76. begin
  77.   Result := Settings.IsKey('SRLVersion');
  78.  
  79.   if (Result) then
  80.   begin
  81.     remoteVersion := GetRemoteSRLVersion(True);
  82.     if (remoteVersion = -1) then
  83.     begin
  84.       Writeln('Unable to get remote version - assuming SRL include is up to date');
  85.       uptodate := True;
  86.     end
  87.     else
  88.     begin
  89.       localVersion := StrToIntDef(Settings.GetKeyValue('SRLVersion'), -1);
  90.       uptodate := localVersion = remoteVersion;
  91.  
  92.       if (uptodate) then
  93.         Writeln('The local SRL include is up-to-date!')
  94.       else
  95.       begin
  96.         if (localVersion < remoteVersion) then
  97.           Writeln('The local SRL include is not up-to-date')
  98.         else
  99.           Writeln('You some how ended up with a newer version than the remote!')
  100.       end;
  101.     end;
  102.   end
  103.   else
  104.   begin
  105.     uptodate := False;
  106.     Writeln('There currently is no local version of the SRL includes!');
  107.   end;
  108. end;
  109.  
  110. procedure UpdateLocalSRLVersionSetting;
  111. var
  112.   ver: Integer;
  113.  
  114. begin
  115.   ver := GetRemoteSRLVersion(True);
  116.   if ver = -1 then
  117.   begin
  118.     Writeln('Unable to get the remote version.')
  119.     Writeln('If SRL has just been installed or you are confident you have the latest version, please try again later');
  120.   end
  121.   else
  122.   begin
  123.     Settings.SetKeyValue('SRLVersion', IntToStr(ver));
  124.     Writeln('Successfully updated the local version setting to match the remote!');
  125.   end;
  126. end;
  127.  
  128. procedure DownloadSRL;
  129. var
  130.   sauce, contents: string;
  131. begin
  132.   Writeln('Downloading SRL');
  133.   sauce := GetPage('http://wizzup.org/simba/srl/srl.tar.bz2');
  134.   if DecompressBZip2(sauce, contents, 4096) then
  135.   begin
  136.     UnTarEx(contents, IncludePath, True);    
  137.     UpdateLocalSRLVersionSetting;
  138.     Writeln('SRL was successfully downloaded and installed without a problem!');
  139.   end
  140.   else
  141.     Writeln('SRL failed to install correctly. Please try again and if the problem persists, check the forums or the IRC channel for news or help');
  142. end;
  143.  
  144. procedure CheckSRLVersion;
  145. var
  146.   uptodate: Boolean;
  147.   option:   Integer;
  148. begin
  149.   if not(IsSRLDownloaded(uptodate) and uptodate) then
  150.   begin
  151.     option := MessageDlg('SRL Updater', 'SRL was detected as not up-to-date - would you like to update it?', mtConfirmation, [mbYes, mbNo], 0);
  152.     if option = mrYes then
  153.       DownloadSRL
  154.     else
  155.     begin
  156.       Writeln('If you are confident your SRL is up-to-date, you can update the local version setting');
  157.       Writeln('Or you can choose to update SRL - both are accessible via the SRL menu');
  158.     end;
  159.   end;
  160. end;
  161.  
  162. procedure OnSRLUpdaterClick(Sender: TObject);
  163. begin
  164.   if (Sender = MenuCheck) then
  165.     CheckSRLVersion
  166.   else if (Sender = MenuUpdate) then
  167.     DownloadSRL
  168.   else if (Sender = MenuMove) then
  169.     Writeln('Coming soon!')
  170.   else if (Sender = MenuSetversion) then
  171.     UpdateLocalSRLVersionSetting;
  172. end;
  173.  
  174. procedure Attach;
  175. var
  176.   uptodate: Boolean;
  177.   option: Integer;
  178. begin;
  179.   if not started then
  180.   begin
  181.     MainMenuItem := TMenuItem.Create(Simba_MainMenu);
  182.     MainMenuItem.Caption := 'SRL';
  183.     Simba_MainMenu.Items.Add(MainMenuItem);
  184.  
  185.     MenuCheck := TMenuItem.Create(MainMenuItem);
  186.     MenuCheck.Caption := 'Check for new SRL';
  187.     MenuCheck.OnClick := @OnSRLUpdaterClick;
  188.     MainMenuItem.Add(MenuCheck);
  189.  
  190.     MenuUpdate := TMenuItem.Create(MainMenuItem);
  191.     MenuUpdate.Caption := 'Update SRL';
  192.     MenuUpdate.OnClick := @OnSRLUpdaterClick;
  193.     MainMenuItem.Add(MenuUpdate);
  194.  
  195.     MenuMove := TMenuItem.Create(MainMenuItem);
  196.     MenuMove.Caption := 'Move SRL plugins';
  197.     MenuMove.OnClick := @OnSRLUpdaterClick;
  198.     MainMenuItem.Add(MenuMove);
  199.  
  200.     MenuSetversion := TMenuItem.Create(MainMenuItem);
  201.     MenuSetversion.Caption := 'Set local version to remote';
  202.     MenuSetversion.OnClick := @OnSRLUpdaterClick;
  203.     MainMenuItem.Add(MenuSetversion);
  204.  
  205.     started := True;
  206.   end
  207.   else
  208.   begin
  209.     MainMenuItem.Visible := True;
  210.   end;
  211.  
  212.   CheckSRLVersion;
  213. end;
  214.  
  215. Procedure Detach;
  216. begin
  217.   Writeln('SRL version checking and the like will no longer be checked');
  218.   if started then
  219.   begin
  220.     MainMenuItem.Visible := False;
  221.   end;
  222. end;
  223.  
  224. function GetName : string;
  225. begin;
  226.   result := 'SRL Include Downloader';
  227. end;
  228.  
  229. function GetVersion : string;
  230. begin;
  231.   result := '1.0';
  232. end;
  233.  
  234. begin
  235. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement