updated implementation of (un)hiding items

This commit is contained in:
yusing 2025-01-23 12:52:15 +08:00
parent 37a166731d
commit b9882f8985
2 changed files with 49 additions and 12 deletions

View file

@ -6,12 +6,14 @@ import (
"github.com/yusing/go-proxy/internal/homepage"
"github.com/yusing/go-proxy/internal/utils"
"github.com/yusing/go-proxy/internal/utils/strutils"
)
const (
HomepageOverrideItem = "item"
HomepageOverrideCategoryOrder = "category_order"
HomepageOverrideCategoryName = "category_name"
HomepageOverrideItemVisible = "item_visible"
)
func SetHomePageOverrides(w http.ResponseWriter, r *http.Request) {
@ -33,6 +35,13 @@ func SetHomePageOverrides(w http.ResponseWriter, r *http.Request) {
return
}
overrides.OverrideItem(which, &override)
case HomepageOverrideItemVisible: // POST /v1/item_visible [a,b,c], false => hide a, b, c
keys := strutils.CommaSeperatedList(which)
if strutils.ParseBool(value) {
overrides.UnhideItems(keys...)
} else {
overrides.HideItems(keys...)
}
case HomepageOverrideCategoryName:
overrides.SetCategoryNameOverride(which, value)
case HomepageOverrideCategoryOrder:

View file

@ -10,11 +10,12 @@ import (
)
type OverrideConfig struct {
ItemOverrides map[string]*ItemConfig `json:"item_overrides"`
DisplayOrder map[string]int `json:"display_order"` // TODO: implement this
CategoryName map[string]string `json:"category_name"`
CategoryOrder map[string]int `json:"category_order"` // TODO: implement this
mu sync.RWMutex
ItemOverrides map[string]*ItemConfig `json:"item_overrides"`
DisplayOrder map[string]int `json:"display_order"` // TODO: implement this
CategoryName map[string]string `json:"category_name"`
CategoryOrder map[string]int `json:"category_order"` // TODO: implement this
ItemVisibility map[string]bool `json:"item_visibility"`
mu sync.RWMutex
}
var overrideConfigInstance *OverrideConfig
@ -28,10 +29,11 @@ func must(b []byte, err error) []byte {
func InitOverridesConfig() {
overrideConfigInstance = &OverrideConfig{
ItemOverrides: make(map[string]*ItemConfig),
DisplayOrder: make(map[string]int),
CategoryName: make(map[string]string),
CategoryOrder: make(map[string]int),
ItemOverrides: make(map[string]*ItemConfig),
DisplayOrder: make(map[string]int),
CategoryName: make(map[string]string),
CategoryOrder: make(map[string]int),
ItemVisibility: make(map[string]bool),
}
err := utils.LoadJSONIfExist(common.HomepageJSONConfigPath, overrideConfigInstance)
if err != nil {
@ -64,6 +66,7 @@ func (c *OverrideConfig) OverrideItem(alias string, override *ItemConfig) {
}
func (c *OverrideConfig) GetOverride(item *Item) *Item {
orig := item
c.mu.RLock()
defer c.mu.RUnlock()
itemOverride, ok := c.ItemOverrides[item.Alias]
@ -72,9 +75,8 @@ func (c *OverrideConfig) GetOverride(item *Item) *Item {
clone := *item
clone.Category = catOverride
clone.IsUnset = false
return &clone
item = &clone
}
return item
} else {
clone := *item
clone.ItemConfig = itemOverride
@ -82,8 +84,18 @@ func (c *OverrideConfig) GetOverride(item *Item) *Item {
if catOverride, ok := c.CategoryName[clone.Category]; ok {
clone.Category = catOverride
}
return &clone
item = &clone
}
if show, ok := c.ItemVisibility[item.Alias]; ok {
if item == orig {
clone := *item
clone.Show = show
item = &clone
} else {
item.Show = show
}
}
return item
}
func (c *OverrideConfig) SetCategoryNameOverride(key, value string) {
@ -97,3 +109,19 @@ func (c *OverrideConfig) SetCategoryOrder(key string, value int) {
defer c.mu.Unlock()
c.CategoryOrder[key] = value
}
func (c *OverrideConfig) UnhideItems(keys ...string) {
c.mu.Lock()
defer c.mu.Unlock()
for _, key := range keys {
c.ItemVisibility[key] = true
}
}
func (c *OverrideConfig) HideItems(keys ...string) {
c.mu.Lock()
defer c.mu.Unlock()
for _, key := range keys {
c.ItemVisibility[key] = false
}
}