Compare commits

..

No commits in common. "master" and "1" have entirely different histories.
master ... 1

View file

@ -1,145 +1,123 @@
package threenis package threenis
import ( import (
"log" "log"
"os/exec" "os/exec"
"strings" "strings"
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
"fyne.io/fyne/v2/app" "fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container" "fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
"layeh.com/gumble/gumble" "layeh.com/gumble/gumble"
"layeh.com/gumble/gumbleffmpeg" "layeh.com/gumble/gumbleffmpeg"
"layeh.com/gumble/gumbleutil" "layeh.com/gumble/gumbleutil"
_ "layeh.com/gumble/opus" _ "layeh.com/gumble/opus"
) )
type Threenis struct { type Threenis struct {
stream *gumbleffmpeg.Stream stream *gumbleffmpeg.Stream
process *exec.Cmd process *exec.Cmd
} }
type SourceStream string type SourceStream string
func ThreenisSource(filename string) gumbleffmpeg.Source { func ThreenisSource(filename string) gumbleffmpeg.Source {
return SourceStream(filename) return SourceStream(filename)
} }
func (s SourceStream) Arguments() []string { func (s SourceStream) Arguments() []string {
return []string{"-fflags", "nobuffer", "-flags", "low_delay", "-f", "s16le", "-ac", "2", "-i", "udp://127.0.0.1:2888"} return []string{"-fflags", "nobuffer", "-flags", "low_delay", "-f", "s16le", "-ac", "2", "-i", "udp://127.0.0.1:2888"}
} }
func (SourceStream) Start(*exec.Cmd) error { func (SourceStream) Start(*exec.Cmd) error {
return nil return nil
} }
func (SourceStream) Done() { func (SourceStream) Done() {
} }
func (t *Threenis) Mumble(server string, username string, password string, channel string) { func (t *Threenis) Mumble(server string, username string, password string, channel string) {
MumbleClient(server, username, password, gumbleutil.AutoBitrate, gumbleutil.Listener{ MumbleClient(server, username, password, gumbleutil.AutoBitrate, gumbleutil.Listener{
Connect: func(e *gumble.ConnectEvent) { Connect: func(e *gumble.ConnectEvent) {
c := e.Client.Channels.Find(channel) c := e.Client.Channels.Find(channel)
if c != nil { if c != nil {
e.Client.Self.Move(c) e.Client.Self.Move(c)
} }
t.stream = gumbleffmpeg.New(e.Client, ThreenisSource("")) t.stream = gumbleffmpeg.New(e.Client, ThreenisSource(""))
if err := t.stream.Play(); err != nil { if err := t.stream.Play(); err != nil {
log.Println(err) log.Println(err)
} }
}, },
}) })
} }
func Ui() { func Ui() {
threenisApp := app.NewWithID("threenis") myApp := app.New()
window := threenisApp.NewWindow("Threenis") myWindow := myApp.NewWindow("Threenis")
window.Resize(fyne.NewSize(800, 400)) myWindow.Resize(fyne.NewSize(800, 400))
myWindow.SetFixedSize(true)
processes := GetProcessStrings()
threenis := Threenis{} processes := GetProcessStrings()
threenis := Threenis{}
defer func() {
threenis.stream.Stop() defer func() {
if threenis.process != nil && threenis.process.Process != nil { threenis.stream.Stop()
threenis.process.Process.Kill() if threenis.process != nil && threenis.process.Process != nil {
} threenis.process.Process.Kill()
}() }
}()
list := widget.NewList(
func() int { list := widget.NewList(
return len(processes) func() int {
}, return len(processes)
func() fyne.CanvasObject { },
return widget.NewLabel("template") func() fyne.CanvasObject {
}, return widget.NewLabel("template")
func(i widget.ListItemID, o fyne.CanvasObject) { },
o.(*widget.Label).SetText(processes[i]) func(i widget.ListItemID, o fyne.CanvasObject) {
}) o.(*widget.Label).SetText(processes[i])
})
list.OnSelected = func(id widget.ListItemID) {
if threenis.process != nil && threenis.process.Process != nil { list.OnSelected = func(id widget.ListItemID) {
threenis.process.Process.Kill() if threenis.process != nil && threenis.process.Process != nil {
} threenis.process.Process.Kill()
threenis.process = exec.Command("./ApplicationLoopback.exe", strings.Split(processes[id], " - ")[0], "includetree") }
log.Println(strings.Split(processes[id], " - ")[0]) threenis.process = exec.Command("./ApplicationLoopback.exe", strings.Split(processes[id], " - ")[0], "includetree")
err := threenis.process.Start() log.Println(strings.Split(processes[id], " - ")[0])
if err != nil { err := threenis.process.Start()
log.Println(err) if err != nil {
} log.Println(err)
}
}
}
serverLabel := widget.NewLabel("Server")
server := widget.NewEntry() serverLabel := widget.NewLabel("Server")
server.SetText(threenisApp.Preferences().StringWithFallback("server", "")) server := widget.NewEntry()
usernameLabel := widget.NewLabel("Username") usernameLabel := widget.NewLabel("Username")
username := widget.NewEntry() username := widget.NewEntry()
username.SetText(threenisApp.Preferences().StringWithFallback("username", "")) passwordLabel := widget.NewLabel("Password")
password := widget.NewEntry()
passwordLabel := widget.NewLabel("Password")
password := widget.NewEntry() channelLabel := widget.NewLabel("Channel")
password.SetText(threenisApp.Preferences().StringWithFallback("password", "")) channel := widget.NewEntry()
channelLabel := widget.NewLabel("Channel") refresh := widget.NewButton("Refresh", func() {
channel := widget.NewEntry() processes = GetProcessStrings()
channel.SetText(threenisApp.Preferences().StringWithFallback("channel", "")) list.Refresh()
})
refresh := widget.NewButton("Refresh", func() {
processes = GetProcessStrings() connect := widget.NewButton("Connect", func() {
list.Refresh() go threenis.Mumble(server.Text, username.Text, password.Text, channel.Text)
}) })
connect := widget.NewButton("Connect", func() { form := container.New(layout.NewFormLayout(), serverLabel, server, usernameLabel, username, passwordLabel, password, channelLabel, channel, refresh, connect)
threenisApp.Preferences().SetString("server", server.Text)
threenisApp.Preferences().SetString("username", username.Text) grid := container.New(layout.NewGridLayout(2), list, form)
threenisApp.Preferences().SetString("password", password.Text)
threenisApp.Preferences().SetString("channel", channel.Text) myWindow.SetContent(grid)
go threenis.Mumble(server.Text, username.Text, password.Text, channel.Text) myWindow.ShowAndRun()
}) }
search := widget.NewEntry()
search.OnChanged = func(s string) {
procs := GetProcessStrings()
processes = make([]string, 0)
for _, proc := range procs {
if strings.Contains(strings.ToLower(proc), strings.ToLower(s)) {
processes = append(processes, proc)
}
}
list.Refresh()
}
content := container.NewBorder(nil, search, nil, nil, list)
form := container.New(layout.NewFormLayout(), serverLabel, server, usernameLabel, username, passwordLabel, password, channelLabel, channel, refresh, connect)
grid := container.New(layout.NewGridLayout(2), content, form)
window.SetContent(grid)
window.ShowAndRun()
}