GoDoxy/internal/homepage/homepage.go

72 lines
1.5 KiB
Go

package homepage
import (
"github.com/yusing/go-proxy/internal/utils"
)
type (
//nolint:recvcheck
Categories map[string]Category
Category []*Item
ItemConfig struct {
Show bool `json:"show"`
Name string `json:"name"` // display name
Icon *IconURL `json:"icon"`
Category string `json:"category"`
Description string `json:"description" aliases:"desc"`
SortOrder int `json:"sort_order"`
WidgetConfig map[string]any `json:"widget_config" aliases:"widget"`
URL string `json:"url"` // alias + domain
}
Item struct {
*ItemConfig
Alias string `json:"alias"` // proxy alias
Provider string `json:"provider"`
IsUnset bool `json:"-"`
}
)
func init() {
utils.RegisterDefaultValueFactory(func() *ItemConfig {
return &ItemConfig{
Show: true,
}
})
}
func NewItem(alias string) *Item {
return &Item{
ItemConfig: &ItemConfig{
Show: true,
},
Alias: alias,
IsUnset: true,
}
}
func NewHomePageConfig() Categories {
return Categories(make(map[string]Category))
}
func (item *Item) IsEmpty() bool {
return item == nil || item.IsUnset || item.ItemConfig == nil
}
func (item *Item) ApplyOverride() *Item {
return overrideConfigInstance.ApplyOverride(item)
}
func (c *Categories) Clear() {
*c = make(Categories)
}
func (c Categories) Add(item *Item) {
if c[item.Category] == nil {
c[item.Category] = make(Category, 0)
}
c[item.Category] = append(c[item.Category], item)
}