8
SysUtils, Classes, ComCtrls,
15
TLazFPPackage = Class(TFPPackage)
17
FLazarusPackageFiles: TStrings;
18
function GetLazarusPackageFiles: TStrings;
20
procedure LoadUnitConfigFromStringlist(Const AStringList: TStrings); override;
22
function HasLazarusPackageFiles: boolean;
23
property LazarusPackageFiles: TStrings read GetLazarusPackageFiles;
24
destructor Destroy; override;
29
TLazFPRepository = Class(TFPRepository)
31
procedure CreatePackages; override;
35
TLazPackageData = record
37
InstalledVersion: string;
38
AvialableVersion: string;
54
TPackageSortType = (stNone);
58
TLazPackages = class(TObject)
59
FPkgData: array of TLazPackageData;
62
FSort: TPackageSortType;
63
FSortType: TPackageSortType;
64
function GetPkgData(index: integer): TLazPackageData;
65
procedure SetSort(const AValue: TPackageSortType);
66
procedure SetSortType(const AValue: TPackageSortType);
70
destructor Destroy; override;
72
property PkgData[index: integer]: TLazPackageData read GetPkgData;
73
property Count: integer read FCount;
74
procedure Add(Pkg: TLazPackageData);
77
property SortType: TPackageSortType read FSortType write SetSortType;
79
function FindPackage(const AName: string): TLazPackageData;
82
procedure Laz_ListPackages;
85
Laz_Packages: TLazPackages;
93
function Laz_PackageInstalledVersionStr(const AName:String;const ShowUsed: boolean = false;const Local: boolean = false):string;
97
P := InstalledRepository.FindPackage(AName);
99
Result := P.Version.AsString
104
function GetPackage(const AName: string): TFPPackage;
106
Result := AvailableRepository.FindPackage(AName);
108
if not Assigned(Result) then
109
Result := InstalledRepository.FindPackage(AName);
112
procedure Laz_ListPackages;
117
pkg: TLazPackageData;
120
SL := TStringList.Create;
122
SL.Duplicates := dupIgnore;
124
for i := 0 to AvailableRepository.PackageCount - 1 do
125
SL.Add(AvailableRepository.Packages[i].Name);
127
for i := 0 to InstalledRepository.PackageCount - 1 do
128
SL.Add(InstalledRepository.Packages[i].Name);
132
for i := 0 to SL.Count - 1 do
134
PackageName := SL[i];
135
if (PackageName <> CmdLinePackageName) and (PackageName <>
136
CurrentDirPackageName) then
138
pkg.Name := PackageName;
140
pkg.State := PackageInstalledStateStr(PackageName);
141
pkg.InstalledVersion := PackageInstalledVersionStr(PackageName);
142
pkg.AvialableVersion := PackageAvailableVersionStr(PackageName);
144
P := GetPackage(PackageName);
147
pkg.Description := P.Description;
148
pkg.Author := P.Author;
149
pkg.HomepageURL := P.HomepageURL;
150
pkg.DownloadURL := P.DownloadURL;
151
pkg.FileName := P.FileName;
152
pkg.Email := P.Email;
153
pkg.OS := OSesToString(P.OSes);
154
pkg.CPU := CPUSToString(P.CPUs);
157
Laz_Packages.Add(pkg);
166
function TLazFPPackage.GetLazarusPackageFiles: TStrings;
168
if not assigned(FLazarusPackageFiles) then
169
FLazarusPackageFiles := TStringList.Create;
170
Result := FLazarusPackageFiles;
173
procedure TLazFPPackage.LoadUnitConfigFromStringlist(const AStringList: TStrings);
177
inherited LoadUnitConfigFromStringlist(AStringList);
178
S:=AStringList.Values['LazarusPackageFiles'];
180
LazarusPackageFiles.CommaText:=s;
183
function TLazFPPackage.HasLazarusPackageFiles: boolean;
185
result := assigned(FLazarusPackageFiles) and (FLazarusPackageFiles.Count>0);
188
destructor TLazFPPackage.Destroy;
190
FLazarusPackageFiles.Free;
196
procedure TLazFPRepository.CreatePackages;
198
FPackages:=TFPPackages.Create(TLazFPPackage);
199
FPackages.StreamVersion:=StreamVersion;
204
function TLazPackages.GetPkgData(index: integer): TLazPackageData;
206
Result := FPkgData[index];
209
procedure TLazPackages.SetSort(const AValue: TPackageSortType);
211
if FSort = AValue then
216
procedure TLazPackages.SetSortType(const AValue: TPackageSortType);
218
if FSortType = AValue then
223
constructor TLazPackages.Create;
230
destructor TLazPackages.Destroy;
236
procedure TLazPackages.Add(Pkg: TLazPackageData);
240
SetLength(FPkgData, FCount);
241
FPkgData[FCount - 1] := Pkg;
244
procedure TLazPackages.Clear;
247
SetLength(FPkgData, FCount);
250
procedure TLazPackages.Sort;
258
function TLazPackages.FindPackage(const AName: string): TLazPackageData;
262
for i := 0 to Count - 1 do
263
if FPkgData[i].Name = AName then
265
Result := FPkgData[i];
271
Laz_Packages := TLazPackages.Create;
274
FreeAndNil(Laz_Packages);