mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-28 16:09:48 +00:00
130 lines
2.5 KiB
Go
130 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"os/exec"
|
|
"runtime"
|
|
"sync"
|
|
|
|
"image/color"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/app"
|
|
"fyne.io/fyne/v2/canvas"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
type Program struct {
|
|
App fyne.App
|
|
ParentWindow fyne.Window
|
|
RunString string
|
|
RunCheck *widget.Check
|
|
Config *Config
|
|
Cmd *exec.Cmd
|
|
CmdMu sync.Mutex
|
|
LogsArea *widget.RichText
|
|
LogsText *widget.Label
|
|
LogsChannel chan string
|
|
LogsContent string
|
|
LogsMu sync.Mutex
|
|
}
|
|
|
|
func main() {
|
|
log("Starting application...")
|
|
program := NewProgram()
|
|
program.Run()
|
|
}
|
|
|
|
func NewProgram() *Program {
|
|
log("Initializing program...")
|
|
uOs := runtime.GOOS
|
|
log("RUNTIME: Detected OS - %v", uOs)
|
|
p := &Program{
|
|
App: app.New(),
|
|
LogsChannel: make(chan string, 100),
|
|
}
|
|
currentProgram = p
|
|
cfg := p.loadConfig()
|
|
cfg.Os = uOs
|
|
p.Config = cfg
|
|
p.buildRunString(cfg.ConferenceID, cfg.RoomPassword, cfg.EncryptionKey, cfg.SocksPort, cfg.DNS, cfg.Provider)
|
|
return p
|
|
}
|
|
|
|
func (p *Program) Run() {
|
|
log("Creating main window...")
|
|
w := p.App.NewWindow("OlcRTC")
|
|
w.CenterOnScreen()
|
|
w.Resize(fyne.NewSize(1280, 700))
|
|
w.SetOnClosed(p.olcrtcStop)
|
|
p.ParentWindow = w
|
|
|
|
settingsBtn := widget.NewButtonWithIcon("Settings", theme.SettingsIcon(), func() {
|
|
log("Settings button clicked")
|
|
p.settingsWindow()
|
|
})
|
|
|
|
p.RunCheck = widget.NewCheck("Run", func(b bool) {
|
|
if b {
|
|
log("Run enabled")
|
|
p.olcrtcRun()
|
|
} else {
|
|
log("Run disabled")
|
|
p.olcrtcStop()
|
|
}
|
|
})
|
|
|
|
// Create logs display area
|
|
p.LogsText = widget.NewLabel("")
|
|
p.LogsText.Wrapping = fyne.TextWrapWord
|
|
logsScroll := container.NewScroll(p.LogsText)
|
|
logsScroll.SetMinSize(fyne.NewSize(0, 300))
|
|
|
|
// Create styled logs box with darker background
|
|
bgRect := canvas.NewRectangle(color.NRGBA{R: 40, G: 40, B: 40, A: 255})
|
|
logsWithPadding := container.NewBorder(
|
|
widget.NewLabel("Logs"),
|
|
nil, nil, nil,
|
|
logsScroll,
|
|
)
|
|
logsBox := container.NewStack(
|
|
bgRect,
|
|
container.NewBorder(
|
|
nil, nil, nil, nil,
|
|
logsWithPadding,
|
|
),
|
|
)
|
|
|
|
topBar := container.NewBorder(
|
|
settingsBtn,
|
|
p.RunCheck, nil, nil,
|
|
)
|
|
|
|
mainContent := container.NewVBox(
|
|
topBar,
|
|
logsBox,
|
|
)
|
|
|
|
w.SetContent(mainContent)
|
|
|
|
go p.listenLogs()
|
|
|
|
log("Window created and running...")
|
|
w.ShowAndRun()
|
|
}
|
|
|
|
func (p *Program) listenLogs() {
|
|
for logMsg := range p.LogsChannel {
|
|
fyne.Do(func() {
|
|
if p.LogsText != nil {
|
|
p.LogsMu.Lock()
|
|
p.LogsContent += logMsg + "\n"
|
|
logsToDisplay := p.LogsContent
|
|
p.LogsMu.Unlock()
|
|
p.LogsText.SetText(logsToDisplay)
|
|
}
|
|
})
|
|
}
|
|
}
|