Skip to content

Commit

Permalink
add enhacement #7 , show notification when download complete
Browse files Browse the repository at this point in the history
  • Loading branch information
OmarElKhatibCS committed Dec 19, 2021
1 parent ba39975 commit 5237afb
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 12 deletions.
15 changes: 12 additions & 3 deletions app/ui/anime_page_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,32 @@ const (
)

// save: Save a Episode.
func (p *AnimePage) saveEpisode(episode *tohru.Episode, errChan chan error) {
func (p *AnimePage) saveEpisode(episode *tohru.Episode, errChan chan error, infoChan chan string) {
url, err := getDwnLink(episode)
if err != nil {
errChan <- err
return
}
filePath := p.getDownloadPath(episode)
filename := fmt.Sprintf("%s%s.%s", filePath, removeRestrictedChars(episode.EpisodeName), "mp4")
fullPath := fmt.Sprintf("%s%s.%s", filePath, removeRestrictedChars(episode.EpisodeName), "mp4")

err = os.MkdirAll(filePath, 0777)
if err != nil {
errChan <- err
return
}
_, err = grab.Get(filename, url)
resp, err := grab.Get(fullPath, url)
if err != nil {
errChan <- err
return
}
if resp.Err() != nil {
errChan <- resp.Err()
return
}
if resp.IsComplete() {
infoChan <- fmt.Sprintf("Download is complete and file can be found at: %s", fullPath)
return
}

}
Expand Down
6 changes: 3 additions & 3 deletions app/ui/modals.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func confirmModal(id, text, confirmButton string, f func()) *tview.Modal {
// confirmModal : Creates a new modal for confirmation.
// The user specifies the function to do when confirming.
// If the user cancels, then the modal is removed from the view.
func watchOrDownloadModal(id, text string, stream func(chan error), download func(chan error), errChan chan error) *tview.Modal {
func watchOrDownloadModal(id, text string, stream func(chan error, chan string), download func(chan error, chan string), errChan chan error, infoChan chan string) *tview.Modal {
// Create new modal
modal := tview.NewModal()

Expand All @@ -65,9 +65,9 @@ func watchOrDownloadModal(id, text string, stream func(chan error), download fun
SetFocus(0).
SetDoneFunc(func(buttonIndex int, _ string) {
if buttonIndex == 0 {
stream(errChan)
stream(errChan, infoChan)
} else if buttonIndex == 1 {
download(errChan)
download(errChan, infoChan)
}
log.Printf("Removing %s modal\n", id)
core.App.PageHolder.RemovePage(id)
Expand Down
21 changes: 15 additions & 6 deletions app/ui/page_inputs.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ func (p *AnimePage) setHandlers(cancel context.CancelFunc) {
log.Println("Creating and showing confirm download modal...")

errChan := make(chan error)
infoChan := make(chan string)

if len(p.sWrap.Selection) > 1 {
modal := confirmModal(utils.DownloadModalID, "Download episode(s)?", "Yes", func() {
// Create a copy of the Selection.
Expand All @@ -140,7 +142,7 @@ func (p *AnimePage) setHandlers(cancel context.CancelFunc) {
})
ShowModal(utils.DownloadModalID, modal)
} else {
streamF := func(errChan chan error) {
streamF := func(errChan chan error, infoChan chan string) {
selected := p.sWrap.CopySelection()
for index := range selected {
var episode *tohru.Episode
Expand All @@ -160,15 +162,15 @@ func (p *AnimePage) setHandlers(cancel context.CancelFunc) {
modal := okModal(utils.InfoModalID, "Stream Starting...\n this operation may take few minutes based on internet connection and mpv launch \nif error happened it will be reported")
ShowModal(utils.InfoModalID, modal)
}
dwnF := func(errChan chan error) {
dwnF := func(errChan chan error, infoChan chan string) {
selected := p.sWrap.CopySelection()
for index := range selected {
var episode *tohru.Episode
var ok bool
if episode, ok = p.Table.GetCell(index, 0).GetReference().(*tohru.Episode); !ok {
return
}
go p.saveEpisode(episode, errChan)
go p.saveEpisode(episode, errChan, infoChan)
}

log.Println(selected)
Expand All @@ -179,10 +181,10 @@ func (p *AnimePage) setHandlers(cancel context.CancelFunc) {
modal := okModal(utils.InfoModalID, info)
ShowModal(utils.InfoModalID, modal)
}
modal := watchOrDownloadModal(utils.WatchOrDownloadModalID, "Select Option", streamF, dwnF, errChan)
modal := watchOrDownloadModal(utils.WatchOrDownloadModalID, "Select Option", streamF, dwnF, errChan, infoChan)
ShowModal(utils.WatchOrDownloadModalID, modal)
}
go func(errChan chan error) {
go func(errChan chan error, infoChan chan string) {
for {
select {
case err := <-errChan:
Expand All @@ -191,9 +193,16 @@ func (p *AnimePage) setHandlers(cancel context.CancelFunc) {
modal := okModal(utils.GenericAPIErrorModalID, err.Error())
ShowModal(utils.GenericAPIErrorModalID, modal)
})

case info := <-infoChan:
log.Println(info)
core.App.TView.QueueUpdateDraw(func() {
modal := okModal(utils.InfoModalID, info)
ShowModal(utils.InfoModalID, modal)
})
}
}
}(errChan)
}(errChan, infoChan)
})

// Set table input captures.
Expand Down

0 comments on commit 5237afb

Please sign in to comment.