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")}