mirror of
https://github.com/safing/portmaster
synced 2025-04-23 04:19:10 +00:00
* Move portbase into monorepo * Add new simple module mgr * [WIP] Switch to new simple module mgr * Add StateMgr and more worker variants * [WIP] Switch more modules * [WIP] Switch more modules * [WIP] swtich more modules * [WIP] switch all SPN modules * [WIP] switch all service modules * [WIP] Convert all workers to the new module system * [WIP] add new task system to module manager * [WIP] Add second take for scheduling workers * [WIP] Add FIXME for bugs in new scheduler * [WIP] Add minor improvements to scheduler * [WIP] Add new worker scheduler * [WIP] Fix more bug related to new module system * [WIP] Fix start handing of the new module system * [WIP] Improve startup process * [WIP] Fix minor issues * [WIP] Fix missing subsystem in settings * [WIP] Initialize managers in constructor * [WIP] Move module event initialization to constrictors * [WIP] Fix setting for enabling and disabling the SPN module * [WIP] Move API registeration into module construction * [WIP] Update states mgr for all modules * [WIP] Add CmdLine operation support * Add state helper methods to module group and instance * Add notification and module status handling to status package * Fix starting issues * Remove pilot widget and update security lock to new status data * Remove debug logs * Improve http server shutdown * Add workaround for cleanly shutting down firewall+netquery * Improve logging * Add syncing states with notifications for new module system * Improve starting, stopping, shutdown; resolve FIXMEs/TODOs * [WIP] Fix most unit tests * Review new module system and fix minor issues * Push shutdown and restart events again via API * Set sleep mode via interface * Update example/template module * [WIP] Fix spn/cabin unit test * Remove deprecated UI elements * Make log output more similar for the logging transition phase * Switch spn hub and observer cmds to new module system * Fix log sources * Make worker mgr less error prone * Fix tests and minor issues * Fix observation hub * Improve shutdown and restart handling * Split up big connection.go source file * Move varint and dsd packages to structures repo * Improve expansion test * Fix linter warnings * Fix interception module on windows * Fix linter errors --------- Co-authored-by: Vladimir Stoilov <vladimir@safing.io>
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package status
|
|
|
|
import (
|
|
"github.com/safing/portmaster/base/notifications"
|
|
"github.com/safing/portmaster/service/mgr"
|
|
)
|
|
|
|
func (s *Status) deriveNotificationsFromStateUpdate(update mgr.StateUpdate) {
|
|
s.notificationsLock.Lock()
|
|
defer s.notificationsLock.Unlock()
|
|
|
|
notifs := s.notifications[update.Module]
|
|
if notifs == nil {
|
|
notifs = make(map[string]*notifications.Notification)
|
|
s.notifications[update.Module] = notifs
|
|
}
|
|
|
|
// Add notifications.
|
|
seenStateIDs := make(map[string]struct{}, len(update.States))
|
|
for _, state := range update.States {
|
|
seenStateIDs[state.ID] = struct{}{}
|
|
|
|
// Check if we already have a notification registered.
|
|
if _, ok := notifs[state.ID]; ok {
|
|
continue
|
|
}
|
|
|
|
// Check if the notification was pre-created.
|
|
// If a matching notification is found, assign it.
|
|
n := notifications.Get(state.ID)
|
|
if n != nil {
|
|
notifs[state.ID] = n
|
|
continue
|
|
}
|
|
|
|
// Create a new notification.
|
|
n = ¬ifications.Notification{
|
|
EventID: state.ID,
|
|
Title: state.Name,
|
|
Message: state.Message,
|
|
AvailableActions: []*notifications.Action{
|
|
{
|
|
Text: "Get Help",
|
|
Type: notifications.ActionTypeOpenURL,
|
|
Payload: "https://safing.io/support/",
|
|
},
|
|
},
|
|
}
|
|
switch state.Type {
|
|
case mgr.StateTypeWarning:
|
|
n.Type = notifications.Warning
|
|
n.ShowOnSystem = true
|
|
case mgr.StateTypeError:
|
|
n.Type = notifications.Error
|
|
n.ShowOnSystem = true
|
|
case mgr.StateTypeHint, mgr.StateTypeUndefined:
|
|
fallthrough
|
|
default:
|
|
n.Type = notifications.Info
|
|
n.AvailableActions = nil
|
|
}
|
|
|
|
notifs[state.ID] = n
|
|
notifications.Notify(n)
|
|
}
|
|
|
|
// Remove notifications.
|
|
for stateID, n := range notifs {
|
|
if _, ok := seenStateIDs[stateID]; !ok {
|
|
n.Delete()
|
|
delete(notifs, stateID)
|
|
}
|
|
}
|
|
}
|