diff --git a/.github/workflows/request-release-review.yml b/.github/workflows/request-release-review.yml index 2bcbf70a42..0b4af4117a 100644 --- a/.github/workflows/request-release-review.yml +++ b/.github/workflows/request-release-review.yml @@ -11,6 +11,7 @@ jobs: permissions: contents: read issues: write + pull-requests: write steps: - name: Reply uses: actions/github-script@v6 diff --git a/CHANGELOG.md b/CHANGELOG.md index 05ec540643..2262400a4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2025.10.2 + +### Client +- Fix: アプリ内からキャッシュをクリアするとテーマ再適用するまでレンダリングが正しく行われない問題を修正 +- Fix: 期限が無期限のアンケートに投票できない問題を修正 + ## 2025.10.1 ### General diff --git a/package.json b/package.json index 9fee2c2e0c..f8760026f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2025.10.1", + "version": "2025.10.2", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue index 0fc8fa9dcc..19ddb81919 100644 --- a/packages/frontend/src/components/MkImageEffectorDialog.vue +++ b/packages/frontend/src/components/MkImageEffectorDialog.vue @@ -257,12 +257,8 @@ function onImagePointerdown(ev: PointerEvent) { xOffset /= 2; yOffset /= 2; - const rect = canvasEl.value.getBoundingClientRect(); - const pointerOffsetX = ev.clientX - rect.left; - const pointerOffsetY = ev.clientY - rect.top; - - let startX = pointerOffsetX - xOffset; - let startY = pointerOffsetY - yOffset; + let startX = ev.offsetX - xOffset; + let startY = ev.offsetY - yOffset; if (AW / AH < BW / BH) { // 横長 startX = startX / (Math.max(AW, AH) / Math.max(BH / BW, 1)); @@ -315,11 +311,9 @@ function onImagePointerdown(ev: PointerEvent) { }); } - _move(ev.clientX, ev.clientY); + _move(ev.offsetX, ev.offsetY); - function _move(pointerClientX: number, pointerClientY: number) { - const pointerX = pointerClientX - rect.left; - const pointerY = pointerClientY - rect.top; + function _move(pointerX: number, pointerY: number) { let x = pointerX - xOffset; let y = pointerY - yOffset; @@ -346,7 +340,7 @@ function onImagePointerdown(ev: PointerEvent) { } function move(ev: PointerEvent) { - _move(ev.clientX, ev.clientY); + _move(ev.offsetX, ev.offsetY); } function up() { diff --git a/packages/frontend/src/components/MkPoll.vue b/packages/frontend/src/components/MkPoll.vue index 9fc9c98493..305e9b5c4f 100644 --- a/packages/frontend/src/components/MkPoll.vue +++ b/packages/frontend/src/components/MkPoll.vue @@ -58,7 +58,7 @@ const remaining = computed(() => { }); const total = computed(() => sum(props.choices.map(x => x.votes))); -const closed = computed(() => remaining.value <= 0); +const closed = computed(() => props.expiresAt != null && remaining.value <= 0); const isVoted = computed(() => !props.multiple && props.choices.some(c => c.isVoted)); const timer = computed(() => i18n.tsx._poll[ remaining.value >= 86400 ? 'remainingDays' : diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index afa70cdbae..664ff2d469 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
diff --git a/packages/frontend/src/theme.ts b/packages/frontend/src/theme.ts index 13f5dbf60e..4da8c02d33 100644 --- a/packages/frontend/src/theme.ts +++ b/packages/frontend/src/theme.ts @@ -242,3 +242,9 @@ export async function installTheme(code: string): Promise { if (!theme) return; await addTheme(theme); } + +export function clearAppliedThemeCache() { + miLocalStorage.removeItem('theme'); + miLocalStorage.removeItem('themeId'); + miLocalStorage.removeItem('themeCachedVersion'); +} diff --git a/packages/frontend/src/utility/clear-cache.ts b/packages/frontend/src/utility/clear-cache.ts index 8f1f73466f..0e697edcac 100644 --- a/packages/frontend/src/utility/clear-cache.ts +++ b/packages/frontend/src/utility/clear-cache.ts @@ -9,14 +9,15 @@ import * as os from '@/os.js'; import { miLocalStorage } from '@/local-storage.js'; import { fetchCustomEmojis } from '@/custom-emojis.js'; import { fetchInstance } from '@/instance.js'; +import { clearAppliedThemeCache } from '@/theme.js'; export async function clearCache() { os.waiting(); miLocalStorage.removeItem('instance'); miLocalStorage.removeItem('instanceCachedAt'); - miLocalStorage.removeItem('theme'); miLocalStorage.removeItem('emojis'); miLocalStorage.removeItem('lastEmojisFetchedAt'); + clearAppliedThemeCache(); await misskeyApiGet('clear-browser-cache', {}).catch(() => { // ignore }); diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index e98f1b4262..b000fd8418 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "2025.10.1", + "version": "2025.10.2", "description": "Misskey SDK for JavaScript", "license": "MIT", "main": "./built/index.js",