diff --git a/api/v2/user_service.go b/api/v2/user_service.go
index c305bf29..f945f86c 100644
--- a/api/v2/user_service.go
+++ b/api/v2/user_service.go
@@ -187,6 +187,14 @@ func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUs
return &apiv2pb.DeleteUserResponse{}, nil
}
+func getDefaultUserSetting() *apiv2pb.UserSetting {
+ return &apiv2pb.UserSetting{
+ Locale: "en",
+ Appearance: "system",
+ MemoVisibility: "PRIVATE",
+ }
+}
+
func (s *APIV2Service) GetUserSetting(ctx context.Context, _ *apiv2pb.GetUserSettingRequest) (*apiv2pb.GetUserSettingResponse, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
@@ -199,7 +207,7 @@ func (s *APIV2Service) GetUserSetting(ctx context.Context, _ *apiv2pb.GetUserSet
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to list user settings: %v", err)
}
- userSettingMessage := &apiv2pb.UserSetting{}
+ userSettingMessage := getDefaultUserSetting()
for _, setting := range userSettings {
if setting.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
userSettingMessage.Locale = setting.GetLocale()
diff --git a/store/db/mysql/user_setting.go b/store/db/mysql/user_setting.go
index aa9ffba9..a13891bd 100644
--- a/store/db/mysql/user_setting.go
+++ b/store/db/mysql/user_setting.go
@@ -67,8 +67,16 @@ func (d *DB) UpsertUserSettingV1(ctx context.Context, upsert *storepb.UserSettin
return nil, err
}
valueString = string(valueBytes)
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ valueString = upsert.GetLocale()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ valueString = upsert.GetAppearance()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ valueString = upsert.GetMemoVisibility()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ valueString = upsert.GetTelegramUserId()
} else {
- return nil, errors.New("invalid user setting key")
+ return nil, errors.Errorf("unknown user setting key: %s", upsert.Key.String())
}
if _, err := d.db.ExecContext(ctx, stmt, upsert.UserId, upsert.Key.String(), valueString, valueString); err != nil {
@@ -115,9 +123,24 @@ func (d *DB) ListUserSettingsV1(ctx context.Context, find *store.FindUserSetting
userSetting.Value = &storepb.UserSetting_AccessTokens{
AccessTokens: accessTokensUserSetting,
}
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ userSetting.Value = &storepb.UserSetting_Locale{
+ Locale: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ userSetting.Value = &storepb.UserSetting_Appearance{
+ Appearance: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ userSetting.Value = &storepb.UserSetting_MemoVisibility{
+ MemoVisibility: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ userSetting.Value = &storepb.UserSetting_TelegramUserId{
+ TelegramUserId: valueString,
+ }
} else {
- // Skip unknown user setting v1 key.
- continue
+ return nil, errors.Errorf("unknown user setting key: %s", userSetting.Key.String())
}
userSettingList = append(userSettingList, userSetting)
}
diff --git a/store/db/postgres/user_setting.go b/store/db/postgres/user_setting.go
index 5699b678..f335867f 100644
--- a/store/db/postgres/user_setting.go
+++ b/store/db/postgres/user_setting.go
@@ -88,8 +88,16 @@ func (d *DB) UpsertUserSettingV1(ctx context.Context, upsert *storepb.UserSettin
return nil, err
}
valueString = string(valueBytes)
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ valueString = upsert.GetLocale()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ valueString = upsert.GetAppearance()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ valueString = upsert.GetMemoVisibility()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ valueString = upsert.GetTelegramUserId()
} else {
- return nil, errors.New("invalid user setting key")
+ return nil, errors.Errorf("unknown user setting key: %s", upsert.Key.String())
}
// Construct the query using Squirrel
@@ -158,9 +166,24 @@ func (d *DB) ListUserSettingsV1(ctx context.Context, find *store.FindUserSetting
userSetting.Value = &storepb.UserSetting_AccessTokens{
AccessTokens: accessTokensUserSetting,
}
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ userSetting.Value = &storepb.UserSetting_Locale{
+ Locale: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ userSetting.Value = &storepb.UserSetting_Appearance{
+ Appearance: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ userSetting.Value = &storepb.UserSetting_MemoVisibility{
+ MemoVisibility: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ userSetting.Value = &storepb.UserSetting_TelegramUserId{
+ TelegramUserId: valueString,
+ }
} else {
- // Skip unknown user setting v1 key
- continue
+ return nil, errors.Errorf("unknown user setting key: %s", userSetting.Key.String())
}
userSettingList = append(userSettingList, userSetting)
}
diff --git a/store/db/sqlite/user_setting.go b/store/db/sqlite/user_setting.go
index 96d086a5..3c4d9bb0 100644
--- a/store/db/sqlite/user_setting.go
+++ b/store/db/sqlite/user_setting.go
@@ -3,11 +3,11 @@ package sqlite
import (
"context"
"database/sql"
- "errors"
"strings"
"google.golang.org/protobuf/encoding/protojson"
+ "github.com/pkg/errors"
storepb "github.com/usememos/memos/proto/gen/store"
"github.com/usememos/memos/store"
)
@@ -87,8 +87,16 @@ func (d *DB) UpsertUserSettingV1(ctx context.Context, upsert *storepb.UserSettin
return nil, err
}
valueString = string(valueBytes)
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ valueString = upsert.GetLocale()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ valueString = upsert.GetAppearance()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ valueString = upsert.GetMemoVisibility()
+ } else if upsert.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ valueString = upsert.GetTelegramUserId()
} else {
- return nil, errors.New("invalid user setting key")
+ return nil, errors.Errorf("unknown user setting key: %s", upsert.Key.String())
}
if _, err := d.db.ExecContext(ctx, stmt, upsert.UserId, upsert.Key.String(), valueString); err != nil {
@@ -141,6 +149,22 @@ func (d *DB) ListUserSettingsV1(ctx context.Context, find *store.FindUserSetting
userSetting.Value = &storepb.UserSetting_AccessTokens{
AccessTokens: accessTokensUserSetting,
}
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
+ userSetting.Value = &storepb.UserSetting_Locale{
+ Locale: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
+ userSetting.Value = &storepb.UserSetting_Appearance{
+ Appearance: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
+ userSetting.Value = &storepb.UserSetting_MemoVisibility{
+ MemoVisibility: valueString,
+ }
+ } else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
+ userSetting.Value = &storepb.UserSetting_TelegramUserId{
+ TelegramUserId: valueString,
+ }
} else {
// Skip unknown user setting v1 key.
continue
diff --git a/web/src/components/MemoEditor/index.tsx b/web/src/components/MemoEditor/index.tsx
index dab1cb5b..2d4fb8d8 100644
--- a/web/src/components/MemoEditor/index.tsx
+++ b/web/src/components/MemoEditor/index.tsx
@@ -80,7 +80,7 @@ const MemoEditor = (props: Props) => {
}, []);
useEffect(() => {
- let visibility = userSetting.memoVisibility || "PRIVATE";
+ let visibility = userSetting.memoVisibility;
if (systemStatus.disablePublicMemos && visibility === "PUBLIC") {
visibility = "PRIVATE";
}
diff --git a/web/src/components/Settings/PreferencesSection.tsx b/web/src/components/Settings/PreferencesSection.tsx
index c7010f06..759dc202 100644
--- a/web/src/components/Settings/PreferencesSection.tsx
+++ b/web/src/components/Settings/PreferencesSection.tsx
@@ -85,7 +85,7 @@ const PreferencesSection = () => {
{t("setting.preference-section.default-memo-visibility")}
}
onChange={(_, visibility) => {
if (visibility) {