progress bar
This commit is contained in:
@@ -119,18 +119,15 @@ func Unzip(src, dest string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLatestVersion(repoU string) string {
|
func getLatestVersion(repoU string) (string, error) {
|
||||||
var latest string
|
|
||||||
jsonBody := []byte("")
|
jsonBody := []byte("")
|
||||||
res := sendRequest(http.MethodGet, fmt.Sprintf("https://api.github.com/repos%s/releases/latest", repoU), jsonBody)
|
res := sendRequest(http.MethodGet, fmt.Sprintf("https://api.github.com/repos%s/releases/latest", repoU), jsonBody)
|
||||||
var release Release
|
var release Release
|
||||||
err := json.Unmarshal([]byte(string(res.Body)), &release)
|
err := json.Unmarshal([]byte(string(res.Body)), &release)
|
||||||
if err != nil {
|
if err != nil || res.StatusCode != 200 {
|
||||||
fmt.Println("Json Error:", err)
|
return "", err
|
||||||
return latest
|
|
||||||
}
|
}
|
||||||
latest = release.TagName
|
return release.TagName, nil
|
||||||
return latest
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func downloadPackage(repoU, tag string) error {
|
func downloadPackage(repoU, tag string) error {
|
||||||
|
|||||||
+5
-2
@@ -3,11 +3,14 @@ package main
|
|||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func showPackageInfo(packageName string) {
|
func showPackageInfo(packageName string) {
|
||||||
|
progress := ProgressBar{total: 4, length: 20}
|
||||||
|
progress.change(3, "", "Fetching")
|
||||||
repoURL, err := getRepoURL(packageName)
|
repoURL, err := getRepoURL(packageName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error getting repo URL: %v\n", err)
|
fmt.Printf("\nError getting repo URL: %v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
progress.clean()
|
||||||
|
|
||||||
// indexURL, err := findIndexURL(repoURL)
|
// indexURL, err := findIndexURL(repoURL)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
@@ -27,6 +30,6 @@ func showPackageInfo(packageName string) {
|
|||||||
// fmt.Printf("Version: %s\n", version)
|
// fmt.Printf("Version: %s\n", version)
|
||||||
// fmt.Printf(" Author: %s\n", info.Author)
|
// fmt.Printf(" Author: %s\n", info.Author)
|
||||||
// fmt.Printf(" Description: %s\n", info.Description)
|
// 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) {
|
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)
|
repoURL, err := getRepoURL(packageName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error getting repo URL: %s\n", err)
|
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)
|
fmt.Printf("Error parsing repo URL: %s\n", err)
|
||||||
}
|
}
|
||||||
if packageVersion == "" {
|
if packageVersion == "" {
|
||||||
packageVersion = getLatestVersion(repoU.Path)
|
packageVersion, err = getLatestVersion(repoU.Path)
|
||||||
fmt.Printf("Found version %s\n", packageVersion)
|
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)
|
downloadPackage(repoU.Path, packageVersion)
|
||||||
if err := os.Mkdir("wyst_tmp", os.ModePerm); err != nil {
|
if err := os.Mkdir("wyst_tmp", os.ModePerm); err != nil {
|
||||||
ERR := fmt.Sprintf("%s", err)
|
ERR := fmt.Sprintf("%s", err)
|
||||||
@@ -42,7 +46,7 @@ func installPackage(packageName, packageVersion string) {
|
|||||||
panic(ERR)
|
panic(ERR)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf("Extracting %s %s\n", packageName, packageVersion)
|
progress.change(9, "", "Extracting")
|
||||||
Unzip("temp.zip", "wyst_tmp")
|
Unzip("temp.zip", "wyst_tmp")
|
||||||
entries, err := os.ReadDir("./wyst_tmp")
|
entries, err := os.ReadDir("./wyst_tmp")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -63,5 +67,7 @@ func installPackage(packageName, packageVersion string) {
|
|||||||
if err := os.Remove("temp.zip"); err != nil {
|
if err := os.Remove("temp.zip"); err != nil {
|
||||||
panic(err)
|
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"
|
const wpmVersion = "1.0.0"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
fmt.Println()
|
||||||
if len(os.Args) < 2 {
|
if len(os.Args) < 2 {
|
||||||
showHelp()
|
showHelp()
|
||||||
return
|
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