-
{{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt).prevText }}
+
+
+ {{ getSeparatorInfo(paginator.items.value[i - 1].createdAt, note.createdAt)?.prevText }}
- {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt).nextText }}
+ {{ getSeparatorInfo(paginator.items.value[i - 1].createdAt, note.createdAt)?.nextText }}
+
+
+
-
+
@@ -103,7 +110,10 @@ defineExpose({
opacity: 0.75;
padding: 8px 8px;
margin: 0 auto;
- border-bottom: solid 0.5px var(--MI_THEME-divider);
+
+ &.noGap {
+ border-bottom: solid 0.5px var(--MI_THEME-divider);
+ }
}
.ad:empty {
diff --git a/packages/frontend/src/components/MkStreamingNotesTimeline.vue b/packages/frontend/src/components/MkStreamingNotesTimeline.vue
index 3e50bdefd2..c2b4d6cd04 100644
--- a/packages/frontend/src/components/MkStreamingNotesTimeline.vue
+++ b/packages/frontend/src/components/MkStreamingNotesTimeline.vue
@@ -32,9 +32,9 @@ SPDX-License-Identifier: AGPL-3.0-only
- {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt).prevText }}
+ {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt)?.prevText }}
- {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt).nextText }}
+ {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, note.createdAt)?.nextText }}
diff --git a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
index 4617e659c8..ac1f06619a 100644
--- a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
+++ b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue
@@ -25,11 +25,11 @@ SPDX-License-Identifier: AGPL-3.0-only
>
- {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, notification.createdAt).prevText }}
+ {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, notification.createdAt)?.prevText }}
- {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, notification.createdAt).nextText }}
+ {{ getSeparatorInfo(paginator.items.value[i -1].createdAt, notification.createdAt)?.nextText }}
-
+
From a7d1c94f4819c537111a21ffc1cd467a94698e20 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Fri, 1 Aug 2025 09:51:43 +0900
Subject: [PATCH 07/91] enhance(backend): tweak system job log
---
packages/backend/src/core/QueueService.ts | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/packages/backend/src/core/QueueService.ts b/packages/backend/src/core/QueueService.ts
index 31de66ca88..2e49f8cf5e 100644
--- a/packages/backend/src/core/QueueService.ts
+++ b/packages/backend/src/core/QueueService.ts
@@ -102,8 +102,13 @@ export class QueueService {
}, {
name: def.name,
opts: {
- removeOnComplete: 10,
- removeOnFail: 30,
+ // 期限ではなくcountで設定したいが、ジョブごとではなくキュー全体でカウントされるため、高頻度で実行されるジョブによって低頻度で実行されるジョブのログが消えることになる
+ removeOnComplete: {
+ age: 3600 * 24 * 7, // keep up to 7 days
+ },
+ removeOnFail: {
+ age: 3600 * 24 * 7, // keep up to 7 days
+ },
},
});
}
From 4c520fa6931a7f64d5a5b9d19f257210bd7640b3 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Fri, 1 Aug 2025 11:07:09 +0900
Subject: [PATCH 08/91] =?UTF-8?q?enhance(frontend):=20=E3=82=B5=E3=83=BC?=
=?UTF-8?q?=E3=83=90=E3=83=BC=E3=81=AE=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A?=
=?UTF-8?q?=E3=82=A6=E3=82=A3=E3=82=B6=E3=83=BC=E3=83=89=E3=82=92=E3=82=84?=
=?UTF-8?q?=E3=82=8A=E7=9B=B4=E3=81=9B=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
locales/index.d.ts | 8 +++
locales/ja-JP.yml | 2 +
.../src/components/MkServerSetupWizard.vue | 10 ++--
.../components/MkServerSetupWizardDialog.vue | 57 +++++++++++++++++++
.../frontend/src/pages/admin/settings.vue | 18 ++++++
packages/frontend/src/pages/welcome.setup.vue | 9 ++-
6 files changed, 99 insertions(+), 5 deletions(-)
create mode 100644 packages/frontend/src/components/MkServerSetupWizardDialog.vue
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 088b89b79f..1be8811a25 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -6558,6 +6558,14 @@ export interface Locale extends ILocale {
* サーバーで受信したリモートのコンテンツを含め、サーバー内の全てのコンテンツを無条件でインターネットに公開することはリスクが伴います。特に、分散型の特性を知らない閲覧者にとっては、リモートのコンテンツであってもサーバー内で作成されたコンテンツであると誤って認識してしまう可能性があるため、注意が必要です。
*/
"userGeneratedContentsVisibilityForVisitor_description2": string;
+ /**
+ * サーバーの初期設定ウィザードをやり直しますか?
+ */
+ "restartServerSetupWizardConfirm_title": string;
+ /**
+ * 現在の一部の設定はリセットされます。
+ */
+ "restartServerSetupWizardConfirm_text": string;
"_userGeneratedContentsVisibilityForVisitor": {
/**
* 全て公開
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 5bd2fc6e17..d4edfc5aab 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1667,6 +1667,8 @@ _serverSettings:
userGeneratedContentsVisibilityForVisitor: "非利用者に対するユーザー作成コンテンツの公開範囲"
userGeneratedContentsVisibilityForVisitor_description: "モデレーションが行き届きにくい不適切なリモートコンテンツなどが、自サーバー経由で図らずもインターネットに公開されてしまうことによるトラブル防止などに役立ちます。"
userGeneratedContentsVisibilityForVisitor_description2: "サーバーで受信したリモートのコンテンツを含め、サーバー内の全てのコンテンツを無条件でインターネットに公開することはリスクが伴います。特に、分散型の特性を知らない閲覧者にとっては、リモートのコンテンツであってもサーバー内で作成されたコンテンツであると誤って認識してしまう可能性があるため、注意が必要です。"
+ restartServerSetupWizardConfirm_title: "サーバーの初期設定ウィザードをやり直しますか?"
+ restartServerSetupWizardConfirm_text: "現在の一部の設定はリセットされます。"
_userGeneratedContentsVisibilityForVisitor:
all: "全て公開"
diff --git a/packages/frontend/src/components/MkServerSetupWizard.vue b/packages/frontend/src/components/MkServerSetupWizard.vue
index 65e0d6d9de..e5614d63d7 100644
--- a/packages/frontend/src/components/MkServerSetupWizard.vue
+++ b/packages/frontend/src/components/MkServerSetupWizard.vue
@@ -196,12 +196,14 @@ const props = withDefaults(defineProps<{
}>(), {
});
-const q_name = ref('');
+const currentMeta = await misskeyApi('admin/meta');
+
+const q_name = ref(currentMeta.name ?? '');
const q_use = ref('single');
const q_scale = ref('small');
-const q_federation = ref('yes');
-const q_adminName = ref('');
-const q_adminEmail = ref('');
+const q_federation = ref(currentMeta.federation === 'none' ? 'no' : 'yes');
+const q_adminName = ref(currentMeta.maintainerName ?? '');
+const q_adminEmail = ref(currentMeta.maintainerEmail ?? '');
const serverSettings = computed(() => {
let enableReactionsBuffering;
diff --git a/packages/frontend/src/components/MkServerSetupWizardDialog.vue b/packages/frontend/src/components/MkServerSetupWizardDialog.vue
new file mode 100644
index 0000000000..ea2c5dd47f
--- /dev/null
+++ b/packages/frontend/src/components/MkServerSetupWizardDialog.vue
@@ -0,0 +1,57 @@
+
+
+
+
+ Server setup wizard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue
index f6a2eb1c27..d079b4cb0c 100644
--- a/packages/frontend/src/pages/admin/settings.vue
+++ b/packages/frontend/src/pages/admin/settings.vue
@@ -287,6 +287,10 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+ Open setup wizard
+
@@ -425,6 +429,20 @@ const proxyAccountForm = useForm({
fetchInstance(true);
});
+async function openSetupWizard() {
+ const { canceled } = await os.confirm({
+ type: 'warning',
+ title: i18n.ts._serverSettings.restartServerSetupWizardConfirm_title,
+ text: i18n.ts._serverSettings.restartServerSetupWizardConfirm_text,
+ });
+ if (canceled) return;
+
+ const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkServerSetupWizardDialog.vue').then(x => x.default), {
+ }, {
+ closed: () => dispose(),
+ });
+}
+
const headerTabs = computed(() => []);
definePage(() => ({
diff --git a/packages/frontend/src/pages/welcome.setup.vue b/packages/frontend/src/pages/welcome.setup.vue
index 3e2d086858..393ba98d30 100644
--- a/packages/frontend/src/pages/welcome.setup.vue
+++ b/packages/frontend/src/pages/welcome.setup.vue
@@ -87,7 +87,14 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts._serverSetupWizard.settingsYouMakeHereCanBeChangedLater }}