Initial Commit
This commit is contained in:
parent
50d501ad38
commit
4ac3943f42
76
main.go
Normal file
76
main.go
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/nsf/termbox-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
//battPct = getBatteryPct()
|
||||||
|
//fmt.Printf("Battery: %d\n", getBatteryPct())
|
||||||
|
var err error
|
||||||
|
|
||||||
|
err = termbox.Init()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer termbox.Close()
|
||||||
|
|
||||||
|
style := defaultStyle()
|
||||||
|
termbox.SetOutputMode(termbox.Output256)
|
||||||
|
mainLoop(style)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mainLoop(style style) {
|
||||||
|
screens := defaultScreens()
|
||||||
|
displayScreen := screens[mainScreenIndex]
|
||||||
|
layoutAndDrawScreen(displayScreen, style)
|
||||||
|
|
||||||
|
for {
|
||||||
|
event := termbox.PollEvent()
|
||||||
|
if event.Type == termbox.EventKey {
|
||||||
|
if event.Key == termbox.KeyCtrlC {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
newScreenIndex := displayScreen.handleKeyEvent(event)
|
||||||
|
if newScreenIndex < len(screens) {
|
||||||
|
displayScreen = screens[newScreenIndex]
|
||||||
|
layoutAndDrawScreen(displayScreen, style)
|
||||||
|
} else if newScreenIndex == exitScreenIndex {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if event.Type == termbox.EventResize || event.Type == termbox.EventNone {
|
||||||
|
layoutAndDrawScreen(displayScreen, style)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Screens Setup
|
||||||
|
const (
|
||||||
|
mainScreenIndex = iota
|
||||||
|
//aboutScreenIndex
|
||||||
|
exitScreenIndex
|
||||||
|
)
|
||||||
|
|
||||||
|
func defaultScreens() []Screen {
|
||||||
|
//var view_port ViewPort
|
||||||
|
mainScreen := mainScreen{}
|
||||||
|
//aboutScreen := aboutScreen{}
|
||||||
|
screens := [...]Screen{
|
||||||
|
&mainScreen,
|
||||||
|
// &aboutScreen,
|
||||||
|
}
|
||||||
|
return screens[:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// WriteToLog Writes to the Log
|
||||||
|
func WriteToLog(d string) {
|
||||||
|
f, err := os.OpenFile("system-status.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0664)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
f.WriteString(d)
|
||||||
|
f.Close()
|
||||||
|
}
|
28
screen.go
Normal file
28
screen.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/nsf/termbox-go"
|
||||||
|
|
||||||
|
// Screen TODO: Comment
|
||||||
|
type Screen interface {
|
||||||
|
handleKeyEvent(event termbox.Event) int
|
||||||
|
performLayout(style style)
|
||||||
|
drawScreen(style style)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ViewPort TODO: Comment
|
||||||
|
type ViewPort struct {
|
||||||
|
bytesPerRow int
|
||||||
|
numberOfRows int
|
||||||
|
firstRow int
|
||||||
|
}
|
||||||
|
|
||||||
|
func drawBackground(bg termbox.Attribute) {
|
||||||
|
termbox.Clear(0, bg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func layoutAndDrawScreen(screen Screen, style style) {
|
||||||
|
screen.performLayout(style)
|
||||||
|
drawBackground(style.defaultBg)
|
||||||
|
screen.drawScreen(style)
|
||||||
|
termbox.Flush()
|
||||||
|
}
|
78
screen_main.go
Normal file
78
screen_main.go
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gogs.bullercodeworks.com/brian/termbox-util"
|
||||||
|
|
||||||
|
"github.com/nsf/termbox-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mainScreen struct {
|
||||||
|
initialized bool
|
||||||
|
tabIdx int
|
||||||
|
battStat *termboxUtil.ProgressBar
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *mainScreen) handleKeyEvent(event termbox.Event) int {
|
||||||
|
if event.Type == termbox.EventKey {
|
||||||
|
if event.Key == termbox.KeyEsc {
|
||||||
|
return exitScreenIndex
|
||||||
|
} else if event.Ch == 'r' {
|
||||||
|
// Refresh data
|
||||||
|
screen.battStat.SetProgress(getBatteryPct())
|
||||||
|
} else if event.Ch == 'q' {
|
||||||
|
return exitScreenIndex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mainScreenIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *mainScreen) performLayout(style style) {
|
||||||
|
if !screen.initialized {
|
||||||
|
w, _ := termbox.Size()
|
||||||
|
screen.battStat = termboxUtil.CreateProgressBar(100, w-14, 1, style.defaultFg, style.defaultBg)
|
||||||
|
screen.battStat.SetProgress(getBatteryPct())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *mainScreen) drawScreen(style style) {
|
||||||
|
w, h := termbox.Size()
|
||||||
|
termboxUtil.DrawStringAtPoint(time.Now().Format("15:04 MST"), 0, 0, style.defaultFg, style.defaultBg)
|
||||||
|
termboxUtil.DrawStringAtPoint(time.Now().Format("02 Jan 2006"), 0, 1, style.defaultFg, style.defaultBg)
|
||||||
|
screen.battStat.Draw()
|
||||||
|
termboxUtil.DrawStringAtPoint(fmt.Sprintf("% 3d%s", screen.battStat.GetPercent(), "%"),
|
||||||
|
screen.battStat.GetX()+screen.battStat.GetWidth(),
|
||||||
|
screen.battStat.GetY(), style.defaultFg, style.defaultBg)
|
||||||
|
quitTxt := "(q)uit"
|
||||||
|
termboxUtil.DrawStringAtPoint(quitTxt, (w - len(quitTxt)), h-1, style.defaultFg, style.defaultBg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getBatteryPct() int {
|
||||||
|
powerApp := "upower"
|
||||||
|
powerArg1 := "-i"
|
||||||
|
powerArg2 := "/org/freedesktop/UPower/devices/battery_BAT0"
|
||||||
|
cmd := exec.Command(powerApp, powerArg1, powerArg2)
|
||||||
|
stdout, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
tst := string(stdout)
|
||||||
|
for _, k := range strings.Split(tst, "\n") {
|
||||||
|
pair := strings.Split(k, ":")
|
||||||
|
if len(pair) > 1 {
|
||||||
|
pair[0] = strings.Trim(pair[0], " ")
|
||||||
|
pair[1] = strings.Trim(pair[1], " %")
|
||||||
|
if pair[0] == "percentage" {
|
||||||
|
if pct, err := strconv.Atoi(pair[1]); err == nil {
|
||||||
|
return pct
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
23
style.go
Normal file
23
style.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/nsf/termbox-go"
|
||||||
|
|
||||||
|
type style struct {
|
||||||
|
defaultBg termbox.Attribute
|
||||||
|
defaultFg termbox.Attribute
|
||||||
|
titleBg termbox.Attribute
|
||||||
|
titleFg termbox.Attribute
|
||||||
|
cursorBg termbox.Attribute
|
||||||
|
cursorFg termbox.Attribute
|
||||||
|
}
|
||||||
|
|
||||||
|
func defaultStyle() style {
|
||||||
|
var style style
|
||||||
|
style.defaultBg = termbox.ColorBlack
|
||||||
|
style.defaultFg = termbox.ColorWhite
|
||||||
|
style.titleBg = style.defaultBg
|
||||||
|
style.titleFg = style.defaultFg | termbox.AttrBold
|
||||||
|
style.cursorBg = termbox.ColorWhite
|
||||||
|
style.cursorFg = termbox.ColorBlack
|
||||||
|
return style
|
||||||
|
}
|
3
system-status.log
Normal file
3
system-status.log
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Refreshing Battery: 70%
|
||||||
|
From ProgBar: 70%
|
||||||
|
INIT: From ProgBar: 70%
|
Loading…
Reference in New Issue
Block a user