progress bar
This commit is contained in:
@@ -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
@@ -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
@@ -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)
|
||||
}
|
||||
fmt.Printf("Downloading %s %s\n", packageName, packageVersion)
|
||||
progress.change(3, "", fmt.Sprintf("Found version %s", 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)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
const wpmVersion = "1.0.0"
|
||||
|
||||
func main() {
|
||||
fmt.Println()
|
||||
if len(os.Args) < 2 {
|
||||
showHelp()
|
||||
return
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user