40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package server
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"ddc/internal/preferences"
|
|
)
|
|
|
|
type settingsResponse struct {
|
|
Settings preferences.Preferences `json:"settings"`
|
|
DownloadDir string `json:"downloadDir"`
|
|
LibraryRoots []string `json:"libraryRoots"`
|
|
}
|
|
|
|
func (server *Server) handleGetSettings(writer http.ResponseWriter, _ *http.Request) {
|
|
writeJSON(writer, http.StatusOK, server.settingsSnapshot())
|
|
}
|
|
|
|
func (server *Server) handleUpdateSettings(writer http.ResponseWriter, request *http.Request) {
|
|
var body preferences.Preferences
|
|
if !decodeBody(writer, request, &body) {
|
|
return
|
|
}
|
|
if err := server.manager.UpdatePreferences(body); err != nil {
|
|
writeFailure(writer, request, err)
|
|
return
|
|
}
|
|
slog.Info("settings updated", "request_id", requestIDFrom(request))
|
|
writeJSON(writer, http.StatusOK, server.settingsSnapshot())
|
|
}
|
|
|
|
func (server *Server) settingsSnapshot() settingsResponse {
|
|
return settingsResponse{
|
|
Settings: server.manager.Preferences(),
|
|
DownloadDir: server.settings.DownloadDir,
|
|
LibraryRoots: server.settings.LibraryRoots,
|
|
}
|
|
}
|