feat: support multiple terminal fonts (#17257)

Fixes: https://github.com/coder/coder/issues/15024
This commit is contained in:
Marcin Tojek
2025-04-07 14:30:10 +02:00
committed by GitHub
parent 30f41cdd42
commit 743d308eb3
29 changed files with 815 additions and 230 deletions

View File

@ -189,12 +189,25 @@ type ValidateUserPasswordResponse struct {
Details string `json:"details"`
}
// TerminalFontName is the name of supported terminal font
type TerminalFontName string
var TerminalFontNames = []TerminalFontName{TerminalFontUnknown, TerminalFontIBMPlexMono, TerminalFontFiraCode}
const (
TerminalFontUnknown TerminalFontName = ""
TerminalFontIBMPlexMono TerminalFontName = "ibm-plex-mono"
TerminalFontFiraCode TerminalFontName = "fira-code"
)
type UserAppearanceSettings struct {
ThemePreference string `json:"theme_preference"`
ThemePreference string `json:"theme_preference"`
TerminalFont TerminalFontName `json:"terminal_font"`
}
type UpdateUserAppearanceSettingsRequest struct {
ThemePreference string `json:"theme_preference" validate:"required"`
ThemePreference string `json:"theme_preference" validate:"required"`
TerminalFont TerminalFontName `json:"terminal_font" validate:"required"`
}
type UpdateUserPasswordRequest struct {
@ -466,17 +479,31 @@ func (c *Client) UpdateUserStatus(ctx context.Context, user string, status UserS
return resp, json.NewDecoder(res.Body).Decode(&resp)
}
// UpdateUserAppearanceSettings updates the appearance settings for a user.
func (c *Client) UpdateUserAppearanceSettings(ctx context.Context, user string, req UpdateUserAppearanceSettingsRequest) (User, error) {
res, err := c.Request(ctx, http.MethodPut, fmt.Sprintf("/api/v2/users/%s/appearance", user), req)
// GetUserAppearanceSettings fetches the appearance settings for a user.
func (c *Client) GetUserAppearanceSettings(ctx context.Context, user string) (UserAppearanceSettings, error) {
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/users/%s/appearance", user), nil)
if err != nil {
return User{}, err
return UserAppearanceSettings{}, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return User{}, ReadBodyAsError(res)
return UserAppearanceSettings{}, ReadBodyAsError(res)
}
var resp User
var resp UserAppearanceSettings
return resp, json.NewDecoder(res.Body).Decode(&resp)
}
// UpdateUserAppearanceSettings updates the appearance settings for a user.
func (c *Client) UpdateUserAppearanceSettings(ctx context.Context, user string, req UpdateUserAppearanceSettingsRequest) (UserAppearanceSettings, error) {
res, err := c.Request(ctx, http.MethodPut, fmt.Sprintf("/api/v2/users/%s/appearance", user), req)
if err != nil {
return UserAppearanceSettings{}, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return UserAppearanceSettings{}, ReadBodyAsError(res)
}
var resp UserAppearanceSettings
return resp, json.NewDecoder(res.Body).Decode(&resp)
}