()
| 17 | } |
| 18 | |
| 19 | func newFromJSONCmd() *fromJSONCmd { |
| 20 | cmd := &cobra.Command{ |
| 21 | Use: "from-json", |
| 22 | Short: "Imports a JSON into a project - WARNING: it will wipe the project first, use with care!", |
| 23 | Args: cobra.ExactArgs(1), |
| 24 | RunE: func(cmd *cobra.Command, args []string) error { |
| 25 | project := cmd.Parent().Flag("project").Value.String() |
| 26 | db, f, err := setup(project) |
| 27 | if err != nil { |
| 28 | return err |
| 29 | } |
| 30 | defer db.Close() |
| 31 | defer f.Close() |
| 32 | |
| 33 | input, err := os.ReadFile(args[0]) |
| 34 | if err != nil { |
| 35 | return fmt.Errorf("failed to read %s: %w", args[0], err) |
| 36 | } |
| 37 | |
| 38 | var tasks []model.ExportedTask |
| 39 | if err := json.Unmarshal(input, &tasks); err != nil { |
| 40 | return fmt.Errorf("input json is not in the correct format: %w", err) |
| 41 | } |
| 42 | |
| 43 | tmp, err := ioutil.TempFile("", "tasktimer-"+project) |
| 44 | if err != nil { |
| 45 | return fmt.Errorf("failed to create backup file: %w", err) |
| 46 | } |
| 47 | if _, err := db.Backup(tmp, 0); err != nil { |
| 48 | return fmt.Errorf("failed to backup to %s: %w", tmp.Name(), err) |
| 49 | } |
| 50 | |
| 51 | log.Printf("backup made to %s\n", tmp.Name()) |
| 52 | |
| 53 | if err := db.DropAll(); err != nil { |
| 54 | return fmt.Errorf("failed to clear database: %w", err) |
| 55 | } |
| 56 | |
| 57 | return store.LoadTasks(db, tasks) |
| 58 | }, |
| 59 | } |
| 60 | |
| 61 | return &fromJSONCmd{cmd: cmd} |
| 62 | } |
no test coverage detected