forked from Elara6331/itd
81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"path/filepath"
|
||
|
"time"
|
||
|
|
||
|
"github.com/cheggaaa/pb/v3"
|
||
|
"github.com/urfave/cli/v2"
|
||
|
"go.arsenm.dev/itd/api"
|
||
|
"go.arsenm.dev/itd/internal/types"
|
||
|
)
|
||
|
|
||
|
func fwUpgrade(c *cli.Context) error {
|
||
|
start := time.Now()
|
||
|
|
||
|
var upgType api.UpgradeType
|
||
|
var files []string
|
||
|
// Get relevant data struct
|
||
|
if c.String("archive") != "" {
|
||
|
// Get archive data struct
|
||
|
upgType = types.UpgradeTypeArchive
|
||
|
files = []string{c.String("archive")}
|
||
|
} else if c.String("init-packet") != "" && c.String("firmware") != "" {
|
||
|
// Get files data struct
|
||
|
upgType = types.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(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(event.Received)
|
||
|
// If transfer finished, break
|
||
|
if 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()
|
||
|
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
|
||
|
}
|