diff --git a/pkg/models/export.go b/pkg/models/export.go index 1d39b4e56..979e6dd54 100644 --- a/pkg/models/export.go +++ b/pkg/models/export.go @@ -25,6 +25,7 @@ import ( "code.vikunja.io/api/pkg/user" "encoding/json" "fmt" + "io" "os" "strconv" "time" @@ -131,5 +132,39 @@ func exportListsAndTasks(s *xorm.Session, u *user.User, wr *zip.Writer) (err err } func exportTaskAttachments(s *xorm.Session, u *user.User, wr *zip.Writer) (err error) { - return nil + lists, _, _, err := getRawListsForUser( + s, + &listOptions{ + user: u, + page: -1, + }, + ) + if err != nil { + return err + } + + tasks, _, _, err := getRawTasksForLists(s, lists, u, &taskOptions{page: -1}) + if err != nil { + return err + } + + taskIDs := []int64{} + for _, t := range tasks { + taskIDs = append(taskIDs, t.ID) + } + + tas, err := getTaskAttachmentsByTaskIDs(s, taskIDs) + if err != nil { + return err + } + + files := make(map[int64]io.ReadCloser) + for _, ta := range tas { + if err := ta.File.LoadFileByID(); err != nil { + return err + } + files[ta.FileID] = ta.File.File + } + + return dump.WriteFilesToZip(files, wr) }