[sbutil] Use filname field in json when packing
- Use the filename provided in the json file when writing out a .studybox file. By default, it will not overwrite an existing file. - Passing --force will overwrite an existing file. - Passing --output will override the filename in the json.
This commit is contained in:
parent
6831274a25
commit
88e095f426
|
|
@ -5,6 +5,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
"errors"
|
||||||
|
"io/fs"
|
||||||
|
|
||||||
"github.com/alexflint/go-arg"
|
"github.com/alexflint/go-arg"
|
||||||
|
|
||||||
|
|
@ -18,6 +20,8 @@ type Arguments struct {
|
||||||
|
|
||||||
type ArgPack struct {
|
type ArgPack struct {
|
||||||
Input string `arg:"positional,required"`
|
Input string `arg:"positional,required"`
|
||||||
|
Force bool `arg:"--force"`
|
||||||
|
Output string `arg:"--output,-o"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ArgUnPack struct {
|
type ArgUnPack struct {
|
||||||
|
|
@ -73,9 +77,17 @@ func pack(args *ArgPack) error {
|
||||||
|
|
||||||
// TODO: put this in the json file?
|
// TODO: put this in the json file?
|
||||||
|
|
||||||
outname := args.Input[:len(args.Input)-len(".json")]+".studybox"
|
if args.Output != "" {
|
||||||
fmt.Println(outname)
|
sb.Filename = args.Output
|
||||||
err = sb.Write(outname)
|
}
|
||||||
|
|
||||||
|
// outname := args.Input[:len(args.Input)-len(".json")]+".studybox"
|
||||||
|
if exists(sb.Filename) && !args.Force {
|
||||||
|
return fmt.Errorf("%s already exists or cannot be written to", sb.Filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(sb.Filename)
|
||||||
|
err = sb.Write(sb.Filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -117,6 +129,19 @@ func unpack(args *ArgUnPack) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func exists(filename string) bool {
|
||||||
|
_, err := os.Stat(filename)
|
||||||
|
if err == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
//func main_old() {
|
//func main_old() {
|
||||||
// if len(os.Args) < 3 {
|
// if len(os.Args) < 3 {
|
||||||
// fmt.Println("Missing command")
|
// fmt.Println("Missing command")
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ func Import(filename string) (*StudyBox, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sbj := &StudyBoxJson{}
|
sbj := &StudyBoxJson{ Filename: filename }
|
||||||
err = json.Unmarshal(raw, sbj)
|
err = json.Unmarshal(raw, sbj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Unable to unmarshal json: %v", err)
|
return nil, fmt.Errorf("Unable to unmarshal json: %v", err)
|
||||||
|
|
@ -28,6 +28,7 @@ func Import(filename string) (*StudyBox, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sb := &StudyBox{
|
sb := &StudyBox{
|
||||||
|
Filename: sbj.Filename,
|
||||||
Data: &TapeData{Pages: []*Page{}},
|
Data: &TapeData{Pages: []*Page{}},
|
||||||
Audio: audio,
|
Audio: audio,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type StudyBox struct {
|
type StudyBox struct {
|
||||||
|
Filename string
|
||||||
Data *TapeData
|
Data *TapeData
|
||||||
Audio *TapeAudio
|
Audio *TapeAudio
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue