diff --git a/player.go b/player.go index db87058..c337601 100644 --- a/player.go +++ b/player.go @@ -83,7 +83,7 @@ func (p *Player) Run(currSong *AudioFile) { popupMessage := fmt.Sprintf("%s\n\n[ %s ]", currSong.Name, fmtDuration(p.length)) - timedPopup(" Current Song ", popupMessage, getPopupTimeout()) + timedPopup(" Current Song ", popupMessage, getPopupTimeout(), 0, 0) done := make(chan bool, 1) diff --git a/playlist.go b/playlist.go index 5c3b57f..a9a81fd 100644 --- a/playlist.go +++ b/playlist.go @@ -121,11 +121,11 @@ func NewPlaylist() *Playlist { if err != nil { timedPopup( " Error ", - "Unable to delete dir "+selectedDir.Name, getPopupTimeout()) + "Unable to delete dir "+selectedDir.Name, getPopupTimeout(), 0, 0) } else { timedPopup( " Success ", - selectedDir.Name+"\nhas been deleted successfully", getPopupTimeout()) + selectedDir.Name+"\nhas been deleted successfully", getPopupTimeout(), 0, 0) playlist.Refresh() } @@ -155,11 +155,11 @@ func NewPlaylist() *Playlist { if err != nil { timedPopup( - " Error ", "Unable to delete "+audioFile.Name, getPopupTimeout()) + " Error ", "Unable to delete "+audioFile.Name, getPopupTimeout(), 0, 0) } else { timedPopup( " Success ", - audioFile.Name+"\nhas been deleted successfully", getPopupTimeout()) + audioFile.Name+"\nhas been deleted successfully", getPopupTimeout(), 0, 0) playlist.Refresh() } @@ -260,7 +260,8 @@ func populate(root *tview.TreeNode, rootPath string) { defer f.Close() - child := tview.NewTreeNode(GetName(file.Name())) + songName := GetName(file.Name()) + child := tview.NewTreeNode(songName) if !file.IsDir() { @@ -284,7 +285,7 @@ func populate(root *tview.TreeNode, rootPath string) { } audioFile := &AudioFile{ - Name: file.Name(), + Name: songName, Path: path, IsAudioFile: true, Length: audioLength, @@ -298,7 +299,7 @@ func populate(root *tview.TreeNode, rootPath string) { if file.IsDir() { audioFile := &AudioFile{ - Name: file.Name(), + Name: songName, Path: path, IsAudioFile: false, Length: 0, @@ -495,7 +496,7 @@ func Ytdl(url string, selPlaylist *tview.TreeNode) { _, err := exec.LookPath("youtube-dl") if err != nil { - timedPopup(" Error ", "youtube-dl is not in your $PATH", getPopupTimeout()) + timedPopup(" Error ", "youtube-dl is not in your $PATH", getPopupTimeout(), 0, 0) return } @@ -504,7 +505,7 @@ func Ytdl(url string, selPlaylist *tview.TreeNode) { selAudioFile := selPlaylist.GetReference().(*AudioFile) selPlaylistName := selAudioFile.Name - timedPopup(" Ytdl ", "Downloading", getPopupTimeout()) + timedPopup(" Ytdl ", "Downloading", getPopupTimeout(), 0, 0) // specify the output path for ytdl outputDir := fmt.Sprintf( @@ -530,7 +531,7 @@ func Ytdl(url string, selPlaylist *tview.TreeNode) { err := cmd.Run() if err != nil { - timedPopup(" Error ", "Error running youtube-dl", getPopupTimeout()) + timedPopup(" Error ", "Error running youtube-dl", getPopupTimeout(), 0, 0) return } @@ -551,8 +552,7 @@ func Ytdl(url string, selPlaylist *tview.TreeNode) { timedPopup( " Ytdl ", downloadFinishedMessage, - getPopupTimeout(), - ) + getPopupTimeout(), 0, 0) gomu.App.Draw() diff --git a/popup.go b/popup.go index 2f88c3e..bcff922 100644 --- a/popup.go +++ b/popup.go @@ -71,7 +71,12 @@ func topRight(p tview.Primitive, width, height int) tview.Primitive { AddItem(nil, 0, 1, false) } -func timedPopup(title string, desc string, timeout time.Duration) { +func timedPopup(title string, desc string, timeout time.Duration, width, height int) { + + if width == 0 && height == 0 { + width = 70 + height = 7 + } textView := tview.NewTextView(). SetText(desc). @@ -79,13 +84,13 @@ func timedPopup(title string, desc string, timeout time.Duration) { textView.SetTextAlign(tview.AlignCenter).SetBackgroundColor(gomu.PopupBg) - box := tview.NewFrame(textView).SetBorders(1, 1, 1, 1, 1, 1) + box := tview.NewFrame(textView).SetBorders(1, 0, 0, 0, 0, 0) box.SetTitle(title).SetBorder(true).SetBackgroundColor(gomu.PopupBg) popupId := fmt.Sprintf("%s %d", "timeout-popup", popupCounter) popupCounter++ - gomu.Pages.AddPage(popupId, topRight(box, 70, 7), true, true) + gomu.Pages.AddPage(popupId, topRight(box, width, height), true, true) gomu.App.SetFocus(gomu.PrevPanel.(tview.Primitive)) go func() { @@ -106,7 +111,7 @@ func volumePopup(volume float64) { "50", ) - timedPopup(" Volume ", progress, getPopupTimeout()) + timedPopup(" Volume ", progress, getPopupTimeout(), 0, 0) } @@ -123,8 +128,8 @@ func helpPopup() { "l add song to queue", "L add playlist to queue", "h close node in playlist", - "d remove from queue", - "D delete playlist", + "d delete song/remove from queue", + "D delete playlist/clear queue", "+ volume up", "- volume down", "? toggle help", diff --git a/queue.go b/queue.go index 6a614e3..8ea3427 100644 --- a/queue.go +++ b/queue.go @@ -72,7 +72,7 @@ func (q *Queue) UpdateTitle() { fmtTime := fmtDuration(totalLength) - q.SetTitle(fmt.Sprintf("┤ Queue ├──┤%s├", fmtTime)) + q.SetTitle(fmt.Sprintf("┤ Queue ├──┤%d|%s├", len(q.Items), fmtTime)) } @@ -266,6 +266,17 @@ func NewQueue() *Queue { queue.DeleteItem(queue.GetCurrentItem()) case 'D': queue.ClearQueue() + case 'z': + isLoop := gomu.Player.ToggleLoop() + var msg string + + if isLoop { + msg = "on" + } else { + msg = "off" + } + + timedPopup("Loop", msg, getPopupTimeout(), 30, 5) } return nil