
* feat: make new connections * refact: context groups | feat: area detection and a bunch of small things. hate yourself for this massive commit
143 lines
3.5 KiB
Go
143 lines
3.5 KiB
Go
package ipc
|
|
|
|
import (
|
|
"sort"
|
|
document "textualize/core/Document"
|
|
"textualize/entities"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func (c *Channel) GetProcessedAreaById(id string) entities.ProcessedArea {
|
|
foundArea := document.GetProcessedAreaCollection().GetAreaById(id)
|
|
if foundArea != nil {
|
|
return *foundArea
|
|
} else {
|
|
return entities.ProcessedArea{}
|
|
}
|
|
}
|
|
|
|
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 *document.GetProcessedAreaCollection().GetAreaById(processedArea.Id)
|
|
}
|
|
|
|
func (c *Channel) RequestDeleteProcessedAreaById(id string) bool {
|
|
processedAreas := document.GetProcessedAreaCollection().Areas
|
|
areaToUpdate := document.GetProcessedAreaCollection().GetAreaById(id)
|
|
if areaToUpdate.Id == "" {
|
|
return false
|
|
}
|
|
|
|
areaToDeleteIndex := -1
|
|
|
|
for i, a := range processedAreas {
|
|
if a.Id == id {
|
|
areaToDeleteIndex = i
|
|
break
|
|
}
|
|
}
|
|
|
|
if areaToDeleteIndex < 0 {
|
|
return false
|
|
}
|
|
|
|
processedAreas[areaToDeleteIndex] = processedAreas[len(processedAreas)-1]
|
|
// processedAreas = processedAreas[:len(processedAreas)-1]
|
|
return true
|
|
}
|
|
|
|
func (c *Channel) RequestUpdateProcessedArea(updatedProcessedArea entities.ProcessedArea) bool {
|
|
if updatedProcessedArea.Id == "" {
|
|
return false
|
|
}
|
|
|
|
successfulDelete := c.RequestDeleteProcessedAreaById(updatedProcessedArea.Id)
|
|
if !successfulDelete {
|
|
return false
|
|
}
|
|
|
|
addedProcessedArea := c.RequestAddProcessedArea(updatedProcessedArea)
|
|
return addedProcessedArea.Id != ""
|
|
|
|
// if addedProcessedArea.Id != "" {
|
|
// return false
|
|
// }
|
|
// return true
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|