progress bar

This commit is contained in:
2024-05-21 16:39:06 +02:00
parent 618b472d13
commit 5c3f352126
5 changed files with 62 additions and 15 deletions
+4 -7
View File
@@ -119,18 +119,15 @@ func Unzip(src, dest string) error {
return nil
}
func getLatestVersion(repoU string) string {
var latest string
func getLatestVersion(repoU string) (string, error) {
jsonBody := []byte("")
res := sendRequest(http.MethodGet, fmt.Sprintf("https://api.github.com/repos%s/releases/latest", repoU), jsonBody)
var release Release
err := json.Unmarshal([]byte(string(res.Body)), &release)
if err != nil {
fmt.Println("Json Error:", err)
return latest
if err != nil || res.StatusCode != 200 {
return "", err
}
latest = release.TagName
return latest
return release.TagName, nil
}
func downloadPackage(repoU, tag string) error {
+5 -2
View File
@@ -3,11 +3,14 @@ package main
import "fmt"
func showPackageInfo(packageName string) {
progress := ProgressBar{total: 4, length: 20}
progress.change(3, "", "Fetching")
repoURL, err := getRepoURL(packageName)
if err != nil {
fmt.Printf("Error getting repo URL: %v\n", err)
fmt.Printf("\nError getting repo URL: %v\n", err)
return
}
progress.clean()
// indexURL, err := findIndexURL(repoURL)
// if err != nil {
@@ -27,6 +30,6 @@ func showPackageInfo(packageName string) {
// fmt.Printf("Version: %s\n", version)
// fmt.Printf(" Author: %s\n", info.Author)
// fmt.Printf(" Description: %s\n", info.Description)
fmt.Println()
// fmt.Println()
// }
}
+12 -6
View File
@@ -20,7 +20,8 @@ type PackageVersion struct {
}
func installPackage(packageName, packageVersion string) {
fmt.Printf("Fetching %s\n", packageName)
progress := ProgressBar{total: 10, length: 20, enabled: false}
progress.change(1, "", "Fetching")
repoURL, err := getRepoURL(packageName)
if err != nil {
fmt.Printf("Error getting repo URL: %s\n", err)
@@ -31,10 +32,13 @@ func installPackage(packageName, packageVersion string) {
fmt.Printf("Error parsing repo URL: %s\n", err)
}
if packageVersion == "" {
packageVersion = getLatestVersion(repoU.Path)
fmt.Printf("Found version %s\n", packageVersion)
packageVersion, err = getLatestVersion(repoU.Path)
if err != nil {
fmt.Printf("Error extracting version: %s\n", err)
}
progress.change(3, "", fmt.Sprintf("Found version %s", packageVersion))
}
fmt.Printf("Downloading %s %s\n", packageName, packageVersion)
progress.change(6, "", "Downloading")
downloadPackage(repoU.Path, packageVersion)
if err := os.Mkdir("wyst_tmp", os.ModePerm); err != nil {
ERR := fmt.Sprintf("%s", err)
@@ -42,7 +46,7 @@ func installPackage(packageName, packageVersion string) {
panic(ERR)
}
}
fmt.Printf("Extracting %s %s\n", packageName, packageVersion)
progress.change(9, "", "Extracting")
Unzip("temp.zip", "wyst_tmp")
entries, err := os.ReadDir("./wyst_tmp")
if err != nil {
@@ -63,5 +67,7 @@ func installPackage(packageName, packageVersion string) {
if err := os.Remove("temp.zip"); err != nil {
panic(err)
}
fmt.Printf("%s %s Installed\n", packageName, packageVersion)
progress.change(10, "", "Installed")
progress.clean()
fmt.Printf("%s %s Installed\n\n", packageName, packageVersion)
}
+1
View File
@@ -8,6 +8,7 @@ import (
const wpmVersion = "1.0.0"
func main() {
fmt.Println()
if len(os.Args) < 2 {
showHelp()
return
+40
View File
@@ -0,0 +1,40 @@
package main
import (
"fmt"
"strings"
)
type ProgressBar struct {
total int
length int
last_suffix int
enabled bool
}
func (prb *ProgressBar) change(amount int, prefix, suffix string) {
if prb.enabled {
percent := float64(amount) / float64(prb.total)
filledLength := int(float64(prb.length) * percent)
fill := "█"
end := "█"
if amount == prb.total {
end = "█"
}
for len(suffix) < prb.last_suffix {
suffix += " "
}
bar := strings.Repeat(fill, filledLength) + end + strings.Repeat("-", (prb.length-filledLength))
fmt.Printf("\r%s [%s] %s", prefix, bar, suffix)
// if amount == prb.total {
// fmt.Println()
// }
prb.last_suffix = len(suffix) + 3
}
}
func (prb ProgressBar) clean() {
if prb.enabled {
fmt.Printf("\r" + strings.Repeat(" ", prb.last_suffix+prb.length+2) + "\r")
}
}