textualize/ipc/ProcessedDocument.go
Yehoshua Sandler c49f8e4d07
refact: generalized back end structs (#1)
* refact: generalized back end structs

* refact: fixed front end type, removed dead code

* removed test image folder

* refact: removed dead structs
2023-05-26 19:23:35 -05:00

90 lines
2.2 KiB
Go

package ipc
import (
"sort"
document "textualize/core/Document"
"textualize/entities"
"github.com/google/uuid"
)
func (c *Channel) GetProcessedAreasByDocumentId(id string) []entities.ProcessedArea {
areas := document.GetProcessedAreaCollection().GetAreasByDocumentId(id)
areaCount := len(areas)
readableAreas := make([]entities.ProcessedArea, areaCount)
for i := 0; i < areaCount; i++ {
readableAreas[i] = entities.ProcessedArea(*areas[i])
}
sortedAreas := readableAreas
sort.Slice(sortedAreas, func(i, j int) bool {
return sortedAreas[i].Order < sortedAreas[j].Order
})
return sortedAreas
}
func (c *Channel) RequestAddProcessedArea(processedArea entities.ProcessedArea) entities.ProcessedArea {
for lineIndex, line := range processedArea.Lines {
for wordIndex, word := range line.Words {
if word.Id == "" {
processedArea.Lines[lineIndex].Words[wordIndex].Id = uuid.NewString()
}
}
}
document.GetProcessedAreaCollection().AddProcessedArea(processedArea)
return processedArea
}
func (c *Channel) RequestUpdateProcessedWordById(wordId string, newTextValue string) bool {
areas := document.GetProcessedAreaCollection().Areas
var areaOfWordIndex int = -1
var lineOfWordIndex int = -1
var foundWordIndex int = -1
for areaIndex, area := range areas {
for lineIndex, line := range area.Lines {
for wordIndex, word := range line.Words {
if word.Id == wordId {
areaOfWordIndex = areaIndex
lineOfWordIndex = lineIndex
foundWordIndex = wordIndex
break
}
}
if foundWordIndex >= 0 {
break
}
}
if foundWordIndex >= 0 {
break
}
}
if areaOfWordIndex < 0 || lineOfWordIndex < 0 || foundWordIndex < 0 {
return false
}
wordProps := areas[areaOfWordIndex].Lines[lineOfWordIndex].Words[foundWordIndex]
areas[areaOfWordIndex].Lines[lineOfWordIndex].Words[foundWordIndex] = entities.ProcessedWord{
Id: wordProps.Id,
Direction: wordProps.Direction,
FullText: newTextValue,
BoundingBox: wordProps.BoundingBox,
}
if areas[areaOfWordIndex].Lines[lineOfWordIndex].Words[foundWordIndex].FullText == newTextValue {
successfulSave := c.RequestSaveDocumentCollection()
return successfulSave
} else {
return false
}
}