mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-05 00:53:58 -04:00
* Open quick settings window if netbird-ui is already running * [client-ui] fix connection status comparison * [client-ui] modularize quick actions code * [client-ui] add netbird-disconnected logo * [client-ui] change quickactions UI It now displays the NetBird logo and a single button with a round icon * [client-ui] add hint message to quick actions screen This also updates fyne to v2.7.0 * [client-ui] remove unnecessary default clause * [client-ui] remove commented code * [client-ui] remove unused dependency * [client-ui] close quick actions on connection change * [client-ui] add function to get image from embed resources * [client] Return error when calling sendShowWindowSignal from Windows * [client-ui] Add commentary on empty OnTapped function for toggleConnectionButton * [client-ui] Fix tests * [client-ui] Add context to menuUpClick call * [client-ui] Pass serviceClient app as parameter To use its clipboard rather than the window's when showing the upload success dialog * [client-ui] Replace for select with for range chan * [client-ui] Replace settings change listener channel Settings now accept a function callback * [client-ui] Add missing iconAboutDisconnected to icons_windows.go * [client] Add quick actions signal handler for Windows with named events * [client] Run go mod tidy * [client] Remove line break * [client] Log unexpected status in separate function * [client-ui] Refactor quick actions window To address racing conditions, it also replaces usage of pause and resume channels with an atomic bool. * [client-ui] use derived context from ServiceClient * [client] Update signal_windows log message Also, format error when trying to set event on sendShowWindowSignal * go mod tidy * [client-ui] Add struct to pass fewer parameters to applyQuickActionsUiState function * [client] Add missing import --------- Co-authored-by: Viktor Liu <viktor@netbird.io>
77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
//go:build !windows && !(linux && 386)
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// setupSignalHandler sets up a signal handler to listen for SIGUSR1.
|
|
// When received, it opens the quick actions window.
|
|
func (s *serviceClient) setupSignalHandler(ctx context.Context) {
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, syscall.SIGUSR1)
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case <-sigChan:
|
|
log.Info("received SIGUSR1 signal, opening quick actions window")
|
|
s.openQuickActions()
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
// openQuickActions opens the quick actions window by spawning a new process.
|
|
func (s *serviceClient) openQuickActions() {
|
|
proc, err := os.Executable()
|
|
if err != nil {
|
|
log.Errorf("get executable path: %v", err)
|
|
return
|
|
}
|
|
|
|
cmd := exec.CommandContext(s.ctx, proc,
|
|
"--quick-actions=true",
|
|
"--daemon-addr="+s.addr,
|
|
)
|
|
|
|
if out := s.attachOutput(cmd); out != nil {
|
|
defer func() {
|
|
if err := out.Close(); err != nil {
|
|
log.Errorf("close log file %s: %v", s.logFile, err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
log.Infof("running command: %s --quick-actions=true --daemon-addr=%s", proc, s.addr)
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
log.Errorf("start quick actions window: %v", err)
|
|
return
|
|
}
|
|
|
|
go func() {
|
|
if err := cmd.Wait(); err != nil {
|
|
log.Debugf("quick actions window exited: %v", err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
// sendShowWindowSignal sends SIGUSR1 to the specified PID.
|
|
func sendShowWindowSignal(pid int32) error {
|
|
process, err := os.FindProcess(int(pid))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return process.Signal(syscall.SIGUSR1)
|
|
}
|