textualize/ipc/Documents.go
2023-02-20 21:47:14 -06:00

270 lines
6.4 KiB
Go

package ipc
import (
"fmt"
app "textualize/core/App"
document "textualize/core/Document"
session "textualize/core/Session"
"github.com/google/uuid"
"github.com/wailsapp/wails/v2/pkg/runtime"
)
type GetDocumentsResponse struct {
Documents []Document `json:"documents"`
Groups []Group `json:"groups"`
}
func (c *Channel) GetDocumentById(id string) Document {
foundDocument := document.GetDocumentCollection().GetDocumentById(id)
var jsonAreas []Area
for _, a := range foundDocument.Areas {
jsonAreas = append(jsonAreas, Area{
Id: a.Id,
Name: a.Name,
StartX: a.StartX,
StartY: a.StartY,
EndX: a.EndX,
EndY: a.EndY,
Language: Language(a.Language),
})
}
response := Document{
Id: foundDocument.Id,
Name: foundDocument.Name,
GroupId: foundDocument.GroupId,
Path: foundDocument.Path,
ProjectId: foundDocument.ProjectId,
Areas: jsonAreas,
}
return response
}
func (c *Channel) GetDocuments() GetDocumentsResponse {
documents := document.GetDocumentCollection().Documents
groups := document.GetGroupCollection().Groups
response := GetDocumentsResponse{
Groups: make([]Group, 0),
Documents: make([]Document, 0),
}
for _, d := range documents {
jsonAreas := make([]Area, 0)
for _, a := range d.Areas {
jsonAreas = append(jsonAreas, Area{
Id: a.Id,
Name: a.Name,
StartX: a.StartX,
StartY: a.StartY,
EndX: a.EndX,
EndY: a.EndY,
Language: Language(a.Language),
})
}
jsonDocument := Document{
Id: d.Id,
GroupId: d.GroupId,
Name: d.Name,
Path: d.Path,
ProjectId: d.ProjectId,
Areas: jsonAreas,
DefaultLanguage: Language(d.DefaultLanguage),
}
response.Documents = append(response.Documents, jsonDocument)
}
for _, g := range groups {
jsonGroup := Group{
Id: g.Id,
ParentId: g.ParentId,
ProjectId: g.ProjectId,
Name: g.Name,
}
response.Groups = append(response.Groups, jsonGroup)
}
return response
}
func (c *Channel) RequestAddDocument(groupId string, documentName string) Document {
filePath, err := runtime.OpenFileDialog(app.GetInstance().Context, runtime.OpenDialogOptions{
Title: "Select an Image",
Filters: []runtime.FileFilter{
{
DisplayName: "Image Files (*.jpg, *.png)",
Pattern: "*.jpg;*.png",
},
},
})
if err != nil {
runtime.LogError(app.GetInstance().Context, err.Error())
return Document{}
}
newDocument := document.Entity{
Id: uuid.NewString(),
Name: documentName,
Path: filePath,
GroupId: groupId,
ProjectId: session.GetInstance().Project.Id,
}
document.GetDocumentCollection().AddDocument(newDocument)
documentResponse := Document{
Id: newDocument.Id,
Name: newDocument.Name,
Path: newDocument.Path,
GroupId: newDocument.GroupId,
ProjectId: newDocument.ProjectId,
}
return documentResponse
}
func (c *Channel) RequestUpdateDocumentUserMarkdown(documentId string, markdown string) UserMarkdown {
markdownCollection := document.GetUserMarkdownCollection()
markdownToUpdate := markdownCollection.GetUserMarkdownByDocumentId(documentId)
newMarkdown := document.UserMarkdown{
DocumentId: documentId,
Value: markdown,
}
if markdownToUpdate == nil {
newMarkdown.Id = uuid.NewString()
} else {
newMarkdown.Id = markdownToUpdate.Id
}
updatedMarkdown := markdownCollection.UpdateUserMarkdown(newMarkdown)
return UserMarkdown{
Id: updatedMarkdown.Id,
DocumentId: updatedMarkdown.DocumentId,
Value: updatedMarkdown.Value,
}
}
func (c *Channel) GetUserMarkdownByDocumentId(documentId string) UserMarkdown {
foundUserMarkdown := document.GetUserMarkdownCollection().GetUserMarkdownByDocumentId((documentId))
response := UserMarkdown{}
if foundUserMarkdown != nil {
response = UserMarkdown{
Id: foundUserMarkdown.Id,
DocumentId: foundUserMarkdown.DocumentId,
Value: foundUserMarkdown.Value,
}
}
return response
}
func (c *Channel) RequestAddDocumentGroup(name string) Group {
newGroup := document.Group{
Id: uuid.NewString(),
Name: name,
ProjectId: session.GetInstance().Project.Id,
}
document.GetGroupCollection().AddDocumentGroup(newGroup)
response := Group{
Id: newGroup.Id,
Name: newGroup.Name,
ParentId: newGroup.ParentId,
ProjectId: newGroup.ProjectId,
}
return response
}
func (c *Channel) RequestAddArea(documentId string, area Area) Area {
foundDocument := document.GetDocumentCollection().GetDocumentById(documentId)
var id string
if area.Id == "" {
id = uuid.NewString()
} else {
id = area.Id
}
newArea := document.Area{
Id: id,
Name: area.Name,
StartX: area.StartX,
EndX: area.EndX,
StartY: area.StartY,
EndY: area.EndY,
Language: app.Language(area.Language),
}
foundDocument.AddArea(newArea)
responseArea := area
responseArea.Id = id
return responseArea
}
func (c *Channel) RequestUpdateArea(updatedArea Area) Area {
documentOfArea := document.GetDocumentCollection().GetDocumentByAreaId(updatedArea.Id)
if documentOfArea.Id == "" {
return Area{}
}
areaToUpdate := documentOfArea.GetAreaById((updatedArea.Id))
if areaToUpdate.Id == "" {
return Area{}
}
// TODO: add more prop changes when needed
if updatedArea.Name != "" {
areaToUpdate.Name = updatedArea.Name
}
return Area{
Id: areaToUpdate.Id,
Name: areaToUpdate.Name,
StartX: areaToUpdate.StartX,
StartY: areaToUpdate.StartY,
EndX: areaToUpdate.EndX,
EndY: areaToUpdate.EndY,
Language: Language(areaToUpdate.Language),
}
}
func (c *Channel) RequestUpdateDocument(updatedDocument Document) Document {
documentToUpdate := document.GetDocumentCollection().GetDocumentById(updatedDocument.Id)
if documentToUpdate == nil {
return Document{}
}
if updatedDocument.Id != "" {
documentToUpdate.Id = updatedDocument.Id
}
if updatedDocument.Name != "" {
documentToUpdate.Name = updatedDocument.Name
}
if updatedDocument.GroupId != "" {
documentToUpdate.GroupId = updatedDocument.GroupId
}
if updatedDocument.Path != "" {
documentToUpdate.Path = updatedDocument.Path
}
if updatedDocument.DefaultLanguage.DisplayName != "" {
documentToUpdate.DefaultLanguage = app.Language(updatedDocument.DefaultLanguage)
}
fmt.Println("updated doc")
fmt.Println(document.GetDocumentCollection().GetDocumentById(updatedDocument.Id))
return updatedDocument
}