diff --git a/pkg/models/export.go b/pkg/models/export.go index 056bd7575..ff7d8b79e 100644 --- a/pkg/models/export.go +++ b/pkg/models/export.go @@ -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 } diff --git a/pkg/modules/migration/vikunja-file/vikunja.go b/pkg/modules/migration/vikunja-file/vikunja.go index bbddf1c17..f49ec0508 100644 --- a/pkg/modules/migration/vikunja-file/vikunja.go +++ b/pkg/modules/migration/vikunja-file/vikunja.go @@ -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() }