mirror of
https://github.com/safing/portbase
synced 2025-09-03 19:20:20 +00:00
Add SettablePerAppAnnotation
This commit is contained in:
parent
ef9e112d8b
commit
e3840f765e
1 changed files with 22 additions and 3 deletions
|
@ -3,6 +3,7 @@ package config
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
@ -108,11 +109,13 @@ const (
|
||||||
// requirement. The type of RequiresAnnotation is []ValueRequirement
|
// requirement. The type of RequiresAnnotation is []ValueRequirement
|
||||||
// or ValueRequirement.
|
// or ValueRequirement.
|
||||||
RequiresAnnotation = "safing/portbase:config:requires"
|
RequiresAnnotation = "safing/portbase:config:requires"
|
||||||
// RequiresFeaturePlan can be used to mark a setting as only available
|
// RequiresFeatureIDAnnotation can be used to mark a setting as only available
|
||||||
// when the user has a certain feature ID in the subscription plan.
|
// when the user has a certain feature ID in the subscription plan.
|
||||||
// The type is []string or string.
|
// The type is []string or string.
|
||||||
RequiresFeatureID = "safing/portmaster:ui:config:requires-feature"
|
RequiresFeatureIDAnnotation = "safing/portmaster:ui:config:requires-feature"
|
||||||
|
// SettablePerAppAnnotation can be used to mark a setting as settable per-app and
|
||||||
|
// is a boolean.
|
||||||
|
SettablePerAppAnnotation = "safing/portmaster:settable-per-app"
|
||||||
// RequiresUIReloadAnnotation can be used to inform the UI that changing the value
|
// RequiresUIReloadAnnotation can be used to inform the UI that changing the value
|
||||||
// of the annotated setting requires a full reload of the user interface.
|
// of the annotated setting requires a full reload of the user interface.
|
||||||
// The value of this annotation does not matter as the sole presence of
|
// The value of this annotation does not matter as the sole presence of
|
||||||
|
@ -308,6 +311,22 @@ func (option *Option) GetAnnotation(key string) (interface{}, bool) {
|
||||||
return val, ok
|
return val, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AnnotationEquals returns whether the annotation of the given key matches the
|
||||||
|
// given value.
|
||||||
|
func (option *Option) AnnotationEquals(key string, value any) bool {
|
||||||
|
option.Lock()
|
||||||
|
defer option.Unlock()
|
||||||
|
|
||||||
|
if option.Annotations == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
setValue, ok := option.Annotations[key]
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return reflect.DeepEqual(value, setValue)
|
||||||
|
}
|
||||||
|
|
||||||
// copyOrNil returns a copy of the option, or nil if copying failed.
|
// copyOrNil returns a copy of the option, or nil if copying failed.
|
||||||
func (option *Option) copyOrNil() *Option {
|
func (option *Option) copyOrNil() *Option {
|
||||||
copied, err := copystructure.Copy(option)
|
copied, err := copystructure.Copy(option)
|
||||||
|
|
Loading…
Add table
Reference in a new issue