Merged revision(s) 59716-59717 #01d74c39d2-#01d74c39d2 from trunk:

PackageIntf: Detect if a package is installed or not via the packaging interface, function "IsPackageInstalled".
........
Opkman: After a package is opened with "Open package file(.lpk)...", OPM wrongly reports the package as installed when in fact is not. 
........

git-svn-id: branches/fixes_2_0@59989 -
This commit is contained in:
maxim 2019-01-04 14:08:12 +00:00
parent ad85cd6fe1
commit c5e0b4d6c0
4 changed files with 35 additions and 24 deletions

View File

@ -287,6 +287,7 @@ type
function GetPackages(Index: integer): TIDEPackage; virtual; abstract;
function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; virtual; abstract;
function FindInstalledPackageWithUnit(const AnUnitName: string): TIDEPackage; virtual; abstract;
function IsPackageInstalled(const PkgName: string): TIDEPackage; virtual; abstract;
// dependencies
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;

View File

@ -839,13 +839,15 @@ procedure TMainFrm.tbUninstallClick(Sender: TObject);
function GetIDEPackage(const AFileName: String): TIDEPackage;
var
I: Integer;
IDEPackge: TIDEPackage;
begin
Result := nil;
for I := 0 to PackageEditingInterface.GetPackageCount - 1 do
begin
if UpperCase(PackageEditingInterface.GetPackages(I).Filename) = UpperCase(AFileName) then
IDEPackge := PackageEditingInterface.GetPackages(I);
if UpperCase(IDEPackge.Filename) = UpperCase(AFileName) then
begin
Result := PackageEditingInterface.GetPackages(I);
Result := IDEPackge;
Break;
end;
end;
@ -891,7 +893,7 @@ begin
end;
lptDesignTime, lptRunAndDesignTime:
begin
IDEPackage := GetIDEPackage(LazarusPackage.PackageAbsolutePath);
IDEPackage := GetIDEPackage(LazarusPackage.InstalledFileName);
if IDEPackage <> nil then
begin
if PackageEditingInterface.UninstallPackage(IDEPackage, False) <> mrOk then

View File

@ -1121,30 +1121,27 @@ function TSerializablePackages.IsPackageInstalled(const ALazarusPkg: TLazarusPac
function CheckIDEPackages: Boolean;
var
PackageCnt: Integer;
I: Integer;
Package: TIDEPackage;
IDEPkg: TIDEPackage;
PkgExt: String;
PkgName: String;
begin
Result := False;
PackageCnt := PackageEditingInterface.GetPackageCount;
for I := 0 to PackageCnt - 1 do
PkgExt := ExtractFileExt(ALazarusPkg.Name);
PkgName := StringReplace(ALazarusPkg.Name, PkgExt, '', [rfIgnoreCase]);
IDEPkg := PackageEditingInterface.IsPackageInstalled(PkgName);
if IDEPkg <> nil then
begin
Package := PackageEditingInterface.GetPackages(I);
if ExtractFileName(Package.FileName) = ALazarusPkg.Name then
begin
ALazarusPkg.InstalledFileName := Package.Filename;
ALazarusPkg.InstalledFileVersion := IntToStr(Package.Version.Major) + '.' +
IntToStr(Package.Version.Minor) + '.' +
IntToStr(Package.Version.Release) + '.' +
IntToStr(Package.Version.Build);
if FileExists(ALazarusPkg.InstalledFileName) then
begin
ALazarusPkg.InstalledFileDescription := GetPackageDescription(Package.Filename);
ALazarusPkg.InstalledFileLincese := GetPackageLicense(Package.Filename);
end;
Result := True;
Break;
end;
ALazarusPkg.InstalledFileName := IDEPkg.Filename;
ALazarusPkg.InstalledFileVersion := IntToStr(IDEPkg.Version.Major) + '.' +
IntToStr(IDEPkg.Version.Minor) + '.' +
IntToStr(IDEPkg.Version.Release) + '.' +
IntToStr(IDEPkg.Version.Build);
if FileExists(ALazarusPkg.InstalledFileName) then
begin
ALazarusPkg.InstalledFileDescription := GetPackageDescription(IDEPkg.Filename);
ALazarusPkg.InstalledFileLincese := GetPackageLicense(IDEPkg.Filename);
end;
Result := True;
end;
end;

View File

@ -259,6 +259,7 @@ type
function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; override;
function FindInstalledPackageWithUnit(const AnUnitName: string
): TIDEPackage; override;
function IsPackageInstalled(const PkgName: string): TIDEPackage; override;
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
out DependencyOwner: TObject): boolean; override;
procedure GetRequiredPackages(AnOwner: TObject; out PkgList: TFPList;
@ -4169,6 +4170,16 @@ begin
Result:=PkgFile.LazPackage;
end;
function TPkgManager.IsPackageInstalled(const PkgName: string): TIDEPackage;
var
LazPackage: TLazPackage;
begin
Result := nil;
LazPackage:=PackageGraph.FindPackageWithName(PkgName, nil);
if (LazPackage<>nil) and (LazPackage.Installed<>pitNope) then
Result:=LazPackage
end;
function TPkgManager.RedirectPackageDependency(APackage: TIDEPackage): TIDEPackage;
begin
Result:=APackage;