textualize/ipc/Session.go
Yehoshua Sandler 1631271b93
Replace native canvas implementation with Konva library (#2)
* style: spelling

* refact: canvases replaced with konva

* refact: area text calculated by words

* refact: moved konva files out of test dir
2023-06-27 08:42:44 -05:00

199 lines
6.0 KiB
Go

package ipc
import (
app "textualize/core/App"
consts "textualize/core/Consts"
document "textualize/core/Document"
session "textualize/core/Session"
"textualize/entities"
storage "textualize/storage"
"github.com/wailsapp/wails/v2/pkg/runtime"
"github.com/google/uuid"
)
func (c *Channel) GetCurrentSession() entities.Session {
currentSession := session.GetInstance()
var sessionUsers []entities.User
for _, u := range currentSession.Organization.Users {
sessionUsers = append(sessionUsers, entities.User(u))
}
currentProject := currentSession.Project
currentDefaultProcessLanguage := entities.Language(currentProject.Settings.DefaultProcessLanguage)
currentDefaultTranslateTargetLanguage := entities.Language(currentProject.Settings.DefaultTranslateTargetLanguage)
project := entities.Project{
Id: currentProject.Id,
Name: currentProject.Name,
OrganizationId: currentProject.OrganizationId,
Settings: entities.ProjectSettings{
DefaultProcessLanguage: currentDefaultProcessLanguage,
DefaultTranslateTargetLanguage: currentDefaultTranslateTargetLanguage,
IsHosted: currentProject.Settings.IsHosted,
},
}
return entities.Session{
Project: project,
User: currentSession.User,
Organization: entities.Organization{
Id: currentSession.Organization.Id,
Name: currentSession.Project.Name,
LogoPath: currentSession.Organization.LogoPath,
Users: sessionUsers,
},
}
}
func (c *Channel) CreateNewProject(name string) entities.Session {
currentSession := session.GetInstance()
newProject := entities.Project{
Id: uuid.NewString(),
OrganizationId: currentSession.Project.OrganizationId,
Name: name,
}
successfulProjectWrite := storage.GetDriver().WriteProjectData(entities.Project{
Id: newProject.Id,
OrganizationId: newProject.OrganizationId,
Name: newProject.Name,
})
if !successfulProjectWrite {
return entities.Session{}
}
currentSession.Project = newProject
return c.GetCurrentSession()
}
func (c *Channel) GetCurrentUser() entities.User {
return session.GetInstance().User
}
func (c *Channel) RequestUpdateCurrentUser(updatedUserRequest entities.User) entities.User {
sessionInstance := session.GetInstance()
sessionUser := entities.User(sessionInstance.User)
if sessionUser.LocalId == "" {
sessionUser.LocalId = uuid.NewString()
}
if updatedUserRequest.FirstName != "" {
sessionUser.FirstName = updatedUserRequest.FirstName
}
if updatedUserRequest.LastName != "" {
sessionUser.LastName = updatedUserRequest.LastName
}
if updatedUserRequest.Email != "" {
sessionUser.Email = updatedUserRequest.Email
}
sessionUser.AvatarPath = updatedUserRequest.AvatarPath
successfulUserWrite := storage.GetDriver().WriteUserData(sessionUser)
if !successfulUserWrite {
return entities.User{}
}
sessionInstance.UpdateCurrentUser(sessionUser)
return sessionInstance.User
}
func (c *Channel) RequestChooseUserAvatar() string {
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 ""
} else {
return filePath
}
}
func (c *Channel) GetAllLocalProjects() []entities.Project {
readLocalProjects := storage.GetDriver().ReadAllProjects()
return readLocalProjects
}
func (c *Channel) GetProjectByName(projectName string) entities.Project {
foundProject := storage.GetDriver().ReadProjectDataByName(projectName)
return foundProject
}
func (c *Channel) RequestChangeSessionProjectByName(projectName string) bool {
storageDriver := storage.GetDriver()
foundProject := c.GetProjectByName(projectName)
if foundProject.Id == "" {
return false
}
session.GetInstance().Project = foundProject
localDocumentCollection := storageDriver.ReadDocumentCollection(projectName)
documentCount := len(localDocumentCollection.Documents)
readableDocuments := make([]document.Entity, documentCount)
for i := 0; i < documentCount; i++ {
readableDocuments[i] = document.Entity(localDocumentCollection.Documents[i])
}
document.SetDocumentCollection(document.DocumentCollection{
Documents: readableDocuments,
ProjectId: foundProject.Id,
})
localGroupsCollection := storageDriver.ReadGroupCollection(projectName)
groupCount := len(localGroupsCollection.Groups)
readableGroups := make([]entities.Group, groupCount)
for i := 0; i < groupCount; i++ {
readableGroups[i] = entities.Group(localGroupsCollection.Groups[i])
}
document.SetGroupCollection(document.GroupCollection{
Id: localGroupsCollection.Id,
ProjectId: localGroupsCollection.ProjectId,
Groups: readableGroups,
})
// Processed Texts
localProcessedAreaCollection := storageDriver.ReadProcessedTextCollection(projectName)
areaCount := len(localProcessedAreaCollection.Areas)
readableAreas := make([]entities.ProcessedArea, areaCount)
for i := 0; i < areaCount; i++ {
readableAreas[i] = entities.ProcessedArea(localProcessedAreaCollection.Areas[i])
}
document.SetProcessedAreaCollection(document.ProcessedAreaCollection{
Areas: readableAreas,
})
// UserProcessedMarkdown
localUserProcessedMarkdown := storageDriver.ReadProcessedUserMarkdownCollection(projectName)
userProcessedMarkdownCount := len(localUserProcessedMarkdown.Values)
readableUserProcessedMarkdown := make([]entities.UserMarkdown, userProcessedMarkdownCount)
for i := 0; i < userProcessedMarkdownCount; i++ {
readableUserProcessedMarkdown[i] = entities.UserMarkdown(localUserProcessedMarkdown.Values[i])
}
document.SetUserMarkdownCollection(document.UserMarkdownCollection{
Values: readableUserProcessedMarkdown,
})
return session.GetInstance().Project.Id == foundProject.Id
}
func (c *Channel) GetSupportedLanguages() []entities.Language {
supportedLanguages := consts.GetSupportedLanguages()
return supportedLanguages
}