libman, update deps on addition, prevent dull update on deletion

This commit is contained in:
Basile Burg 2016-10-22 05:59:08 +02:00
parent bf2d2c64d1
commit 26ed0e0385
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
1 changed files with 41 additions and 7 deletions

View File

@ -45,6 +45,7 @@ type
fLibProject: string;
fEnabled: boolean;
fDependencies: TStringList;
fClients: TStringList;
fModules: TCollection;
fModulesByName: TModulesByName;
fHasValidSourcePath: boolean;
@ -74,6 +75,7 @@ type
property hasValidLibProject: boolean read fHasValidLibProject;
property hasValidLibSourcePath: boolean read fHasValidSourcePath;
property dependencies: TStringList read fDependencies;
property clients: TStringList read fClients;
property modules: TCollection read fModules;
property moduleByIndex[value: integer]: TModuleInfo read getModule;
end;
@ -96,7 +98,7 @@ type
procedure setCollection(value: TCollection);
procedure updateItemsByAlias;
function getLibrariesCount: integer;
procedure FPOObservedChanged(ASender : TObject; Operation : TFPObservedOperation; Data : Pointer);
procedure FPOObservedChanged(ASender: TObject; Operation: TFPObservedOperation; Data : Pointer);
published
property libraries: TCollection read fCollection write setCollection;
public
@ -163,6 +165,9 @@ begin
fModules := TCollection.Create(TModuleInfo);
fModulesByName := TModulesByName.create;
fDependencies := TStringList.Create;
fClients := TStringList.Create;
fDependencies.Duplicates := dupIgnore;
fClients.Duplicates := dupIgnore;
fEnabled:=true;
end;
@ -171,6 +176,7 @@ begin
fModulesByName.Free;
fDependencies.Free;
fModules.Free;
fClients.Free;
inherited;
end;
@ -316,7 +322,7 @@ var
i: integer;
begin
inherited;
fItemsByAlias:= TItemsByAlias.create;
fItemsByAlias := TItemsByAlias.create;
fCollection := TCollection.Create(TLibraryItem);
fCollection.FPOAttachObserver(self);
fname := getCoeditDocPath + libFname;
@ -430,12 +436,34 @@ end;
procedure TLibraryManager.FPOObservedChanged(ASender: TObject; Operation:
TFPObservedOperation; Data: Pointer);
var
i,j: integer;
lib: TLibraryItem;
cli: TLibraryItem;
begin
if (Operation = ooDeleteItem) and data.isNotNil and
fItemsByAlias.contains(TLibraryItem(data).libAlias) then
begin
fItemsByAlias.delete(TLibraryItem(data).libAlias);
updateCrossDependencies;
if data.isNil then
exit;
lib := TLibraryItem(data);
case operation of
ooDeleteItem: if fItemsByAlias.contains(lib.libAlias) then
begin
fItemsByAlias.delete(lib.libAlias);
for i:= 0 to lib.clients.Count-1 do
begin
cli := libraryByAlias[lib.clients[i]];
if assigned(cli) then
begin
j := cli.dependencies.IndexOf(lib.libAlias);
if j <> -1 then
cli.dependencies.Delete(j);
end;
end;
end;
ooAddItem:
begin
fItemsByAlias.insert(lib.libAlias, lib);
updateCrossDependencies;
end;
end;
end;
@ -645,6 +673,11 @@ var
dep: TLibraryItem;
imp: string;
begin
for i := 0 to fCollection.Count-1 do
begin
lib := libraryByIndex[i];
lib.clients.Clear;
end;
for i := 0 to fCollection.Count-1 do
begin
lib := libraryByIndex[i];
@ -669,6 +702,7 @@ begin
if lib.dependencies.IndexOf(dep.libAlias) > -1 then
continue;
lib.dependencies.Add(dep.libAlias);
dep.clients.Add(lib.libAlias);
end;
end;
end;