fix(caldav): check for related tasks synced back from a caldav client
Related discussion https://community.vikunja.io/t/tasks-org-subtask-syncing-issue/737/9
This commit is contained in:
parent
c6bdb5752a
commit
bfcefa0217
@ -17,6 +17,7 @@
|
|||||||
package caldav
|
package caldav
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"code.vikunja.io/api/pkg/db"
|
||||||
"errors"
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -90,8 +91,12 @@ func ParseTaskFromVTODO(content string) (vTask *models.Task, err error) {
|
|||||||
}
|
}
|
||||||
// We put the vTodo details in a map to be able to handle them more easily
|
// We put the vTodo details in a map to be able to handle them more easily
|
||||||
task := make(map[string]ics.IANAProperty)
|
task := make(map[string]ics.IANAProperty)
|
||||||
|
var relation *ics.IANAProperty
|
||||||
for _, c := range vTodo.UnknownPropertiesIANAProperties() {
|
for _, c := range vTodo.UnknownPropertiesIANAProperties() {
|
||||||
task[c.IANAToken] = c
|
task[c.IANAToken] = c
|
||||||
|
if strings.HasPrefix(c.IANAToken, "RELATED-TO") {
|
||||||
|
relation = &c
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the priority
|
// Parse the priority
|
||||||
@ -134,6 +139,19 @@ func ParseTaskFromVTODO(content string) (vTask *models.Task, err error) {
|
|||||||
DoneAt: caldavTimeToTimestamp(task["COMPLETED"]),
|
DoneAt: caldavTimeToTimestamp(task["COMPLETED"]),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if relation != nil {
|
||||||
|
s := db.NewSession()
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
subtask, err := models.GetTaskSimpleByUUID(s, relation.Value)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
vTask.RelatedTasks = make(map[models.RelationKind][]*models.Task)
|
||||||
|
vTask.RelatedTasks[models.RelationKindSubtask] = []*models.Task{subtask}
|
||||||
|
}
|
||||||
|
|
||||||
if task["STATUS"].Value == "COMPLETED" {
|
if task["STATUS"].Value == "COMPLETED" {
|
||||||
vTask.Done = true
|
vTask.Done = true
|
||||||
}
|
}
|
||||||
|
@ -371,6 +371,11 @@ func (bt *BulkTask) GetTasksByIDs(s *xorm.Session) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetTaskSimpleByUUID(s *xorm.Session, uid string) (task *Task, err error) {
|
||||||
|
_, err = s.In("uid", uid).Get(task)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetTasksByUIDs gets all tasks from a bunch of uids
|
// GetTasksByUIDs gets all tasks from a bunch of uids
|
||||||
func GetTasksByUIDs(s *xorm.Session, uids []string, a web.Auth) (tasks []*Task, err error) {
|
func GetTasksByUIDs(s *xorm.Session, uids []string, a web.Auth) (tasks []*Task, err error) {
|
||||||
tasks = []*Task{}
|
tasks = []*Task{}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user