ditty/gui_list.go

248 lines
4.4 KiB
Go

package main
import (
"path"
"time"
"gitlab.com/tslocum/cview"
)
func listPrevious() {
if queueFocused {
queuePrevious()
return
}
mainList.Transform(cview.TransformPreviousItem)
go app.QueueUpdateDraw(updateLists)
}
func listNext() {
if queueFocused {
queueNext()
return
}
mainList.Transform(cview.TransformNextItem)
go app.QueueUpdateDraw(updateLists)
}
func queuePrevious() {
queueList.Transform(cview.TransformPreviousItem)
go app.QueueUpdateDraw(updateQueue)
}
func queueNext() {
queueList.Transform(cview.TransformNextItem)
go app.QueueUpdateDraw(updateQueue)
}
func listSelectCurrent() {
go listSelect(mainList.GetCurrentItem())
}
func listSelect(cursor int) {
if queueFocused {
queueSelect()
return
}
if cursor == 0 {
browseFolder(path.Join(mainDirectory, ".."))
return
}
if cursor < 0 || cursor-1 > len(mainFiles) {
return
}
entry := mainFiles[cursor-1]
if entry.File.IsDir() {
browseFolder(entry.Path)
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 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() {
if mainList.GetCurrentItem() == 0 {
// 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()
if !disableAutoplay && playingFileID == 0 && len(queueFiles) > 0 {
queueSelect()
}
go app.QueueUpdateDraw(updateQueue)
return
}
queueLock.Lock()
defer queueLock.Unlock()
queueFiles = append(queueFiles, entry)
if !disableAutoplay && playingFileID == 0 {
queueSelect()
}
go app.QueueUpdateDraw(updateLists)
}
func listDelete() {
if !queueFocused {
return
}
queueLock.Lock()
defer queueLock.Unlock()
cursor := queueList.GetCurrentItem()
if cursor < 0 || len(queueFiles) <= cursor {
return
}
queueFiles = append(queueFiles[:cursor], queueFiles[cursor+1:]...)
go app.QueueUpdateDraw(updateQueue)
}
func selectedMainEntry() *libraryEntry {
cursor := mainList.GetCurrentItem()
if cursor < 0 || cursor-1 > len(mainFiles) {
return nil
}
return mainFiles[cursor-1]
}
func offsetMainEntry(offset int) *libraryEntry {
cursor := mainList.GetCurrentItem()
if (cursor-1)+offset < 0 || (cursor-1)+offset >= len(mainFiles) {
return nil
}
return mainFiles[(cursor-1)+offset]
}
func selectedQueueEntry() *libraryEntry {
cursor := queueList.GetCurrentItem()
if cursor < 0 || cursor-1 > len(queueFiles) {
return nil
}
return queueFiles[cursor]
}
func offsetQueueEntry(offset int) *libraryEntry {
cursor := queueList.GetCurrentItem()
if cursor+offset < 0 || cursor+offset >= len(queueFiles) {
return nil
}
return queueFiles[cursor+offset]
}
func listPreviousPage() {
if !queueFocused {
mainList.Transform(cview.TransformPreviousPage)
go app.QueueUpdateDraw(updateMain)
} else {
queueList.Transform(cview.TransformPreviousPage)
go app.QueueUpdateDraw(updateQueue)
}
}
func listNextPage() {
if !queueFocused {
mainList.Transform(cview.TransformNextPage)
go app.QueueUpdateDraw(updateMain)
} else {
queueList.Transform(cview.TransformNextPage)
go app.QueueUpdateDraw(updateQueue)
}
}
func listRefresh() {
mainCursor = mainList.GetCurrentItem()
d := mainDirectory
mainDirectory = ""
browseFolder(d)
}
func listToggleHidden() {
showHiddenFolders = !showHiddenFolders
if showHiddenFolders {
statusText = "Hidden folders: shown"
} else {
statusText = "Hidden folders: hidden"
}
go func() {
time.Sleep(3 * time.Second)
statusText = ""
go app.QueueUpdateDraw(updateMain)
}()
listRefresh()
}
func toggleFocusedList() {
queueFocused = !queueFocused
if queueFocused {
app.SetFocus(queueList)
} else {
app.SetFocus(mainList)
}
go app.QueueUpdateDraw(updateLists)
}