diff --git a/installer/MMS_Installer.exe b/installer/MMS_Installer.exe index 78b5948..e0d2185 100644 Binary files a/installer/MMS_Installer.exe and b/installer/MMS_Installer.exe differ diff --git a/installer/UnitInstall.pas b/installer/UnitInstall.pas index 5b7f72a..1bf6fcd 100644 --- a/installer/UnitInstall.pas +++ b/installer/UnitInstall.pas @@ -406,8 +406,7 @@ label CreateAgain; label UploadAgain; var eStr: TStringList; - i: integer; - CopyConfig, eFound: Boolean; + CopyConfig: Boolean; begin frmMain.cmdCancel.Show; frmMain.cmdNext.Hide; @@ -418,6 +417,7 @@ begin frmMain.ggeItem.MaxValue := 3; frmMain.ggeItem.Progress := 0; + StartTime := Now; { Unpack } AddStatus('Unpacking files...', clBlack); if not Unpack(Source) then begin @@ -434,7 +434,7 @@ begin frmMain.ggeItem.Progress := 0; AddStatus('Creating directories...', clBlack); - if not eFound then begin + try FTPMakeDir('addons'); frmMain.IdFTP.ChangeDir('addons'); frmMain.ggeItem.Progress := 1; @@ -444,12 +444,11 @@ begin FTPMakeDir('bin'); frmMain.ggeItem.Progress := 3; AddDone; - end - else + except AddSkipped; + end; { Create/Edit VDF Plugin } CopyConfig := True; - eFound := False; frmMain.ggeAll.Progress := 3; frmMain.ggeItem.Progress := 0; @@ -457,7 +456,7 @@ begin AddStatus('Creating VDF Plugin...', clBlack); eStr := TStringList.Create; try - frmMain.IdFTP.ChangeDir('addons'); + frmMain.IdFTP.ChangeDirUp; frmMain.ggeItem.Progress := 1; DownloadFile('metamod.vdf', ExtractFilePath(ParamStr(0)) + 'metamod.vdf'); eStr.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'metamod.vdf'); @@ -465,7 +464,6 @@ begin if (((Pos('server.dll', eStr.Text) <> 0) and (OS = osWindows)) or ((Pos('server_i486.so', eStr.Text) <> 0) and (OS = osLinux))) then begin AddSkipped; - eFound := True; case MessageBox(frmMain.Handle, 'A Metamod:Source installation was already detected. If you choose to reinstall, your configuration files will be erased. Click Yes to continue, No to Upgrade, or Cancel to abort the install.', PChar(frmMain.Caption), MB_ICONQUESTION + MB_YESNOCANCEL) of mrNo: CopyConfig := False; mrCancel: begin @@ -489,7 +487,6 @@ begin eStr.SaveToFile(ExtractFilePath(ParamStr(0)) + 'metamod.vdf'); UploadFile(ExtractFilePath(ParamStr(0)) + 'metamod.vdf', 'metamod.vdf'); frmMain.ggeItem.Progress := 3; - AddDone; end; { Upload metaplugins.ini } frmMain.ggeAll.Progress := 4; @@ -500,7 +497,6 @@ begin eStr.Clear; eStr.SaveToFile(ExtractFilePath(ParamStr(0)) + 'metaplugins.ini'); UploadFile(ExtractFilePath(ParamStr(0)) + 'metaplugins.ini', 'metaplugins.ini'); - DeleteFile(PChar(ExtractFilePath(ParamStr(0)) + 'metaplugins.ini')); end else AddSkipped; @@ -509,6 +505,7 @@ begin { Upload server.dll / server_i486.so } frmMain.tmrSpeed.Enabled := True; frmMain.ggeItem.Progress := 0; + frmMain.IdFTP.ChangeDir('metamod'); frmMain.IdFTP.ChangeDir('bin'); if OS = osWindows then begin AddStatus('Uploading server.dll...', clBlack); @@ -524,6 +521,8 @@ begin AddStatus('Removing temporary files...', clBlack); DeleteFile(PChar(ExtractFilePath(ParamStr(0)) + 'server.dll')); DeleteFile(PChar(ExtractFilePath(ParamStr(0)) + 'server_i486.so')); + DeleteFile(PChar(ExtractFilePath(ParamStr(0)) + 'metamod.vdf')); + DeleteFile(PChar(ExtractFilePath(ParamStr(0)) + 'metaplugins.ini')); AddDone; { End } frmMain.IdFTP.Disconnect; diff --git a/installer/UnitfrmMain.pas b/installer/UnitfrmMain.pas index 62bd95f..0982d5e 100644 --- a/installer/UnitfrmMain.pas +++ b/installer/UnitfrmMain.pas @@ -473,9 +473,9 @@ begin end; procedure TfrmMain.cmdConnectClick(Sender: TObject); -var i: integer; +var i, k: integer; eStr: TStringList; - CurNode: TTreeNode; + CurNode, CurNode2: TTreeNode; Path: String; begin if (Trim(txtHost.Text) = '') or (Trim(txtUsername.Text) = '') then @@ -506,7 +506,7 @@ begin eStr := TStringList.Create; eStr.Text := StringReplace(Path, '/', #13, [rfReplaceAll]); for i := eStr.Count -1 downto 0 do begin - if eStr[i] = '' then + if (eStr[i] = '') then eStr.Delete(i); end; if (Copy(Path, Length(Path) -1, 1) <> '/') then @@ -515,47 +515,39 @@ begin trvDirectories.Enabled := True; cmdConnect.Enabled := True; cmdConnect.Caption := 'Disconnect'; - // ... change to / and create all the directories ... - CurNode := nil; - if (Path <> '/') then begin - try - IdFTP.ChangeDir('/'); - with GetAllDirs do begin - for i := 0 to Count -1 do begin - if (Assigned(CurNode)) then - trvDirectories.Items.AddChild(trvDirectories.Items.Add(nil, Strings[i]), 'Scanning...') - else begin - CurNode := trvDirectories.Items.Add(nil, Strings[i]); - trvDirectories.Items.AddChild(CurNode, 'Scanning...'); - if (Pos('/' + CurNode.Text + '/', Path) = 0) then - CurNode := nil; - end - end; - Free; - end; - IdFTP.ChangeDir(Path); - except - if (IdFTP.Connected) then - IdFTP.ChangeDir(Path) - else - IdFTP.Connect; - end; - end; // ... find directories in start path ... - if eStr.Count <> 0 then begin - for i := 0 to eStr.Count -1 do begin - if (not ((i = 0) and (Assigned(CurNode)))) then - CurNode := trvDirectories.Items.AddChild(CurNode, eStr[i]); + CurNode := nil; + CurNode2 := nil; + if (eStr.Count <> 0) then begin + IdFTP.ChangeDir('/'); + for i := 0 to eStr.Count do begin + try + with GetAllDirs do begin + for k := 0 to Count -1 do begin + if (i = eStr.Count) or (Strings[k] <> eStr[i]) then + trvDirectories.Items.AddChild(trvDirectories.Items.AddChild(CurNode, Strings[k]), 'Scanning...') + else + CurNode2 := trvDirectories.Items.AddChild(CurNode, Strings[k]); + end; + Free; + + CurNode := CurNode2; + trvDirectories.Selected := CurNode; + Repaint; + Application.ProcessMessages; + end; + + if (i <> eStr.Count) then + IdFTP.ChangeDir(eStr[i]); + except + IdFTP.CheckForDisconnect(False); + if (not IdFTP.Connected) then + IdFTP.Disconnect; + CurNode := trvDirectories.Items.AddChild(CurNode, eStr.Strings[i]) + end; end; end; - trvDirectories.Selected := CurNode; eStr.Free; - // ... scan for directories ... - with GetAllDirs do begin - for i := 0 to Count -1 do - trvDirectories.Items.AddChild(trvDirectories.Items.AddChild(CurNode, Strings[i]), 'Scanning...'); - Free; - end; if Assigned(CurNode) then CurNode.Expand(False);