fetch tasks for caldav lists
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
Martin Giger 2020-08-23 23:15:41 +02:00
parent b4771c1bce
commit 464e539897
Signed by untrusted user: freaktechnik
GPG Key ID: AE530058EFE7FD60
2 changed files with 32 additions and 11 deletions

View File

@ -17,14 +17,15 @@
package caldav
import (
"strconv"
"strings"
"time"
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/models"
user2 "code.vikunja.io/api/pkg/user"
"github.com/samedi/caldav-go/data"
"github.com/samedi/caldav-go/errs"
"strconv"
"strings"
"time"
)
// DavBasePath is the base url path
@ -316,8 +317,9 @@ func (vcls *VikunjaCaldavListStorage) DeleteResource(rpath string) error {
// VikunjaListResourceAdapter holds the actual resource
type VikunjaListResourceAdapter struct {
list *models.List
task *models.Task
list *models.List
listTasks []*models.Task
task *models.Task
isPrincipal bool
isCollection bool
@ -353,12 +355,12 @@ func (vlra *VikunjaListResourceAdapter) CalculateEtag() string {
// GetContent returns the content string of a resource (a task in our case)
func (vlra *VikunjaListResourceAdapter) GetContent() string {
if vlra.list != nil && vlra.list.Tasks != nil {
return getCaldavTodosForTasks(vlra.list)
return getCaldavTodosForTasks(vlra.list, vlra.listTasks)
}
if vlra.task != nil {
list := models.List{Tasks: []*models.Task{vlra.task}}
return getCaldavTodosForTasks(&list)
return getCaldavTodosForTasks(&list, list.Tasks)
}
return ""
@ -396,8 +398,26 @@ func (vcls *VikunjaCaldavListStorage) getListRessource(isCollection bool) (rr Vi
return
}
listTasks := vcls.list.Tasks
if listTasks == nil {
tk := models.TaskCollection{
ListID: vcls.list.ID,
}
var iface interface{}
iface, _, _, err = tk.ReadAll(vcls.user, "", 1, 1000)
if err != nil {
return
}
tasks, ok := iface.([]*models.Task)
if ok {
listTasks = tasks
vcls.list.Tasks = tasks
}
}
rr = VikunjaListResourceAdapter{
list: vcls.list,
listTasks: listTasks,
isCollection: isCollection,
}

View File

@ -17,19 +17,20 @@
package caldav
import (
"strconv"
"time"
"code.vikunja.io/api/pkg/caldav"
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/models"
"github.com/laurent22/ical-go"
"strconv"
"time"
)
func getCaldavTodosForTasks(list *models.List) string {
func getCaldavTodosForTasks(list *models.List, listTasks []*models.Task) string {
// Make caldav todos from Vikunja todos
var caldavtodos []*caldav.Todo
for _, t := range list.Tasks {
for _, t := range listTasks {
duration := t.EndDate.Sub(t.StartDate)