feat: Аккаунт › Вид - tab icons left, right or hidden, terminal font, compact file lists, the time column, animations; kept per user on the server. Uploads show a ring filling as they go
This commit is contained in:
1 parent
c003b51b4c
commit
5216aed237
10 files changed
+167
-3
No files matched your search
@@ -0,0 +1,62 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Each user's look of the panel (Аккаунт › Вид), kept on the server so it
|
||||
// is the same on every device: where a tab's icons go, the terminal's font
|
||||
// size, a compact file list, the time column, animations.
|
||||
type viewPrefs struct {
|
||||
TabIcons string `json:"tabIcons,omitempty"` // left (default), right, hide
|
||||
TermFont int `json:"termFont,omitempty"` // 11-20; 0: the default
|
||||
Compact bool `json:"compact,omitempty"` // denser file lists
|
||||
FileTime string `json:"fileTime,omitempty"` // show (default), hide
|
||||
Motion string `json:"motion,omitempty"` // on (default), off
|
||||
}
|
||||
|
||||
func prefsKey(id int64) string { return "prefs_" + strconv.FormatInt(id, 10) }
|
||||
|
||||
// clean keeps known values only.
|
||||
func (p viewPrefs) clean() viewPrefs {
|
||||
if p.TabIcons != "right" && p.TabIcons != "hide" {
|
||||
p.TabIcons = ""
|
||||
}
|
||||
if p.TermFont < 11 || p.TermFont > 20 {
|
||||
p.TermFont = 0
|
||||
}
|
||||
if p.FileTime != "hide" {
|
||||
p.FileTime = ""
|
||||
}
|
||||
if p.Motion != "off" {
|
||||
p.Motion = ""
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
func (s *Server) prefs(id int64) viewPrefs {
|
||||
var p viewPrefs
|
||||
if v, _ := s.db.GetConfig(prefsKey(id)); v != "" {
|
||||
_ = json.Unmarshal([]byte(v), &p)
|
||||
}
|
||||
return p.clean()
|
||||
}
|
||||
|
||||
// GET /api/panel/account/prefs
|
||||
func (s *Server) handlePrefs(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, s.prefs(s.currentAdmin(r).ID))
|
||||
}
|
||||
|
||||
// POST /api/panel/account/prefs - the whole set.
|
||||
func (s *Server) handlePrefsSet(w http.ResponseWriter, r *http.Request) {
|
||||
var p viewPrefs
|
||||
if err := json.NewDecoder(http.MaxBytesReader(w, r.Body, 4<<10)).Decode(&p); err != nil {
|
||||
writeJSON(w, map[string]any{"ok": false, "error": "плохой запрос"})
|
||||
return
|
||||
}
|
||||
b, _ := json.Marshal(p.clean())
|
||||
_ = s.db.SetConfig(prefsKey(s.currentAdmin(r).ID), string(b))
|
||||
writeJSON(w, map[string]any{"ok": true})
|
||||
}
|
||||
Reference in new issue
Block a user