mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 21:16:05 +02:00
pas2js: installer: fallback via curl
This commit is contained in:
parent
d49cb6b74f
commit
d8d2e0511b
@ -15,19 +15,21 @@ unit FrmPas2jsInstaller;
|
|||||||
{$mode ObjFPC}{$H+}
|
{$mode ObjFPC}{$H+}
|
||||||
|
|
||||||
{$IF FPC_FULLVERSION>30300}
|
{$IF FPC_FULLVERSION>30300}
|
||||||
{off $DEFINE HasSSL}
|
{$DEFINE HasSSL}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, fphttpclient, Zipper,
|
Classes, SysUtils, fphttpclient, Zipper,
|
||||||
|
{ $IFDEF HasSSL}
|
||||||
opensslsockets, // opensslsockets is needed for https download on windows
|
opensslsockets, // opensslsockets is needed for https download on windows
|
||||||
|
{ $ENDIF}
|
||||||
LazFileUtils, FPCAdds, LazLoggerBase, FileUtil,
|
LazFileUtils, FPCAdds, LazLoggerBase, FileUtil,
|
||||||
Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
|
Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
|
||||||
IDEUtils, IDEDialogs,
|
IDEUtils, IDEDialogs,
|
||||||
SimpleWebSrvController,
|
SimpleWebSrvController,
|
||||||
StrPas2JSDesign, PJSDsgnOptions, PJSController, FrmPas2jsProgressDlg;
|
StrPas2JSDesign, PJSDsgnOptions, PJSController, FrmPas2jsProgressDlg, DefineTemplates;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -48,6 +50,7 @@ type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
public
|
public
|
||||||
URL: String;
|
URL: String;
|
||||||
|
Dir: String;
|
||||||
Stream: TMemoryStream;
|
Stream: TMemoryStream;
|
||||||
ContentLength, CurrentPos: Int64;
|
ContentLength, CurrentPos: Int64;
|
||||||
OnProgress: TNotifyEvent;
|
OnProgress: TNotifyEvent;
|
||||||
@ -210,7 +213,14 @@ end;
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
procedure TPas2jsDownloadReleaseThread.Execute;
|
procedure TPas2jsDownloadReleaseThread.Execute;
|
||||||
|
var
|
||||||
|
Exe, TmpFile: String;
|
||||||
|
Params, TheOutput: TStringList;
|
||||||
|
ms: TMemoryStream;
|
||||||
|
UseFallback: Boolean;
|
||||||
begin
|
begin
|
||||||
|
UseFallback:=true;
|
||||||
|
{$IFDEF HasSSL}
|
||||||
FHTTPClient:=TFPHTTPClient.Create(Nil);
|
FHTTPClient:=TFPHTTPClient.Create(Nil);
|
||||||
FHTTPClient.AllowRedirect:=True;
|
FHTTPClient.AllowRedirect:=True;
|
||||||
FHTTPClient.OnRedirect:=@OnWorkerShowRedirect;
|
FHTTPClient.OnRedirect:=@OnWorkerShowRedirect;
|
||||||
@ -218,18 +228,70 @@ begin
|
|||||||
FHTTPClient.OnHeaders:=@OnWorkerHeaders;
|
FHTTPClient.OnHeaders:=@OnWorkerHeaders;
|
||||||
FHTTPClient.IOTimeout:=30000;
|
FHTTPClient.IOTimeout:=30000;
|
||||||
FHTTPClient.ConnectTimeout:=60000;
|
FHTTPClient.ConnectTimeout:=60000;
|
||||||
{$IFDEF HasSSL}
|
|
||||||
Client.VerifySSlCertificate:=True;
|
Client.VerifySSlCertificate:=True;
|
||||||
Client.OnVerifySSLCertificate:=@DoVerifyCertificate;
|
Client.OnVerifySSLCertificate:=@DoVerifyCertificate;
|
||||||
Client.AfterSocketHandlerCreate:=@DoHaveSocketHandler;
|
Client.AfterSocketHandlerCreate:=@DoHaveSocketHandler;
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
HttpClient.Get(URL,Stream);
|
HttpClient.Get(URL,Stream);
|
||||||
|
UseFallback:=false;
|
||||||
except
|
except
|
||||||
on E: Exception do
|
on E: Exception do
|
||||||
ErrorMsg:=E.Message;
|
ErrorMsg:=E.Message;
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
if UseFallback then
|
||||||
|
begin
|
||||||
|
// fallback: download via curl
|
||||||
|
Params:=nil;
|
||||||
|
ms:=nil;
|
||||||
|
TheOutput:=nil;
|
||||||
|
TmpFile:='';
|
||||||
|
try
|
||||||
|
try
|
||||||
|
Exe:='curl'+GetExeExt;
|
||||||
|
Exe:=FindDefaultExecutablePath(Exe);
|
||||||
|
if Exe<>'' then
|
||||||
|
begin
|
||||||
|
TmpFile:=GetTempFileNameUTF8(ChompPathDelim(Dir),'pas2js-zip');
|
||||||
|
|
||||||
|
Params:=TStringList.Create;
|
||||||
|
Params.Add(URL);
|
||||||
|
Params.Add('-o');
|
||||||
|
Params.Add(TmpFile);
|
||||||
|
debugln(['Hint: (lazarus) [TPas2jsDownloadReleaseThread.Execute] run: ',Exe,' ',URL,' -o ',TmpFile]);
|
||||||
|
TheOutput:=RunTool(Exe,Params,Dir);
|
||||||
|
if not FileExists(TmpFile) then
|
||||||
|
begin
|
||||||
|
ErrorMsg:='Tool: '+Exe+' '+URL+' -o '+TmpFile+': '+TheOutput.Text;
|
||||||
|
end else begin
|
||||||
|
ms:=TMemoryStream.Create;
|
||||||
|
ms.LoadFromFile(TmpFile);
|
||||||
|
if ms.Size=0 then
|
||||||
|
begin
|
||||||
|
ErrorMsg:='Tool: '+Exe+' '+URL+' -o '+TmpFile+': '+TheOutput.Text;
|
||||||
|
end else begin
|
||||||
|
ms.Position:=0;
|
||||||
|
Stream.CopyFrom(ms,ms.Size);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end else if ErrorMsg='' then begin
|
||||||
|
ErrorMsg:='curl'+GetExeExt+' not found';
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
TheOutput.Free;
|
||||||
|
Params.Free;
|
||||||
|
ms.Free;
|
||||||
|
if (TmpFile<>'') and FileExists(TmpFile) then
|
||||||
|
DeleteFile(TmpFile);
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
ErrorMsg:=E.Message;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
if not Terminated then
|
if not Terminated then
|
||||||
Synchronize(@OnSyncFinish);
|
Synchronize(@OnSyncFinish);
|
||||||
end;
|
end;
|
||||||
@ -377,7 +439,7 @@ begin
|
|||||||
// download
|
// download
|
||||||
s:=Format(pjsdDownloading, [ReleaseURL]);
|
s:=Format(pjsdDownloading, [ReleaseURL]);
|
||||||
DetailsMemo.Lines.Add(Format(pjsdNote, [s]));
|
DetailsMemo.Lines.Add(Format(pjsdNote, [s]));
|
||||||
DebugLn(['Note: TPas2jsInstallerDialog.DownloadReleaseButtonClick ',s]);
|
DebugLn(['Note: (lazarus) [TPas2jsInstallerDialog.DownloadReleaseButtonClick] ',s]);
|
||||||
FZipStream:=TMemoryStream.Create;
|
FZipStream:=TMemoryStream.Create;
|
||||||
|
|
||||||
if not ShowProgressDialog(pjsdDownloading2, ReleaseURL, @OnStartDownloadRelease) then
|
if not ShowProgressDialog(pjsdDownloading2, ReleaseURL, @OnStartDownloadRelease) then
|
||||||
@ -385,7 +447,7 @@ begin
|
|||||||
|
|
||||||
s:=Format(pjsdDownloadedBytes, [IntToStr(FZipStream.Size)]);
|
s:=Format(pjsdDownloadedBytes, [IntToStr(FZipStream.Size)]);
|
||||||
DetailsMemo.Lines.Add(Format(pjsdNote, [s]));
|
DetailsMemo.Lines.Add(Format(pjsdNote, [s]));
|
||||||
debugln(['Note: TPas2jsInstallerDialog.DownloadReleaseButtonClick ',s]);
|
debugln(['Note: (lazarus) [TPas2jsInstallerDialog.DownloadReleaseButtonClick] ',s]);
|
||||||
|
|
||||||
// unzip
|
// unzip
|
||||||
UnzipRelease(aDir);
|
UnzipRelease(aDir);
|
||||||
@ -514,6 +576,7 @@ begin
|
|||||||
FDownloadReleaseThread:=TPas2jsDownloadReleaseThread.Create(true);
|
FDownloadReleaseThread:=TPas2jsDownloadReleaseThread.Create(true);
|
||||||
FDownloadReleaseThread.FreeOnTerminate:=false;
|
FDownloadReleaseThread.FreeOnTerminate:=false;
|
||||||
FDownloadReleaseThread.URL:=ReleaseURL;
|
FDownloadReleaseThread.URL:=ReleaseURL;
|
||||||
|
FDownloadReleaseThread.Dir:=CleanAndExpandDirectory(Pas2jsSrcDirComboBox.Text);
|
||||||
FDownloadReleaseThread.Stream:=FZipStream;
|
FDownloadReleaseThread.Stream:=FZipStream;
|
||||||
FDownloadReleaseThread.OnProgress:=@OnDownloadReleaseProgress;
|
FDownloadReleaseThread.OnProgress:=@OnDownloadReleaseProgress;
|
||||||
FDownloadReleaseThread.OnFinish:=@OnDownloadReleaseFinish;
|
FDownloadReleaseThread.OnFinish:=@OnDownloadReleaseFinish;
|
||||||
@ -529,7 +592,7 @@ end;
|
|||||||
|
|
||||||
procedure TPas2jsInstallerDialog.OnDownloadReleaseFinish(Sender: TObject);
|
procedure TPas2jsInstallerDialog.OnDownloadReleaseFinish(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
debugln(['TPas2jsInstallerDialog.OnDownloadReleaseFinish ']);
|
debugln(['Hint: (lazarus) [TPas2jsInstallerDialog.OnDownloadReleaseFinish]']);
|
||||||
if Pas2jsProgressDialog.ModalResult<>mrNone then exit;
|
if Pas2jsProgressDialog.ModalResult<>mrNone then exit;
|
||||||
|
|
||||||
if FDownloadReleaseThread.ErrorMsg<>'' then
|
if FDownloadReleaseThread.ErrorMsg<>'' then
|
||||||
@ -648,7 +711,7 @@ begin
|
|||||||
Zip.OutputPath:=aDirectory;
|
Zip.OutputPath:=aDirectory;
|
||||||
Zip.OnStartFile:=@OnUnzipStartFile;
|
Zip.OnStartFile:=@OnUnzipStartFile;
|
||||||
Zip.UnZipAllFiles;
|
Zip.UnZipAllFiles;
|
||||||
debugln(['Note: TPas2jsInstallerDialog.UnzipRelease completed']);
|
debugln(['Note: (lazarus) [TPas2jsInstallerDialog.UnzipRelease] completed']);
|
||||||
Check('exe',FFoundPas2jsExe);
|
Check('exe',FFoundPas2jsExe);
|
||||||
Check('cfg',FFoundPas2jsCfg);
|
Check('cfg',FFoundPas2jsCfg);
|
||||||
Check('compileserver',FFoundCompileserver);
|
Check('compileserver',FFoundCompileserver);
|
||||||
|
Loading…
Reference in New Issue
Block a user