From b82cae2b8c8de650fc991dbf0eafa1ea4a0e29ff Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 5 Sep 2018 09:53:53 +1000 Subject: [PATCH] [Developer] Fixup persistence of untitled project state --- ...Keyman.Developer.System.HttpServer.App.pas | 12 ++--- .../developer/TIKE/project/ProjectFile.pas | 52 ++++++++++++++++--- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/windows/src/developer/TIKE/http/Keyman.Developer.System.HttpServer.App.pas b/windows/src/developer/TIKE/http/Keyman.Developer.System.HttpServer.App.pas index 028fec7ee8..85b2909d06 100644 --- a/windows/src/developer/TIKE/http/Keyman.Developer.System.HttpServer.App.pas +++ b/windows/src/developer/TIKE/http/Keyman.Developer.System.HttpServer.App.pas @@ -111,7 +111,7 @@ procedure TAppHttpResponder.RespondProject(doc: string; AContext: TIdContext; end; // Transform the .kpj - with TProject.Create(path) do + with TProject.Create(path, (path='')) do try AResponseInfo.ContentType := 'text/html; charset=UTF-8'; AResponseInfo.ContentText := Render; @@ -196,16 +196,10 @@ procedure TAppHttpResponder.RespondProject(doc: string; AContext: TIdContext; Exit; end; - FProject := TProject.Create(path, False); + FProject := TProject.Create(path, (path = '')); try FProject.DisplayState := displayState; - //TODO: file in-use conflicts - with TProjectSaver.Create(FProject, path) do - try - SaveUser; - finally - Free; - end; + FProject.SaveUser; finally FProject.Free; end; diff --git a/windows/src/developer/TIKE/project/ProjectFile.pas b/windows/src/developer/TIKE/project/ProjectFile.pas index fc480948d7..741c9f7869 100644 --- a/windows/src/developer/TIKE/project/ProjectFile.pas +++ b/windows/src/developer/TIKE/project/ProjectFile.pas @@ -122,12 +122,13 @@ type procedure MRUChange(Sender: TObject); procedure UpdateFileParameters; procedure LoadPersistedUntitledProject; + procedure PersistUntitledProjectUser; protected procedure DoRefresh; virtual; procedure DoRefreshCaption; virtual; - property SavedFileName: string read GetSavedFileName; property State: TProjectState read FState; + property SavedFileName: string read GetSavedFileName; public procedure Log(AState: TProjectLogState; Filename, Msg: string); virtual; @@ -143,6 +144,7 @@ type function Load: Boolean; virtual; // I4694 function Save: Boolean; virtual; // I4694 + function SaveUser: Boolean; virtual; // I4694 class function StandardTemplatePath: string; class function StringsTemplatePath: string; @@ -813,6 +815,22 @@ begin FState := psReady; end; +procedure TProject.PersistUntitledProjectUser; +var + path: string; +begin + path := GetFolderPath(CSIDL_APPDATA) + SFolderKeymanDeveloper + '\Untitled.kps'; + + FState := psSaving; + with TProjectSaver.Create(Self, path) do + try + SaveUser; + finally + Free; + end; + FState := psReady; +end; + procedure TProject.Refresh; // I4687 begin DoRefresh; @@ -940,16 +958,36 @@ end; function TProject.Save: Boolean; begin FState := psSaving; - //Result := False; - - with TProjectSaver.Create(Self, SavedFileName) do try - Execute; + with TProjectSaver.Create(Self, SavedFileName) do + try + Execute; + finally + Free; + end; finally - Free; + FState := psReady; end; - FState := psReady; + Result := True; +end; + +function TProject.SaveUser: Boolean; +begin + FState := psSaving; + try + if FFilename = '' then + PersistUntitledProjectUser + else + with TProjectSaver.Create(Self, SavedFileName) do + try + SaveUser; + finally + Free; + end; + finally + FState := psReady; + end; Result := True; end;