Opkman: Extend TOPMInterface.

git-svn-id: trunk@56711 -
This commit is contained in:
balazs 2017-12-13 07:27:52 +00:00
parent 48b785c072
commit 640a82f920

View File

@ -45,6 +45,8 @@ type
FPackageDependecies: TObjectList; FPackageDependecies: TObjectList;
FPackageLinks: TObjectList; FPackageLinks: TObjectList;
FWaitForIDE: TThreadTimer; FWaitForIDE: TThreadTimer;
FNeedToInit: Boolean;
FBusyUpdating: Boolean;
procedure DoWaitForIDE(Sender: TObject); procedure DoWaitForIDE(Sender: TObject);
procedure DoUpdatePackageLinks(Sender: TObject); procedure DoUpdatePackageLinks(Sender: TObject);
procedure InitOPM; procedure InitOPM;
@ -75,6 +77,7 @@ begin
FPackageLinks := TObjectList.Create(False); FPackageLinks := TObjectList.Create(False);
FPackagesToInstall := TObjectList.Create(False); FPackagesToInstall := TObjectList.Create(False);
FPackageDependecies := TObjectList.Create(False); FPackageDependecies := TObjectList.Create(False);
FNeedToInit := True;
FWaitForIDE := TThreadTimer.Create; FWaitForIDE := TThreadTimer.Create;
FWaitForIDE.Interval := 100; FWaitForIDE.Interval := 100;
FWaitForIDE.OnTimer := @DoWaitForIDE; FWaitForIDE.OnTimer := @DoWaitForIDE;
@ -83,6 +86,8 @@ end;
destructor TOPMInterfaceEx.Destroy; destructor TOPMInterfaceEx.Destroy;
begin begin
FWaitForIDE.StopTimer;
FWaitForIDE.Terminate;
FPackageLinks.Clear; FPackageLinks.Clear;
FPackageLinks.Free; FPackageLinks.Free;
FPackagesToInstall.Clear; FPackagesToInstall.Clear;
@ -100,9 +105,25 @@ procedure TOPMInterfaceEx.DoWaitForIDE(Sender: TObject);
begin begin
if Assigned(LazarusIDE) and Assigned(PackageEditingInterface) then if Assigned(LazarusIDE) and Assigned(PackageEditingInterface) then
begin begin
InitOPM; if FNeedToInit then
FWaitForIDE.StopTimer; begin
FWaitForIDE.Terminate; InitOPM;
FNeedToInit := False;
FWaitForIDE.StopTimer;
FWaitForIDE.Interval := 5000;
FWaitForIDE.StartTimer;
end
else
begin
if FPackageLinks.Count = 0 then
begin
PackageDownloader.DownloadJSON(Options.ConTimeOut*1000);
Exit;
end;
if (not FBusyUpdating) then
if (Assigned(OnPackageListAvailable)) then
OnPackageListAvailable(Self);
end;
end; end;
end; end;
@ -114,7 +135,6 @@ begin
SerializablePackages.OnUpdatePackageLinks := @DoUpdatePackageLinks; SerializablePackages.OnUpdatePackageLinks := @DoUpdatePackageLinks;
PackageDownloader := TPackageDownloader.Create(Options.RemoteRepository[Options.ActiveRepositoryIndex]); PackageDownloader := TPackageDownloader.Create(Options.RemoteRepository[Options.ActiveRepositoryIndex]);
InstallPackageList := TObjectList.Create(True); InstallPackageList := TObjectList.Create(True);
PackageDownloader.DownloadJSON(Options.ConTimeOut*1000);
end; end;
procedure TOPMInterfaceEx.DoUpdatePackageLinks(Sender: TObject); procedure TOPMInterfaceEx.DoUpdatePackageLinks(Sender: TObject);
@ -147,28 +167,35 @@ var
PackageLink: TPackageLink; PackageLink: TPackageLink;
FileName, Name, URL: String; FileName, Name, URL: String;
begin begin
PkgLinks.ClearOnlineLinks; if FBusyUpdating then
FPackageLinks.Clear; Exit;
for I := 0 to SerializablePackages.Count - 1 do FBusyUpdating := True;
begin try
MetaPackage := SerializablePackages.Items[I]; PkgLinks.ClearOnlineLinks;
for J := 0 to MetaPackage.LazarusPackages.Count - 1 do FPackageLinks.Clear;
for I := 0 to SerializablePackages.Count - 1 do
begin begin
LazPackage := TLazarusPackage(MetaPackage.LazarusPackages.Items[J]); MetaPackage := SerializablePackages.Items[I];
FileName := Options.LocalRepositoryPackages + MetaPackage.PackageBaseDir + LazPackage.PackageRelativePath + LazPackage.Name; for J := 0 to MetaPackage.LazarusPackages.Count - 1 do
Name := StringReplace(LazPackage.Name, '.lpk', '', [rfReplaceAll, rfIgnoreCase]);
URL := Options.RemoteRepository[Options.ActiveRepositoryIndex] + MetaPackage.RepositoryFileName;
if not IsInLinkList(Name, URL) then
begin begin
PackageLink := PkgLinks.AddOnlineLink(FileName, Name, URL); LazPackage := TLazarusPackage(MetaPackage.LazarusPackages.Items[J]);
if PackageLink <> nil then FileName := Options.LocalRepositoryPackages + MetaPackage.PackageBaseDir + LazPackage.PackageRelativePath + LazPackage.Name;
Name := StringReplace(LazPackage.Name, '.lpk', '', [rfReplaceAll, rfIgnoreCase]);
URL := Options.RemoteRepository[Options.ActiveRepositoryIndex] + MetaPackage.RepositoryFileName;
if not IsInLinkList(Name, URL) then
begin begin
PackageLink.Version.Assign(LazPackage.Version); PackageLink := PkgLinks.AddOnlineLink(FileName, Name, URL);
PackageLink.LPKFileDate := MetaPackage.RepositoryDate; if PackageLink <> nil then
FPackageLinks.Add(PackageLink); begin
PackageLink.Version.Assign(LazPackage.Version);
PackageLink.LPKFileDate := MetaPackage.RepositoryDate;
FPackageLinks.Add(PackageLink);
end;
end; end;
end; end;
end; end;
finally
FBusyUpdating := False;
end; end;
end; end;