ditty/gui_list.go

274 lines
5.2 KiB
Go
Raw Normal View History

2020-01-09 01:50:52 +00:00
package main
2020-01-09 23:51:37 +00:00
import (
"path"
"time"
2020-04-24 22:39:02 +00:00
2020-04-25 13:55:09 +00:00
"github.com/gdamore/tcell"
2020-04-24 22:39:02 +00:00
"gitlab.com/tslocum/cview"
2020-01-09 23:51:37 +00:00
)
2020-01-09 01:50:52 +00:00
func listPrevious() {
2020-01-29 15:29:38 +00:00
if queueFocused {
queuePrevious()
return
2020-01-09 01:50:52 +00:00
}
2020-01-09 23:51:37 +00:00
2020-04-24 22:39:02 +00:00
mainList.Transform(cview.TransformPreviousItem)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateLists)
2020-01-09 01:50:52 +00:00
}
func listNext() {
2020-01-29 15:29:38 +00:00
if queueFocused {
queueNext()
return
2020-01-09 01:50:52 +00:00
}
2020-01-09 23:51:37 +00:00
2020-04-24 22:39:02 +00:00
mainList.Transform(cview.TransformNextItem)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateLists)
}
func queuePrevious() {
2020-04-24 22:39:02 +00:00
queueList.Transform(cview.TransformPreviousItem)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateQueue)
}
func queueNext() {
2020-04-24 22:39:02 +00:00
queueList.Transform(cview.TransformNextItem)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateQueue)
2020-01-09 23:51:37 +00:00
}
2020-04-24 22:39:02 +00:00
func listSelectCurrent() {
go listSelect(mainList.GetCurrentItem())
}
func listSelect(cursor int) {
2020-01-28 17:26:44 +00:00
if queueFocused {
queueSelect()
return
}
2020-04-24 22:39:02 +00:00
if cursor == 0 {
browseFolder(path.Join(mainDirectory, ".."))
2020-01-09 23:51:37 +00:00
return
}
2020-04-24 22:39:02 +00:00
if cursor < 0 || cursor-1 > len(mainFiles) {
return
}
entry := mainFiles[cursor-1]
2020-01-09 23:51:37 +00:00
if entry.File.IsDir() {
2020-01-28 22:53:38 +00:00
browseFolder(entry.Path)
2020-01-09 23:51:37 +00:00
return
}
2020-01-28 22:53:38 +00:00
audioFile, err := openFile(entry.Path, entry.Metadata)
2020-01-09 23:51:37 +00:00
if err != nil {
statusText = err.Error()
go func() {
time.Sleep(5 * time.Second)
statusText = ""
go app.QueueUpdateDraw(updateMain)
}()
go app.QueueUpdateDraw(updateMain)
return
}
go play(audioFile)
go app.QueueUpdateDraw(updateStatus)
2020-01-09 01:50:52 +00:00
}
2020-01-28 17:26:44 +00:00
func queueSelect() {
entry := selectedQueueEntry()
if entry.File.IsDir() {
// TODO error
return
}
audioFile, err := openFile(entry.Path, entry.Metadata)
if err != nil {
statusText = err.Error()
go func() {
time.Sleep(5 * time.Second)
statusText = ""
go app.QueueUpdateDraw(updateMain)
}()
go app.QueueUpdateDraw(updateMain)
return
}
go play(audioFile)
go app.QueueUpdateDraw(updateStatus)
}
func listQueue() {
2020-04-24 22:39:02 +00:00
if mainList.GetCurrentItem() == 0 {
2020-01-28 17:26:44 +00:00
// TODO Show error
return
}
entry := selectedMainEntry()
if entry == nil {
return
} else if entry.File.IsDir() {
scanFiles := scanFolderRecursively(entry.Path)
queueLock.Lock()
queueFiles = append(queueFiles, scanFiles...)
queueLock.Unlock()
2020-01-29 16:54:05 +00:00
if !disableAutoplay && playingFileID == 0 && len(queueFiles) > 0 {
2020-01-28 17:26:44 +00:00
queueSelect()
}
go app.QueueUpdateDraw(updateQueue)
return
}
queueLock.Lock()
defer queueLock.Unlock()
queueFiles = append(queueFiles, entry)
2020-01-29 16:54:05 +00:00
if !disableAutoplay && playingFileID == 0 {
2020-01-28 17:26:44 +00:00
queueSelect()
}
go app.QueueUpdateDraw(updateLists)
}
func listDelete() {
if !queueFocused {
return
}
queueLock.Lock()
defer queueLock.Unlock()
2020-04-24 22:39:02 +00:00
cursor := queueList.GetCurrentItem()
if cursor < 0 || len(queueFiles) <= cursor {
2020-01-28 17:26:44 +00:00
return
}
2020-04-24 22:39:02 +00:00
queueFiles = append(queueFiles[:cursor], queueFiles[cursor+1:]...)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateQueue)
}
func selectedMainEntry() *libraryEntry {
2020-04-24 22:39:02 +00:00
cursor := mainList.GetCurrentItem()
if cursor < 0 || cursor-1 > len(mainFiles) {
return nil
}
return mainFiles[cursor-1]
2020-01-09 01:50:52 +00:00
}
2020-01-28 17:26:44 +00:00
func offsetMainEntry(offset int) *libraryEntry {
2020-04-24 22:39:02 +00:00
cursor := mainList.GetCurrentItem()
if (cursor-1)+offset < 0 || (cursor-1)+offset >= len(mainFiles) {
2020-01-28 17:26:44 +00:00
return nil
}
2020-04-24 22:39:02 +00:00
return mainFiles[(cursor-1)+offset]
2020-01-09 01:50:52 +00:00
}
2020-01-22 01:10:20 +00:00
2020-01-28 17:26:44 +00:00
func selectedQueueEntry() *libraryEntry {
2020-04-24 22:39:02 +00:00
cursor := queueList.GetCurrentItem()
if cursor < 0 || cursor-1 > len(queueFiles) {
return nil
}
return queueFiles[cursor]
2020-01-28 17:26:44 +00:00
}
func offsetQueueEntry(offset int) *libraryEntry {
2020-04-24 22:39:02 +00:00
cursor := queueList.GetCurrentItem()
if cursor+offset < 0 || cursor+offset >= len(queueFiles) {
2020-01-28 17:26:44 +00:00
return nil
}
2020-04-24 22:39:02 +00:00
return queueFiles[cursor+offset]
2020-01-28 17:26:44 +00:00
}
2020-01-22 01:10:20 +00:00
func listPreviousPage() {
2020-01-28 17:26:44 +00:00
if !queueFocused {
2020-04-24 22:39:02 +00:00
mainList.Transform(cview.TransformPreviousPage)
2020-01-22 01:10:20 +00:00
go app.QueueUpdateDraw(updateMain)
2020-01-28 17:26:44 +00:00
} else {
2020-04-24 22:39:02 +00:00
queueList.Transform(cview.TransformPreviousPage)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateQueue)
}
2020-01-22 01:10:20 +00:00
}
func listNextPage() {
2020-01-28 17:26:44 +00:00
if !queueFocused {
2020-04-24 22:39:02 +00:00
mainList.Transform(cview.TransformNextPage)
2020-01-22 01:10:20 +00:00
go app.QueueUpdateDraw(updateMain)
2020-01-28 17:26:44 +00:00
} else {
2020-04-24 22:39:02 +00:00
queueList.Transform(cview.TransformNextPage)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateQueue)
}
2020-01-22 01:10:20 +00:00
}
2020-01-22 22:54:55 +00:00
func listRefresh() {
2020-04-24 22:39:02 +00:00
mainCursor = mainList.GetCurrentItem()
d := mainDirectory
mainDirectory = ""
2020-01-22 22:54:55 +00:00
browseFolder(d)
}
func listToggleHidden() {
showHiddenFolders = !showHiddenFolders
if showHiddenFolders {
2020-01-24 23:35:55 +00:00
statusText = "Hidden folders: shown"
} else {
2020-01-24 23:35:55 +00:00
statusText = "Hidden folders: hidden"
}
go func() {
time.Sleep(3 * time.Second)
statusText = ""
go app.QueueUpdateDraw(updateMain)
}()
listRefresh()
}
2020-01-28 17:26:44 +00:00
func toggleFocusedList() {
queueFocused = !queueFocused
2020-04-25 13:55:09 +00:00
focusUpdated()
}
func focusUpdated() {
2020-04-24 22:39:02 +00:00
if queueFocused {
app.SetFocus(queueList)
2020-04-25 13:55:09 +00:00
2020-04-28 22:07:49 +00:00
mainList.SetSelectedTextColor(tcell.ColorWhite)
queueList.SetSelectedTextColor(tcell.ColorBlack)
mainList.SetSelectedTextAttributes(tcell.AttrBold | tcell.AttrUnderline)
queueList.SetSelectedTextAttributes(0)
mainList.SetSelectedBackgroundColor(tcell.ColorBlack)
2020-04-25 13:55:09 +00:00
queueList.SetSelectedBackgroundColor(tcell.ColorWhite)
2020-04-24 22:39:02 +00:00
} else {
app.SetFocus(mainList)
2020-04-25 13:55:09 +00:00
2020-04-28 22:07:49 +00:00
mainList.SetSelectedTextColor(tcell.ColorBlack)
queueList.SetSelectedTextColor(tcell.ColorWhite)
mainList.SetSelectedTextAttributes(0)
queueList.SetSelectedTextAttributes(tcell.AttrBold | tcell.AttrUnderline)
2020-04-25 13:55:09 +00:00
mainList.SetSelectedBackgroundColor(tcell.ColorWhite)
2020-04-28 22:07:49 +00:00
queueList.SetSelectedBackgroundColor(tcell.ColorBlack)
2020-04-24 22:39:02 +00:00
}
2020-04-28 22:07:49 +00:00
mainList.SetHighlightFullLine(!queueFocused)
queueList.SetHighlightFullLine(queueFocused)
2020-01-28 17:26:44 +00:00
go app.QueueUpdateDraw(updateLists)
}