forked from Elara6331/itd
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 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"
 | 
						|
)
 | 
						|
 | 
						|
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 = 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
 | 
						|
}
 |