diff --git a/Network/downloadAnime.go b/Network/downloadAnime.go index 092db01..6702154 100644 --- a/Network/downloadAnime.go +++ b/Network/downloadAnime.go @@ -4,7 +4,6 @@ import ( message "animatic-v2/Message" "animatic-v2/Structures" utils "animatic-v2/Utils" - "fmt" "path/filepath" ) @@ -26,8 +25,6 @@ func (d *Downloader) DownloadAll() { return } - fmt.Println(newDestPath) - videoExtractor.AnimeURL = d.EpList[i].URL videoUrl := videoExtractor.ExtractVideoURL() diff --git a/Network/downloadVideo.go b/Network/downloadVideo.go index 0fb83dd..3017127 100644 --- a/Network/downloadVideo.go +++ b/Network/downloadVideo.go @@ -1,11 +1,11 @@ package network import ( - message "animatic-v2/Message" "fmt" "time" "github.com/cavaliergopher/grab/v3" + "gopkg.in/cheggaaa/pb.v1" ) type VideoDownloader struct { @@ -15,31 +15,26 @@ type VideoDownloader struct { func (vd *VideoDownloader) Download() { client := grab.NewClient() + req, _ := grab.NewRequest(vd.DestPath+".mp4", vd.URL) + req.HTTPRequest.Header.Set("Connection", "keep-alive") - outputPath := vd.DestPath + ".mp4" + resp := client.Do(req) - request, _ := grab.NewRequest(outputPath, vd.URL) - resp := client.Do(request) + maxSizeInMB := int(resp.Size() / (1024 * 1024)) + minSizeInMB := 10 - t := time.NewTicker(500 * time.Millisecond) - defer t.Stop() - -loop: - for { - select { - case <-t.C: - fmt.Printf("%.2f%%\r", - 100*resp.Progress()) - case <-resp.Done: - break loop - } + if maxSizeInMB < minSizeInMB { + maxSizeInMB = minSizeInMB } - if err := resp.Err(); err != nil { - message.ErrorMessage(err.Error()) - return + bar := pb.StartNew(maxSizeInMB) + + fmt.Printf("Episode URL: %s \n", vd.URL) + for !resp.IsComplete() { + completedInMB := int(resp.Progress() * float64(maxSizeInMB)) + bar.Set(completedInMB) + time.Sleep(time.Millisecond * 500) } - message.SucessMessage(fmt.Sprintf("%s was downloaded to %s\n", vd.URL, vd.DestPath)) - return + bar.Finish() } diff --git a/Tui/selectAnime.go b/Tui/selectAnime.go index db0fa03..a217746 100644 --- a/Tui/selectAnime.go +++ b/Tui/selectAnime.go @@ -55,7 +55,7 @@ func SelectAnimes(animes []Structures.Anime) (string, string, error) { columns := []table.Column{ {Title: AnimeNameColumnTitle, Width: 50}, - {Title: AnimeURLColumnTitle, Width: 50}, + {Title: AnimeURLColumnTitle, Width: 180}, } rows := make([]table.Row, 0, len(animes)) diff --git a/go.mod b/go.mod index 51c5a0a..774dfd2 100644 --- a/go.mod +++ b/go.mod @@ -9,14 +9,17 @@ require ( github.com/charmbracelet/bubbletea v0.25.0 github.com/charmbracelet/lipgloss v0.9.1 github.com/jarcoal/httpmock v1.3.1 + gopkg.in/cheggaaa/pb.v1 v1.0.28 ) require ( github.com/andybalholm/cascadia v1.3.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect @@ -26,7 +29,7 @@ require ( github.com/rivo/uniseg v0.4.3 // indirect golang.org/x/net v0.7.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/sys v0.14.0 // indirect golang.org/x/term v0.6.0 // indirect golang.org/x/text v0.7.0 // indirect ) diff --git a/go.sum b/go.sum index 04ded75..ec4e5f4 100644 --- a/go.sum +++ b/go.sum @@ -16,12 +16,17 @@ github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2 github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -61,11 +66,12 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -81,3 +87,5 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= diff --git a/main.go b/main.go index 3b38a6b..b79ecc3 100644 --- a/main.go +++ b/main.go @@ -7,11 +7,26 @@ import ( tui "animatic-v2/Tui" utils "animatic-v2/Utils" "os" + "os/signal" "path/filepath" "runtime" + "syscall" ) func main() { + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGTERM, syscall.SIGKILL) + + go func() { + sig := <-sigs + switch sig { + case syscall.SIGTERM: + os.Exit(0) + case syscall.SIGKILL: + os.Exit(1) + } + }() + // If hasn't internet connection, break the program if network.HasNetwork() == false { message.ErrorMessage("Hasn't internet connection")