diff --git a/core/Document/UserMarkdown.go b/core/Document/UserMarkdown.go index 74f9531..18d6cb5 100644 --- a/core/Document/UserMarkdown.go +++ b/core/Document/UserMarkdown.go @@ -20,6 +20,10 @@ func GetUserMarkdownCollection() *UserMarkdownCollection { return userMarkdownCollection } +func SetUserMarkdownCollection(collection UserMarkdownCollection) { + userMarkdownCollection = &collection +} + func (collection *UserMarkdownCollection) GetUserMarkdownByDocumentId(documentId string) *UserMarkdown { var foundUserMarkdown *UserMarkdown diff --git a/frontend/context/Project/provider.tsx b/frontend/context/Project/provider.tsx index 24fffb9..5719928 100644 --- a/frontend/context/Project/provider.tsx +++ b/frontend/context/Project/provider.tsx @@ -16,7 +16,7 @@ import { import { ipc } from '../../wailsjs/wailsjs/go/models' import { AddAreaProps, AreaProps, ProjectContextType, ProjectProps, UpdateDocumentRequest, UserProps } from './types' import makeDefaultProject from './makeDefaultProject' -import { saveDocuments, saveGroups } from '../../useCases/saveData' +import { saveDocuments, saveGroups, saveUserProcessedMarkdown } from '../../useCases/saveData' const ProjectContext = createContext(makeDefaultProject()) @@ -97,6 +97,7 @@ export function ProjectProvider({ children, projectProps }: Props) { let response: ipc.UserMarkdown = new ipc.UserMarkdown() try { response = await RequestUpdateDocumentUserMarkdown(documentId, markdown) + await saveUserProcessedMarkdown() } catch (err) { console.error(err) } diff --git a/frontend/useCases/saveData.ts b/frontend/useCases/saveData.ts index f60d854..06f44b1 100644 --- a/frontend/useCases/saveData.ts +++ b/frontend/useCases/saveData.ts @@ -1,4 +1,4 @@ -import { RequestSaveDocumentCollection, RequestSaveGroupCollection, RequestSaveProcessedTextCollection } from '../wailsjs/wailsjs/go/ipc/Channel' +import { RequestSaveDocumentCollection, RequestSaveGroupCollection, RequestSaveLocalUserProcessedMarkdownCollection, RequestSaveProcessedTextCollection } from '../wailsjs/wailsjs/go/ipc/Channel' const saveDocuments = async () => { try { @@ -27,8 +27,18 @@ const saveProcessedText = async () => { } } +const saveUserProcessedMarkdown = async () => { + try { + const sucessfulSave = await RequestSaveLocalUserProcessedMarkdownCollection() + if (!sucessfulSave) console.error('Could not save LocalUserProcessedMarkdownCollection') + } catch (err) { + console.error('Could not save LocalUserProcessedMarkdownCollection: ', err) + } +} + export { saveDocuments, saveGroups, saveProcessedText, + saveUserProcessedMarkdown, } \ No newline at end of file diff --git a/frontend/wailsjs/wailsjs/go/ipc/Channel.d.ts b/frontend/wailsjs/wailsjs/go/ipc/Channel.d.ts index 0977b67..8e0d8b7 100755 --- a/frontend/wailsjs/wailsjs/go/ipc/Channel.d.ts +++ b/frontend/wailsjs/wailsjs/go/ipc/Channel.d.ts @@ -46,6 +46,8 @@ export function RequestSaveDocumentCollection():Promise; export function RequestSaveGroupCollection():Promise; +export function RequestSaveLocalUserProcessedMarkdownCollection():Promise; + export function RequestSaveProcessedTextCollection():Promise; export function RequestUpdateArea(arg1:ipc.Area):Promise; diff --git a/frontend/wailsjs/wailsjs/go/ipc/Channel.js b/frontend/wailsjs/wailsjs/go/ipc/Channel.js index 79ffd8c..a5a5926 100755 --- a/frontend/wailsjs/wailsjs/go/ipc/Channel.js +++ b/frontend/wailsjs/wailsjs/go/ipc/Channel.js @@ -90,6 +90,10 @@ export function RequestSaveGroupCollection() { return window['go']['ipc']['Channel']['RequestSaveGroupCollection'](); } +export function RequestSaveLocalUserProcessedMarkdownCollection() { + return window['go']['ipc']['Channel']['RequestSaveLocalUserProcessedMarkdownCollection'](); +} + export function RequestSaveProcessedTextCollection() { return window['go']['ipc']['Channel']['RequestSaveProcessedTextCollection'](); } diff --git a/ipc/Documents.go b/ipc/Documents.go index 07f0260..585d4d6 100644 --- a/ipc/Documents.go +++ b/ipc/Documents.go @@ -525,3 +525,27 @@ func (c *Channel) RequestSaveProcessedTextCollection() bool { successfulWrite := storage.WriteLocalProcessedAreaCollection(processedAreaCollectionToWrite, projectName) return successfulWrite } + +func (c *Channel) RequestSaveLocalUserProcessedMarkdownCollection() bool { + userProcessedMarkdownCollection := document.GetUserMarkdownCollection() + projectName := c.GetCurrentSession().Project.Name + + fullProject := storage.ReadLocalProjectByName(projectName) + + if fullProject.Id == "" { + return false + } + + var valuesToWrite []storage.LocalUserMarkdown + for _, v := range userProcessedMarkdownCollection.Values { + valuesToWrite = append(valuesToWrite, storage.LocalUserMarkdown(v)) + } + + successfulWrite := storage.WriteLocalUserProcessedMarkdownCollection(storage.LocalUserMarkdownCollection{ + Values: valuesToWrite, + }, projectName) + + return successfulWrite +} + + diff --git a/ipc/Session.go b/ipc/Session.go index 5d40300..5d4de6f 100644 --- a/ipc/Session.go +++ b/ipc/Session.go @@ -272,6 +272,25 @@ func (c *Channel) RequestChangeSessionProjectByName(projectName string) bool { Areas: newAreas, }) + // UserProcessedMarkdown + + localUserProcessedMarkdown := storage.ReadLocalUserProcessedMarkdownCollection(projectName) + + newUserProcessedMarkdown := make([]document.UserMarkdown, 0) + for _, v := range localUserProcessedMarkdown.Values { + newUserProcessedMarkdown = append(newUserProcessedMarkdown, document.UserMarkdown{ + Id: v.Id, + DocumentId: v.DocumentId, + Value: v.Value, + }) + } + + document.SetUserMarkdownCollection(document.UserMarkdownCollection{ + Values: newUserProcessedMarkdown, + }) + + // End UserProcessedMarkdown + return session.GetInstance().Project.Id == foundProject.Id } diff --git a/storage/Local/JsonEntities.go b/storage/Local/JsonEntities.go index 752eaee..d63e051 100644 --- a/storage/Local/JsonEntities.go +++ b/storage/Local/JsonEntities.go @@ -106,3 +106,13 @@ type LocalProcessedArea struct { type LocalProcessedAreaCollection struct { Areas []LocalProcessedArea } + +type LocalUserMarkdown struct { + Id string `json:"id"` + DocumentId string `json:"documentId"` + Value string `json:"value"` +} + +type LocalUserMarkdownCollection struct { + Values []LocalUserMarkdown `json:"values"` +} diff --git a/storage/Local/ProcessedText.go b/storage/Local/ProcessedText.go index 9888707..8b3cb08 100644 --- a/storage/Local/ProcessedText.go +++ b/storage/Local/ProcessedText.go @@ -39,3 +39,38 @@ func ReadLocalProcessedAreaCollection(projectName string) LocalProcessedAreaColl return response } + +func WriteLocalUserProcessedMarkdownCollection(userMarkdownCollection LocalUserMarkdownCollection, projectName string) bool { + file, _ := json.MarshalIndent(userMarkdownCollection, "", " ") + path := GetLocalStoragePath() + + if path == "" { + return false + } + + subdirectory := "/projects/" + projectName + isLocalStorageDirectoryCreated := createLocalStorageSubDirIfNeeded(subdirectory) + if !isLocalStorageDirectoryCreated { + return false + } + + err := os.WriteFile(GetLocalStoragePath()+subdirectory+"/UserProcessedMarkdown.json", file, 0644) + + return err == nil +} + +func ReadLocalUserProcessedMarkdownCollection(projectName string) LocalUserMarkdownCollection { + file, err := os.ReadFile(GetLocalStoragePath() + "/projects/" + projectName + "/UserProcessedMarkdown.json") + + if err != nil { + return LocalUserMarkdownCollection{} + } + + response := LocalUserMarkdownCollection{} + errorUnmarshaling := json.Unmarshal([]byte(file), &response) + if errorUnmarshaling != nil { + return LocalUserMarkdownCollection{} + } + + return response +}