feat(caldav): Import Labels from caldav categories

This commit is contained in:
cernst 2023-02-27 22:19:50 +01:00
parent 1afc72e190
commit fdb0169f13
3 changed files with 48 additions and 0 deletions

View File

@ -96,11 +96,20 @@ func ParseTaskFromVTODO(content string) (vTask *models.Task, err error) {
description := strings.ReplaceAll(task["DESCRIPTION"], "\\,", ",")
description = strings.ReplaceAll(description, "\\n", "\n")
categories := strings.Split(task["CATEGORIES"], ",")
labels := make([]*models.Label, 0, len(categories))
for _, category := range categories {
labels = append(labels, &models.Label{
Title: category,
})
}
vTask = &models.Task{
UID: task["UID"],
Title: task["SUMMARY"],
Description: description,
Priority: priority,
Labels: labels,
DueDate: caldavTimeToTimestamp(task["DUE"]),
Updated: caldavTimeToTimestamp(task["DTSTAMP"]),
StartDate: caldavTimeToTimestamp(task["DTSTART"]),

View File

@ -85,6 +85,39 @@ END:VCALENDAR`,
Updated: time.Unix(1543626724, 0).In(config.GetTimeZone()),
},
},
{
name: "With categories",
args: args{content: `BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
X-PUBLISHED-TTL:PT4H
X-WR-CALNAME:test
PRODID:-//RandomProdID which is not random//EN
BEGIN:VTODO
UID:randomuid
DTSTAMP:20181201T011204
SUMMARY:Todo #1
DESCRIPTION:Lorem Ipsum
CATEGORIES:cat1,cat2
LAST-MODIFIED:00010101T000000
END:VTODO
END:VCALENDAR`,
},
wantVTask: &models.Task{
Title: "Todo #1",
UID: "randomuid",
Description: "Lorem Ipsum",
Labels: []*models.Label{
{
Title: "cat1",
},
{
Title: "cat2",
},
},
Updated: time.Unix(1543626724, 0).In(config.GetTimeZone()),
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {

View File

@ -273,6 +273,9 @@ func (vcls *VikunjaCaldavListStorage) CreateResource(rpath, content string) (*da
return nil, errs.ForbiddenError
}
// Find or create Labels by title
// Insert label_task
// Create the task
err = vTask.Create(s, vcls.user)
if err != nil {
@ -318,6 +321,9 @@ func (vcls *VikunjaCaldavListStorage) UpdateResource(rpath, content string) (*da
return nil, errs.ForbiddenError
}
// Find or create Labels by title
// Update label_task
// Update the task
err = vTask.Update(s, vcls.user)
if err != nil {