talc/main.go
2020-03-17 16:36:19 +01:00

99 lines
1.6 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"os/user"
"path/filepath"
"talc/pkg/menu"
"talc/pkg/tal"
"github.com/gdamore/tcell"
"github.com/gdamore/tcell/views"
)
var path = flag.String("path", ".", "library path")
func init() {
flag.Parse()
*path = filepath.FromSlash(*path)
if (*path)[0] == '~' {
user, err := user.Current()
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(10)
}
*path = filepath.Join(user.HomeDir, (*path)[1:])
}
*path, _ = filepath.Abs(*path)
}
type Talc struct {
views.BoxLayout
}
func (t *Talc) HandleEvent(ev tcell.Event) bool {
switch ev := ev.(type) {
case *tcell.EventKey:
switch ev.Key() {
case tcell.KeyEscape:
fallthrough
case tcell.KeyCtrlC:
app.Quit()
return true
case tcell.KeyRune:
switch ev.Rune() {
case 'q':
app.Quit()
return true
}
case tcell.KeyCtrlL:
app.Refresh()
return true
}
case *tcell.EventResize:
app.Refresh()
return true
}
return t.BoxLayout.HandleEvent(ev)
}
var app = &views.Application{}
var talc = &Talc{}
func main() {
alib := &tal.Repo{
Path: *path,
}
if err := alib.Scan(); err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(11)
}
books := make([]string, len(alib.Books))
for i, book := range alib.Books {
books[i] = book.String()
}
s := tcell.StyleDefault
ss := s.Foreground(tcell.ColorGreen)
m := menu.NewMenu()
m.SetStyle(s)
m.SetSelectedStyle(ss)
m.EnableCursor(true)
m.SetLines(books)
talc.AddWidget(m, 1)
app.SetRootWidget(talc)
if err := app.Run(); err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(1)
}
}