mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2025-12-10 13:49:39 +05:00
preferences, some fixes, dependency changes
This commit is contained in:
116
lib/preferences/init.go
Normal file
116
lib/preferences/init.go
Normal file
@@ -0,0 +1,116 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
}
|
||||
}
|
||||
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")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user