93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/cheggaaa/pb/v3"
|
|
"github.com/urfave/cli/v2"
|
|
"go.arsenm.dev/itd/api"
|
|
)
|
|
|
|
func fwUpgrade(c *cli.Context) error {
|
|
resources := c.String("resources")
|
|
if resources != "" {
|
|
absRes, err := filepath.Abs(resources)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = resLoad(c.Context, []string{absRes})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
start := time.Now()
|
|
|
|
var upgType api.UpgradeType
|
|
var files []string
|
|
// Get relevant data struct
|
|
if c.String("archive") != "" {
|
|
// Get archive data struct
|
|
upgType = api.UpgradeTypeArchive
|
|
files = []string{c.String("archive")}
|
|
} else if c.String("init-packet") != "" && c.String("firmware") != "" {
|
|
// Get files data struct
|
|
upgType = api.UpgradeTypeFiles
|
|
files = []string{c.String("init-packet"), c.String("firmware")}
|
|
} else {
|
|
return cli.Exit("Upgrade command requires either archive or init packet and firmware.", 1)
|
|
}
|
|
|
|
progress, err := client.FirmwareUpgrade(c.Context, upgType, abs(files)...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Create progress bar template
|
|
barTmpl := `{{counters . }} B {{bar . "|" "-" (cycle .) " " "|"}} {{percent . }} {{rtime . "%s"}}`
|
|
// Start full bar at 0 total
|
|
bar := pb.ProgressBarTemplate(barTmpl).Start(0)
|
|
// Create new scanner of connection
|
|
for event := range progress {
|
|
// Set total bytes in progress bar
|
|
bar.SetTotal(event.Total)
|
|
// Set amount of bytes received in progress bar
|
|
bar.SetCurrent(int64(event.Received))
|
|
// If transfer finished, break
|
|
if int64(event.Sent) == event.Total {
|
|
break
|
|
}
|
|
}
|
|
// Finish progress bar
|
|
bar.Finish()
|
|
|
|
fmt.Printf("Transferred %d B in %s.\n", bar.Total(), time.Since(start))
|
|
fmt.Println("Remember to validate the new firmware in the InfiniTime settings.")
|
|
|
|
return nil
|
|
}
|
|
|
|
func fwVersion(c *cli.Context) error {
|
|
version, err := client.Version(c.Context)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println(version)
|
|
return nil
|
|
}
|
|
|
|
func abs(paths []string) []string {
|
|
for index, path := range paths {
|
|
newPath, err := filepath.Abs(path)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
paths[index] = newPath
|
|
}
|
|
return paths
|
|
}
|