OpkMan: Rename PackageFile to LazarusPackage in type and variable names.

git-svn-id: trunk@54419 -
This commit is contained in:
juha 2017-03-16 17:49:39 +00:00
parent 8631eaec16
commit 1a173eeae9
9 changed files with 434 additions and 427 deletions

View File

@ -906,7 +906,7 @@ var
JSON: TJSONStringType;
Ms: TMemoryStream;
UpdatePackage: TUpdatePackage;
UpdatePackageFiles: TUpdatePackageFiles;
UpdateLazPkgs: TUpdateLazPackages;
begin
Result := False;
pnMessage.Caption := rsCreateRepositoryPackageFrm_Message6;
@ -927,11 +927,11 @@ begin
if FVSTPackages.CheckState[Node] = csCheckedNormal then
begin
Data := FVSTPackages.GetNodeData(Node);
UpdatePackageFiles := TUpdatePackageFiles(UpdatePackage.UpdatePackageFiles.Add);
UpdatePackageFiles.Name := Data^.FName;
UpdatePackageFiles.Version := Data^.FVersionAsString;
UpdatePackageFiles.ForceNotify := False;
UpdatePackageFiles.InternalVersion := 1;
UpdateLazPkgs := TUpdateLazPackages(UpdatePackage.UpdateLazPackages.Add);
UpdateLazPkgs.Name := Data^.FName;
UpdateLazPkgs.Version := Data^.FVersionAsString;
UpdateLazPkgs.ForceNotify := False;
UpdateLazPkgs.InternalVersion := 1;
end;
Node := FVSTPackages.GetNextSibling(Node);
end;
@ -961,7 +961,7 @@ function TCreateRepositoryPackagefr.CreateJSON(var AErrMsg: String): Boolean;
var
SerializablePackages: TSerializablePackages;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
RootNode, Node: PVirtualNode;
RootData, Data: PData;
JSON: TJSONStringType;
@ -995,20 +995,20 @@ begin
if FVSTPackages.CheckState[Node] = csCheckedNormal then
begin
Data := FVSTPackages.GetNodeData(Node);
PackageFile := TPackageFile(Package.PackageFiles.Add);
PackageFile.Name := Data^.FName;
PackageFile.PackageRelativePath := Data^.FPackageRelativePath;
PackageFile.Version := TPackageVersion.Create;
PackageFile.Version.AsString := Data^.FVersionAsString;
PackageFile.Description := Data^.FDescription;
PackageFile.Author := Data^.FAuthor;
PackageFile.LazCompatibility := Data^.FLazCompatibility;
PackageFile.FPCCompatibility := Data^.FFPCCompatibility;
PackageFile.SupportedWidgetSet := Data^.FSupportedWidgetSet;
PackageFile.PackageType := Data^.FPackageType;
PackageFile.Dependencies := TPackageDependencies.Create(TPackageDependency);
PackageFile.Dependencies.SetDependenciesAsString(Data^.FDependenciesAsString);
PackageFile.License := Data^.FLicense;
LazarusPkg := TLazarusPackage(Package.LazarusPackages.Add);
LazarusPkg.Name := Data^.FName;
LazarusPkg.PackageRelativePath := Data^.FPackageRelativePath;
LazarusPkg.Version := TPackageVersion.Create;
LazarusPkg.Version.AsString := Data^.FVersionAsString;
LazarusPkg.Description := Data^.FDescription;
LazarusPkg.Author := Data^.FAuthor;
LazarusPkg.LazCompatibility := Data^.FLazCompatibility;
LazarusPkg.FPCCompatibility := Data^.FFPCCompatibility;
LazarusPkg.SupportedWidgetSet := Data^.FSupportedWidgetSet;
LazarusPkg.PackageType := Data^.FPackageType;
LazarusPkg.Dependencies := TPackageDependencies.Create(TPackageDependency);
LazarusPkg.Dependencies.SetDependenciesAsString(Data^.FDependenciesAsString);
LazarusPkg.License := Data^.FLicense;
end;
Node := FVSTPackages.GetNextSibling(Node);
end;
@ -1038,7 +1038,7 @@ end;
procedure TCreateRepositoryPackagefr.DoOnZipCompleted(Sender: TObject);
var
ErrMsg: String;
ErrMsg, JsonUpd: String;
begin
ErrMsg := '';
if not CreateJSON(ErrMsg) then
@ -1074,9 +1074,11 @@ begin
Uploader.OnUploadError := @DoOnUploadError;
Uploader.OnUploadCompleted := @DoOnUploadCompleted;
if cbJSONForUpdates.Checked then
Uploader.StartUpload(cSubmitURL_Zip, cSubmitURL_JSON, FPackageFile, FDestDir + FPackageName + '.json', FDestDir + 'update_' + FPackageName + '.json')
JsonUpd := FDestDir + 'update_' + FPackageName + '.json'
else
Uploader.StartUpload(cSubmitURL_Zip, cSubmitURL_JSON, FPackageFile, FDestDir + FPackageName + '.json', '')
JsonUpd := '';
Uploader.StartUpload(cSubmitURL_Zip, cSubmitURL_JSON, FPackageFile,
FDestDir + FPackageName + '.json', JsonUpd);
end;
end;
end;

View File

@ -65,7 +65,7 @@ resourcestring
//main form
rsPackagesFound = '(%s packages found)';
rsMainFrm_VSTHeaderColumn_PackageName = 'Packages';
rsMainFrm_VSTHeaderColumn_PackageFile = 'Package file (.lpk)';
rsMainFrm_VSTHeaderColumn_LazarusPackage = 'Lazarus Package (.lpk)';
rsMainFrm_VSTHeaderColumn_Repository = 'Repository';
rsMainFrm_VSTHeaderColumn_Installed = 'Installed';
rsMainFrm_VSTHeaderColumn_Update = 'Update';

View File

@ -184,8 +184,8 @@ end;
procedure TCreateJSONForUpdatesFrm.bCreateClick(Sender: TObject);
var
UpdatePackage: TUpdatePackage;
UpdatePackageFiles: TUpdatePackageFiles;
UpdatePkg: TUpdatePackage;
UpdateLazPkgs: TUpdateLazPackages;
JSON: TJSONStringType;
Ms: TMemoryStream;
Node: PVirtualNode;
@ -205,10 +205,10 @@ begin
SD.FileName := 'update_' + FPackage.Name;
if SD.Execute then
begin
UpdatePackage := TUpdatePackage.Create;
UpdatePkg := TUpdatePackage.Create;
try
UpdatePackage.UpdatePackageData.Name := FPackage.Name;
UpdatePackage.UpdatePackageData.DownloadZipURL := edLinkToZip.Text;
UpdatePkg.UpdatePackageData.Name := FPackage.Name;
UpdatePkg.UpdatePackageData.DownloadZipURL := edLinkToZip.Text;
Node := FVST.GetFirst;
while Assigned(Node) do
@ -216,16 +216,16 @@ begin
if FVST.CheckState[Node] = csCheckedNormal then
begin
Data := FVST.GetNodeData(Node);
UpdatePackageFiles := TUpdatePackageFiles(UpdatePackage.UpdatePackageFiles.Add);
UpdatePackageFiles.Name := Data^.FName;
UpdatePackageFiles.Version := Data^.FVersion;
UpdatePackageFiles.ForceNotify := Data^.FForceNotify;
UpdatePackageFiles.InternalVersion := Data^.FInternalVersion;
UpdateLazPkgs := TUpdateLazPackages(UpdatePkg.UpdateLazPackages.Add);
UpdateLazPkgs.Name := Data^.FName;
UpdateLazPkgs.Version := Data^.FVersion;
UpdateLazPkgs.ForceNotify := Data^.FForceNotify;
UpdateLazPkgs.InternalVersion := Data^.FInternalVersion;
end;
Node := FVST.GetNext(Node);
end;
JSON := '';
if UpdatePackage.SaveToJSON(JSON) then
if UpdatePkg.SaveToJSON(JSON) then
begin
JSON := StringReplace(JSON, '\/', '/', [rfReplaceAll]);
Ms := TMemoryStream.Create;
@ -241,11 +241,11 @@ begin
end
else
begin
ErrMsg := StringReplace(UpdatePackage.LastError, '"', '', [rfReplaceAll]);
ErrMsg := StringReplace(UpdatePkg.LastError, '"', '', [rfReplaceAll]);
MessageDlgEx(rsCreateJSONForUpdatesFrm_Error1 + sLineBreak + '"' + ErrMsg + '"', mtError, [mbOk], Self);
end;
finally
UpdatePackage.Free;
UpdatePkg.Free;
end;
end;
if CanClose then
@ -340,7 +340,7 @@ var
I, J: Integer;
Node: PVirtualNode;
Data: PData;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
for I := 0 to SerializablePackages.Count - 1 do
begin
@ -348,17 +348,17 @@ begin
if FPackage.Checked then
begin
Caption := Caption + ' "' + FPackage.DisplayName +'"';
for J := 0 to FPackage.PackageFiles.Count - 1 do
for J := 0 to FPackage.LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(FPackage.PackageFiles.Items[J]);
if PackageFile.Checked then
LazarusPkg := TLazarusPackage(FPackage.LazarusPackages.Items[J]);
if LazarusPkg.Checked then
begin
Node := FVST.AddChild(nil);
Node^.CheckType := ctTriStateCheckBox;
FVST.CheckState[Node] := csCheckedNormal;
Data := FVST.GetNodeData(Node);
Data^.FName := PackageFile.Name;
Data^.FVersion := PackageFile.VersionAsString;
Data^.FName := LazarusPkg.Name;
Data^.FVersion := LazarusPkg.VersionAsString;
Data^.FForceNotify := False;
Data^.FInternalVersion := 1;
Data^.FImageIndex := 1;

View File

@ -50,6 +50,7 @@ type
TOnPackageInstallProgress = procedure(Sender: TObject; ACnt, ATotCnt: Integer; APackgaName: String; AInstallMessage: TInstallMessage) of object;
TOnPackageInstallError = procedure(Sender: TObject; APackageName, AErrMsg: String) of object;
TOnPackageInstallCompleted = procedure(Sender: TObject; ANeedToRebuild: Boolean; AInstallStatus: TInstallStatus) of object;
TPackageInstaller = class
private
FNeedToBreak: Boolean;
@ -59,18 +60,18 @@ type
FStarted: Boolean;
FInstallStatus: TInstallStatus;
FToInstall: TStringList;
FPackageFileName: String;
FUnresolvedPackageFileName: String;
FFileName: String;
FUnresolvedFileName: String;
FOnPackageInstallProgress: TOnPackageInstallProgress;
FOnPackageInstallError: TOnPackageInstallError;
FOnPackageInstallCompleted: TOnPackageInstallCompleted;
function OpenPackage(const APackageFileName: String): TIDEPackage;
function IsPackageInTheList(const APackageFileName: String): Boolean;
function OpenPackage(const AFileName: String): TIDEPackage;
function IsPackageInTheList(const AFileName: String): Boolean;
function HasUnresolvedDependency(AName: String): Boolean;
function CompilePackage(const AIDEPackage: TIDEPackage; APackageFile: TPackageFile): Integer;
function CompilePackage(const AIDEPackage: TIDEPackage; ALazarusPkg: TLazarusPackage): Integer;
function InstallPackage: Boolean;
procedure DoOnPackageInstallProgress(const AInstallMessage: TInstallMessage; APackageFile: TPackageFile);
procedure DoOnPackageInstallError(const AInstallMessage: TInstallMessage; APackageFile: TPackageFile);
procedure DoOnPackageInstallProgress(const AInstallMessage: TInstallMessage; ALazarusPkg: TLazarusPackage);
procedure DoOnPackageInstallError(const AInstallMessage: TInstallMessage; ALazarusPkg: TLazarusPackage);
procedure Execute;
public
constructor Create;
@ -102,16 +103,16 @@ begin
inherited Destroy;
end;
function TPackageInstaller.OpenPackage(const APackageFileName: String): TIDEPackage;
function TPackageInstaller.OpenPackage(const AFileName: String): TIDEPackage;
var
I: Integer;
begin
Result := nil;
if PackageEditingInterface.DoOpenPackageFile(APackageFileName, [pofRevert, pofDoNotOpenEditor], True) = mrOk then
if PackageEditingInterface.DoOpenPackageFile(AFileName, [pofRevert, pofDoNotOpenEditor], True) = mrOk then
begin
for I := 0 to PackageEditingInterface.GetPackageCount - 1 do
begin
if UpperCase(PackageEditingInterface.GetPackages(I).Filename) = UpperCase(APackageFileName) then
if UpperCase(PackageEditingInterface.GetPackages(I).Filename) = UpperCase(AFileName) then
begin
Result := PackageEditingInterface.GetPackages(I);
Break;
@ -120,20 +121,20 @@ begin
end;
end;
function TPackageInstaller.IsPackageInTheList(const APackageFileName: String): Boolean;
function TPackageInstaller.IsPackageInTheList(const AFileName: String): Boolean;
var
P, I: Integer;
PackageFileName: String;
PkgFileName: String;
begin
Result := False;
for I := 0 to FToInstall.Count - 1 do
begin
P := Pos(' ', FToInstall.Strings[I]);
if P <> 0 then
PackageFileName := Copy(FToInstall.Strings[I], 1, P - 1)
PkgFileName := Copy(FToInstall.Strings[I], 1, P - 1)
else
PackageFileName := FToInstall.Strings[I];
if UpperCase(PackageFileName) = UpperCase(APackageFileName) then
PkgFileName := FToInstall.Strings[I];
if UpperCase(PkgFileName) = UpperCase(AFileName) then
begin
Result := True;
Break;
@ -149,23 +150,23 @@ begin
P := Pos(' ', AName);
if P > 0 then
begin
FPackageFileName := Copy(AName, 1, P - 1);
FFileName := Copy(AName, 1, P - 1);
Delete(AName, 1, P);
FUnresolvedPackageFileName := Trim(AName);
FUnresolvedFileName := Trim(AName);
Result := True;
end
else
FPackageFileName := AName;
FFileName := AName;
end;
function TPackageInstaller.CompilePackage(const AIDEPackage: TIDEPackage;
APackageFile: TPackageFile): Integer;
ALazarusPkg: TLazarusPackage): Integer;
begin
Result := -1;
{$if declared(lcl_version)}
{$if (lcl_major > 0) and (lcl_minor > 6)}
//DoCompilePackage function is only available with Laz 1.7 +
DoOnPackageInstallProgress(imCompilePackage, APackageFile);
DoOnPackageInstallProgress(imCompilePackage, ALazarusPkg);
Result := PackageEditingInterface.DoCompilePackage(AIDEPackage, [pcfCleanCompile, pcfDoNotSaveEditorFiles], False);
{$endif}
{$endif}
@ -178,10 +179,10 @@ var
NewPackageID: TLazPackageID;
begin
Result := False;
P := Pos('.lpk', FPackageFileName);
P := Pos('.lpk', FFileName);
if P <> 0 then
begin
PackageName := Copy(FPackageFileName, 1, P - 1);
PackageName := Copy(FFileName, 1, P - 1);
NewPackageID := TLazPackageID.Create;
if NewPackageID.StringToID(PackageName) then
begin
@ -192,18 +193,18 @@ begin
end;
procedure TPackageInstaller.DoOnPackageInstallProgress(const AInstallMessage: TInstallMessage;
APackageFile: TPackageFile);
ALazarusPkg: TLazarusPackage);
begin
if AInstallMessage = imPackageCompleted then
APackageFile.PackageStates := APackageFile.PackageStates + [psInstalled];
ALazarusPkg.PackageStates := ALazarusPkg.PackageStates + [psInstalled];
if Assigned(FOnPackageInstallProgress) then
FOnPackageInstallProgress(Self, FCnt, FTotCnt, FPackageFileName, AInstallMessage);
FOnPackageInstallProgress(Self, FCnt, FTotCnt, FFileName, AInstallMessage);
if AInstallMessage <> imPackageCompleted then
Sleep(1000);
end;
procedure TPackageInstaller.DoOnPackageInstallError(const AInstallMessage: TInstallMessage;
APackageFile: TPackageFile);
ALazarusPkg: TLazarusPackage);
var
ErrMsg: String;
begin
@ -215,12 +216,12 @@ begin
imInstallPackageError:
ErrMsg := rsProgressFrm_Error9;
imDependencyError:
ErrMsg := Format(rsProgressFrm_Error4, [FUnresolvedPackageFileName]);
ErrMsg := Format(rsProgressFrm_Error4, [FUnresolvedFileName]);
end;
APackageFile.PackageStates := APackageFile.PackageStates - [psInstalled];
APackageFile.PackageStates := APackageFile.PackageStates + [psError];
ALazarusPkg.PackageStates := ALazarusPkg.PackageStates - [psInstalled];
ALazarusPkg.PackageStates := ALazarusPkg.PackageStates + [psError];
if Assigned(FOnPackageInstallError) then
FOnPackageInstallError(Self, FPackageFileName, ErrMsg);
FOnPackageInstallError(Self, FFileName, ErrMsg);
Sleep(1000);
end;
@ -230,7 +231,7 @@ var
IDEPackage: TIDEPackage;
PkgInstallInIDEFlags: TPkgInstallInIDEFlags;
ErrCnt: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
CanGo: Boolean;
CompRes: Integer;
begin
@ -242,63 +243,63 @@ begin
if NeedToBreak then
Break;
CanGo := not HasUnresolvedDependency(FToInstall.Strings[I]);
PackageFile := SerializablePackages.FindPackageFile(FPackageFileName);
LazarusPkg := SerializablePackages.FindLazarusPackage(FFileName);
if CanGo then
begin
Inc(FCnt);
if not FNeedToRebuild then
FNeedToRebuild := PackageFile.PackageType in [ptRunAndDesignTime, ptDesigntime];
DoOnPackageInstallProgress(imOpenPackage, PackageFile);
IDEPackage := OpenPackage(PackageFile.PackageAbsolutePath);
FNeedToRebuild := LazarusPkg.PackageType in [ptRunAndDesignTime, ptDesigntime];
DoOnPackageInstallProgress(imOpenPackage, LazarusPkg);
IDEPackage := OpenPackage(LazarusPkg.PackageAbsolutePath);
if IDEPackage <> nil then
begin
DoOnPackageInstallProgress(imOpenPackageSuccess, PackageFile);
CompRes := CompilePackage(IDEPAckage, PackageFile);
DoOnPackageInstallProgress(imOpenPackageSuccess, LazarusPkg);
CompRes := CompilePackage(IDEPAckage, LazarusPkg);
case CompRes of
-1, 1:
begin
if CompRes = 1 then
begin
DoOnPackageInstallProgress(imCompilePackageSuccess, PackageFile);
DoOnPackageInstallProgress(imCompilePackageSuccess, LazarusPkg);
if PackageAction = paUpdate then
if PackageFile.ForceNotify then
if PackageFile.InternalVersion > PackageFile.InternalVersionOld then
PackageFile.InternalVersionOld := PackageFile.InternalVersion;
if LazarusPkg.ForceNotify then
if LazarusPkg.InternalVersion > LazarusPkg.InternalVersionOld then
LazarusPkg.InternalVersionOld := LazarusPkg.InternalVersion;
end;
if PackageFile.PackageType in [ptRunAndDesignTime, ptDesigntime] then
if LazarusPkg.PackageType in [ptRunAndDesignTime, ptDesigntime] then
begin
DoOnPackageInstallProgress(imInstallPackage, PackageFile);
DoOnPackageInstallProgress(imInstallPackage, LazarusPkg);
if InstallPackage then
DoOnPackageInstallProgress(imInstallpackageSuccess, PackageFile)
DoOnPackageInstallProgress(imInstallpackageSuccess, LazarusPkg)
else
begin
Inc(ErrCnt);
DoOnPackageInstallError(imInstallPackageError, PackageFile);
DoOnPackageInstallError(imInstallPackageError, LazarusPkg);
end;
end;
end;
else
begin
Inc(ErrCnt);
DoOnPackageInstallError(imCompilePackageError, PackageFile);
DoOnPackageInstallError(imCompilePackageError, LazarusPkg);
end;
end;
end
else
begin
Inc(ErrCnt);
DoOnPackageInstallError(imOpenPackageError, PackageFile);
DoOnPackageInstallError(imOpenPackageError, LazarusPkg);
end;
DoOnPackageInstallProgress(imPackageCompleted, PackageFile);
DoOnPackageInstallProgress(imPackageCompleted, LazarusPkg);
end
else
begin
Inc(FCnt);
DoOnPackageInstallProgress(imOpenPackage, PackageFile);
DoOnPackageInstallProgress(imOpenPackageSuccess, PackageFile);
DoOnPackageInstallProgress(imOpenPackage, LazarusPkg);
DoOnPackageInstallProgress(imOpenPackageSuccess, LazarusPkg);
Inc(ErrCnt);
DoOnPackageInstallError(imDependencyError, PackageFile);
DoOnPackageInstallProgress(imPackageCompleted, PackageFile);
DoOnPackageInstallError(imDependencyError, LazarusPkg);
DoOnPackageInstallProgress(imPackageCompleted, LazarusPkg);
end;
end;
if InstallPackageList.Count > 0 then
@ -323,7 +324,7 @@ procedure TPackageInstaller.StartInstall;
var
I, J, K: Integer;
PackageList: TObjectList;
PackageFile, DependecyPackage: TPackageFile;
LazarusPkg, DependecyPackage: TLazarusPackage;
PackageDependency: TPackageDependency;
DependencyFound: Boolean;
begin
@ -335,24 +336,26 @@ begin
try
for I := 0 to SerializablePackages.Count - 1 do
begin
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
for J := 0 to SerializablePackages.Items[I].LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(SerializablePackages.Items[I].PackageFiles.Items[J]);
if PackageFile.IsInstallable then
LazarusPkg := TLazarusPackage(SerializablePackages.Items[I].LazarusPackages.Items[J]);
if LazarusPkg.IsInstallable then
begin
SerializablePackages.GetPackageDependencies(PackageFile.Name, PackageList, True, True);
SerializablePackages.GetPackageDependencies(LazarusPkg.Name, PackageList, True, True);
if PackageList.Count > 0 then
begin
DependencyFound := True;
for K := 0 to PackageList.Count - 1 do
begin
PackageDependency := TPackageDependency(PackageList.Items[K]);
DependecyPackage := SerializablePackages.FindPackageFile(TPackageDependency(PackageList.Items[k]).PackageFileName + '.lpk');
DependecyPackage := SerializablePackages.FindLazarusPackage(PackageDependency.PkgFileName + '.lpk');
if DependecyPackage <> nil then
begin
if not ((DependecyPackage.PackageState = psInstalled) and (SerializablePackages.IsInstalledVersionOk(PackageDependency, DependecyPackage.VersionAsString))) then
if not ((DependecyPackage.PackageState = psInstalled)
and (SerializablePackages.IsInstalledVersionOk(PackageDependency, DependecyPackage.VersionAsString))) then
begin
if ((DependecyPackage.IsInstallable) and (SerializablePackages.IsDependencyOk(PackageDependency, DependecyPackage))) then
if ((DependecyPackage.IsInstallable)
and (SerializablePackages.IsDependencyOk(PackageDependency, DependecyPackage))) then
begin
if not IsPackageInTheList(DependecyPackage.Name) then
FToInstall.Add(DependecyPackage.Name);
@ -367,12 +370,12 @@ begin
end;
if (not DependencyFound) then
begin
if (not IsPackageInTheList(PackageFile.Name)) then
FToInstall.Add(PackageFile.Name + ' ' + DependecyPackage.Name)
if (not IsPackageInTheList(LazarusPkg.Name)) then
FToInstall.Add(LazarusPkg.Name + ' ' + DependecyPackage.Name)
end
end;
if (not IsPackageInTheList(PackageFile.Name)) then
FToInstall.Add(PackageFile.Name);
if (not IsPackageInTheList(LazarusPkg.Name)) then
FToInstall.Add(LazarusPkg.Name);
end;
end;
end;

View File

@ -394,19 +394,19 @@ procedure TMainFrm.DoOnUpdate(Sender: TObject);
var
I, J: Integer;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
VisualTree.UpdatePackageUStatus;
// Pass the online package info as package links to IDE.
for I := 0 to SerializablePackages.Count - 1 do
begin
Package := SerializablePackages.Items[I];
for J := 0 to Package.PackageFiles.Count - 1 do
for J := 0 to Package.LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(Package.PackageFiles.Items[J]);
LazarusPkg := TLazarusPackage(Package.LazarusPackages.Items[J]);
//DebugLn(['OPM DoOnUpdate: Package.Name=', Package.Name,
// ', Package.DisplayName=', Package.DisplayName]);
PkgLinks.AddOnlineLink(Package.DownloadZipURL, Package.Name, PackageFile.Version);
PkgLinks.AddOnlineLink(Package.DownloadZipURL, Package.Name, LazarusPkg.Version);
end;
end;
end;
@ -954,7 +954,7 @@ begin
begin
Data := VisualTree.VST.GetNodeData(Node);
if (Data^.DataType = 2) then
SL.Add(Data^.PackageFileName);
SL.Add(Data^.LazarusPackageName);
end;
Node := VisualTree.VST.GetNext(Node);
end;
@ -991,7 +991,7 @@ begin
while Node <> nil do
begin
Data := VisualTree.VST.GetNodeData(Node);
if UpperCase(Trim(Data^.PackageFileName)) = UpperCase(Trim(SL.Strings[I])) then
if UpperCase(Trim(Data^.LazarusPackageName)) = UpperCase(Trim(SL.Strings[I])) then
begin
VisualTree.VST.CheckState[Node] := csCheckedNormal;
Inc(CheckCount);
@ -1084,7 +1084,7 @@ begin
cbFilterBy.Clear;
cbFilterBy.Items.Add(rsMainFrm_VSTHeaderColumn_PackageName);
cbFilterBy.Items.Add(rsMainFrm_VSTHeaderColumn_PackageFile);
cbFilterBy.Items.Add(rsMainFrm_VSTHeaderColumn_LazarusPackage);
cbFilterBy.Items.Add(rsMainFrm_VSTText_PackageCategory);
cbFilterBy.Items.Add(rsMainFrm_VSTText_PackageStatus);
cbFilterBy.Items.Add(rsMainFrm_VSTText_Version);

View File

@ -130,7 +130,7 @@ var
I, J: Integer;
Node: PVirtualNode;
Data: PData;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
ChkCnt, InvCnt: Integer;
begin
SetupControls(ATyp);
@ -140,14 +140,14 @@ begin
begin
if ATyp = 0 then
begin
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
for J := 0 to SerializablePackages.Items[I].LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(SerializablePackages.Items[I].PackageFiles.Items[J]);
if (PackageFile.Checked) and (psInstalled in PackageFile.PackageStates) then
LazarusPkg := TLazarusPackage(SerializablePackages.Items[I].LazarusPackages.Items[J]);
if (LazarusPkg.Checked) and (psInstalled in LazarusPkg.PackageStates) then
begin
Node := FVST.AddChild(nil);
Data := FVST.GetNodeData(Node);
Data^.FName := PackageFile.Name + '(' + PackageFile.InstalledFileVersion + ')';
Data^.FName := LazarusPkg.Name + '(' + LazarusPkg.InstalledFileVersion + ')';
Data^.FImageIndex := 1;
end;
end;

View File

@ -84,7 +84,7 @@ type
private
FMaxVersion: TPackageVersion;
FMinVersion: TPackageVersion;
FPackageFileName: String;
FPkgFileName: String;
procedure SetMinVersion(const AValue: TPackageVersion);
procedure SetMaxVersion(const AValue: TPackageVersion);
public
@ -92,7 +92,7 @@ type
constructor Create(ACollection: TCollection); override;
destructor Destroy; override;
published
property PackageFileName: String read FPackageFileName write FPackageFileName;
property PkgFileName: String read FPkgFileName write FPkgFileName;
property MinVersion: TPackageVersion read FMinVersion write SetMinVersion;
property MaxVersion: TPackageVersion read FMaxVersion write SetMaxVersion;
end;
@ -109,8 +109,9 @@ type
property Dependencies[AIndex: Integer]: TPackageDependency read GetDependency write SetDependency; default;
end;
{ TPackageFile }
TPackageFile = class(TCollectionItem)
{ TLazarusPackage }
TLazarusPackage = class(TCollectionItem)
private
FName: String;
FDescription: String;
@ -202,14 +203,14 @@ type
FIsDirZipped: Boolean;
FZippedBaseDir: String;
FRating: Integer;
FPackageFiles: TCollection;
FLazarusPackages: TCollection;
function GetDownloadable: Boolean;
function GetExtractable: Boolean;
public
constructor Create; reintroduce;
destructor Destroy; override;
procedure ChangePackageStates(const AChangeType: TChangeType; APackageState: TPackageState);
function FindPackageFile(const APackageFileName: String): TPackageFile;
function FindLazarusPackage(const APackageName: String): TLazarusPackage;
public
property PackageStates: TPackageStates read FPackageStates;
property PackageState: TPackageState read FPackageState;
@ -232,7 +233,7 @@ type
property RepositoryFileHash: String read FRepositoryFileHash write FRepositoryFileHash;
property RepositoryDate: TDate read FRepositoryDate write FRepositoryDate;
property PackageBaseDir: String read FPackageBaseDir write FPackageBaseDir;
property PackageFiles: TCollection read FPackageFiles write FPackageFiles;
property LazarusPackages: TCollection read FLazarusPackages write FLazarusPackages;
property HomePageURL: String read FHomePageURL write FHomePageURL;
property DownloadURL: String read FDownloadURL write FDownloadURL;
property SVNURL: String read FSVNURL write FSVNURL;
@ -252,15 +253,15 @@ type
function GetInstallCount: Integer;
function GetItem(const AIndex: Integer): TPackage;
procedure SetItem(const AIndex: Integer; const APackage: TPackage);
procedure DoGetPackageDependencies(const APackageFileName: String; ASL: TStringList; ALevel: Integer);
procedure DoGetPackageDependencies(const APkgFileName: String; ASL: TStringList; ALevel: Integer);
function JSONToPackageData(const APackageData: TJSONData; var APackage: TPackage): Boolean;
function JSONToPackageFiles(const APackageData: TJSONData; var APackage: TPackage): Boolean;
function JSONToLazarusPackages(const APackageData: TJSONData; var APackage: TPackage): Boolean;
function PackageDataToJSON(APackage: TPackage; var APackageData: TJSONObject): Boolean;
function PackageFilesToJSON(APackage: TPackage; var APackageFiles: TJSONArray): Boolean;
function LazarusPackagesToJSON(APackage: TPackage; var ALazarusPkgsArr: TJSONArray): Boolean;
function IsPackageDownloaded(const APackage: TPackage): Boolean;
function IsPackageExtracted(const APackage: TPackage): Boolean;
function IsPackageInstalled(const APackageFile: TPackageFile; const APackageBaseDir: String): Boolean;
function IsAtLeastOnePackageFileInstalled(const APackage: TPackage): Boolean;
function IsPackageInstalled(const ALazarusPkg: TLazarusPackage; const APackageBaseDir: String): Boolean;
function AtLeastOneLazPkgInstalled(const APackage: TPackage): Boolean;
function GetPackageVersion(const APath: String): String;
function GetPackageDescription(const APath: String): String;
function GetPackageLicense(const APath: String): String;
@ -273,15 +274,15 @@ type
procedure DeletePackage(const AIndex: Integer);
function FindPackage(const AValue: String; const AFindPackageBy: TFindPackageBy): TPackage;
function FindPackageIndex(const AValue: String; const AFindPackageBy: TFindPackageBy): Integer;
function FindPackageFile(const APackageFileName: String): TPackageFile;
function FindLazarusPackage(const APackageName: String): TLazarusPackage;
function JSONToPackages(JSON: TJSONStringType): Boolean;
function PackagesToJSON(var JSON: TJSONStringType): Boolean;
procedure GetPackageDependencies(const APackageFileName: String; List: TObjectList; Recurse, OnlyUnresolved: Boolean);
procedure GetPackageDependencies(const APkgFileName: String; List: TObjectList; Recurse, OnlyUnresolved: Boolean);
procedure GetPackageStates;
procedure RemoveErrorState;
procedure MarkRuntimePackages;
function Cleanup: Integer;
function IsDependencyOk(PackageDependency: TPackageDependency; DependencyPackage: TPackageFile): Boolean;
function IsDependencyOk(PackageDependency: TPackageDependency; DependencyPackage: TLazarusPackage): Boolean;
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
procedure DeleteDownloadedZipFiles;
@ -321,7 +322,7 @@ begin
if ASource is TPackageDependency then
begin
Source := ASource as TPackageDependency;
FPackageFileName := Source.PackageFileName;
FPkgFileName := Source.PkgFileName;
if Assigned(Source.MinVersion) then
FMinVersion.Assign(Source.MinVersion);
if Assigned(Source.MaxVersion) then
@ -385,9 +386,9 @@ begin
MaxVer := '(' + Dependencies[I].FMaxVersion.AsString + ')'
end;
if Result = '' then
Result := Dependencies[I].PackageFileName + MinVer + MaxVer
Result := Dependencies[I].PkgFileName + MinVer + MaxVer
else
Result := Result + ', ' + Dependencies[I].PackageFileName + MinVer + MaxVer;
Result := Result + ', ' + Dependencies[I].PkgFileName + MinVer + MaxVer;
end;
end;
@ -415,28 +416,28 @@ begin
P2 := Pos(')', Str);
if (P1 <> 0) and (P2 <> 0) then
begin
PackageDependency.PackageFileName := Trim(Copy(Str, 1, P1 - 1));
PackageDependency.PkgFileName := Trim(Copy(Str, 1, P1 - 1));
PackageDependency.FMinVersion.AsString := Trim(Copy(Str, P1 + 1, P2 - P1 - 1));
System.Delete(Str, 1, P2);
if Length(Trim(Str)) > 0 then
PackageDependency.FMaxVersion.AsString := Trim(Copy(Str, 2, Length(Str) - 2));
end
else
PackageDependency.PackageFileName := Trim(Str);
PackageDependency.PkgFileName := Trim(Str);
end;
finally
SL.Free;
end;
end;
{ TPackageFile }
{ TLazarusPackage }
function TPackageFile.GetVersionAsString: String;
function TLazarusPackage.GetVersionAsString: String;
begin
Result := FVersion.AsString;
end;
procedure TPackageFile.SetVersionAsString(const AValue: String);
procedure TLazarusPackage.SetVersionAsString(const AValue: String);
begin
if not Assigned(FVersion) then
begin
@ -447,12 +448,12 @@ begin
FVersionAsString := AValue;
end;
function TPackageFile.GetDependenciesAsString: String;
function TLazarusPackage.GetDependenciesAsString: String;
begin
Result := FDependencies.GetDependenciesAsString(False);
end;
procedure TPackageFile.SetDependenciesAsString(const AValue: String);
procedure TLazarusPackage.SetDependenciesAsString(const AValue: String);
begin
if not Assigned(FDependencies) then
begin
@ -462,7 +463,7 @@ begin
FDependenciesAsString := AValue;
end;
function TPackageFile.GetInstallable: Boolean;
function TLazarusPackage.GetInstallable: Boolean;
begin
case PackageAction of
paDownloadTo:
@ -474,7 +475,7 @@ begin
end;
end;
constructor TPackageFile.Create;
constructor TLazarusPackage.Create;
begin
FVersion := TPackageVersion.Create;
FVersion.Clear;
@ -482,7 +483,7 @@ begin
FDependencies := TPackageDependencies.Create(TPackageDependency);
end;
destructor TPackageFile.Destroy;
destructor TLazarusPackage.Destroy;
begin
if Assigned(FVersion) then
FreeAndNil(FVersion);
@ -520,17 +521,17 @@ end;
constructor TPackage.Create;
begin
FPackageFiles := TCollection.Create(TPackageFile);
FLazarusPackages := TCollection.Create(TLazarusPackage);
end;
destructor TPackage.Destroy;
var
I: Integer;
begin
FPackageFiles.Clear;
for I := FPackageFiles.Count - 1 downto 0 do
FPackageFiles.Items[I].Free;
FPackageFiles.Free;
FLazarusPackages.Clear;
for I := FLazarusPackages.Count - 1 downto 0 do
FLazarusPackages.Items[I].Free;
FLazarusPackages.Free;
inherited Destroy;
end;
@ -538,7 +539,7 @@ procedure TPackage.ChangePackageStates(const AChangeType: TChangeType;
APackageState: TPackageState);
var
I: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
if APackageState = psInstalled then
Exit;
@ -547,38 +548,36 @@ begin
ctAdd:
begin
FPackageStates := FPackageStates + [APackageState];
for I := 0 to PackageFiles.Count - 1 do
for I := 0 to LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(PackageFiles.Items[I]);
PackageFile.PackageStates := PackageFile.PackageStates + [APackageState];
PackageFile.PackageState := APackageState;
LazarusPkg := TLazarusPackage(LazarusPackages.Items[I]);
LazarusPkg.PackageStates := LazarusPkg.PackageStates + [APackageState];
LazarusPkg.PackageState := APackageState;
end;
end;
ctRemove:
begin
FPackageStates := FPackageStates - [APackageState];
for I := 0 to PackageFiles.Count - 1 do
for I := 0 to LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(PackageFiles.Items[I]);
PackageFile.PackageStates := PackageFile.PackageStates - [APackageState];
LazarusPkg := TLazarusPackage(LazarusPackages.Items[I]);
LazarusPkg.PackageStates := LazarusPkg.PackageStates - [APackageState];
end;
end;
end;
end;
function TPackage.FindPackageFile(const APackageFileName: String): TPackageFile;
function TPackage.FindLazarusPackage(const APackageName: String): TLazarusPackage;
var
I: Integer;
begin
Result := nil;
for I := 0 to FPackageFiles.Count - 1 do
for I := 0 to FLazarusPackages.Count - 1 do
begin
if UpperCase(TPackageFile(FPackageFiles.Items[I]).Name) = UpperCase(APackageFileName) then
begin
Result := TPackageFile(FPackageFiles.Items[I]);
Break;
end;
Result := TLazarusPackage(FLazarusPackages.Items[I]);
if UpperCase(Result.Name) = UpperCase(APackageName) then
Exit;
end;
Result := nil;
end;
{ TSerializablePackages }
@ -635,8 +634,8 @@ var
begin
Result := 0;
for I := 0 to Count - 1 do
for J := 0 to Items[I].FPackageFiles.Count - 1 do
if TPackageFile(Items[I].FPackageFiles.Items[J]).IsInstallable then
for J := 0 to Items[I].FLazarusPackages.Count - 1 do
if TLazarusPackage(Items[I].FLazarusPackages.Items[J]).IsInstallable then
Inc(Result);
end;
@ -656,27 +655,27 @@ begin
FPackages.Items[AIndex] := TPackage(APackage);
end;
procedure TSerializablePackages.DoGetPackageDependencies(
const APackageFileName: String; ASL: TStringList; ALevel: Integer);
procedure TSerializablePackages.DoGetPackageDependencies(const APkgFileName: String;
ASL: TStringList; ALevel: Integer);
var
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
D2, D1: TPackageDependency;
I, J: Integer;
begin
if (ALevel > 10) then
Exit;
PackageFile := FindPackageFile(APackageFileName);
if PackageFile = nil then
LazarusPkg := FindLazarusPackage(APkgFileName);
if LazarusPkg = nil then
Exit;
for I := 0 to PackageFile.Dependencies.Count - 1 do
for I := 0 to LazarusPkg.Dependencies.Count - 1 do
begin
D1 := PackageFile.Dependencies[I];
J := ASL.IndexOf(APackageFileName);
D1 := LazarusPkg.Dependencies[I];
J := ASL.IndexOf(APkgFileName);
If J = -1 then
begin
D2 := TPackageDependency.Create(nil);
D2.Assign(D1);
ASL.AddObject(D2.PackageFileName, D2);
ASL.AddObject(D2.PkgFileName, D2);
end
else
begin
@ -685,7 +684,7 @@ begin
D2.MinVersion.Assign(D1.MinVersion);
end;
if (ALevel >= 0) and (J = -1) Then
DoGetPackageDependencies(D2.PackageFileName, ASL, ALevel + 1);
DoGetPackageDependencies(D2.PkgFileName, ASL, ALevel + 1);
end;
end;
@ -701,7 +700,7 @@ begin
Exit;
end;
Result := TPackage(FPackages.Add);
Result.FPackageFiles := TCollection.Create(TPackageFile);
Result.FLazarusPackages := TCollection.Create(TLazarusPackage);
Result.Name := AName;
end;
@ -755,18 +754,18 @@ begin
end;
function TSerializablePackages.FindPackageFile(const APackageFileName: String): TPackageFile;
function TSerializablePackages.FindLazarusPackage(const APackageName: String): TLazarusPackage;
var
I, J: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
begin
for J := 0 to Items[I].FPackageFiles.Count - 1 do
for J := 0 to Items[I].FLazarusPackages.Count - 1 do
begin
if UpperCase(TPackageFile(Items[I].FPackageFiles.Items[J]).Name) = UpperCase(APackageFileName) then
if UpperCase(TLazarusPackage(Items[I].FLazarusPackages.Items[J]).Name) = UpperCase(APackageName) then
begin
Result := TPackageFile(Items[I].FPackageFiles.Items[J]);
Result := TLazarusPackage(Items[I].FLazarusPackages.Items[J]);
Break;
end;
end;
@ -805,45 +804,45 @@ begin
end;
end;
function TSerializablePackages.JSONToPackageFiles(const APackageData: TJSONData;
function TSerializablePackages.JSONToLazarusPackages(const APackageData: TJSONData;
var APackage: TPackage): Boolean;
var
PackageFiles: TJSONArray;
PackageFilesObject: TJSONObject;
PackageFile: TPackageFile;
LazarusPkgsArr: TJSONArray;
LazarusPkgsObj: TJSONObject;
LazarusPkg: TLazarusPackage;
I: Integer;
begin
Result := True;
try
PackageFiles := TJSONArray(APackageData);
APackage.PackageFiles := TCollection.Create(TPackageFile);
for I := 0 to PackageFiles.Count - 1 do
LazarusPkgsArr := TJSONArray(APackageData);
APackage.LazarusPackages := TCollection.Create(TLazarusPackage);
for I := 0 to LazarusPkgsArr.Count - 1 do
begin
if PackageFiles.Items[I].JSONType = jtObject then
if LazarusPkgsArr.Items[I].JSONType = jtObject then
begin
PackageFilesObject := TJSONObject(PackageFiles.Items[I]);
PackageFile := TPackageFile(APackage.PackageFiles.Add);
LazarusPkgsObj := TJSONObject(LazarusPkgsArr.Items[I]);
LazarusPkg := TLazarusPackage(APackage.LazarusPackages.Add);
//need to change
PackageFile.Name := PackageFilesObject.Get('Name');
PackageFile.Description := PackageFilesObject.Get('Description');
PackageFile.Author := PackageFilesObject.Get('Author');
PackageFile.License := PackageFilesObject.Get('License');
PackageFile.PackageRelativePath := PackageFilesObject.Get('RelativeFilePath');
if PackageFile.PackageRelativePath <> '' then
PackageFile.PackageRelativePath := StringReplace(PackageFile.PackageRelativePath, '\/', PathDelim, [rfReplaceAll]);
PackageFile.VersionAsString := PackageFilesObject.Get('VersionAsString');
PackageFile.LazCompatibility := PackageFilesObject.Get('LazCompatibility');
PackageFile.FPCCompatibility := PackageFilesObject.Get('FPCCompatibility');
PackageFile.SupportedWidgetSet := PackageFilesObject.Get('SupportedWidgetSet');
PackageFile.PackageType := TPackageType(PackageFilesObject.Get('PackageType'));
PackageFile.DependenciesAsString := PackageFilesObject.Get('DependenciesAsString');
LazarusPkg.Name := LazarusPkgsObj.Get('Name');
LazarusPkg.Description := LazarusPkgsObj.Get('Description');
LazarusPkg.Author := LazarusPkgsObj.Get('Author');
LazarusPkg.License := LazarusPkgsObj.Get('License');
LazarusPkg.PackageRelativePath := LazarusPkgsObj.Get('RelativeFilePath');
if LazarusPkg.PackageRelativePath <> '' then
LazarusPkg.PackageRelativePath := StringReplace(LazarusPkg.PackageRelativePath, '\/', PathDelim, [rfReplaceAll]);
LazarusPkg.VersionAsString := LazarusPkgsObj.Get('VersionAsString');
LazarusPkg.LazCompatibility := LazarusPkgsObj.Get('LazCompatibility');
LazarusPkg.FPCCompatibility := LazarusPkgsObj.Get('FPCCompatibility');
LazarusPkg.SupportedWidgetSet := LazarusPkgsObj.Get('SupportedWidgetSet');
LazarusPkg.PackageType := TPackageType(LazarusPkgsObj.Get('PackageType'));
LazarusPkg.DependenciesAsString := LazarusPkgsObj.Get('DependenciesAsString');
end;
end;
except
on E: Exception do
begin
Result := False;
FlastError := '"' + PackageFile.Name + '": ' + E.Message;
FlastError := '"' + LazarusPkg.Name + '": ' + E.Message;
end;
end;
end;
@ -882,7 +881,7 @@ begin
end
else if Data.Items[I].JSONType = jtArray then
begin
if not JSONToPackageFiles(Data.Items[I], Package) then
if not JSONToLazarusPackages(Data.Items[I], Package) then
Result := False;
end;
end;
@ -900,46 +899,46 @@ begin
end;
end;
function TSerializablePackages.PackageFilesToJSON(APackage: TPackage;
var APackageFiles: TJSONArray): Boolean;
function TSerializablePackages.LazarusPackagesToJSON(APackage: TPackage;
var ALazarusPkgsArr: TJSONArray): Boolean;
var
PackageFile: TPackageFile;
PackageFileObject: TJSONObject;
LazarusPkg: TLazarusPackage;
LazarusPkgObj: TJSONObject;
I: Integer;
PackageRelativePath: String;
RelPath: String;
begin
Result := True;
try
APackageFiles := TJSONArray.Create;
for I := 0 to APackage.FPackageFiles.Count - 1 do
ALazarusPkgsArr := TJSONArray.Create;
for I := 0 to APackage.FLazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(APackage.FPackageFiles.Items[I]);
PackageFileObject := TJSONObject.Create;
LazarusPkg := TLazarusPackage(APackage.FLazarusPackages.Items[I]);
LazarusPkgObj := TJSONObject.Create;
//need to change
PackageFileObject.Add('Name', PackageFile.Name);
PackageFileObject.Add('Description', PackageFile.Description);
PackageFileObject.Add('Author', PackageFile.Author);
PackageFileObject.Add('License', PackageFile.License);
PackageRelativePath := PackageFile.PackageRelativePath;
if Trim(PackageRelativePath) <> '' then
LazarusPkgObj.Add('Name', LazarusPkg.Name);
LazarusPkgObj.Add('Description', LazarusPkg.Description);
LazarusPkgObj.Add('Author', LazarusPkg.Author);
LazarusPkgObj.Add('License', LazarusPkg.License);
RelPath := LazarusPkg.PackageRelativePath;
if Trim(RelPath) <> '' then
begin
PackageRelativePath := AppendPathDelim(PackageRelativePath);
PackageRelativePath := StringReplace(PackageRelativePath, PathDelim, '\/', [rfReplaceAll]);
RelPath := AppendPathDelim(RelPath);
RelPath := StringReplace(RelPath, PathDelim, '\/', [rfReplaceAll]);
end;
PackageFileObject.Add('RelativeFilePath', PackageRelativePath);
PackageFileObject.Add('VersionAsString', PackageFile.VersionAsString);
PackageFileObject.Add('LazCompatibility', PackageFile.LazCompatibility);
PackageFileObject.Add('FPCCompatibility', PackageFile.FPCCompatibility);
PackageFileObject.Add('SupportedWidgetSet', PackageFile.SupportedWidgetSet);
PackageFileObject.Add('PackageType', Ord(PackageFile.PackageType));
PackageFileObject.Add('DependenciesAsString', PackageFile.DependenciesAsString);
APackageFiles.Add(PackageFileObject);
LazarusPkgObj.Add('RelativeFilePath', RelPath);
LazarusPkgObj.Add('VersionAsString', LazarusPkg.VersionAsString);
LazarusPkgObj.Add('LazCompatibility', LazarusPkg.LazCompatibility);
LazarusPkgObj.Add('FPCCompatibility', LazarusPkg.FPCCompatibility);
LazarusPkgObj.Add('SupportedWidgetSet', LazarusPkg.SupportedWidgetSet);
LazarusPkgObj.Add('PackageType', Ord(LazarusPkg.PackageType));
LazarusPkgObj.Add('DependenciesAsString', LazarusPkg.DependenciesAsString);
ALazarusPkgsArr.Add(LazarusPkgObj);
end;
except
on E: Exception do
begin
Result := False;
FlastError := '"' + PackageFile.Name + '": ' + E.Message;
FlastError := '"' + LazarusPkg.Name + '": ' + E.Message;
end;
end;
end;
@ -957,15 +956,15 @@ end;
function TSerializablePackages.IsPackageExtracted(const APackage: TPackage): Boolean;
var
I: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
Result := True;
for I := 0 to APackage.FPackageFiles.Count - 1 do
for I := 0 to APackage.FLazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(APackage.FPackageFiles.Items[I]);
PackageFile.FPackageAbsolutePath := Options.LocalRepositoryPackages + APackage.PackageBaseDir
+ PackageFile.FPackageRelativePath + PackageFile.Name;
if not FileExists(PackageFile.FPackageAbsolutePath) then
LazarusPkg := TLazarusPackage(APackage.FLazarusPackages.Items[I]);
LazarusPkg.FPackageAbsolutePath := Options.LocalRepositoryPackages + APackage.PackageBaseDir
+ LazarusPkg.FPackageRelativePath + LazarusPkg.Name;
if not FileExists(LazarusPkg.FPackageAbsolutePath) then
begin
Result := False;
Break;
@ -1035,7 +1034,7 @@ begin
end;
function TSerializablePackages.IsPackageInstalled(const APackageFile: TPackageFile;
function TSerializablePackages.IsPackageInstalled(const ALazarusPkg: TLazarusPackage;
const APackageBaseDir: String): Boolean;
function CheckIDEPackages: Boolean;
@ -1049,17 +1048,17 @@ function TSerializablePackages.IsPackageInstalled(const APackageFile: TPackageFi
for I := 0 to PackageCnt - 1 do
begin
Package := PackageEditingInterface.GetPackages(I);
if ExtractFileName(Package.FileName) = APackageFile.Name then
if ExtractFileName(Package.FileName) = ALazarusPkg.Name then
begin
APackageFile.InstalledFileName := Package.Filename;
APackageFile.InstalledFileVersion := IntToStr(Package.Version.Major) + '.' +
ALazarusPkg.InstalledFileName := Package.Filename;
ALazarusPkg.InstalledFileVersion := IntToStr(Package.Version.Major) + '.' +
IntToStr(Package.Version.Minor) + '.' +
IntToStr(Package.Version.Release) + '.' +
IntToStr(Package.Version.Build);
if FileExists(APackageFile.InstalledFileName) then
if FileExists(ALazarusPkg.InstalledFileName) then
begin
APackageFile.InstalledFileDescription := GetPackageDescription(Package.Filename);
APackageFile.InstalledFileLincese := GetPackageLicense(Package.Filename);
ALazarusPkg.InstalledFileDescription := GetPackageDescription(Package.Filename);
ALazarusPkg.InstalledFileLincese := GetPackageLicense(Package.Filename);
end;
Result := True;
Break;
@ -1071,20 +1070,20 @@ var
FileName, RepoPath: String;
begin
Result := False;
case APackageFile.PackageType of
case ALazarusPkg.PackageType of
ptRunTime, ptRunTimeOnly:
begin
FileName := StringReplace(APackageFile.Name, '.lpk', '.opkman', [rfIgnoreCase]);
RepoPath := Options.LocalRepositoryPackages + APackageBaseDir + APackageFile.PackageRelativePath;
Result := (psExtracted in APackageFile.PackageStates) and FileExists(RepoPath + FileName);
FileName := StringReplace(ALazarusPkg.Name, '.lpk', '.opkman', [rfIgnoreCase]);
RepoPath := Options.LocalRepositoryPackages + APackageBaseDir + ALazarusPkg.PackageRelativePath;
Result := (psExtracted in ALazarusPkg.PackageStates) and FileExists(RepoPath + FileName);
if Result then
begin
APackageFile.InstalledFileName := RepoPath + APackageFile.Name;
if FileExists(APackageFile.InstalledFileName) then
ALazarusPkg.InstalledFileName := RepoPath + ALazarusPkg.Name;
if FileExists(ALazarusPkg.InstalledFileName) then
begin
APackageFile.InstalledFileVersion := GetPackageVersion(APackageFile.InstalledFileName);
APackageFile.InstalledFileDescription := GetPackageDescription(APackageFile.InstalledFileName);
APackageFile.InstalledFileLincese := GetPackageLicense(APackageFile.InstalledFileName);
ALazarusPkg.InstalledFileVersion := GetPackageVersion(ALazarusPkg.InstalledFileName);
ALazarusPkg.InstalledFileDescription := GetPackageDescription(ALazarusPkg.InstalledFileName);
ALazarusPkg.InstalledFileLincese := GetPackageLicense(ALazarusPkg.InstalledFileName);
end;
end
else
@ -1100,20 +1099,20 @@ end;
function TSerializablePackages.GetPackageInstallState(const APackage: TPackage): Integer;
var
I: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
InstCnt: Integer;
begin
InstCnt := 0;
for I := 0 to APackage.PackageFiles.Count - 1 do
for I := 0 to APackage.LazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(APackage.PackageFiles.Items[I]);
if IsPackageInstalled(PackageFile, APackage.PackageBaseDir) then
LazarusPkg := TLazarusPackage(APackage.LazarusPackages.Items[I]);
if IsPackageInstalled(LazarusPkg, APackage.PackageBaseDir) then
Inc(InstCnt);
end;
case InstCnt of
0: Result := 0;
1..High(Integer):
if InstCnt < APackage.PackageFiles.Count then
if InstCnt < APackage.LazarusPackages.Count then
Result := 2
else
Result := 1;
@ -1159,25 +1158,25 @@ function TSerializablePackages.PackagesToJSON(var JSON: TJSONStringType): Boolea
var
PackageObject: TJSONObject;
PackageData: TJSONObject;
PackageFiles: TJSONArray;
LazarusPkgsArr: TJSONArray;
I: Integer;
Package: TPackage;
begin
Result := True;
PackageObject := TJSONObject.Create;
try
PackageFiles := nil;
LazarusPkgsArr := nil;
PackageData := nil;
try
for I := 0 to FPackages.Count - 1 do
begin
Package := TPackage(FPackages.Items[I]);
if not PackageFilesToJSON(Package, PackageFiles) then
if not LazarusPackagesToJSON(Package, LazarusPkgsArr) then
Result := False;
if not PackageDataToJSON(Package, PackageData) then
Result := False;
PackageObject.Add('PackageData' + IntToStr(I), PackageData);
PackageObject.Add('PackageFiles' + IntToStr(I), PackageFiles);
PackageObject.Add('PackageFiles' + IntToStr(I), LazarusPkgsArr);
end;
if Result then
JSON := PackageObject.FormatJSON(DefaultFormat, DefaultIndentSize);
@ -1189,34 +1188,34 @@ begin
end;
end;
procedure TSerializablePackages.GetPackageDependencies(const APackageFileName: String;
procedure TSerializablePackages.GetPackageDependencies(const APkgFileName: String;
List: TObjectList; Recurse, OnlyUnresolved: Boolean);
var
SL: TStringList;
I, J: Integer;
PackageFileName: String;
PackageName: String;
Installed: Boolean;
Package: TIDEPackage;
PackageFile: TPackageFile;
IDEPackage: TIDEPackage;
LazarusPkg: TLazarusPackage;
begin
SL := TStringList.Create;
try
SL.Sorted := True;
DoGetPackageDependencies(APackageFileName, SL, Ord(Recurse) - 1);
DoGetPackageDependencies(APkgFileName, SL, Ord(Recurse) - 1);
if OnlyUnresolved then
begin
for I := SL.Count - 1 downto 0 do
begin
PackageFileName := TPackageDependency(SL.Objects[I]).PackageFileName + '.lpk';
PackageName := TPackageDependency(SL.Objects[I]).PkgFileName + '.lpk';
Installed := False;
for J := 0 to PackageEditingInterface.GetPackageCount - 1 do
begin
Package := PackageEditingInterface.GetPackages(J);
if UpperCase(ExtractFileName(Package.Filename)) = UpperCase(PackageFileName) then
IDEPackage := PackageEditingInterface.GetPackages(J);
if UpperCase(ExtractFileName(IDEPackage.Filename)) = UpperCase(PackageName) then
begin
PackageFile := FindPackageFile(PackageFileName);
if PackageFile <> nil then
Installed := IsInstalledVersionOk(TPackageDependency(SL.Objects[I]), PackageFile.InstalledFileVersion)
LazarusPkg := FindLazarusPackage(PackageName);
if LazarusPkg <> nil then
Installed := IsInstalledVersionOk(TPackageDependency(SL.Objects[I]), LazarusPkg.InstalledFileVersion)
else
Installed := True;
Break;
@ -1239,7 +1238,7 @@ end;
procedure TSerializablePackages.GetPackageStates;
var
I, J: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
for I := 0 to Count - 1 do
begin
@ -1257,16 +1256,16 @@ begin
else
Items[I].ChangePackageStates(ctRemove, psExtracted);
for J := 0 to Items[I].FPackageFiles.Count - 1 do
for J := 0 to Items[I].FLazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(Items[I].FPackageFiles.Items[J]);
if IsPackageInstalled(PackageFile, Items[I].PackageBaseDir) then
LazarusPkg := TLazarusPackage(Items[I].FLazarusPackages.Items[J]);
if IsPackageInstalled(LazarusPkg, Items[I].PackageBaseDir) then
begin
PackageFile.PackageStates := PackageFile.PackageStates + [psInstalled];
PackageFile.PackageState := psInstalled;
LazarusPkg.PackageStates := LazarusPkg.PackageStates + [psInstalled];
LazarusPkg.PackageState := psInstalled;
end
else
PackageFile.PackageStates := PackageFile.PackageStates - [psInstalled];
LazarusPkg.PackageStates := LazarusPkg.PackageStates - [psInstalled];
end;
end;
end;
@ -1274,14 +1273,18 @@ end;
procedure TSerializablePackages.RemoveErrorState;
var
I, J: Integer;
LazarusPkg: TLazarusPackage;
begin
for I := 0 to Count - 1 do
begin
if psError in Items[I].PackageStates then
Items[I].ChangePackageStates(ctRemove, psError);
for J := 0 to Items[I].FPackageFiles.Count - 1 do
if psError in TPackageFile(Items[I].FPackageFiles.Items[J]).PackageStates then
TPackageFile(Items[I].FPackageFiles.Items[J]).PackageStates := TPackageFile(Items[I].FPackageFiles.Items[J]).PackageStates - [psError];
for J := 0 to Items[I].FLazarusPackages.Count - 1 do
begin
LazarusPkg := TLazarusPackage(Items[I].FLazarusPackages.Items[J]);
//if psError in LazarusPkg.PackageStates then
LazarusPkg.PackageStates := LazarusPkg.PackageStates - [psError];
end;
end;
end;
@ -1289,34 +1292,33 @@ procedure TSerializablePackages.MarkRuntimePackages;
var
I, J: Integer;
FileName: String;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
for I := 0 to Count - 1 do
begin
for J := 0 to Items[I].FPackageFiles.Count - 1 do
for J := 0 to Items[I].FLazarusPackages.Count - 1 do
begin
PackageFile := TPackageFile(Items[I].FPackageFiles.Items[J]);
if (PackageFile.Checked) and
(psInstalled in PackageFile.PackageStates) and
(not (psError in PackageFile.PackageStates)) and
(PackageFile.PackageType in [ptRunTime, ptRunTimeOnly]) then
LazarusPkg := TLazarusPackage(Items[I].FLazarusPackages.Items[J]);
if (LazarusPkg.Checked) and
(psInstalled in LazarusPkg.PackageStates) and
(not (psError in LazarusPkg.PackageStates)) and
(LazarusPkg.PackageType in [ptRunTime, ptRunTimeOnly]) then
begin
FileName := StringReplace(PackageFile.Name, '.lpk', '.opkman', [rfIgnoreCase]);
FileCreate(Options.LocalRepositoryPackages + Items[I].PackageBaseDir + PackageFile.PackageRelativePath + FileName);
FileName := StringReplace(LazarusPkg.Name, '.lpk', '.opkman', [rfIgnoreCase]);
FileCreate(Options.LocalRepositoryPackages + Items[I].PackageBaseDir + LazarusPkg.PackageRelativePath + FileName);
end;
end;
end;
end;
function TSerializablePackages.IsAtLeastOnePackageFileInstalled(
const APackage: TPackage): Boolean;
function TSerializablePackages.AtLeastOneLazPkgInstalled(const APackage: TPackage): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to APackage.PackageFiles.Count - 1 do
for I := 0 to APackage.LazarusPackages.Count - 1 do
begin
if IsPackageInstalled(TPackageFile(APackage.FPackageFiles.Items[I]), APackage.PackageBaseDir) then
if IsPackageInstalled(TLazarusPackage(APackage.FLazarusPackages.Items[I]), APackage.PackageBaseDir) then
begin
Result := True;
Break;
@ -1331,7 +1333,7 @@ begin
Result := 0;
for I := 0 to Count - 1 do
begin
if not IsAtLeastOnePackageFileInstalled(Items[I]) then
if not AtLeastOneLazPkgInstalled(Items[I]) then
begin
if IsPackageDownloaded(Items[I]) then
begin
@ -1420,7 +1422,7 @@ begin
end;
function TSerializablePackages.IsDependencyOk(PackageDependency: TPackageDependency;
DependencyPackage: TPackageFile): Boolean;
DependencyPackage: TLazarusPackage): Boolean;
var
MinVerOk: Boolean;
MaxVerOk: Boolean;

View File

@ -44,9 +44,9 @@ const
type
{ TUpdatePackageFiles }
{ TUpdateLazPackages }
TUpdatePackageFiles = class(TCollectionItem)
TUpdateLazPackages = class(TCollectionItem)
private
FName: String;
FVersion: String;
@ -81,7 +81,7 @@ type
TUpdatePackage = class(TPersistent)
private
FUpdatePackageData: TUpdatePackageData;
FUpdatePackageFiles: TCollection;
FUpdateLazPackages: TCollection;
FLastError: String;
procedure Clear;
public
@ -92,7 +92,7 @@ type
property LastError: String read FLastError;
published
property UpdatePackageData: TUpdatePackageData read FUpdatePackageData write FUpdatePackageData;
property UpdatePackageFiles: TCollection read FUpdatePackageFiles write FUpdatePackageFiles;
property UpdateLazPackages: TCollection read FUpdateLazPackages write FUpdateLazPackages;
end;
{ TUpdates }
@ -143,15 +143,15 @@ var
I: Integer;
begin
FUpdatePackageData.Clear;
for I := FUpdatePackageFiles.Count - 1 downto 0 do
FUpdatePackageFiles.Items[I].Free;
FUpdatePackageFiles.Clear;
for I := FUpdateLazPackages.Count - 1 downto 0 do
FUpdateLazPackages.Items[I].Free;
FUpdateLazPackages.Clear;
end;
constructor TUpdatePackage.Create;
begin
FUpdatePackageData := TUpdatePackageData.Create;
FUpdatePackageFiles := TCollection.Create(TUpdatePackageFiles);
FUpdateLazPackages := TCollection.Create(TUpdateLazPackages);
end;
destructor TUpdatePackage.Destroy;
@ -159,9 +159,9 @@ var
I: Integer;
begin
FUpdatePackageData.Free;
for I := FUpdatePackageFiles.Count - 1 downto 0 do
FUpdatePackageFiles.Items[I].Free;
FUpdatePackageFiles.Free;
for I := FUpdateLazPackages.Count - 1 downto 0 do
FUpdateLazPackages.Items[I].Free;
FUpdateLazPackages.Free;
inherited Destroy;
end;
@ -266,13 +266,13 @@ end;
procedure TUpdates.Load;
var
PackageCount: Integer;
PackageFileCount: Integer;
LazarusPkgCount: Integer;
I, J: Integer;
Path, SubPath: String;
PackageName: String;
PackageFileName: String;
LazarusPkgName: String;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
HasUpdate: Boolean;
begin
if (not Assigned(SerializablePackages)) or (SerializablePackages.Count = 0) then
@ -291,25 +291,25 @@ begin
Package.DownloadZipURL := FXML.GetValue(Path + 'DownloadZipURL', '');
Package.DisableInOPM := FXML.GetValue(Path + 'DisableInOPM', False);
Package.Rating := FXML.GetValue(Path + 'Rating', 0);
PackageFileCount := FXML.GetValue(Path + 'Count', 0);
for J := 0 to PackageFileCount - 1 do
LazarusPkgCount := FXML.GetValue(Path + 'Count', 0);
for J := 0 to LazarusPkgCount - 1 do
begin
SubPath := Path + 'PackageFile' + IntToStr(J) + '/';
PackageFileName := FXML.GetValue(SubPath + 'Name', '');
PackageFile := Package.FindPackageFile(PackageFileName);
if PackageFile <> nil then
LazarusPkgName := FXML.GetValue(SubPath + 'Name', '');
LazarusPkg := Package.FindLazarusPackage(LazarusPkgName);
if LazarusPkg <> nil then
begin
PackageFile.UpdateVersion := FXML.GetValue(SubPath + 'UpdateVersion', '');
PackageFile.ForceNotify := FXML.GetValue(SubPath + 'ForceNotify', False);
PackageFile.InternalVersion := FXML.GetValue(SubPath + 'InternalVersion', 0);;
PackageFile.InternalVersionOld := FXML.GetValue(SubPath + 'InternalVersionOld', 0);
PackageFile.HasUpdate := (PackageFile.UpdateVersion <> '') and (PackageFile.InstalledFileVersion <> '') and
(
((not PackageFile.ForceNotify) and (PackageFile.UpdateVersion > PackageFile.InstalledFileVersion)) or
((PackageFile.ForceNotify) and (PackageFile.InternalVersion > PackageFile.InternalVersionOld))
);
LazarusPkg.UpdateVersion := FXML.GetValue(SubPath + 'UpdateVersion', '');
LazarusPkg.ForceNotify := FXML.GetValue(SubPath + 'ForceNotify', False);
LazarusPkg.InternalVersion := FXML.GetValue(SubPath + 'InternalVersion', 0);;
LazarusPkg.InternalVersionOld := FXML.GetValue(SubPath + 'InternalVersionOld', 0);
LazarusPkg.HasUpdate := (LazarusPkg.UpdateVersion <> '') and (LazarusPkg.InstalledFileVersion <> '') and
(
((not LazarusPkg.ForceNotify) and (LazarusPkg.UpdateVersion > LazarusPkg.InstalledFileVersion)) or
((LazarusPkg.ForceNotify) and (LazarusPkg.InternalVersion > LazarusPkg.InternalVersionOld))
);
if not HasUpdate then
HasUpdate := PackageFile.HasUpdate;
HasUpdate := LazarusPkg.HasUpdate;
end;
end;
Package.HasUpdate := HasUpdate;
@ -323,7 +323,7 @@ var
I, J: Integer;
Path, SubPath: String;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
if (not Assigned(SerializablePackages)) or (SerializablePackages.Count = 0) then
Exit;
@ -338,16 +338,16 @@ begin
FXML.SetDeleteValue(Path + 'DownloadZipURL', Package.DownloadZipURL, '');
FXML.SetDeleteValue(Path + 'DisableInOPM', Package.DisableInOPM, False);
FXML.SetDeleteValue(Path + 'Rating', Package.Rating, 0);
FXML.SetDeleteValue(Path + 'Count', SerializablePackages.Items[I].PackageFiles.Count, 0);
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
FXML.SetDeleteValue(Path + 'Count', SerializablePackages.Items[I].LazarusPackages.Count, 0);
for J := 0 to SerializablePackages.Items[I].LazarusPackages.Count - 1 do
begin
SubPath := Path + 'PackageFile' + IntToStr(J) + '/';
PackageFile := TPackageFile(SerializablePackages.Items[I].PackageFiles.Items[J]);
FXML.SetDeleteValue(SubPath + 'Name', PackageFile.Name, '');
FXML.SetDeleteValue(SubPath + 'UpdateVersion', PackageFile.UpdateVersion, '');
FXML.SetDeleteValue(SubPath + 'ForceNotify', PackageFile.ForceNotify, False);
FXML.SetDeleteValue(SubPath + 'InternalVersion', PackageFile.InternalVersion, 0);
FXML.SetDeleteValue(SubPath + 'InternalVersionOld', PackageFile.InternalVersionOld, 0);
LazarusPkg := TLazarusPackage(SerializablePackages.Items[I].LazarusPackages.Items[J]);
FXML.SetDeleteValue(SubPath + 'Name', LazarusPkg.Name, '');
FXML.SetDeleteValue(SubPath + 'UpdateVersion', LazarusPkg.UpdateVersion, '');
FXML.SetDeleteValue(SubPath + 'ForceNotify', LazarusPkg.ForceNotify, False);
FXML.SetDeleteValue(SubPath + 'InternalVersion', LazarusPkg.InternalVersion, 0);
FXML.SetDeleteValue(SubPath + 'InternalVersionOld', LazarusPkg.InternalVersionOld, 0);
end;
end;
FXML.Flush;
@ -357,26 +357,26 @@ procedure TUpdates.AssignPackageData(APackage: TPackage);
var
I: Integer;
HasUpdate: Boolean;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
HasUpdate := False;
APackage.DownloadZipURL := FUpdatePackage.FUpdatePackageData.DownloadZipURL;
APackage.DisableInOPM := FUpdatePackage.FUpdatePackageData.DisableInOPM;
for I := 0 to FUpdatePackage.FUpdatePackageFiles.Count - 1 do
for I := 0 to FUpdatePackage.FUpdateLazPackages.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Name);
if PackageFile <> nil then
LazarusPkg := APackage.FindLazarusPackage(TUpdateLazPackages(FUpdatePackage.FUpdateLazPackages.Items[I]).Name);
if LazarusPkg <> nil then
begin
PackageFile.UpdateVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Version;
PackageFile.ForceNotify := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).ForceNotify;
PackageFile.InternalVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).InternalVersion;
PackageFile.HasUpdate := (PackageFile.UpdateVersion <> '') and (PackageFile.InstalledFileVersion <> '') and
(
((not PackageFile.ForceNotify) and (PackageFile.UpdateVersion > PackageFile.InstalledFileVersion)) or
((PackageFile.ForceNotify) and (PackageFile.InternalVersion > PackageFile.InternalVersionOld))
);
LazarusPkg.UpdateVersion := TUpdateLazPackages(FUpdatePackage.FUpdateLazPackages.Items[I]).Version;
LazarusPkg.ForceNotify := TUpdateLazPackages(FUpdatePackage.FUpdateLazPackages.Items[I]).ForceNotify;
LazarusPkg.InternalVersion := TUpdateLazPackages(FUpdatePackage.FUpdateLazPackages.Items[I]).InternalVersion;
LazarusPkg.HasUpdate := (LazarusPkg.UpdateVersion <> '') and (LazarusPkg.InstalledFileVersion <> '') and
(
((not LazarusPkg.ForceNotify) and (LazarusPkg.UpdateVersion > LazarusPkg.InstalledFileVersion)) or
((LazarusPkg.ForceNotify) and (LazarusPkg.InternalVersion > LazarusPkg.InternalVersionOld))
);
if not HasUpdate then
HasUpdate := PackageFile.HasUpdate;
HasUpdate := LazarusPkg.HasUpdate;
end;
end;
APackage.HasUpdate := HasUpdate;
@ -385,21 +385,21 @@ end;
procedure TUpdates.ResetPackageData(APackage: TPackage);
var
I: Integer;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
APackage.DownloadZipURL := '';
APackage.DisableInOPM := False;
APackage.HasUpdate := False;
for I := 0 to APackage.PackageFiles.Count - 1 do
for I := 0 to APackage.LazarusPackages.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TPackageFile(APackage.PackageFiles.Items[I]).Name);
if PackageFile <> nil then
LazarusPkg := APackage.FindLazarusPackage(TLazarusPackage(APackage.LazarusPackages.Items[I]).Name);
if LazarusPkg <> nil then
begin
PackageFile.HasUpdate := False;
PackageFile.UpdateVersion := '';
PackageFile.ForceNotify := False;
PackageFile.InternalVersion := 0;
PackageFile.InternalVersionOld := 0;
LazarusPkg.HasUpdate := False;
LazarusPkg.UpdateVersion := '';
LazarusPkg.ForceNotify := False;
LazarusPkg.InternalVersion := 0;
LazarusPkg.InternalVersionOld := 0;
end;
end;
end;

View File

@ -49,7 +49,7 @@ type
PackageName: String;
PackageDisplayName: String;
Category: String;
PackageFileName: String;
LazarusPackageName: String;
Version: String;
InstalledVersion: String;
UpdateVersion: String;
@ -78,7 +78,7 @@ type
Rating: Integer;
end;
TFilterBy = (fbPackageName, fbPackageFileName, fbPackageCategory, fbPackageState,
TFilterBy = (fbPackageName, fbLazarusPackageName, fbPackageCategory, fbPackageState,
fbVersion, fbDescription, fbAuthor, fbLazCompatibility, fbFPCCompatibility,
fbSupportedWidgetsets, fbPackageType, fbDependecies, fbLicense);
@ -296,7 +296,7 @@ var
I, J: Integer;
RootNode, Node, ChildNode, GrandChildNode: PVirtualNode;
RootData, Data, ChildData, GrandChildData: PData;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
UniqueID: Integer;
begin
FVST.OnExpanding := nil;
@ -328,31 +328,31 @@ begin
Data^.RepositoryDate := SerializablePackages.Items[I].RepositoryDate;
FVST.IsDisabled[Node] := Data^.DisableInOPM;
Data^.DataType := 1;
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
for J := 0 to SerializablePackages.Items[I].LazarusPackages.Count - 1 do
begin
//add packagefiles(DataType = 2)
PackageFile := TPackageFile(SerializablePackages.Items[I].PackageFiles.Items[J]);
//add LazarusPackages(DataType = 2)
LazarusPkg := TLazarusPackage(SerializablePackages.Items[I].LazarusPackages.Items[J]);
ChildNode := FVST.AddChild(Node);
ChildNode^.CheckType := ctTriStateCheckBox;
FVST.IsDisabled[ChildNode] := FVST.IsDisabled[ChildNode^.Parent];
ChildData := FVST.GetNodeData(ChildNode);
ChildData^.PID := I;
ChildData^.PFID := J;
ChildData^.PackageFileName := PackageFile.Name;
ChildData^.InstalledVersion := PackageFile.InstalledFileVersion;
ChildData^.UpdateVersion := PackageFile.UpdateVersion;
ChildData^.Version := PackageFile.VersionAsString;
ChildData^.PackageState := PackageFile.PackageState;
ChildData^.HasUpdate := PackageFile.HasUpdate;
ChildData^.LazarusPackageName := LazarusPkg.Name;
ChildData^.InstalledVersion := LazarusPkg.InstalledFileVersion;
ChildData^.UpdateVersion := LazarusPkg.UpdateVersion;
ChildData^.Version := LazarusPkg.VersionAsString;
ChildData^.PackageState := LazarusPkg.PackageState;
ChildData^.HasUpdate := LazarusPkg.HasUpdate;
ChildData^.DataType := 2;
//add description(DataType = 3)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
if ChildData^.InstalledVersion <> '' then
GrandChildData^.Description := PackageFile.InstalledFileDescription
GrandChildData^.Description := LazarusPkg.InstalledFileDescription
else
GrandChildData^.Description := PackageFile.Description;
GrandChildData^.Description := LazarusPkg.Description;
GrandChildData^.DataType := 3;
Inc(UniqueID);
CreateButton(UniqueID, GrandChildData);
@ -361,40 +361,40 @@ begin
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.Author := PackageFile.Author;
GrandChildData^.Author := LazarusPkg.Author;
GrandChildData^.DataType := 4;
//add lazcompatibility(DataType = 5)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.LazCompatibility := PackageFile.LazCompatibility;
GrandChildData^.LazCompatibility := LazarusPkg.LazCompatibility;
GrandChildData^.DataType := 5;
//add fpccompatibility(DataType = 6)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.FPCCompatibility := PackageFile.FPCCompatibility;
GrandChildData^.FPCCompatibility := LazarusPkg.FPCCompatibility;
GrandChildData^.DataType := 6;
//add widgetset(DataType = 7)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.SupportedWidgetSet := PackageFile.SupportedWidgetSet;
GrandChildData^.SupportedWidgetSet := LazarusPkg.SupportedWidgetSet;
GrandChildData^.DataType := 7;
//add packagetype(DataType = 8)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.PackageType := PackageFile.PackageType;
GrandChildData^.PackageType := LazarusPkg.PackageType;
GrandChildData^.DataType := 8;
//add license(DataType = 9)
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
if ChildData^.InstalledVersion <> '' then
GrandChildData^.License := PackageFile.InstalledFileLincese
GrandChildData^.License := LazarusPkg.InstalledFileLincese
else
GrandChildData^.License := PackageFile.License;
GrandChildData^.License := LazarusPkg.License;
GrandChildData^.DataType := 9;
Inc(UniqueID);
CreateButton(UniqueID, GrandChildData);
@ -403,7 +403,7 @@ begin
GrandChildNode := FVST.AddChild(ChildNode);
FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent];
GrandChildData := FVST.GetNodeData(GrandChildNode);
GrandChildData^.Dependencies := PackageFile.DependenciesAsString;
GrandChildData^.Dependencies := LazarusPkg.DependenciesAsString;
GrandChildData^.DataType := 10;
end;
//add miscellaneous(DataType = 11)
@ -509,11 +509,11 @@ begin
case Data^.DataType of
3: begin
Text := Data^.Description;
FrmCaption := rsMainFrm_VSTText_Desc + ' "' + ParentData^.PackageFileName + '"';
FrmCaption := rsMainFrm_VSTText_Desc + ' "' + ParentData^.LazarusPackageName + '"';
end;
9: begin
Text := Data^.License;
FrmCaption := rsMainFrm_VSTText_Lic + ' "' + ParentData^.PackageFileName + '"';
FrmCaption := rsMainFrm_VSTText_Lic + ' "' + ParentData^.LazarusPackageName + '"';
end;
end;
Break;
@ -802,11 +802,11 @@ procedure TVisualTree.FilterTree(const AFilterBy: TFilterBy; const AText:
procedure HideShowParentNodes(const ANode: PVirtualNode; AShow: Boolean);
var
Level: Integer;
RepositoryNode, PackageNode, PackageFileNode: PVirtualNode;
RepositoryNode, PackageNode, LazarusPkgNode: PVirtualNode;
begin
RepositoryNode := nil;
PackageNode := nil;
PackageFileNode := nil;
LazarusPkgNode := nil;
Level := FVST.GetNodeLevel(ANode);
case Level of
1: begin
@ -816,12 +816,12 @@ procedure TVisualTree.FilterTree(const AFilterBy: TFilterBy; const AText:
2: begin
RepositoryNode := ANode^.Parent^.Parent;
PackageNode := ANode^.Parent;
PackageFileNode := ANode;
LazarusPkgNode := ANode;
end;
3: begin
RepositoryNode := ANode^.Parent^.Parent^.Parent;
PackageNode := ANode^.Parent^.Parent;
PackageFileNode := ANode^.Parent;
LazarusPkgNode := ANode^.Parent;
end;
end;
if Level = 1 then
@ -852,14 +852,14 @@ procedure TVisualTree.FilterTree(const AFilterBy: TFilterBy; const AText:
begin
if AShow then
begin
FVST.IsVisible[PackageFileNode] := True;
FVST.IsVisible[LazarusPkgNode] := True;
FVST.IsVisible[PackageNode] := True;
FVST.IsVisible[RepositoryNode] := True;
end
else
begin
FVST.IsVisible[PackageFileNode] := False;
HideShowParentNodes(PackageFileNode, AShow);
FVST.IsVisible[LazarusPkgNode] := False;
HideShowParentNodes(LazarusPkgNode, AShow);
end;
end;
end;
@ -905,10 +905,10 @@ begin
if (Data^.DataType = 1) then
FilterNode(Node, Data^.PackageName);
end;
fbPackageFileName:
fbLazarusPackageName:
begin
if (Data^.DataType = 2) then
FilterNode(Node, Data^.PackageFileName);
FilterNode(Node, Data^.LazarusPackageName);
end;
fbPackageCategory:
begin
@ -1045,7 +1045,7 @@ var
Node: PVirtualNode;
Data: PData;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
Node := FVST.GetFirst;
while Assigned(Node) do
@ -1064,13 +1064,13 @@ begin
end;
if Data^.DataType = 2 then
begin
PackageFile := TPackageFile(SerializablePackages.Items[Data^.PID].PackageFiles.Items[Data^.PFID]);
if PackageFile <> nil then
LazarusPkg := TLazarusPackage(SerializablePackages.Items[Data^.PID].LazarusPackages.Items[Data^.PFID]);
if LazarusPkg <> nil then
begin
if FVST.CheckState[Node] = csCheckedNormal then
PackageFile.Checked := True
LazarusPkg.Checked := True
else if FVST.CheckState[Node] = csUncheckedNormal then
PackageFile.Checked := False
LazarusPkg.Checked := False
end;
end;
Node := FVST.GetNext(Node);
@ -1082,7 +1082,7 @@ var
Node: PVirtualNode;
Data: PData;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
SerializablePackages.GetPackageStates;
Node := FVST.GetFirst;
@ -1102,11 +1102,11 @@ begin
end;
if Data^.DataType = 2 then
begin
PackageFile := TPackageFile(SerializablePackages.Items[Data^.PID].PackageFiles.Items[Data^.PFID]);
if PackageFile <> nil then
LazarusPkg := TLazarusPackage(SerializablePackages.Items[Data^.PID].LazarusPackages.Items[Data^.PFID]);
if LazarusPkg <> nil then
begin
Data^.InstalledVersion := PackageFile.InstalledFileVersion;
Data^.PackageState := PackageFile.PackageState;
Data^.InstalledVersion := LazarusPkg.InstalledFileVersion;
Data^.PackageState := LazarusPkg.PackageState;
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
end;
@ -1120,7 +1120,7 @@ var
Node: PVirtualNode;
Data, ParentData: PData;
Package: TPackage;
PackageFile: TPackageFile;
LazarusPkg: TLazarusPackage;
begin
Node := FVST.GetFirst;
while Assigned(Node) do
@ -1142,11 +1142,11 @@ begin
end;
if Data^.DataType = 2 then
begin
PackageFile := TPackageFile(SerializablePackages.Items[Data^.PID].PackageFiles.Items[Data^.PFID]);
if PackageFile <> nil then
LazarusPkg := TLazarusPackage(SerializablePackages.Items[Data^.PID].LazarusPackages.Items[Data^.PFID]);
if LazarusPkg <> nil then
begin
Data^.UpdateVersion := PackageFile.UpdateVersion;
Data^.HasUpdate := PackageFile.HasUpdate;
Data^.UpdateVersion := LazarusPkg.UpdateVersion;
Data^.HasUpdate := LazarusPkg.HasUpdate;
FVST.IsDisabled[Node] := FVST.IsDisabled[Node^.Parent];
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
@ -1160,13 +1160,13 @@ begin
begin
case Data^.DataType of
3: if ParentData^.InstalledVersion <> '' then
Data^.Description := PackageFile.InstalledFileDescription
Data^.Description := LazarusPkg.InstalledFileDescription
else
Data^.Description := PackageFile.Description;
Data^.Description := LazarusPkg.Description;
9: if ParentData^.InstalledVersion <> '' then
Data^.License := PackageFile.InstalledFileLincese
Data^.License := LazarusPkg.InstalledFileLincese
else
Data^.License := PackageFile.License;
Data^.License := LazarusPkg.License;
end;
if Assigned(Data^.Button) then
Data^.Button.Enabled := not FVST.IsDisabled[Node];
@ -1235,8 +1235,8 @@ var
Data, DataSearch: PData;
Msg: String;
PackageList: TObjectList;
PackageFileName: String;
DependencyPackage: TPackageFile;
PkgFileName: String;
DependencyPkg: TLazarusPackage;
I: Integer;
begin
Result := mrNone;
@ -1250,10 +1250,10 @@ begin
begin
PackageList := TObjectList.Create(True);
try
SerializablePackages.GetPackageDependencies(Data^.PackageFileName, PackageList, True, True);
SerializablePackages.GetPackageDependencies(Data^.LazarusPackageName, PackageList, True, True);
for I := 0 to PackageList.Count - 1 do
begin
PackageFileName := TPackageDependency(PackageList.Items[I]).PackageFileName + '.lpk';
PkgFileName := TPackageDependency(PackageList.Items[I]).PkgFileName + '.lpk';
NodeSearch := VST.GetFirst;
while Assigned(NodeSearch) do
begin
@ -1262,15 +1262,15 @@ begin
DataSearch := FVST.GetNodeData(NodeSearch);
if DataSearch^.DataType = 2 then
begin
DependencyPackage := TPackageFile(SerializablePackages.Items[DataSearch^.PID].PackageFiles.Items[DataSearch^.PFID]);
DependencyPkg := TLazarusPackage(SerializablePackages.Items[DataSearch^.PID].LazarusPackages.Items[DataSearch^.PFID]);
if (FVST.CheckState[NodeSearch] <> csCheckedNormal) and
(UpperCase(DataSearch^.PackageFileName) = UpperCase(PackageFileName)) and
((SerializablePackages.IsDependencyOk(TPackageDependency(PackageList.Items[I]), DependencyPackage)) and
((not (DependencyPackage.PackageState = psInstalled)) or ((DependencyPackage.PackageState = psInstalled) and (not (SerializablePackages.IsInstalledVersionOk(TPackageDependency(PackageList.Items[I]), DataSearch^.InstalledVersion)))))) then
(UpperCase(DataSearch^.LazarusPackageName) = UpperCase(PkgFileName)) and
((SerializablePackages.IsDependencyOk(TPackageDependency(PackageList.Items[I]), DependencyPkg)) and
((not (DependencyPkg.PackageState = psInstalled)) or ((DependencyPkg.PackageState = psInstalled) and (not (SerializablePackages.IsInstalledVersionOk(TPackageDependency(PackageList.Items[I]), DataSearch^.InstalledVersion)))))) then
begin
if (Result = mrNone) or (Result = mrYes) then
begin
Msg := Format(rsMainFrm_rsPackageDependency0, [Data^.PackageFileName, DataSearch^.PackageFileName]);
Msg := Format(rsMainFrm_rsPackageDependency0, [Data^.LazarusPackageName, DataSearch^.LazarusPackageName]);
Result := MessageDlgEx(Msg, mtConfirmation, [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel], TForm(FVST.Parent.Parent));
if Result in [mrNo, mrNoToAll] then
MessageDlgEx(rsMainFrm_rsPackageDependency1, mtInformation, [mbOk], TForm(FVST.Parent.Parent));
@ -1333,7 +1333,7 @@ begin
else if (Data1^.DataType > Data2^.DataType) then
Result := 1
else if (Data1^.DataType = 2) and (Data1^.DataType = 2) then
Result := CompareText(Data1^.PackageFileName, Data2^.PackageFileName);
Result := CompareText(Data1^.LazarusPackageName, Data2^.LazarusPackageName);
end;
1: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then
Result := Data2^.InstallState - Data1^.InstallState;
@ -1409,7 +1409,7 @@ begin
CellText := Data^.PackageName
else
CellText := Data^.PackageDisplayName;
2: CellText := Data^.PackageFileName;
2: CellText := Data^.LazarusPackageName;
3: CellText := rsMainFrm_VSTText_Description;
4: CellText := rsMainFrm_VSTText_Author;
5: CellText := rsMainFrm_VSTText_LazCompatibility;