mirror of
https://github.com/UnnoTed/wireguird
synced 2024-11-24 10:35:29 +00:00
7508f721d1
- Add settings window - Fix libappindicator3 dependency problem - Add support for multiple tunnels - Add tunnel name length check - Add wireguard error messages
155 lines
3.4 KiB
Go
Executable File
155 lines
3.4 KiB
Go
Executable File
//go:generate go run ./gui/get/generator/generator.go -target=./gui/get
|
|
//go:generate go run github.com/UnnoTed/fileb0x fileb0x.toml
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/UnnoTed/go-appindicator"
|
|
"github.com/UnnoTed/horizontal"
|
|
"github.com/UnnoTed/wireguird/gui"
|
|
"github.com/UnnoTed/wireguird/static"
|
|
"github.com/gotk3/gotk3/gdk"
|
|
"github.com/gotk3/gotk3/glib"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
var win *gtk.ApplicationWindow
|
|
|
|
func main() {
|
|
log.Logger = log.Output(horizontal.ConsoleWriter{Out: os.Stderr})
|
|
log.Info().Uint("major", gtk.GetMajorVersion()).Uint("minor", gtk.GetMinorVersion()).Uint("micro", gtk.GetMicroVersion()).Msg("GTK Version")
|
|
|
|
if err := gui.Settings.Load(); err != nil {
|
|
log.Error().Err(err).Msg("error initial settings load")
|
|
}
|
|
|
|
const appID = "com.wireguard.desktop"
|
|
application, err := gtk.ApplicationNew(appID, glib.APPLICATION_FLAGS_NONE)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("error creating application")
|
|
return
|
|
}
|
|
|
|
application.Connect("activate", func() {
|
|
if err := createWindow(application); err != nil {
|
|
log.Error().Err(err).Msg("create window error")
|
|
}
|
|
})
|
|
|
|
os.Exit(application.Run(os.Args))
|
|
}
|
|
|
|
func createTray(application *gtk.Application) (*appindicator.Indicator, error) {
|
|
menu, err := gtk.MenuNew()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
menuShow, err := gtk.MenuItemNewWithLabel("Show")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
menuQuit, err := gtk.MenuItemNewWithLabel("Quit")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
indicator := appindicator.New(application.GetApplicationID(), "wireguard_off", appindicator.CategoryApplicationStatus)
|
|
indicator.SetIconThemePath("/opt/wireguird/Icon")
|
|
indicator.SetTitle("Wireguird")
|
|
// indicator.SetLabel("Wireguird", "")
|
|
indicator.SetStatus(appindicator.StatusActive)
|
|
indicator.SetMenu(menu)
|
|
|
|
menuShow.Connect("activate", func() {
|
|
win.Show()
|
|
// createWindow(application)
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
menuQuit.Connect("activate", func() {
|
|
application.Quit()
|
|
})
|
|
|
|
menu.Add(menuShow)
|
|
menu.Add(menuQuit)
|
|
menu.ShowAll()
|
|
|
|
return indicator, nil
|
|
}
|
|
|
|
func createWindow(application *gtk.Application) error {
|
|
data, err := static.ReadFile("wireguird.glade")
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("cant read wireguird.glade")
|
|
return err
|
|
}
|
|
|
|
b, err := gtk.BuilderNew()
|
|
b.AddFromString(string(data))
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("error getting main glade file")
|
|
return err
|
|
}
|
|
|
|
wobj, err := b.GetObject("main_window")
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("error getting main_window")
|
|
return err
|
|
}
|
|
|
|
var ok bool
|
|
win, ok = wobj.(*gtk.ApplicationWindow)
|
|
if !ok {
|
|
panic("not window")
|
|
}
|
|
application.AddWindow(win)
|
|
|
|
win.Connect("destroy", func() {
|
|
gtk.MainQuit()
|
|
})
|
|
|
|
// win.SetDecorated(false)
|
|
|
|
css, err := gtk.CssProviderNew()
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("error creating css provider")
|
|
return err
|
|
}
|
|
|
|
css.LoadFromData(`
|
|
|
|
`)
|
|
// css.LoadFromPath("./style.css")
|
|
screen, err := gdk.ScreenGetDefault()
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("error getting screen")
|
|
return err
|
|
}
|
|
|
|
gtk.AddProviderForScreen(screen, css, 1)
|
|
|
|
indicator, err := createTray(application)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("create tray error")
|
|
}
|
|
|
|
if err := gui.Create(application, b, win, indicator); err != nil {
|
|
log.Error().Err(err).Msg("error gui setup")
|
|
return err
|
|
}
|
|
|
|
if !gui.Settings.StartOnTray {
|
|
win.ShowAll()
|
|
}
|
|
|
|
win.SetTitle("Wireguird")
|
|
|
|
return nil
|
|
}
|