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:
parent
f1569b06e7
commit
a87b092f0f
2
go.mod
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
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")
|
||||
|
Loading…
Reference in New Issue
Block a user