Add filter import

This commit is contained in:
kolaente 2021-09-03 21:44:56 +02:00
parent 7049644bcc
commit edec1f6aa4
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 38 additions and 12 deletions

View File

@ -242,7 +242,7 @@ func exportTaskAttachments(s *xorm.Session, u *user.User, wr *zip.Writer) (err e
}
func exportSavedFilters(s *xorm.Session, u *user.User, wr *zip.Writer) (err error) {
filters, err := getSavedFilters(s, u)
filters, err := getSavedFiltersForUser(s, u)
if err != nil {
return err
}

View File

@ -19,6 +19,7 @@ package vikunja_file
import (
"archive/zip"
"bytes"
"code.vikunja.io/api/pkg/db"
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/api/pkg/modules/migration"
"code.vikunja.io/api/pkg/user"
@ -42,7 +43,7 @@ func (v *VikunjaFileMigrator) Migrate(user *user.User, file io.ReaderAt, size in
}
var dataFile *zip.File
//var filterFile *zip.File
var filterFile *zip.File
storedFiles := make(map[string]*zip.File)
for _, f := range r.File {
if strings.HasPrefix(f.Name, "files/") {
@ -54,28 +55,28 @@ func (v *VikunjaFileMigrator) Migrate(user *user.User, file io.ReaderAt, size in
dataFile = f
continue
}
//if f.Name == "filters.json" {
// filterFile = f
//}
if f.Name == "filters.json" {
filterFile = f
}
}
// TODO: check we have all files
//////
// Import the bulk of Vikunja data
rc, err := dataFile.Open()
df, err := dataFile.Open()
if err != nil {
return fmt.Errorf("could not open data file: %s", err)
}
defer rc.Close()
defer df.Close()
var buf bytes.Buffer
if _, err := buf.ReadFrom(rc); err != nil {
var bufData bytes.Buffer
if _, err := bufData.ReadFrom(df); err != nil {
return fmt.Errorf("could not read data file: %s", err)
}
namespaces := []*models.NamespaceWithListsAndTasks{}
if err := json.Unmarshal(buf.Bytes(), &namespaces); err != nil {
if err := json.Unmarshal(bufData.Bytes(), &namespaces); err != nil {
return fmt.Errorf("could not read data: %s", err)
}
@ -89,7 +90,32 @@ func (v *VikunjaFileMigrator) Migrate(user *user.User, file io.ReaderAt, size in
///////
// Import filters
//filters
ff, err := filterFile.Open()
if err != nil {
return fmt.Errorf("could not open filters file: %s", err)
}
defer ff.Close()
return nil
var bufFilter bytes.Buffer
if _, err := bufData.ReadFrom(ff); err != nil {
return fmt.Errorf("could not read filters file: %s", err)
}
filters := []*models.SavedFilter{}
if err := json.Unmarshal(bufFilter.Bytes(), &filters); err != nil {
return fmt.Errorf("could not read filter data: %s", err)
}
s := db.NewSession()
defer s.Close()
for _, f := range filters {
err = f.Create(s, user)
if err != nil {
_ = s.Rollback()
return err
}
}
return s.Commit()
}