mirror of
https://github.com/yusing/godoxy.git
synced 2025-07-21 20:04:03 +02:00
updated implementation of (un)hiding items
This commit is contained in:
parent
37a166731d
commit
b9882f8985
2 changed files with 49 additions and 12 deletions
|
@ -6,12 +6,14 @@ import (
|
||||||
|
|
||||||
"github.com/yusing/go-proxy/internal/homepage"
|
"github.com/yusing/go-proxy/internal/homepage"
|
||||||
"github.com/yusing/go-proxy/internal/utils"
|
"github.com/yusing/go-proxy/internal/utils"
|
||||||
|
"github.com/yusing/go-proxy/internal/utils/strutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
HomepageOverrideItem = "item"
|
HomepageOverrideItem = "item"
|
||||||
HomepageOverrideCategoryOrder = "category_order"
|
HomepageOverrideCategoryOrder = "category_order"
|
||||||
HomepageOverrideCategoryName = "category_name"
|
HomepageOverrideCategoryName = "category_name"
|
||||||
|
HomepageOverrideItemVisible = "item_visible"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetHomePageOverrides(w http.ResponseWriter, r *http.Request) {
|
func SetHomePageOverrides(w http.ResponseWriter, r *http.Request) {
|
||||||
|
@ -33,6 +35,13 @@ func SetHomePageOverrides(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
overrides.OverrideItem(which, &override)
|
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:
|
case HomepageOverrideCategoryName:
|
||||||
overrides.SetCategoryNameOverride(which, value)
|
overrides.SetCategoryNameOverride(which, value)
|
||||||
case HomepageOverrideCategoryOrder:
|
case HomepageOverrideCategoryOrder:
|
||||||
|
|
|
@ -10,11 +10,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type OverrideConfig struct {
|
type OverrideConfig struct {
|
||||||
ItemOverrides map[string]*ItemConfig `json:"item_overrides"`
|
ItemOverrides map[string]*ItemConfig `json:"item_overrides"`
|
||||||
DisplayOrder map[string]int `json:"display_order"` // TODO: implement this
|
DisplayOrder map[string]int `json:"display_order"` // TODO: implement this
|
||||||
CategoryName map[string]string `json:"category_name"`
|
CategoryName map[string]string `json:"category_name"`
|
||||||
CategoryOrder map[string]int `json:"category_order"` // TODO: implement this
|
CategoryOrder map[string]int `json:"category_order"` // TODO: implement this
|
||||||
mu sync.RWMutex
|
ItemVisibility map[string]bool `json:"item_visibility"`
|
||||||
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
var overrideConfigInstance *OverrideConfig
|
var overrideConfigInstance *OverrideConfig
|
||||||
|
@ -28,10 +29,11 @@ func must(b []byte, err error) []byte {
|
||||||
|
|
||||||
func InitOverridesConfig() {
|
func InitOverridesConfig() {
|
||||||
overrideConfigInstance = &OverrideConfig{
|
overrideConfigInstance = &OverrideConfig{
|
||||||
ItemOverrides: make(map[string]*ItemConfig),
|
ItemOverrides: make(map[string]*ItemConfig),
|
||||||
DisplayOrder: make(map[string]int),
|
DisplayOrder: make(map[string]int),
|
||||||
CategoryName: make(map[string]string),
|
CategoryName: make(map[string]string),
|
||||||
CategoryOrder: make(map[string]int),
|
CategoryOrder: make(map[string]int),
|
||||||
|
ItemVisibility: make(map[string]bool),
|
||||||
}
|
}
|
||||||
err := utils.LoadJSONIfExist(common.HomepageJSONConfigPath, overrideConfigInstance)
|
err := utils.LoadJSONIfExist(common.HomepageJSONConfigPath, overrideConfigInstance)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -64,6 +66,7 @@ func (c *OverrideConfig) OverrideItem(alias string, override *ItemConfig) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OverrideConfig) GetOverride(item *Item) *Item {
|
func (c *OverrideConfig) GetOverride(item *Item) *Item {
|
||||||
|
orig := item
|
||||||
c.mu.RLock()
|
c.mu.RLock()
|
||||||
defer c.mu.RUnlock()
|
defer c.mu.RUnlock()
|
||||||
itemOverride, ok := c.ItemOverrides[item.Alias]
|
itemOverride, ok := c.ItemOverrides[item.Alias]
|
||||||
|
@ -72,9 +75,8 @@ func (c *OverrideConfig) GetOverride(item *Item) *Item {
|
||||||
clone := *item
|
clone := *item
|
||||||
clone.Category = catOverride
|
clone.Category = catOverride
|
||||||
clone.IsUnset = false
|
clone.IsUnset = false
|
||||||
return &clone
|
item = &clone
|
||||||
}
|
}
|
||||||
return item
|
|
||||||
} else {
|
} else {
|
||||||
clone := *item
|
clone := *item
|
||||||
clone.ItemConfig = itemOverride
|
clone.ItemConfig = itemOverride
|
||||||
|
@ -82,8 +84,18 @@ func (c *OverrideConfig) GetOverride(item *Item) *Item {
|
||||||
if catOverride, ok := c.CategoryName[clone.Category]; ok {
|
if catOverride, ok := c.CategoryName[clone.Category]; ok {
|
||||||
clone.Category = catOverride
|
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) {
|
func (c *OverrideConfig) SetCategoryNameOverride(key, value string) {
|
||||||
|
@ -97,3 +109,19 @@ func (c *OverrideConfig) SetCategoryOrder(key string, value int) {
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
c.CategoryOrder[key] = value
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue