mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 12:42:34 +02:00

* chore: replace gopkg.in/yaml.v3 vs goccy/go-yaml; replace encoding/json with bytedance/sonic * fix: yaml unmarshal panic * feat: custom json marshaler implementation * chore: fix import and err marshal handling --------- Co-authored-by: yusing <yusing@6uo.me>
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package homepage
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/yusing/go-proxy/pkg/json"
|
|
|
|
config "github.com/yusing/go-proxy/internal/config/types"
|
|
"github.com/yusing/go-proxy/internal/utils"
|
|
)
|
|
|
|
type (
|
|
Homepage 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"`
|
|
}
|
|
|
|
Item struct {
|
|
*ItemConfig
|
|
|
|
Alias string
|
|
Provider string
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
utils.RegisterDefaultValueFactory(func() *ItemConfig {
|
|
return &ItemConfig{
|
|
Show: true,
|
|
}
|
|
})
|
|
}
|
|
|
|
func (cfg *ItemConfig) GetOverride(alias string) *ItemConfig {
|
|
return overrideConfigInstance.GetOverride(alias, cfg)
|
|
}
|
|
|
|
func (item *Item) MarshalJSONTo(buf []byte) []byte {
|
|
var url *string
|
|
if !strings.ContainsRune(item.Alias, '.') {
|
|
godoxyCfg := config.GetInstance().Value()
|
|
// use first domain as base domain
|
|
domains := godoxyCfg.MatchDomains
|
|
if len(domains) > 0 {
|
|
url = new(string)
|
|
*url = item.Alias + domains[0]
|
|
}
|
|
} else {
|
|
url = &item.Alias
|
|
}
|
|
return json.MarshalTo(map[string]any{
|
|
"show": item.Show,
|
|
"alias": item.Alias,
|
|
"provider": item.Provider,
|
|
"url": url,
|
|
"name": item.Name,
|
|
"icon": item.Icon,
|
|
"category": item.Category,
|
|
"description": item.Description,
|
|
"sort_order": item.SortOrder,
|
|
"widget_config": item.WidgetConfig,
|
|
}, buf)
|
|
}
|
|
|
|
func (c Homepage) Add(item *Item) {
|
|
if c[item.Category] == nil {
|
|
c[item.Category] = make(Category, 0)
|
|
}
|
|
c[item.Category] = append(c[item.Category], item)
|
|
}
|