This whole thing needs a lot of restructuring realistically for the IPC to work well with the TUI, I believe. (broken state)

This commit is contained in:
kayos 2021-05-27 10:38:50 -07:00
parent f1569b06e7
commit a87b092f0f
4 changed files with 51 additions and 54 deletions

2
go.mod

@ -9,7 +9,7 @@ require (
github.com/charmbracelet/lipgloss v0.2.1
github.com/go-ole/go-ole v1.2.5 // indirect
github.com/godbus/dbus/v5 v5.0.4 // indirect
github.com/muesli/termenv v0.8.1
github.com/mattn/go-runewidth v0.0.12
github.com/muka/go-bluetooth v0.0.0-20201211051136-07f31c601d33 // indirect
github.com/prologic/bitcask v0.3.10
github.com/rs/zerolog v1.21.0

@ -46,13 +46,6 @@ func DiceRoll(slice []string) string {
// M I S C / U T I L ---------
// Must is non negotiable (fatal error if err != nil)
func Must(action string, err error) {
if err != nil {
log.Fatal().Err(err).Str("action", action).Msg("FATAL_ERROR")
}
}
func FirstList() {
projVars.ScanList = make(map[string]string)
}

@ -5,9 +5,9 @@ import (
"protomolecule/src/eros"
projVars "protomolecule/src/vars"
//"strconv"
bluetooth "git.tcp.direct/kayos/prototooth"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
bluetooth "git.tcp.direct/kayos/prototooth"
"time"
)
@ -73,7 +73,7 @@ func (s *Scan) Start() error {
log.Info().Str("ID", adapterId).Msg("Adapter in Use")
projVars.ScanAdapter.Scan(func(scanAdapter *bluetooth.Adapter, result bluetooth.ScanResult) {
projVars.DiscoveredDeviceChan <- projVars.DiscoveredDevice{ ScanResult: result } // Tea
projVars.DiscoveredDeviceChan <- projVars.DiscoveredDevice{ScanResult: result} // Tea
payload := result.AdvertisementPayload
addr := result.Address.String()
@ -136,9 +136,10 @@ func (s *Scan) Start() error {
if err != nil {
log.Error().Err(err).Msg("EROS_RECALL_FAILURE")
}
log.Info().Interface("Device", fromEros).Msg("EROS_RECALL")
if projVars.AttackMode == true && projVars.TrackingMode == false /*changed to false for debug*/ {
if projVars.AttackMode == true && projVars.TrackingMode == false {
////////////////////////////////////////////////////////////////////////
//var PreTargetHandling type

89
tui.go

@ -1,16 +1,7 @@
package main
/*
log.Debug().Msg("Starting scan")
var scanID int
var scan *scanStuff.Scan
scanID = _ScanMgr.NewScan()
scan = _ScanMgr.Scans[scanID]
dust.Must("Scan", scan.Start())
*/
*/
import (
"flag"
@ -19,9 +10,10 @@ import (
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/mattn/go-runewidth"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"io"
//"io"
"os"
"protomolecule/src/dust"
"protomolecule/src/eros"
@ -34,13 +26,6 @@ import (
var _ScanMgr *scanStuff.Meta
const (
// optional, only works when using the tea.EnterAltScreen;
// which makes the tui utilize the full terminal.
//
// from what I understand this will update the screen more often
// this should account for window resizes properly when combined with rendering all "cmd"s during the "update"
fastrender = true
headerHeight = 3
footerHeight = 3
)
@ -49,7 +34,7 @@ type model struct {
// https://github.com/charmbracelet/bubbles/blob/master/viewport/viewport.go
viewport viewport.Model
content string
content string
// items on the device list
choices []string
@ -81,14 +66,14 @@ var initialModel = model{
cursor: 1,
}
var reader *io.PipeReader
var writer *io.PipeWriter
//var reader *io.PipeReader
//var writer *io.PipeWriter
func init() {
reader, writer = io.Pipe()
//reader, writer = io.Pipe()
// print banner for style points
// dust.Splash()
//dust.Splash()
flag.Parse()
@ -128,16 +113,16 @@ func init() {
}
// define pretty printer
consoleWriter := zerolog.ConsoleWriter{
Out: writer,
}
//consoleWriter := zerolog.ConsoleWriter{
// Out: writer,
//}
// initialize simultaneous pretty printing and json logging
multi := zerolog.MultiLevelWriter(consoleWriter, lf)
log.Logger = zerolog.New(multi).With().Timestamp().Logger()
//multi := zerolog.MultiLevelWriter(consoleWriter, lf)
log.Logger = zerolog.New(lf).With().Timestamp().Logger()
// suppress debug messages unless -d is called
zerolog.SetGlobalLevel(zerolog.Disabled)
zerolog.SetGlobalLevel(zerolog.InfoLevel)
log.Debug().Msg("Logging initialized")
@ -179,6 +164,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmds []tea.Cmd
)
cmds = append(cmds, viewport.Sync(m.viewport))
switch msg := msg.(type) {
case tea.WindowSizeMsg:
@ -193,7 +180,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
m.viewport.YPosition = headerHeight
m.viewport.HighPerformanceRendering = fastrender
m.viewport.HighPerformanceRendering = true
// so it looks like this is fetching data from our io.Pipe (io.reader) for every update
// i defined said pipe on line 65
@ -242,10 +229,10 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
// spin that spinner
case spinner.TickMsg:
var cmd tea.Cmd
m.spinner, cmd = m.spinner.Update(msg)
return m, cmd
//case spinner.TickMsg:
// var cmd tea.Cmd
// m.spinner, cmd = m.spinner.Update(msg)
// return m, cmd
// **************************************************
// actual protomolecule IPC for bubbletea starts here
@ -281,14 +268,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
func (m model) View() string {
var head []string
//var head []string
if !m.ready {
return "\n Loading ProtoMolecule..."
return "Loading ProtoMolecule..."
}
// load our banner
head = dust.GetBanner()
// head = dust.GetBanner()
header := lipgloss.NewStyle().
Bold(true).
@ -297,7 +284,17 @@ func (m model) View() string {
PaddingTop(0).
PaddingLeft(0).
Width(m.viewport.Width).
Render(fmt.Sprintf("%s\n%s\n%s", head[0], head[1], head[2]))
Render("ProtoMolecule")
// Render(fmt.Sprintf("\n%s\n%s\n%s", head[0], head[1], head[2]))
footerTop := "╭──────╮"
footerMid := fmt.Sprintf("┤ %3.f%% │", m.viewport.ScrollPercent()*100)
footerBot := "╰──────╯"
gapSize := m.viewport.Width - runewidth.StringWidth(footerMid)
footerTop = strings.Repeat(" ", gapSize) + footerTop
footerMid = strings.Repeat("─", gapSize) + footerMid
footerBot = strings.Repeat(" ", gapSize) + footerBot
footer := fmt.Sprintf("%s\n%s\n%s", footerTop, footerMid, footerBot)
/* Iterate over our choices
NOTE: change to only print n rows (minus header, footer and any padding rows) to ensure
@ -335,9 +332,6 @@ func (m model) View() string {
m.content += fmt.Sprintf("%s [%s] %s\n", cursor, checked, choice)
}
// The footer
footer := m.spinner.View()
// Send the UI for rendering
return fmt.Sprintf("%s\n%s\n%s", header, m.viewport.View(), footer)
}
@ -357,12 +351,21 @@ func listenForScanResults() tea.Msg {
}
func main() {
content := "Starting..."
//content := "Starting..."
p := tea.NewProgram(model{content: string(content)})
p := tea.NewProgram(initialModel)
p.EnterAltScreen()
defer p.ExitAltScreen()
log.Debug().Msg("Starting scan")
var scanID int
var scan *scanStuff.Scan
scanID = _ScanMgr.NewScan()
scan = _ScanMgr.Scans[scanID]
go scan.Start()
if err := p.Start(); err != nil {
log.Fatal().Err(err).Msg("FATAL")