DCD integration, cache import list, avoid too much updates when libman is often updated

This commit is contained in:
Basile Burg 2015-03-21 05:52:23 +01:00
parent 649d29432d
commit b0f23d591b
1 changed files with 14 additions and 11 deletions

View File

@ -22,6 +22,7 @@ type
TCEDcdWrapper = class(TWritableLfmTextComponent, ICEProjectObserver, ICEMultiDocObserver) TCEDcdWrapper = class(TWritableLfmTextComponent, ICEProjectObserver, ICEMultiDocObserver)
private private
fTempLines: TStringList; fTempLines: TStringList;
fImportCache: TStringList;
//fPortNum: Word; //fPortNum: Word;
fServerWasRunning: boolean; fServerWasRunning: boolean;
fClient, fServer: TProcess; fClient, fServer: TProcess;
@ -30,6 +31,7 @@ type
fProj: TCEProject; fProj: TCEProject;
procedure killServer; procedure killServer;
procedure terminateClient; procedure terminateClient;
procedure waitClient;
// //
procedure projNew(aProject: TCEProject); procedure projNew(aProject: TCEProject);
procedure projChanged(aProject: TCEProject); procedure projChanged(aProject: TCEProject);
@ -45,7 +47,6 @@ type
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
// //
procedure restartServer;
procedure addImportFolder(const aFolder: string); procedure addImportFolder(const aFolder: string);
procedure getComplAtCursor(aList: TStrings); procedure getComplAtCursor(aList: TStrings);
procedure getCallTip(out tips: string); procedure getCallTip(out tips: string);
@ -74,7 +75,7 @@ begin
// //
fClient := TProcess.Create(self); fClient := TProcess.Create(self);
fClient.Executable := clientName; fClient.Executable := clientName;
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}{$IFDEF LINUX}, poWaitOnExit{$ENDIF}]; fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
fClient.ShowWindow := swoHIDE; fClient.ShowWindow := swoHIDE;
// //
fServerWasRunning := AppIsRunning((serverName)); fServerWasRunning := AppIsRunning((serverName));
@ -87,6 +88,7 @@ begin
{$ENDIF} {$ENDIF}
end; end;
fTempLines := TStringList.Create; fTempLines := TStringList.Create;
fImportCache := TStringList.Create;
if (fServer <> nil) then if (fServer <> nil) then
fServer.Execute; fServer.Execute;
@ -97,6 +99,7 @@ end;
destructor TCEDcdWrapper.destroy; destructor TCEDcdWrapper.destroy;
begin begin
EntitiesConnector.removeObserver(self); EntitiesConnector.removeObserver(self);
fImportCache.Free;
if fTempLines <> nil then if fTempLines <> nil then
fTempLines.Free; fTempLines.Free;
if fServer <> nil then begin if fServer <> nil then begin
@ -195,7 +198,6 @@ procedure TCEDcdWrapper.killServer;
begin begin
if not fAvailable then exit; if not fAvailable then exit;
// //
while fClient.Running do;
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('--shutdown'); fClient.Parameters.Add('--shutdown');
fClient.Execute; fClient.Execute;
@ -205,20 +207,21 @@ begin
{$ENDIF} {$ENDIF}
end; end;
procedure TCEDcdWrapper.restartServer; procedure TCEDcdWrapper.waitClient;
begin begin
if not fAvailable then exit; while fClient.Running do;
//
end; end;
procedure TCEDcdWrapper.addImportFolder(const aFolder: string); procedure TCEDcdWrapper.addImportFolder(const aFolder: string);
begin begin
if not fAvailable then exit; if not fAvailable then exit;
// //
while fClient.Running do sleep(1); if fImportCache.IndexOf(aFolder) <> -1 then exit;
fImportCache.Add(aFolder);
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('-I' + aFolder); fClient.Parameters.Add('-I' + aFolder);
fClient.Execute; fClient.Execute;
waitClient;
end; end;
procedure TCEDcdWrapper.getCallTip(out tips: string); procedure TCEDcdWrapper.getCallTip(out tips: string);
@ -229,12 +232,12 @@ begin
fTempLines.Assign(fDoc.Lines); fTempLines.Assign(fDoc.Lines);
fTempLines.SaveToFile(fDoc.tempFilename); fTempLines.SaveToFile(fDoc.tempFilename);
// //
terminateClient;
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('-c'); fClient.Parameters.Add('-c');
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1)); fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
fClient.Parameters.Add(fDoc.tempFilename); fClient.Parameters.Add(fDoc.tempFilename);
fClient.Execute; fClient.Execute;
waitClient;
// //
fTempLines.LoadFromStream(fClient.Output); fTempLines.LoadFromStream(fClient.Output);
if fTempLines.Count = 0 then exit; if fTempLines.Count = 0 then exit;
@ -257,12 +260,12 @@ begin
fTempLines.Assign(fDoc.Lines); fTempLines.Assign(fDoc.Lines);
fTempLines.SaveToFile(fDoc.tempFilename); fTempLines.SaveToFile(fDoc.tempFilename);
// //
terminateClient;
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('-c'); fClient.Parameters.Add('-c');
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1)); fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
fClient.Parameters.Add(fDoc.tempFilename); fClient.Parameters.Add(fDoc.tempFilename);
fClient.Execute; fClient.Execute;
waitClient;
// //
fTempLines.LoadFromStream(fClient.Output); fTempLines.LoadFromStream(fClient.Output);
if fTempLines.Count = 0 then exit; if fTempLines.Count = 0 then exit;
@ -310,13 +313,13 @@ begin
fTempLines.Assign(fDoc.Lines); fTempLines.Assign(fDoc.Lines);
fTempLines.SaveToFile(fDoc.tempFilename); fTempLines.SaveToFile(fDoc.tempFilename);
// //
terminateClient;
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('-d'); fClient.Parameters.Add('-d');
fClient.Parameters.Add('-c'); fClient.Parameters.Add('-c');
fClient.Parameters.Add(intToStr(i - 1)); fClient.Parameters.Add(intToStr(i - 1));
fClient.Parameters.Add(fDoc.tempFilename); fClient.Parameters.Add(fDoc.tempFilename);
fClient.Execute; fClient.Execute;
waitClient;
// //
aComment := ''; aComment := '';
fTempLines.LoadFromStream(fClient.Output); fTempLines.LoadFromStream(fClient.Output);
@ -335,13 +338,13 @@ begin
fTempLines.Assign(fDoc.Lines); fTempLines.Assign(fDoc.Lines);
fTempLines.SaveToFile(fDoc.tempFilename); fTempLines.SaveToFile(fDoc.tempFilename);
// //
terminateClient;
fClient.Parameters.Clear; fClient.Parameters.Clear;
fClient.Parameters.Add('-l'); fClient.Parameters.Add('-l');
fClient.Parameters.Add('-c'); fClient.Parameters.Add('-c');
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1)); fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
fClient.Parameters.Add(fDoc.tempFilename); fClient.Parameters.Add(fDoc.tempFilename);
fClient.Execute; fClient.Execute;
waitClient;
// //
str := 'a'; str := 'a';
setlength(str, 256); setlength(str, 256);