mirror of
https://github.com/safing/portmaster
synced 2025-09-02 18:49:14 +00:00
Add icon source
This commit is contained in:
parent
496016b810
commit
f7f64e6b46
4 changed files with 46 additions and 12 deletions
|
@ -35,8 +35,9 @@ func GetIconAndName(ctx context.Context, binPath string, homeDir string) (icon *
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Icon{
|
return &Icon{
|
||||||
Type: IconTypeAPI,
|
Type: IconTypeAPI,
|
||||||
Value: filename,
|
Value: filename,
|
||||||
|
Source: IconSourceCore,
|
||||||
}, name, nil
|
}, name, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,9 @@ import (
|
||||||
|
|
||||||
// Icon describes an icon.
|
// Icon describes an icon.
|
||||||
type Icon struct {
|
type Icon struct {
|
||||||
Type IconType
|
Type IconType
|
||||||
Value string
|
Value string
|
||||||
|
Source IconSource
|
||||||
}
|
}
|
||||||
|
|
||||||
// IconType describes the type of an Icon.
|
// IconType describes the type of an Icon.
|
||||||
|
@ -38,16 +39,46 @@ func (t IconType) sortOrder() int {
|
||||||
case IconTypeFile:
|
case IconTypeFile:
|
||||||
return 3
|
return 3
|
||||||
default:
|
default:
|
||||||
return 100
|
return 9
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IconSource describes the source of an Icon.
|
||||||
|
type IconSource string
|
||||||
|
|
||||||
|
// Supported icon sources.
|
||||||
|
const (
|
||||||
|
IconSourceUser IconSource = "user"
|
||||||
|
IconSourceImport IconSource = "import"
|
||||||
|
IconSourceUI IconSource = "ui"
|
||||||
|
IconSourceCore IconSource = "core"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s IconSource) sortOrder() int {
|
||||||
|
switch s {
|
||||||
|
case IconSourceUser:
|
||||||
|
return 10
|
||||||
|
case IconSourceImport:
|
||||||
|
return 20
|
||||||
|
case IconSourceUI:
|
||||||
|
return 30
|
||||||
|
case IconSourceCore:
|
||||||
|
return 40
|
||||||
|
default:
|
||||||
|
return 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (icon Icon) sortOrder() int {
|
||||||
|
return icon.Source.sortOrder() + icon.Type.sortOrder()
|
||||||
|
}
|
||||||
|
|
||||||
// SortAndCompactIcons sorts and compacts a list of icons.
|
// SortAndCompactIcons sorts and compacts a list of icons.
|
||||||
func SortAndCompactIcons(icons []Icon) []Icon {
|
func SortAndCompactIcons(icons []Icon) []Icon {
|
||||||
// Sort.
|
// Sort.
|
||||||
slices.SortFunc[[]Icon, Icon](icons, func(a, b Icon) int {
|
slices.SortFunc[[]Icon, Icon](icons, func(a, b Icon) int {
|
||||||
aOrder := a.Type.sortOrder()
|
aOrder := a.sortOrder()
|
||||||
bOrder := b.Type.sortOrder()
|
bOrder := b.sortOrder()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case aOrder != bOrder:
|
case aOrder != bOrder:
|
||||||
|
@ -68,7 +99,7 @@ func SortAndCompactIcons(icons []Icon) []Icon {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetIconAsDataURL returns the icon data as a data URL.
|
// GetIconAsDataURL returns the icon data as a data URL.
|
||||||
func (icon *Icon) GetIconAsDataURL() (bloburl string, err error) {
|
func (icon Icon) GetIconAsDataURL() (bloburl string, err error) {
|
||||||
switch icon.Type {
|
switch icon.Type {
|
||||||
case IconTypeFile:
|
case IconTypeFile:
|
||||||
return "", errors.New("getting icon from file is not supported")
|
return "", errors.New("getting icon from file is not supported")
|
||||||
|
|
|
@ -92,8 +92,9 @@ func LoadAndSaveIcon(ctx context.Context, iconPath string) (*Icon, error) {
|
||||||
return nil, fmt.Errorf("failed to import icon %s: %w", iconPath, err)
|
return nil, fmt.Errorf("failed to import icon %s: %w", iconPath, err)
|
||||||
}
|
}
|
||||||
return &Icon{
|
return &Icon{
|
||||||
Type: IconTypeAPI,
|
Type: IconTypeAPI,
|
||||||
Value: filename,
|
Value: filename,
|
||||||
|
Source: IconSourceCore,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -420,8 +420,9 @@ func ImportProfile(r *ProfileImportRequest, requiredProfileSource profile.Profil
|
||||||
return nil, fmt.Errorf("%w: icon is invalid: %w", ErrImportFailed, err)
|
return nil, fmt.Errorf("%w: icon is invalid: %w", ErrImportFailed, err)
|
||||||
}
|
}
|
||||||
p.Icons = []binmeta.Icon{{
|
p.Icons = []binmeta.Icon{{
|
||||||
Type: binmeta.IconTypeAPI,
|
Type: binmeta.IconTypeAPI,
|
||||||
Value: filename,
|
Value: filename,
|
||||||
|
Source: binmeta.IconSourceImport,
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue