Working Prototype for the Files Navigation
Heavy Refactoring is needed for this. The Required Mappings have been added and the Delay in keyboard input has been fixed. The Delay in keyboard input was due to Queueing the events ( although it was a go routine ). The Solution was to use just Draw() Method from tview.Application.
This commit is contained in:
parent
9e69ed9f1e
commit
11eb7c35b6
148
main.go
148
main.go
@ -2,17 +2,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/rivo/tview"
|
||||
"log"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/fhs/gompd/mpd"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"fmt"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
func getContent(row, column int) {
|
||||
}
|
||||
var Volume int64
|
||||
var Random bool
|
||||
var Repeat bool
|
||||
|
||||
func main() {
|
||||
|
||||
// Connect to MPD server
|
||||
conn, err := mpd.Dial("tcp", "localhost:6600")
|
||||
if err != nil {
|
||||
@ -20,14 +24,21 @@ func main(){
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
var pBar *progressBar = newProgressBar(*conn)
|
||||
expandedView := tview.NewTable()
|
||||
Navbar := tview.NewTable().SetBorder(true)
|
||||
searchBar := tview.NewBox().SetBorder(true)
|
||||
progressBar := tview.NewBox().SetBorder(true)
|
||||
Navbar := tview.NewTable()
|
||||
searchBar := tview.NewTable()
|
||||
|
||||
searchBar.SetBorder(true)
|
||||
Navbar.SetBorder(true)
|
||||
Navbar.SetSelectable(true, false)
|
||||
Navbar.SetCell(0, 0, tview.NewTableCell("Files"))
|
||||
Navbar.SetCell(1, 0, tview.NewTableCell("Playlist"))
|
||||
Navbar.SetCell(2, 0, tview.NewTableCell("Most Played"))
|
||||
|
||||
searchNavFlex := tview.NewFlex().SetDirection(tview.FlexRow).
|
||||
AddItem(Navbar, 0, 1, false).
|
||||
AddItem(searchBar, 0, 7, false)
|
||||
AddItem(searchBar, 0, 1, false).
|
||||
AddItem(Navbar, 0, 7, false)
|
||||
|
||||
sNavExpViewFlex := tview.NewFlex().
|
||||
AddItem(searchNavFlex, 0, 1, false).
|
||||
@ -35,27 +46,120 @@ func main(){
|
||||
|
||||
mainFlex := tview.NewFlex().SetDirection(tview.FlexRow).
|
||||
AddItem(sNavExpViewFlex, 0, 8, false).
|
||||
AddItem(progressBar, 0, 1, false)
|
||||
AddItem(pBar.t, 0, 1, false)
|
||||
|
||||
App := tview.NewApplication().SetRoot(mainFlex, true).SetFocus(expandedView)
|
||||
|
||||
expandedView.SetBorderPadding(1, 1, 1, 1).SetBorder(true)
|
||||
expandedView.SetSelectable(true, false)
|
||||
fmt.Println(expandedView.HasFocus())
|
||||
|
||||
a, err := conn.GetFiles()
|
||||
aer := generateDirectoryTree(a);
|
||||
ec := []string{"NothingHappens", "Remember When.mp3"}
|
||||
aer := generateDirectoryTree(a)
|
||||
|
||||
Update(*conn, aer.children, ec, expandedView)
|
||||
expandedView.SetDoneFunc(func(key tcell.Key){
|
||||
if key == tcell.KeyLeft {
|
||||
r, c := expandedView.GetSelection()
|
||||
fmt.Println(join(ec) + expandedView.GetCell(r, c).Text)
|
||||
Update(*conn, aer.children, expandedView)
|
||||
|
||||
Navbar.SetDoneFunc(func(key tcell.Key) {
|
||||
if key == tcell.KeyTAB {
|
||||
App.SetFocus(searchBar)
|
||||
} else if key == tcell.KeyBacktab {
|
||||
App.SetFocus(expandedView)
|
||||
}
|
||||
}).SetSelectedFunc(func(row, column int){
|
||||
fmt.Println(join(ec) + expandedView.GetCell(row, column).Text)
|
||||
})
|
||||
if err := tview.NewApplication().SetRoot(mainFlex, true).SetFocus(expandedView).Run(); err != nil {
|
||||
expandedView.SetDoneFunc(func(key tcell.Key) {
|
||||
if key == tcell.KeyTAB {
|
||||
App.SetFocus(Navbar)
|
||||
} else if key == tcell.KeyBacktab {
|
||||
App.SetFocus(searchBar)
|
||||
}
|
||||
})
|
||||
searchBar.SetDoneFunc(func(key tcell.Key) {
|
||||
if key == tcell.KeyTAB {
|
||||
App.SetFocus(expandedView)
|
||||
} else if key == tcell.KeyBacktab {
|
||||
App.SetFocus(Navbar)
|
||||
}
|
||||
})
|
||||
|
||||
v, _ := conn.Status()
|
||||
Volume, _ = strconv.ParseInt(v["volume"], 10, 64)
|
||||
Random, _ = strconv.ParseBool(v["random"])
|
||||
Repeat, _ = strconv.ParseBool(v["repeat"])
|
||||
|
||||
expandedView.SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
|
||||
if e.Rune() == 108 {
|
||||
r, _ := expandedView.GetSelection()
|
||||
if len(aer.children[r].children) == 0 {
|
||||
id, _ := conn.AddId(aer.children[r].absolutePath, -1)
|
||||
conn.PlayId(id)
|
||||
} else {
|
||||
Update(*conn, aer.children[r].children, expandedView)
|
||||
aer = &aer.children[r]
|
||||
}
|
||||
return nil
|
||||
} else if e.Rune() == 112 {
|
||||
togglePlayBack(*conn)
|
||||
return nil
|
||||
} else if e.Rune() == 104 {
|
||||
if aer.parent != nil {
|
||||
Update(*conn, aer.parent.children, expandedView)
|
||||
aer = aer.parent
|
||||
}
|
||||
return nil
|
||||
} else if e.Rune() == 110 {
|
||||
conn.Next()
|
||||
return nil
|
||||
} else if e.Rune() == 99 {
|
||||
conn.Clear()
|
||||
return nil
|
||||
} else if e.Rune() == 78 {
|
||||
conn.Previous()
|
||||
return nil
|
||||
} else if e.Rune() == 97 {
|
||||
r, _ := expandedView.GetSelection()
|
||||
conn.Add(aer.children[r].absolutePath)
|
||||
return nil
|
||||
} else if e.Rune() == 122 {
|
||||
err := conn.Random(!Random)
|
||||
if err == nil {
|
||||
Random = !Random
|
||||
}
|
||||
return nil
|
||||
} else if e.Rune() == 114 {
|
||||
err := conn.Repeat(!Repeat)
|
||||
if err == nil {
|
||||
Repeat = !Repeat
|
||||
}
|
||||
return nil
|
||||
} else if e.Rune() == 45 {
|
||||
if Volume <= 0 {
|
||||
Volume = 0
|
||||
} else {
|
||||
Volume -= 10
|
||||
}
|
||||
conn.SetVolume(int(Volume))
|
||||
return nil
|
||||
} else if e.Rune() == 61 {
|
||||
if Volume >= 100 {
|
||||
Volume = 100
|
||||
} else {
|
||||
Volume += 10
|
||||
}
|
||||
conn.SetVolume(int(Volume))
|
||||
return nil
|
||||
} else {
|
||||
// fmt.Println(e.Rune())
|
||||
return e
|
||||
}
|
||||
})
|
||||
|
||||
go func() {
|
||||
for {
|
||||
App.Draw()
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}()
|
||||
|
||||
if err := App.Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user