summaryrefslogtreecommitdiff
path: root/packages/frontend/src
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-08-01 11:49:12 +0900
committerGitHub <noreply@github.com>2025-08-01 11:49:12 +0900
commitd624da9c1aac731bd49a7bbb949744ebf4986479 (patch)
tree94306c63e3452e77fcf100b5a61eb243705463e4 /packages/frontend/src
parentenhance(frontend): サーバーの初期設定ウィザードをやり直せ... (diff)
downloadmisskey-d624da9c1aac731bd49a7bbb949744ebf4986479.tar.gz
misskey-d624da9c1aac731bd49a7bbb949744ebf4986479.tar.bz2
misskey-d624da9c1aac731bd49a7bbb949744ebf4986479.zip
feat: remote notes cleaning (#16292)
* Create CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * wip * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update CleanRemoteNotesProcessorService.ts * Update job-queue.job.vue * wip * Update CleanRemoteNotesProcessorService.ts * wip * wip * wip * Update CleanRemoteNotesProcessorService.ts * wip * Update CHANGELOG.md * Revert "wip" This reverts commit 89d455d302c1106c421bcec309fd7bf02509465e. * wip * woip * Update QueueService.ts * Update QueueService.ts * ピン留め考慮 * Update CleanRemoteNotesProcessorService.ts * Update QueueService.ts * Update CleanRemoteNotesProcessorService.ts * add log * Update CHANGELOG.md * wip * Update MkServerSetupWizard.vue
Diffstat (limited to 'packages/frontend/src')
-rw-r--r--packages/frontend/src/components/MkServerSetupWizard.vue15
-rw-r--r--packages/frontend/src/pages/admin/job-queue.job.vue4
-rw-r--r--packages/frontend/src/pages/admin/performance.vue42
3 files changed, 58 insertions, 3 deletions
diff --git a/packages/frontend/src/components/MkServerSetupWizard.vue b/packages/frontend/src/components/MkServerSetupWizard.vue
index e5614d63d7..23e0e85bc9 100644
--- a/packages/frontend/src/components/MkServerSetupWizard.vue
+++ b/packages/frontend/src/components/MkServerSetupWizard.vue
@@ -55,7 +55,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #icon><i class="ti ti-planet"></i></template>
<div class="_gaps_s">
- <div>{{ i18n.ts._serverSetupWizard.doYouConnectToFediverse_description1 }}<br>{{ i18n.ts._serverSetupWizard.doYouConnectToFediverse_description2 }}</div>
+ <div>{{ i18n.ts._serverSetupWizard.doYouConnectToFediverse_description1 }}<br>{{ i18n.ts._serverSetupWizard.doYouConnectToFediverse_description2 }}<br><MkLink target="_blank" url="https://wikipedia.org/wiki/Fediverse">{{ i18n.ts.learnMore }}</MkLink></div>
<MkRadios v-model="q_federation" :vertical="true">
<option value="yes">{{ i18n.ts.yes }}</option>
@@ -63,6 +63,11 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkRadios>
<MkInfo v-if="q_federation === 'yes'">{{ i18n.ts._serverSetupWizard.youCanConfigureMoreFederationSettingsLater }}</MkInfo>
+
+ <MkSwitch v-if="q_federation === 'yes'" v-model="q_remoteContentsCleaning">
+ <template #label>{{ i18n.ts._serverSetupWizard.remoteContentsCleaning }}</template>
+ <template #caption>{{ i18n.ts._serverSetupWizard.remoteContentsCleaning_description }}</template>
+ </MkSwitch>
</div>
</MkFolder>
@@ -111,6 +116,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<div>{{ serverSettings.federation === 'none' ? i18n.ts.no : i18n.ts.all }}</div>
</div>
<div>
+ <div><b>{{ i18n.ts._serverSettings.remoteNotesCleaning }}:</b></div>
+ <div>{{ serverSettings.enableRemoteNotesCleaning ? i18n.ts.yes : i18n.ts.no }}</div>
+ </div>
+ <div>
<div><b>FTT:</b></div>
<div>{{ serverSettings.enableFanoutTimeline ? i18n.ts.yes : i18n.ts.no }}</div>
</div>
@@ -185,7 +194,9 @@ import { misskeyApi } from '@/utility/misskey-api.js';
import { i18n } from '@/i18n.js';
import MkFolder from '@/components/MkFolder.vue';
import MkRadios from '@/components/MkRadios.vue';
+import MkSwitch from '@/components/MkSwitch.vue';
import MkInfo from '@/components/MkInfo.vue';
+import MkLink from '@/components/MkLink.vue';
const emit = defineEmits<{
(ev: 'finished'): void;
@@ -202,6 +213,7 @@ const q_name = ref(currentMeta.name ?? '');
const q_use = ref('single');
const q_scale = ref('small');
const q_federation = ref(currentMeta.federation === 'none' ? 'no' : 'yes');
+const q_remoteContentsCleaning = ref(currentMeta.enableRemoteNotesCleaning);
const q_adminName = ref(currentMeta.maintainerName ?? '');
const q_adminEmail = ref(currentMeta.maintainerEmail ?? '');
@@ -219,6 +231,7 @@ const serverSettings = computed<Misskey.entities.AdminUpdateMetaRequest>(() => {
emailRequiredForSignup: q_use.value === 'open',
enableIpLogging: q_use.value === 'open',
federation: q_federation.value === 'yes' ? 'all' : 'none',
+ enableRemoteNotesCleaning: q_remoteContentsCleaning.value,
enableFanoutTimeline: true,
enableFanoutTimelineDbFallback: q_use.value === 'single',
enableReactionsBuffering,
diff --git a/packages/frontend/src/pages/admin/job-queue.job.vue b/packages/frontend/src/pages/admin/job-queue.job.vue
index 659aa02b50..4ecdb74199 100644
--- a/packages/frontend/src/pages/admin/job-queue.job.vue
+++ b/packages/frontend/src/pages/admin/job-queue.job.vue
@@ -98,7 +98,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkKeyValue>
<MkKeyValue v-if="job.progress != null && typeof job.progress === 'number' && job.progress > 0">
<template #key>Progress</template>
- <template #value>{{ Math.floor(job.progress * 100) }}%</template>
+ <template #value>{{ Math.floor(job.progress) }}%</template>
</MkKeyValue>
</div>
<MkFolder :withSpacer="false">
@@ -150,7 +150,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkButton><i class="ti ti-device-floppy"></i> Update</MkButton>
</div>
<div v-else-if="tab === 'result'">
- <MkCode :code="String(job.returnValue)"/>
+ <MkCode :code="JSON5.stringify(job.returnValue, null, '\t')" lang="json5"/>
</div>
<div v-else-if="tab === 'error'" class="_gaps_s">
<MkCode v-for="log in job.stacktrace" :code="log" lang="stacktrace"/>
diff --git a/packages/frontend/src/pages/admin/performance.vue b/packages/frontend/src/pages/admin/performance.vue
index c28621b11e..ff3a5b9d7f 100644
--- a/packages/frontend/src/pages/admin/performance.vue
+++ b/packages/frontend/src/pages/admin/performance.vue
@@ -101,6 +101,35 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkSwitch>
</div>
</MkFolder>
+
+ <MkFolder :defaultOpen="true">
+ <template #icon><i class="ti ti-recycle"></i></template>
+ <template #label>Remote Notes Cleaning (仮)</template>
+ <template v-if="remoteNotesCleaningForm.savedState.enableRemoteNotesCleaning" #suffix>Enabled</template>
+ <template v-else #suffix>Disabled</template>
+ <template v-if="remoteNotesCleaningForm.modified.value" #footer>
+ <MkFormFooter :form="remoteNotesCleaningForm"/>
+ </template>
+
+ <div class="_gaps_m">
+ <MkSwitch v-model="remoteNotesCleaningForm.state.enableRemoteNotesCleaning">
+ <template #label>{{ i18n.ts.enable }}<span v-if="remoteNotesCleaningForm.modifiedStates.enableRemoteNotesCleaning" class="_modified">{{ i18n.ts.modified }}</span></template>
+ <template #caption>{{ i18n.ts._serverSettings.remoteNotesCleaning_description }}</template>
+ </MkSwitch>
+
+ <template v-if="remoteNotesCleaningForm.state.enableRemoteNotesCleaning">
+ <MkInput v-model="remoteNotesCleaningForm.state.remoteNotesCleaningExpiryDaysForEachNotes" type="number">
+ <template #label>{{ i18n.ts._serverSettings.remoteNotesCleaningExpiryDaysForEachNotes }} ({{ i18n.ts.inDays }})<span v-if="remoteNotesCleaningForm.modifiedStates.remoteNotesCleaningExpiryDaysForEachNotes" class="_modified">{{ i18n.ts.modified }}</span></template>
+ <template #suffix>{{ i18n.ts._time.day }}</template>
+ </MkInput>
+
+ <MkInput v-model="remoteNotesCleaningForm.state.remoteNotesCleaningMaxProcessingDurationInMinutes" type="number">
+ <template #label>{{ i18n.ts._serverSettings.remoteNotesCleaningMaxProcessingDuration }} ({{ i18n.ts.inMinutes }})<span v-if="remoteNotesCleaningForm.modifiedStates.remoteNotesCleaningMaxProcessingDurationInMinutes" class="_modified">{{ i18n.ts.modified }}</span></template>
+ <template #suffix>{{ i18n.ts._time.minute }}</template>
+ </MkInput>
+ </template>
+ </div>
+ </MkFolder>
</div>
</div>
</PageWithHeader>
@@ -196,6 +225,19 @@ const rbtForm = useForm({
fetchInstance(true);
});
+const remoteNotesCleaningForm = useForm({
+ enableRemoteNotesCleaning: meta.enableRemoteNotesCleaning,
+ remoteNotesCleaningExpiryDaysForEachNotes: meta.remoteNotesCleaningExpiryDaysForEachNotes,
+ remoteNotesCleaningMaxProcessingDurationInMinutes: meta.remoteNotesCleaningMaxProcessingDurationInMinutes,
+}, async (state) => {
+ await os.apiWithDialog('admin/update-meta', {
+ enableRemoteNotesCleaning: state.enableRemoteNotesCleaning,
+ remoteNotesCleaningExpiryDaysForEachNotes: state.remoteNotesCleaningExpiryDaysForEachNotes,
+ remoteNotesCleaningMaxProcessingDurationInMinutes: state.remoteNotesCleaningMaxProcessingDurationInMinutes,
+ });
+ fetchInstance(true);
+});
+
const headerActions = computed(() => []);
const headerTabs = computed(() => []);