Skip to content
Snippets Groups Projects
Verified Commit fa08af46 authored by meskio's avatar meskio :tent:
Browse files

[feat] autostart the standalone systray if the vpn was on

- Resolves: #8
parent 2ac0be0c
No related branches found
No related tags found
No related merge requests found
package main
type autostart interface {
Disable() error
Enable() error
}
type dummyAutostart struct{}
func (a *dummyAutostart) Disable() error {
return nil
}
func (a *dummyAutostart) Enable() error {
return nil
}
......@@ -24,3 +24,7 @@ import (
func initBitmask() (bitmask.Bitmask, error) {
return bitmaskd.Init()
}
func newAutostart(appName string, iconPath string) autostart {
return &dummyAutostart{}
}
......@@ -81,7 +81,12 @@ func main() {
defer b.Close()
go checkAndStartBitmask(b, notify, conf)
run(b, conf, notify)
as := newAutostart(applicationName, getIconPath())
err = as.Enable()
if err != nil {
log.Printf("Error enabling autostart: %v", err)
}
run(b, conf, notify, as)
}
func checkAndStartBitmask(b bitmask.Bitmask, notify *notificator, conf *systrayConfig) {
......
......@@ -18,6 +18,7 @@ package main
import (
"os"
"path"
"runtime"
"time"
"0xacab.org/leap/go-dialog"
......@@ -58,7 +59,7 @@ func (n *notificator) donations() {
if n.conf.needsNotification() {
letsDonate := dialog.Message(printer.Sprintf(donationText, applicationName)).
Title(printer.Sprintf("Donate")).
Icon(getSVGPath()).
Icon(getIconPath()).
YesNo()
n.conf.setNotification()
if letsDonate {
......@@ -72,32 +73,61 @@ func (n *notificator) donations() {
func (n *notificator) about(version string) {
dialog.Message(printer.Sprintf(aboutText, applicationName, version)).
Title(printer.Sprintf("About")).
Icon(getSVGPath()).
Icon(getIconPath()).
Info()
}
func (n *notificator) bitmaskNotRunning() {
dialog.Message(printer.Sprintf(notRunning)).
Title(printer.Sprintf("Can't contact bitmask")).
Icon(getSVGPath()).
Icon(getIconPath()).
Error()
}
func (n *notificator) authAgent() {
dialog.Message(printer.Sprintf(missingAuthAgent)).
Title(printer.Sprintf("Missing authentication agent")).
Icon(getSVGPath()).
Icon(getIconPath()).
Error()
}
func (n *notificator) errorStartingVPN(err error) {
dialog.Message(printer.Sprintf(errorStartingVPN, applicationName, err)).
Title(printer.Sprintf("Error starting VPN")).
Icon(getSVGPath()).
Icon(getIconPath()).
Error()
}
func getSVGPath() string {
func getIconPath() string {
gopath := os.Getenv("GOPATH")
if gopath == "" {
gopath = path.Join(os.Getenv("HOME"), "go")
}
if runtime.GOOS == "windows" {
icoPath := `C:\Program Files\RiseupVPN\riseupvpn.ico`
if fileExist(icoPath) {
return icoPath
}
icoPath = path.Join(gopath, "src", "0xacab.org", "leap", "riseup_vpn", "assets", "riseupvpn.ico")
if fileExist(icoPath) {
return icoPath
}
return ""
}
if runtime.GOOS == "darwin" {
icnsPath := "/Applications/RiseupVPN.app/Contents/Resources/app.icns"
if fileExist(icnsPath) {
return icnsPath
}
icnsPath = path.Join(gopath, "src", "0xacab.org", "leap", "riseup_vpn", "assets", "riseupvpn.icns")
if fileExist(icnsPath) {
return icnsPath
}
return ""
}
snapPath := os.Getenv("SNAP")
if snapPath != "" {
return snapPath + "/snap/gui/riseupvpn.svg"
......@@ -114,10 +144,6 @@ func getSVGPath() string {
return svgPath
}
gopath := os.Getenv("GOPATH")
if gopath == "" {
gopath = path.Join(os.Getenv("HOME"), "go")
}
svgPath = path.Join(gopath, "src", "0xacab.org", "leap", "bitmask-systray", svgFileName)
if fileExist(svgPath) {
return svgPath
......
......@@ -17,10 +17,22 @@
package main
import (
"os"
"0xacab.org/leap/bitmask-systray/bitmask"
standalone "0xacab.org/leap/bitmask-systray/standalone"
pmautostart "github.com/ProtonMail/go-autostart"
)
func initBitmask() (bitmask.Bitmask, error) {
return standalone.Init()
}
func newAutostart(appName string, iconPath string) autostart {
return &pmautostart.App{
Name: appName,
Exec: os.Args,
DisplayName: appName,
Icon: iconPath,
}
}
......@@ -39,6 +39,7 @@ type bmTray struct {
mDonate *systray.MenuItem
mCancel *systray.MenuItem
activeGateway *gatewayTray
autostart autostart
}
type gatewayTray struct {
......@@ -46,8 +47,8 @@ type gatewayTray struct {
name string
}
func run(bm bitmask.Bitmask, conf *systrayConfig, notify *notificator) {
bt := bmTray{bm: bm, conf: conf, notify: notify}
func run(bm bitmask.Bitmask, conf *systrayConfig, notify *notificator, as autostart) {
bt := bmTray{bm: bm, conf: conf, notify: notify, autostart: as}
systray.Run(bt.onReady, bt.onExit)
}
......@@ -131,6 +132,10 @@ func (bt *bmTray) onReady() {
bt.notify.about(versionStr)
case <-mQuit.ClickedCh:
err := bt.autostart.Disable()
if err != nil {
log.Printf("Error disabling autostart: %v", err)
}
systray.Quit()
case <-signalCh:
systray.Quit()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment