diff --git a/src/gh.go b/src/gh.go index 54c5947..7505aa6 100644 --- a/src/gh.go +++ b/src/gh.go @@ -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 { diff --git a/src/info.go b/src/info.go index 5cb56da..dcabf9a 100644 --- a/src/info.go +++ b/src/info.go @@ -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() // } } diff --git a/src/install.go b/src/install.go index 8618815..824b0e3 100644 --- a/src/install.go +++ b/src/install.go @@ -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) } diff --git a/src/main.go b/src/main.go index 63efd73..a11eeca 100644 --- a/src/main.go +++ b/src/main.go @@ -8,6 +8,7 @@ import ( const wpmVersion = "1.0.0" func main() { + fmt.Println() if len(os.Args) < 2 { showHelp() return diff --git a/src/progressbar.go b/src/progressbar.go new file mode 100644 index 0000000..f8416fd --- /dev/null +++ b/src/progressbar.go @@ -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") + } +}