Compare commits

...

33 Commits

Author SHA1 Message Date
misskey-release-bot[bot] 0d46089f9a Merge pull request #16998 from misskey-dev/develop
Release: 2025.12.2
2025-12-22 05:30:45 +00:00
github-actions[bot] 78348007ed Release: 2025.12.2 2025-12-22 05:30:41 +00:00
かっこかり 92f1e599db Update CHANGELOG.md [ci skip] 2025-12-22 12:05:25 +09:00
github-actions[bot] 26b5979c76 Bump version to 2025.12.2-beta.4 2025-12-20 12:30:29 +00:00
かっこかり b1048525d2 fix(frontend): 一部のUnicode絵文字がリアクションボタンにならない問題を修正 (#17017)
* fix(frontend): 一部のUnicode絵文字がリアクションボタンにならない問題を修正

* Update Changelog

* fix
2025-12-20 21:23:39 +09:00
かっこかり 4c31eb409c fix(frontend): ストレージが消去される事がある問題を軽減 (#16704)
* fix(frontend): ストレージが消去される事がある問題を軽減

* add comment

* add catch to continue request permissions

* Update Changelog

* update changelog

* fix

通知権限の許可取得はボタン押下時に移動

* fix

* wip

* Update main-boot.ts

* wip

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2025-12-20 21:22:31 +09:00
おさむのひと f739cb6270 fix: admin/queue/deliver-delayedとadmin/queue/inbox-delayedの応答速度を改善 (#17009) 2025-12-20 19:15:05 +09:00
misskey-release-bot[bot] 7420c10a58 Merge pull request #16972 from misskey-dev/develop
Release: 2025.12.1
2025-12-14 07:27:09 +00:00
misskey-release-bot[bot] e40c84f31d Merge pull request #16916 from misskey-dev/develop
Release: 2025.12.0
2025-12-06 12:22:58 +00:00
misskey-release-bot[bot] 994fc062cf Merge pull request #16840 from misskey-dev/develop
Release: 2025.11.1
2025-11-28 10:04:09 +00:00
misskey-release-bot[bot] e7681f6c79 Merge pull request #16759 from misskey-dev/develop
Release: 2025.11.0
2025-11-16 08:23:46 +00:00
misskey-release-bot[bot] 19053339d9 Merge pull request #16709 from misskey-dev/develop
Release: 2025.10.2
2025-10-27 04:19:45 +00:00
misskey-release-bot[bot] b4e16c83e2 Merge pull request #16629 from misskey-dev/develop
Release: 2025.10.1
2025-10-24 06:31:35 +00:00
misskey-release-bot[bot] 56cc89b521 Merge pull request #16591 from misskey-dev/develop
Release: 2025.10.0
2025-10-08 13:18:08 +00:00
misskey-release-bot[bot] 1eab314b17 Merge pull request #16521 from misskey-dev/develop
Release: 2025.9.0
2025-09-08 12:29:29 +00:00
misskey-release-bot[bot] ec21336d45 Merge pull request #16335 from misskey-dev/develop
Release: 2025.8.0
2025-08-31 08:42:43 +00:00
misskey-release-bot[bot] e86e9b46b3 Merge pull request #16244 from misskey-dev/develop
Release: 2025.7.0
2025-07-18 00:28:01 +00:00
misskey-release-bot[bot] 9b729b3d25 Merge pull request #16197 from misskey-dev/develop
Release: 2025.6.3
2025-06-16 11:13:26 +00:00
misskey-release-bot[bot] 3c973e21f2 Merge pull request #16195 from misskey-dev/develop
Release: 2025.6.2
2025-06-16 08:58:35 +00:00
misskey-release-bot[bot] 830e2f0a5b Merge pull request #16152 from misskey-dev/develop
Release: 2025.6.1
2025-06-16 02:33:18 +00:00
misskey-release-bot[bot] 1620477a1c Merge pull request #16134 from misskey-dev/develop
Release: 2025.6.0
2025-06-02 00:58:34 +00:00
misskey-release-bot[bot] 92b9a5218d Merge pull request #16005 from misskey-dev/develop
Release: 2025.5.1
2025-05-31 12:37:06 +00:00
misskey-release-bot[bot] 9ed0d5ccec Merge pull request #15933 from misskey-dev/develop
Release: 2025.5.0
2025-05-07 02:46:42 +00:00
misskey-release-bot[bot] a6d1727205 Merge pull request #15842 from misskey-dev/develop
Release: 2025.4.1
2025-04-30 09:01:47 +00:00
misskey-release-bot[bot] 3c3982464f Merge pull request #15735 from misskey-dev/develop
Release: 2025.4.0
2025-04-09 02:17:31 +00:00
misskey-release-bot[bot] bef73ff530 Merge pull request #15615 from misskey-dev/develop
Release: 2025.3.1
2025-03-09 03:29:58 +00:00
misskey-release-bot[bot] 4d31c0b1de Merge pull request #15585 from misskey-dev/develop
Release: 2025.3.0
2025-03-06 10:31:34 +00:00
misskey-release-bot[bot] a5f28c21e4 Merge pull request #15507 from misskey-dev/develop
Release: 2025.2.1
2025-02-27 08:58:43 +00:00
misskey-release-bot[bot] c93ead7474 Merge pull request #15378 from misskey-dev/develop
Release: 2025.2.0
2025-02-05 08:58:45 +00:00
misskey-release-bot[bot] 36880493cb Merge pull request #15279 from misskey-dev/develop
Release: 2025.1.0
2025-01-28 12:29:14 +00:00
misskey-release-bot[bot] e8518de054 Merge pull request #14924 from misskey-dev/develop
Release: 2024.11.0
2024-11-22 09:15:34 +00:00
misskey-release-bot[bot] b99e13e667 Merge pull request #14741 from misskey-dev/develop
Release: 2024.10.1
2024-10-15 04:53:46 +00:00
misskey-release-bot[bot] 2518cf36d0 Merge pull request #14675 from misskey-dev/develop
Release: 2024.10.0
2024-10-09 05:17:29 +00:00
12 changed files with 94 additions and 21 deletions
+3
View File
@@ -14,14 +14,17 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
### Client
- Enhance: デッキのUI説明を追加
- Enhance: 設定がブラウザによって消去されないようにするオプションを追加
- Fix: バージョン表記のないPlayが正しく動作しない問題を修正
バージョン表記のないものは v0.x 系として実行されます。v1.x 系で動作させたい場合は必ずバージョン表記を含めてください。
- Fix: デッキUIでメニュー位置を下にしているとプロファイル削除ボタンが表示されないのを修正
- Fix: 一部のUnicode絵文字のリアクションがボタンにならない問題を修正
### Server
- Enhance: Misskey内部でのIPアドレスペースでのレートリミットを無効化できるように
- リバースプロキシやCDNなど別のレイヤで別途レートリミットを設定する場合や、ローカルでのテスト用途等として利用することを想定しています。
- デフォルトは `enableIpRateLimit: true`(Misskey内部でのIPアドレスペースでのレートリミットは有効)です。
- Fix: コントロールパネルのジョブキューページで使用される一部APIの応答速度を改善
## 2025.12.1
+3
View File
@@ -1557,6 +1557,9 @@ _settings:
showPageTabBarBottom: "ページのタブバーを下部に表示"
emojiPaletteBanner: "絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。"
enableAnimatedImages: "アニメーション画像を有効にする"
settingsPersistence_title: "設定の永続化"
settingsPersistence_description1: "設定の永続化を有効にすると、設定情報が失われるのを防止できます。"
settingsPersistence_description2: "環境によっては有効化できない場合があります。"
_chat:
showSenderName: "送信者の名前を表示"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "misskey",
"version": "2025.12.2-beta.3",
"version": "2025.12.2",
"codename": "nasubi",
"repository": {
"type": "git",
@@ -52,18 +52,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
super(meta, paramDef, async (ps, me) => {
const jobs = await this.deliverQueue.getJobs(['delayed']);
const res = [] as [string, number][];
const counts = new Map<string, number>();
for (const job of jobs) {
const host = new URL(job.data.to).host;
if (res.find(x => x[0] === host)) {
res.find(x => x[0] === host)![1]++;
} else {
res.push([host, 1]);
}
counts.set(host, (counts.get(host) ?? 0) + 1);
}
res.sort((a, b) => b[1] - a[1]);
const res = [...counts.entries()].sort((a, b) => b[1] - a[1]);
return res;
});
@@ -52,18 +52,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
super(meta, paramDef, async (ps, me) => {
const jobs = await this.inboxQueue.getJobs(['delayed']);
const res = [] as [string, number][];
const counts = new Map<string, number>();
for (const job of jobs) {
const host = new URL(job.data.signature.keyId).host;
if (res.find(x => x[0] === host)) {
res.find(x => x[0] === host)![1]++;
} else {
res.push([host, 1]);
}
counts.set(host, (counts.get(host) ?? 0) + 1);
}
res.sort((a, b) => b[1] - a[1]);
const res = [...counts.entries()].sort((a, b) => b[1] - a[1]);
return res;
});
+21 -4
View File
@@ -41,7 +41,7 @@ export const emojiCharByCategory = _charGroupByCategory;
export function getUnicodeEmojiOrNull(char: string): UnicodeEmojiDef | null {
// Colorize it because emojilist.json assumes that
return unicodeEmojisMap.get(colorizeEmoji(char))
return unicodeEmojisMap.get(forceColorizeEmoji(char))
// カラースタイル絵文字がjsonに無い場合はテキストスタイル絵文字にフォールバックする
?? unicodeEmojisMap.get(char)
// それでも見つからない場合はnullを返す
@@ -54,12 +54,12 @@ export function getUnicodeEmoji(char: string): UnicodeEmojiDef | string {
}
export function isSupportedEmoji(char: string): boolean {
return unicodeEmojisMap.has(colorizeEmoji(char)) || unicodeEmojisMap.has(char);
return unicodeEmojisMap.has(forceColorizeEmoji(char)) || unicodeEmojisMap.has(char);
}
export function getEmojiName(char: string): string {
// Colorize it because emojilist.json assumes that
const idx = _indexByChar.get(colorizeEmoji(char)) ?? _indexByChar.get(char);
const idx = _indexByChar.get(forceColorizeEmoji(char)) ?? _indexByChar.get(char);
if (idx === undefined) {
// 絵文字情報がjsonに無い場合は名前の取得が出来ないのでそのまま返すしか無い
return char;
@@ -72,7 +72,24 @@ export function getEmojiName(char: string): string {
* U+260Eなどの1文字で表現される絵文字VS16:U+FE0Fを付与
*/
export function colorizeEmoji(char: string) {
return char.length === 1 ? `${char}\uFE0F` : char;
// <文字列>.length はコードポイント数ではなくUTF-16コードユニット数を返すため、サロゲートペアを含む絵文字で誤動作する。
// そのため、配列に変換してコードポイント数を数える方法を取る。
return Array.from(char).length === 1 ? `${char}\uFE0F` : char;
}
/**
*
*/
function forceColorizeEmoji(char: string) {
// <文字列>.length はコードポイント数ではなくUTF-16コードユニット数を返すため、サロゲートペアを含む絵文字で誤動作する。
// そのため、配列に変換してコードポイント数を数える方法を取る。
const chars = Array.from(char);
if (chars.includes('\uFE0F')) {
return char;
} else {
chars.splice(1, 0, '\uFE0F');
return chars.join('');
}
}
export interface CustomEmojiFolderTree {
@@ -11,6 +11,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="!narrow || currentPage?.route.name == null" class="nav">
<div class="_gaps_s">
<MkInfo v-if="emailNotConfigured" warn class="info">{{ i18n.ts.emailNotConfiguredWarning }} <MkA to="/settings/email" class="_link">{{ i18n.ts.configure }}</MkA></MkInfo>
<MkInfo v-if="!storagePersisted && store.r.showStoragePersistenceSuggestion.value" class="info">
<div>{{ i18n.ts._settings.settingsPersistence_description1 }}</div>
<div>{{ i18n.ts._settings.settingsPersistence_description2 }}</div>
<div><button class="_textButton" @click="enableStoragePersistence">{{ i18n.ts.enable }}</button> | <button class="_textButton" @click="skipStoragePersistence">{{ i18n.ts.skip }}</button></div>
</MkInfo>
<MkInfo v-if="!store.r.enablePreferencesAutoCloudBackup.value && store.r.showPreferencesAutoCloudBackupSuggestion.value" class="info">
<div>{{ i18n.ts._preferencesBackup.autoPreferencesBackupIsNotEnabledForThisDevice }}</div>
<div><button class="_textButton" @click="enableAutoBackup">{{ i18n.ts.enable }}</button> | <button class="_textButton" @click="skipAutoBackup">{{ i18n.ts.skip }}</button></div>
@@ -46,6 +51,7 @@ import { enableAutoBackup, getPreferencesProfileMenu } from '@/preferences/utili
import { store } from '@/store.js';
import { signout } from '@/signout.js';
import { genSearchIndexes } from '@/utility/inapp-search.js';
import { enableStoragePersistence, storagePersisted, skipStoragePersistence } from '@/utility/storage.js';
const searchIndex = await import('search-index:settings').then(({ searchIndexes }) => genSearchIndexes(searchIndexes));
@@ -142,6 +142,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<hr>
</template>
<MkButton v-if="!storagePersisted" @click="enableStoragePersistence">{{ i18n.ts._settings.settingsPersistence_title }}</MkButton>
<MkButton @click="forceCloudBackup">{{ i18n.ts._preferencesBackup.forceBackup }}</MkButton>
<FormSlot>
@@ -163,7 +165,7 @@ import MkKeyValue from '@/components/MkKeyValue.vue';
import MkButton from '@/components/MkButton.vue';
import FormSlot from '@/components/form/slot.vue';
import * as os from '@/os.js';
import { misskeyApi } from '@/utility/misskey-api.js';
import { enableStoragePersistence, storagePersisted, skipStoragePersistence } from '@/utility/storage.js';
import { ensureSignin } from '@/i.js';
import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js';
+4
View File
@@ -118,6 +118,10 @@ export const store = markRaw(new Pizzax('base', {
where: 'device',
default: true,
},
showStoragePersistenceSuggestion: {
where: 'device',
default: true,
},
//#region TODO: そのうち消す (preferに移行済み)
defaultWithReplies: {
+34
View File
@@ -0,0 +1,34 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { computed, ref, shallowRef, watch, defineAsyncComponent } from 'vue';
import * as os from '@/os.js';
import { store } from '@/store.js';
import { i18n } from '@/i18n.js';
export const storagePersisted = ref(await navigator.storage.persisted());
export async function enableStoragePersistence() {
try {
const persisted = await navigator.storage.persist();
if (persisted) {
storagePersisted.value = true;
} else {
os.alert({
type: 'error',
text: i18n.ts.somethingHappened,
});
}
} catch (err) {
os.alert({
type: 'error',
text: i18n.ts.somethingHappened,
});
}
}
export function skipStoragePersistence() {
store.set('showStoragePersistenceSuggestion', false);
}
+12
View File
@@ -6193,6 +6193,18 @@ export interface Locale extends ILocale {
*
*/
"enableAnimatedImages": string;
/**
*
*/
"settingsPersistence_title": string;
/**
*
*/
"settingsPersistence_description1": string;
/**
*
*/
"settingsPersistence_description2": string;
"_chat": {
/**
*
+1 -1
View File
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
"version": "2025.12.2-beta.3",
"version": "2025.12.2",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",