feat(caldav): Import Labels from caldav categories
continuous-integration/drone/pr Build is passing
Details
continuous-integration/drone/pr Build is passing
Details
This commit is contained in:
parent
1cb1655c0d
commit
d2e97c36c8
|
@ -176,7 +176,7 @@ func (l *Label) ReadAll(s *xorm.Session, a web.Auth, search string, page int, pe
|
|||
// @Failure 500 {object} models.Message "Internal error"
|
||||
// @Router /labels/{id} [get]
|
||||
func (l *Label) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
||||
label, err := getLabelByExampleSimple(s, l)
|
||||
label, err := getLabelSimple(s, l)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
@ -192,10 +192,10 @@ func (l *Label) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
|||
}
|
||||
|
||||
func getLabelByIDSimple(s *xorm.Session, labelID int64) (*Label, error) {
|
||||
return getLabelByExampleSimple(s, &Label{ID: labelID})
|
||||
return getLabelSimple(s, &Label{ID: labelID})
|
||||
}
|
||||
|
||||
func getLabelByExampleSimple(s *xorm.Session, l *Label) (*Label, error) {
|
||||
func getLabelSimple(s *xorm.Session, l *Label) (*Label, error) {
|
||||
exists, err := s.Get(l)
|
||||
if err != nil {
|
||||
return l, err
|
||||
|
|
|
@ -26,8 +26,10 @@ import (
|
|||
"code.vikunja.io/api/pkg/log"
|
||||
"code.vikunja.io/api/pkg/models"
|
||||
user2 "code.vikunja.io/api/pkg/user"
|
||||
"code.vikunja.io/web"
|
||||
"github.com/samedi/caldav-go/data"
|
||||
"github.com/samedi/caldav-go/errs"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
// DavBasePath is the base url path
|
||||
|
@ -273,31 +275,15 @@ func (vcls *VikunjaCaldavListStorage) CreateResource(rpath, content string) (*da
|
|||
return nil, errs.ForbiddenError
|
||||
}
|
||||
|
||||
for _, label := range vTask.Labels {
|
||||
// Find or create Labels by title
|
||||
err = label.ReadOne(s, vcls.user)
|
||||
if err != nil {
|
||||
err = label.Create(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
err = label.ReadOne(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
// Insert LabelTask relation
|
||||
err = vcls.task.UpdateTaskLabels(s, vcls.user, vTask.Labels)
|
||||
// Create the task
|
||||
err = vTask.Create(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create the task
|
||||
err = vTask.Create(s, vcls.user)
|
||||
vcls.task.ID = vTask.ID
|
||||
err = persistLabels(s, vcls.user, vcls.task, vTask.Labels)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
|
@ -341,31 +327,14 @@ func (vcls *VikunjaCaldavListStorage) UpdateResource(rpath, content string) (*da
|
|||
return nil, errs.ForbiddenError
|
||||
}
|
||||
|
||||
for _, label := range vTask.Labels {
|
||||
// Find or create Labels by title
|
||||
err = label.ReadOne(s, vcls.user)
|
||||
if err != nil {
|
||||
err = label.Create(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
err = label.ReadOne(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
// Update LabelTask relation
|
||||
err = vcls.task.UpdateTaskLabels(s, vcls.user, vTask.Labels)
|
||||
// Update the task
|
||||
err = vTask.Update(s, vcls.user)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Update the task
|
||||
err = vTask.Update(s, vcls.user)
|
||||
err = persistLabels(s, vcls.user, vcls.task, vTask.Labels)
|
||||
if err != nil {
|
||||
_ = s.Rollback()
|
||||
return nil, err
|
||||
|
@ -413,6 +382,29 @@ func (vcls *VikunjaCaldavListStorage) DeleteResource(rpath string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func persistLabels(s *xorm.Session, a web.Auth, task *models.Task, labels []*models.Label) (err error) {
|
||||
// Find or create Labels by title
|
||||
for _, label := range labels {
|
||||
err = label.ReadOne(s, a)
|
||||
if err != nil {
|
||||
if models.IsErrLabelDoesNotExist(err) {
|
||||
err = label.Create(s, a)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
// Insert LabelTask relation
|
||||
err = task.UpdateTaskLabels(s, a, labels)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// VikunjaListResourceAdapter holds the actual resource
|
||||
type VikunjaListResourceAdapter struct {
|
||||
list *models.ListWithTasksAndBuckets
|
||||
|
|
Loading…
Reference in New Issue