Merge pull request from safing/feature/icon-source

Add icon source
This commit is contained in:
Patrick Pacher 2024-03-06 11:36:12 +01:00 committed by GitHub
commit 9d78d6a560
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 46 additions and 12 deletions

View file

@ -35,8 +35,9 @@ func GetIconAndName(ctx context.Context, binPath string, homeDir string) (icon *
}
return &Icon{
Type: IconTypeAPI,
Value: filename,
Type: IconTypeAPI,
Value: filename,
Source: IconSourceCore,
}, name, nil
}

View file

@ -15,8 +15,9 @@ import (
// Icon describes an icon.
type Icon struct {
Type IconType
Value string
Type IconType
Value string
Source IconSource
}
// IconType describes the type of an Icon.
@ -38,16 +39,46 @@ func (t IconType) sortOrder() int {
case IconTypeFile:
return 3
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.
func SortAndCompactIcons(icons []Icon) []Icon {
// Sort.
slices.SortFunc[[]Icon, Icon](icons, func(a, b Icon) int {
aOrder := a.Type.sortOrder()
bOrder := b.Type.sortOrder()
aOrder := a.sortOrder()
bOrder := b.sortOrder()
switch {
case aOrder != bOrder:
@ -68,7 +99,7 @@ func SortAndCompactIcons(icons []Icon) []Icon {
}
// 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 {
case IconTypeFile:
return "", errors.New("getting icon from file is not supported")

View file

@ -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 &Icon{
Type: IconTypeAPI,
Value: filename,
Type: IconTypeAPI,
Value: filename,
Source: IconSourceCore,
}, nil
}

View file

@ -420,8 +420,9 @@ func ImportProfile(r *ProfileImportRequest, requiredProfileSource profile.Profil
return nil, fmt.Errorf("%w: icon is invalid: %w", ErrImportFailed, err)
}
p.Icons = []binmeta.Icon{{
Type: binmeta.IconTypeAPI,
Value: filename,
Type: binmeta.IconTypeAPI,
Value: filename,
Source: binmeta.IconSourceImport,
}}
}