diff --git a/CHANGELOG.md b/CHANGELOG.md index edca4339cb..d3a0e3195f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## Unreleased + +### General +- + +### Client +- Fix: リアクションの一部の絵文字が重複して表示されることがある問題を修正 + +### Server +- + + ## 2025.5.1 ### Note diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml index 64af3b1a03..c887397301 100644 --- a/locales/ca-ES.yml +++ b/locales/ca-ES.yml @@ -1330,6 +1330,7 @@ restore: "Restaurar " syncBetweenDevices: "Sincronització entre dispositius" preferenceSyncConflictTitle: "Els valors de la configuració ja existeixen al dispositiu" preferenceSyncConflictText: "Un element de la configuració amb sincronització activada desa els seus valors al servidor, però s'ha trobat un valor a la configuració desat al servidor per aquest element de la configuració. Quin valor us sobreescriure?" +preferenceSyncConflictChoiceMerge: "Integració " preferenceSyncConflictChoiceServer: "Valors de configuració del servidor" preferenceSyncConflictChoiceDevice: "Punts d'ajustos del dispositiu " preferenceSyncConflictChoiceCancel: "Cancel·lar l'activació de la sincronització " diff --git a/locales/en-US.yml b/locales/en-US.yml index 1718d6711a..492a9f2887 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1330,6 +1330,7 @@ restore: "Restore" syncBetweenDevices: "Sync between devices" preferenceSyncConflictTitle: "The configured value exists on the server." preferenceSyncConflictText: "The sync enabled settings will save their values to the server. However, there are existing values on the server. Which set of values would you like to overwrite?" +preferenceSyncConflictChoiceMerge: "Merge" preferenceSyncConflictChoiceServer: "Configured value on server" preferenceSyncConflictChoiceDevice: "Configured value on device" preferenceSyncConflictChoiceCancel: "Cancel enabling sync" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 70219df019..e4d7d69e46 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -327,6 +327,7 @@ dark: "深色" lightThemes: "淺色佈景主題" darkThemes: "深色佈景主題" syncDeviceDarkMode: "與裝置的深色模式同步" +switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」已開啟。要關閉同步並手動切換模式嗎?\n" drive: "雲端硬碟" fileName: "檔案名稱" selectFile: "選擇檔案" @@ -1329,6 +1330,7 @@ restore: "還原" syncBetweenDevices: "裝置之間的同步化" preferenceSyncConflictTitle: "伺服器上存在設定值" preferenceSyncConflictText: "已啟用同步的設定項目會將設定值儲存至伺服器,並已找到該設定項目在伺服器上儲存的設定值。請選擇要使用哪個設定值進行覆寫。" +preferenceSyncConflictChoiceMerge: "合併至" preferenceSyncConflictChoiceServer: "伺服器設定值" preferenceSyncConflictChoiceDevice: "裝置的設定值" preferenceSyncConflictChoiceCancel: "取消啟用同步" diff --git a/package.json b/package.json index 8b843619eb..4ad351a382 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2025.5.1-beta.6", + "version": "2025.5.1", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/frontend/src/composables/use-note-capture.ts b/packages/frontend/src/composables/use-note-capture.ts index 90a5922b3e..2aeb9074e5 100644 --- a/packages/frontend/src/composables/use-note-capture.ts +++ b/packages/frontend/src/composables/use-note-capture.ts @@ -194,9 +194,9 @@ export function useNoteCapture(props: { parentNote: Misskey.entities.Note | null; mock?: boolean; }): { - $note: Reactive; - subscribe: () => void; -} { + $note: Reactive; + subscribe: () => void; + } { const { note, parentNote, mock } = props; const $note = reactive({ @@ -225,8 +225,8 @@ export function useNoteCapture(props: { let latestPollVotedKey: string | null = null; function onReacted(ctx: { userId: Misskey.entities.User['id']; reaction: string; emoji?: { name: string; url: string; }; }): void { - const normalizedName = ctx.reaction.replace(/^:(\w+):$/, ':$1@.:'); - + let normalizedName = ctx.reaction.replace(/^:(\w+):$/, ':$1@.:'); + normalizedName = normalizedName.match('\u200d') ? normalizedName : normalizedName.replace(/\ufe0f/g, ''); if (reactionUserMap.has(ctx.userId) && reactionUserMap.get(ctx.userId) === normalizedName) return; reactionUserMap.set(ctx.userId, normalizedName); @@ -245,7 +245,8 @@ export function useNoteCapture(props: { } function onUnreacted(ctx: { userId: Misskey.entities.User['id']; reaction: string; emoji?: { name: string; url: string; }; }): void { - const normalizedName = ctx.reaction.replace(/^:(\w+):$/, ':$1@.:'); + let normalizedName = ctx.reaction.replace(/^:(\w+):$/, ':$1@.:'); + normalizedName = normalizedName.match('\u200d') ? normalizedName : normalizedName.replace(/\ufe0f/g, ''); // 確実に一度リアクションされて取り消されている場合のみ処理をとめる(APIで初回読み込み→Streamでアップデート等の場合、reactionUserMapに情報がないため) if (reactionUserMap.has(ctx.userId) && reactionUserMap.get(ctx.userId) === noReaction) return; diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue index 18dfc2250c..05e491ae37 100644 --- a/packages/frontend/src/pages/settings/preferences.vue +++ b/packages/frontend/src/pages/settings/preferences.vue @@ -604,7 +604,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
{{ i18n.ts._clientPerformanceIssueTip.title }}
+
{{ i18n.ts._clientPerformanceIssueTip.title }}:
{{ i18n.ts._clientPerformanceIssueTip.makeSureDisabledAdBlocker }}
{{ i18n.ts._clientPerformanceIssueTip.makeSureDisabledAdBlocker_description }}
diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index a500ee9822..c32500db59 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -6,12 +6,12 @@ import * as Misskey from 'misskey-js'; import { hemisphere } from '@@/js/intl-const.js'; import { v4 as uuid } from 'uuid'; +import { definePreferences } from './manager.js'; import type { Theme } from '@/theme.js'; import type { SoundType } from '@/utility/sound.js'; import type { Plugin } from '@/plugin.js'; import type { DeviceKind } from '@/utility/device-kind.js'; import type { DeckProfile } from '@/deck.js'; -import type { PreferencesDefinition } from './manager.js'; import type { WatermarkPreset } from '@/utility/watermark.js'; import { DEFAULT_DEVICE_KIND } from '@/utility/device-kind.js'; import { deepEqual } from '@/utility/deep-equal.js'; @@ -34,7 +34,7 @@ export type SoundStore = { // NOTE: デフォルト値は他の設定の状態に依存してはならない(依存していた場合、ユーザーがその設定項目単体で「初期値にリセット」した場合不具合の原因になる) -export const PREF_DEF = { +export const PREF_DEF = definePreferences({ accounts: { default: [] as [host: string, user: { id: string; @@ -89,7 +89,7 @@ export const PREF_DEF = { emojis: string[]; }[], mergeStrategy: (a, b) => { - const mergedItems = [] as (typeof a)[]; + const mergedItems = [] as typeof a; for (const x of a.concat(b)) { const sameIdItem = mergedItems.find(y => y.id === x.id); if (sameIdItem != null) { @@ -120,7 +120,7 @@ export const PREF_DEF = { themes: { default: [] as Theme[], mergeStrategy: (a, b) => { - const mergedItems = [] as (typeof a)[]; + const mergedItems = [] as typeof a; for (const x of a.concat(b)) { const sameIdItem = mergedItems.find(y => y.id === x.id); if (sameIdItem != null) { @@ -398,7 +398,7 @@ export const PREF_DEF = { accountDependent: true, default: [] as WatermarkPreset[], mergeStrategy: (a, b) => { - const mergedItems = [] as (typeof a)[]; + const mergedItems = [] as typeof a; for (const x of a.concat(b)) { const sameIdItem = mergedItems.find(y => y.id === x.id); if (sameIdItem != null) { @@ -492,4 +492,4 @@ export const PREF_DEF = { 'experimental.enableFolderPageView': { default: false, }, -} satisfies PreferencesDefinition; +}); diff --git a/packages/frontend/src/preferences/manager.ts b/packages/frontend/src/preferences/manager.ts index cede145e74..603aac851c 100644 --- a/packages/frontend/src/preferences/manager.ts +++ b/packages/frontend/src/preferences/manager.ts @@ -96,6 +96,14 @@ type PreferencesDefinitionRecord export type PreferencesDefinition = Record>; +export function definePreferences>(x: { + [K in keyof T]: PreferencesDefinitionRecord +}): { + [K in keyof T]: PreferencesDefinitionRecord + } { + return x; +} + export function getInitialPrefValue(k: K): ValueOf { if (typeof PREF_DEF[k].default === 'function') { // factory return PREF_DEF[k].default(); diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 9465b00622..151ffca622 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "2025.5.1-beta.6", + "version": "2025.5.1", "description": "Misskey SDK for JavaScript", "license": "MIT", "main": "./built/index.js",