mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2025-12-10 21:59:38 +05:00
128 lines
2.5 KiB
Go
128 lines
2.5 KiB
Go
package preferences
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/maid-zone/soundcloak/lib/cfg"
|
|
"github.com/maid-zone/soundcloak/templates"
|
|
)
|
|
|
|
func Defaults(dst *cfg.Preferences) {
|
|
if dst.Player == nil {
|
|
dst.Player = cfg.DefaultPreferences.Player
|
|
}
|
|
|
|
if dst.ProxyStreams == nil {
|
|
dst.ProxyStreams = cfg.DefaultPreferences.ProxyStreams
|
|
}
|
|
|
|
if dst.FullyPreloadTrack == nil {
|
|
dst.FullyPreloadTrack = cfg.DefaultPreferences.FullyPreloadTrack
|
|
}
|
|
|
|
if dst.ProxyImages == nil {
|
|
dst.ProxyImages = cfg.DefaultPreferences.ProxyImages
|
|
}
|
|
|
|
if dst.ParseDescriptions == nil {
|
|
dst.ParseDescriptions = cfg.DefaultPreferences.ParseDescriptions
|
|
}
|
|
}
|
|
|
|
func Get(c *fiber.Ctx) (cfg.Preferences, error) {
|
|
rawprefs := c.Cookies("prefs", "{}")
|
|
var p cfg.Preferences
|
|
|
|
err := json.Unmarshal([]byte(rawprefs), &p)
|
|
if err != nil {
|
|
return p, err
|
|
}
|
|
Defaults(&p)
|
|
|
|
return p, err
|
|
}
|
|
|
|
type PrefsForm struct {
|
|
ProxyImages string
|
|
ParseDescriptions string
|
|
Player string
|
|
ProxyStreams string
|
|
FullyPreloadTrack string
|
|
}
|
|
|
|
func Load(r fiber.Router) {
|
|
r.Get("/_/preferences", func(c *fiber.Ctx) error {
|
|
p, err := Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
c.Set("Content-Type", "text/html")
|
|
return templates.Base("preferences", templates.Preferences(p), nil).Render(context.Background(), c)
|
|
})
|
|
|
|
r.Post("/_/preferences", func(c *fiber.Ctx) error {
|
|
var p PrefsForm
|
|
err := c.BodyParser(&p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
old, err := Get(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var f bool
|
|
var t bool = true
|
|
if *old.Player == "hls" {
|
|
if cfg.ProxyStreams {
|
|
if p.ProxyStreams == "on" {
|
|
old.ProxyStreams = &cfg.ProxyStreams // true!
|
|
} else if p.ProxyStreams == "" {
|
|
old.ProxyStreams = &f
|
|
}
|
|
}
|
|
|
|
if p.FullyPreloadTrack == "on" {
|
|
old.FullyPreloadTrack = &t
|
|
} else if p.FullyPreloadTrack == "" {
|
|
old.FullyPreloadTrack = &f
|
|
}
|
|
}
|
|
|
|
if cfg.ProxyImages {
|
|
if p.ProxyImages == "on" {
|
|
old.ProxyImages = &cfg.ProxyImages // true!
|
|
} else if p.ProxyImages == "" {
|
|
old.ProxyImages = &f
|
|
}
|
|
}
|
|
|
|
if p.ParseDescriptions == "on" {
|
|
old.ParseDescriptions = &t
|
|
} else {
|
|
old.ParseDescriptions = &f
|
|
}
|
|
old.Player = &p.Player
|
|
|
|
data, err := json.Marshal(old)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
c.Cookie(&fiber.Cookie{
|
|
Name: "prefs",
|
|
Value: string(data),
|
|
Expires: time.Now().Add(400 * 24 * time.Hour),
|
|
HTTPOnly: true,
|
|
SameSite: "strict",
|
|
})
|
|
|
|
return c.Redirect("/_/preferences")
|
|
})
|
|
}
|