mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-11 20:19:14 +02:00
Opkman: More bugfix + optimizations.
git-svn-id: trunk@53669 -
This commit is contained in:
parent
0f58c1ef85
commit
025eab7ffe
@ -543,7 +543,7 @@ Type
|
||||
Procedure UnZipAllFiles(AFileName : String);
|
||||
Procedure Clear;
|
||||
Procedure Examine;
|
||||
Function GetZipSize(var IsDirZipped: Boolean): Int64;
|
||||
Function GetZipSize(var IsDirZipped: Boolean; var ABaseDir: String): Int64;
|
||||
Public
|
||||
Property BufferSize : LongWord Read FBufSize Write SetBufSize;
|
||||
Property OnOpenInputStream: TCustomInputStreamEvent read FOnOpenInputStream write FOnOpenInputStream;
|
||||
@ -2643,12 +2643,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TUnZipper.GetZipSize(var IsDirZipped: Boolean): Int64;
|
||||
function TUnZipper.GetZipSize(var IsDirZipped: Boolean; var ABaseDir: String): Int64;
|
||||
var
|
||||
I: Integer;
|
||||
Item: TFullZipFileEntry;
|
||||
AllFiles: Boolean;
|
||||
BasePath: String;
|
||||
P: Integer;
|
||||
begin
|
||||
AllFiles := (FFiles.Count = 0);
|
||||
@ -2656,14 +2655,13 @@ begin
|
||||
try
|
||||
ReadZipDirectory;
|
||||
Result := 0;
|
||||
BasePath := '';
|
||||
if FEntries.Count > 0 then
|
||||
begin
|
||||
P := Pos('/', TZipFileEntry(FEntries.Items[0]).ArchiveFileName);
|
||||
if P = 0 then
|
||||
P := Pos('\', TZipFileEntry(FEntries.Items[0]).ArchiveFileName);
|
||||
if P <> 0 then
|
||||
BasePath := Copy(TZipFileEntry(FEntries.Items[0]).ArchiveFileName, 1, P);
|
||||
ABaseDir := Copy(TZipFileEntry(FEntries.Items[0]).ArchiveFileName, 1, P);
|
||||
end;
|
||||
for i:=0 to FEntries.Count-1 do
|
||||
begin
|
||||
@ -2672,10 +2670,14 @@ begin
|
||||
begin
|
||||
Result := Result + TZipFileEntry(Item).Size;
|
||||
if IsDirZipped then
|
||||
if Pos(BasePath, Item.ArchiveFileName) = 0 then
|
||||
if Pos(ABaseDir, Item.ArchiveFileName) = 0 then
|
||||
IsDirZipped := False;
|
||||
end;
|
||||
end;
|
||||
if not IsDirZipped then
|
||||
ABaseDir := ''
|
||||
else
|
||||
ABaseDir := Copy(ABaseDir, 1, Length(ABaseDir) - 1);
|
||||
finally
|
||||
CloseInput;
|
||||
end;
|
||||
|
@ -45,11 +45,12 @@ const
|
||||
cRestrictedDirectoryDef = 'lib,backup';
|
||||
cHelpPage = 'http://wiki.freepascal.org/Online_Package_Manager';
|
||||
{$ifdef win64}
|
||||
OpenSSLURL = 'http://packages.lazarus-ide.org/openssl-1.0.2j-x64_86-win64.zip';
|
||||
cOpenSSLURL = 'http://packages.lazarus-ide.org/openssl-1.0.2j-x64_86-win64.zip';
|
||||
{$endif}
|
||||
{$ifdef win32}
|
||||
OpenSSLURL = 'http://packages.lazarus-ide.org/openssl-1.0.2j-i386-win32.zip';
|
||||
cOpenSSLURL = 'http://packages.lazarus-ide.org/openssl-1.0.2j-i386-win32.zip';
|
||||
{$endif}
|
||||
cExtractDir = 'ExtractDir';
|
||||
|
||||
resourcestring
|
||||
//package manager
|
||||
|
@ -170,7 +170,10 @@ begin
|
||||
Exit;
|
||||
end;
|
||||
|
||||
SD.FileName := 'update_' + FPackage.DisplayName;
|
||||
if FPackage.DisplayName <> '' then
|
||||
SD.FileName := 'update_' + FPackage.DisplayName
|
||||
else
|
||||
SD.FileName := 'update_' + FPackage.Name;
|
||||
if SD.Execute then
|
||||
begin
|
||||
UpdatePackage := TUpdatePackage.Create;
|
||||
|
@ -196,10 +196,10 @@ end;
|
||||
|
||||
procedure TMainFrm.GetPackageList;
|
||||
begin
|
||||
Updates.PauseUpdate;
|
||||
Caption := rsLazarusPackageManager;
|
||||
VisualTree.VST.Clear;
|
||||
if SerializablePackages.Count > 0 then
|
||||
SerializablePackages.Clear;
|
||||
VisualTree.VST.Invalidate;
|
||||
EnableDisableControls(False);
|
||||
SetupMessage(rsMainFrm_rsMessageDownload);
|
||||
PackageDownloader.DownloadJSON(10000);
|
||||
@ -314,13 +314,14 @@ begin
|
||||
Exit;
|
||||
end;
|
||||
VisualTree.PopulateTree;
|
||||
Updates.StartUpdate;
|
||||
EnableDisableControls(True);
|
||||
SetupMessage;
|
||||
mJSON.Text := AJSON;
|
||||
cbAll.Checked := False;
|
||||
Caption := rsLazarusPackageManager + ' ' + Format(rsPackagesFound, [
|
||||
IntToStr(SerializablePackages.Count)]);
|
||||
if Assigned(Updates) then
|
||||
Updates.StartUpdate;
|
||||
end;
|
||||
etConfig:
|
||||
begin
|
||||
@ -542,9 +543,6 @@ end;
|
||||
|
||||
procedure TMainFrm.tbRefreshClick(Sender: TObject);
|
||||
begin
|
||||
Updates.PauseUpdate;
|
||||
VisualTree.VST.Clear;
|
||||
VisualTree.VST.Invalidate;
|
||||
GetPackageList;
|
||||
end;
|
||||
|
||||
|
@ -156,7 +156,10 @@ begin
|
||||
begin
|
||||
Node := FVST.AddChild(nil);
|
||||
Data := FVST.GetNodeData(Node);
|
||||
Data^.FName := SerializablePackages.Items[I].DisplayName;
|
||||
if SerializablePackages.Items[I].DisplayName <> '' then
|
||||
Data^.FName := SerializablePackages.Items[I].DisplayName
|
||||
else
|
||||
Data^.FName := SerializablePackages.Items[I].Name;
|
||||
Data^.FImageIndex := 0;
|
||||
end;
|
||||
end
|
||||
@ -172,7 +175,10 @@ begin
|
||||
Inc(InvCnt);
|
||||
Node := FVST.AddChild(nil);
|
||||
Data := FVST.GetNodeData(Node);
|
||||
Data^.FName := SerializablePackages.Items[I].DisplayName;
|
||||
if SerializablePackages.Items[I].DisplayName <> '' then
|
||||
Data^.FName := SerializablePackages.Items[I].DisplayName
|
||||
else
|
||||
Data^.FName := SerializablePackages.Items[I].Name;
|
||||
Data^.FImageIndex := 0;
|
||||
SerializablePackages.Items[I].ChangePackageStates(ctAdd, psError);
|
||||
end;
|
||||
|
@ -32,7 +32,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Variants, fpjson, jsonparser, md5, contnrs,
|
||||
PackageIntf, Laz2_XMLCfg;
|
||||
PackageIntf, Laz2_XMLCfg, LazFileUtils;
|
||||
|
||||
|
||||
type
|
||||
@ -206,6 +206,7 @@ type
|
||||
FSVNURL: String;
|
||||
FUpdateSize: Int64;
|
||||
FIsDirZipped: Boolean;
|
||||
FZippedBaseDir: String;
|
||||
FPackageFiles: TCollection;
|
||||
function GetDownloadable: Boolean;
|
||||
function GetExtractable: Boolean;
|
||||
@ -221,6 +222,7 @@ type
|
||||
property IsExtractable: Boolean read GetExtractable;
|
||||
property UpdateSize: Int64 read FUpdateSize write FUpdateSize;
|
||||
property IsDirZipped: Boolean read FIsDirZipped write FIsDirZipped;
|
||||
property ZippedBaseDir: String read FZippedBaseDir write FZippedBaseDir;
|
||||
property DownloadZipURL: String read FDownloadZipURL write FDownloadZipURL;
|
||||
property HasUpdate: Boolean read FHasUpdate write FHasUpdate;
|
||||
property DisableInOPM: Boolean read FDisableInOPM write FDisableInOPM;
|
||||
@ -941,7 +943,13 @@ var
|
||||
Package: TPackage;
|
||||
begin
|
||||
Clear;
|
||||
Result := True;
|
||||
if Trim(JSON) = '' then
|
||||
begin
|
||||
Result := False;
|
||||
Exit;
|
||||
end
|
||||
else
|
||||
Result := True;
|
||||
Parser := TJSONParser.Create(JSON);
|
||||
try
|
||||
Data := Parser.Parse;
|
||||
@ -1021,7 +1029,7 @@ var
|
||||
FileName: String;
|
||||
begin
|
||||
FileName := Options.LocalRepositoryArchive + APackage.RepositoryFileName;
|
||||
Result := (FileExists(FileName)) and
|
||||
Result := (FileExistsUTF8(FileName)) and
|
||||
(MD5Print(MD5File(FileName)) = APackage.RepositoryFileHash) and
|
||||
(FileUtil.FileSize(FileName) = APackage.RepositoryFileSize);
|
||||
end;
|
||||
@ -1036,7 +1044,7 @@ begin
|
||||
begin
|
||||
PackageFile := TPackageFile(APackage.FPackageFiles.Items[I]);
|
||||
PackageFile.FPackageAbsolutePath := Options.LocalRepositoryPackages + APackage.PackageBaseDir + PackageFile.FPackageRelativePath + PackageFile.Name;
|
||||
if not FileExists(PackageFile.FPackageAbsolutePath) then
|
||||
if not FileExistsUTF8(PackageFile.FPackageAbsolutePath) then
|
||||
begin
|
||||
Result := False;
|
||||
Break;
|
||||
@ -1124,11 +1132,14 @@ function TSerializablePackages.IsPackageInstalled(const APackageFile: TPackageFi
|
||||
begin
|
||||
APackageFile.InstalledFileName := Package.Filename;
|
||||
APackageFile.InstalledFileVersion := IntToStr(Package.Version.Major) + '.' +
|
||||
IntToStr(Package.Version.Minor) + '.' +
|
||||
IntToStr(Package.Version.Release) + '.' +
|
||||
IntToStr(Package.Version.Build);
|
||||
APackageFile.InstalledFileDescription := GetPackageDescription(Package.Filename);
|
||||
APackageFile.InstalledFileLincese := GetPackageLicense(Package.Filename);
|
||||
IntToStr(Package.Version.Minor) + '.' +
|
||||
IntToStr(Package.Version.Release) + '.' +
|
||||
IntToStr(Package.Version.Build);
|
||||
if FileExistsUTF8(APackageFile.InstalledFileName) then
|
||||
begin
|
||||
APackageFile.InstalledFileDescription := GetPackageDescription(Package.Filename);
|
||||
APackageFile.InstalledFileLincese := GetPackageLicense(Package.Filename);
|
||||
end;
|
||||
Result := True;
|
||||
Break;
|
||||
end;
|
||||
@ -1144,14 +1155,16 @@ begin
|
||||
begin
|
||||
FileName := StringReplace(APackageFile.Name, '.lpk', '.opkman', [rfIgnoreCase]);
|
||||
Result := (psExtracted in APackageFile.PackageStates) and
|
||||
FileExists(Options.LocalRepositoryPackages + APackageBaseDir + APackageFile.PackageRelativePath + FileName);
|
||||
FileExistsUTF8(Options.LocalRepositoryPackages + APackageBaseDir + APackageFile.PackageRelativePath + FileName);
|
||||
if Result then
|
||||
begin
|
||||
APackageFile.InstalledFileName := Options.LocalRepositoryPackages + APackageBaseDir + APackageFile.FPackageRelativePath + APackageFile.Name;
|
||||
APackageFile.InstalledFileVersion := GetPackageVersion(APackageFile.InstalledFileName);
|
||||
APackageFile.InstalledFileDescription := GetPackageDescription(APackageFile.InstalledFileName);
|
||||
APackageFile.InstalledFileLincese := GetPackageLicense(APackageFile.InstalledFileName);
|
||||
Result := True;
|
||||
if FileExistsUTF8(APackageFile.InstalledFileName) then
|
||||
begin
|
||||
APackageFile.InstalledFileVersion := GetPackageVersion(APackageFile.InstalledFileName);
|
||||
APackageFile.InstalledFileDescription := GetPackageDescription(APackageFile.InstalledFileName);
|
||||
APackageFile.InstalledFileLincese := GetPackageLicense(APackageFile.InstalledFileName);
|
||||
end;
|
||||
end
|
||||
else
|
||||
Result := CheckIDEPackages
|
||||
@ -1360,7 +1373,7 @@ begin
|
||||
(PackageFile.PackageType in [ptRunTime, ptRunTimeOnly]) then
|
||||
begin
|
||||
FileName := StringReplace(PackageFile.Name, '.lpk', '.opkman', [rfIgnoreCase]);
|
||||
FileCreate(Options.LocalRepositoryPackages + Items[I].PackageBaseDir + PackageFile.PackageRelativePath + FileName);
|
||||
FileCreateUTF8(Options.LocalRepositoryPackages + Items[I].PackageBaseDir + PackageFile.PackageRelativePath + FileName);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -235,6 +235,9 @@ var
|
||||
PackageFile: TPackageFile;
|
||||
HasUpdate: Boolean;
|
||||
begin
|
||||
if (not Assigned(SerializablePackages)) or (SerializablePackages.Count = 0) then
|
||||
Exit;
|
||||
|
||||
FVersion := FXML.GetValue('Version/Value', 0);
|
||||
PackageCount := FXML.GetValue('Count/Value', 0);
|
||||
for I := 0 to PackageCount - 1 do
|
||||
@ -281,7 +284,7 @@ var
|
||||
Package: TPackage;
|
||||
PackageFile: TPackageFile;
|
||||
begin
|
||||
if SerializablePackages.Count = 0 then
|
||||
if (not Assigned(SerializablePackages)) or (SerializablePackages.Count = 0) then
|
||||
Exit;
|
||||
FXML.Clear;
|
||||
FXML.SetDeleteValue('Version/Value', OpkVersion, 0);
|
||||
@ -369,9 +372,9 @@ begin
|
||||
FileExistsUTF8(ExtractFilePath(ParamStr(0)) + 'ssleay32.dll');
|
||||
if not FOpenSSLAvaialable then
|
||||
begin
|
||||
ZipFile := ExtractFilePath(ParamStr(0)) + ExtractFileName(OpenSSLURL);
|
||||
ZipFile := ExtractFilePath(ParamStr(0)) + ExtractFileName(cOpenSSLURL);
|
||||
try
|
||||
FHTTPClient.Get(OpenSSLURL, ZipFile);
|
||||
FHTTPClient.Get(cOpenSSLURL, ZipFile);
|
||||
except
|
||||
end;
|
||||
if FileExistsUTF8(ZipFile) then
|
||||
@ -450,7 +453,7 @@ begin
|
||||
CheckForOpenSSL;
|
||||
while not Terminated do
|
||||
begin
|
||||
if (FNeedToUpdate) and (not FBusyUpdating) and (not FPaused) and (FOpenSSLAvaialable) then
|
||||
if Assigned(SerializablePackages) and (FNeedToUpdate) and (not FBusyUpdating) and (not FPaused) and (FOpenSSLAvaialable) then
|
||||
begin
|
||||
FBusyUpdating := True;
|
||||
try
|
||||
|
@ -165,6 +165,11 @@ begin
|
||||
FUnZipper.Examine;
|
||||
FUnZipper.UnZipAllFiles;
|
||||
SerializablePackages.Items[I].ChangePackageStates(ctAdd, psExtracted);
|
||||
if (SerializablePackages.Items[I].IsDirZipped ) and (SerializablePackages.Items[I].PackageBaseDir <> SerializablePackages.Items[I].ZippedBaseDir) then
|
||||
begin
|
||||
CopyDirTree(FUnZipper.OutputPath + SerializablePackages.Items[I].ZippedBaseDir, DelDir, [cffOverwriteFile]);
|
||||
DeleteDirectory(FUnZipper.OutputPath + SerializablePackages.Items[I].ZippedBaseDir, False);
|
||||
end;
|
||||
Synchronize(@DoOnZipProgress);
|
||||
FTotPos := FTotPos + FCurSize;
|
||||
except
|
||||
@ -226,6 +231,7 @@ procedure TPackageUnzipper.StartUnZip(const ASrcDir, ADstDir: String;
|
||||
var
|
||||
I: Integer;
|
||||
IsDirZipped: Boolean;
|
||||
BaseDir: String;
|
||||
begin
|
||||
if FStarted then
|
||||
Exit;
|
||||
@ -243,8 +249,12 @@ begin
|
||||
FUnZipper.FileName := FSrcDir + SerializablePackages.Items[I].RepositoryFileName;
|
||||
FUnZipper.Examine;
|
||||
IsDirZipped := True;
|
||||
FTotSize := FTotSize + FUnZipper.GetZipSize(IsDirZipped);
|
||||
BaseDir := '';
|
||||
FTotSize := FTotSize + FUnZipper.GetZipSize(IsDirZipped, BaseDir);
|
||||
SerializablePackages.Items[I].IsDirZipped := IsDirZipped;
|
||||
if BaseDir <> '' then
|
||||
BaseDir := AppendPathDelim(BaseDir);
|
||||
SerializablePackages.Items[I].ZippedBaseDir := BaseDir;
|
||||
Inc(FTotCnt);
|
||||
except
|
||||
on E: Exception do
|
||||
|
Loading…
Reference in New Issue
Block a user