[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:
Zorchenhimer 2025-11-22 19:42:10 -05:00
parent 6831274a25
commit 88e095f426
Signed by: Zorchenhimer
GPG Key ID: 70A1AB767AAB9C20
3 changed files with 32 additions and 5 deletions

View File

@ -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"
@ -17,7 +19,9 @@ 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")

View File

@ -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,
} }

View File

@ -8,6 +8,7 @@ import (
) )
type StudyBox struct { type StudyBox struct {
Filename string
Data *TapeData Data *TapeData
Audio *TapeAudio Audio *TapeAudio
} }