refresh instance info after applying moderation rules, and make sure that API calls show a dialog while running

This commit is contained in:
Hazelnoot 2025-05-29 22:42:40 -04:00
parent 5b8764d6df
commit 30f0e5002c

View file

@ -356,17 +356,20 @@ const followersPagination = {
if (iAmModerator) { if (iAmModerator) {
watch(moderationNote, async () => { watch(moderationNote, async () => {
if (instance.value == null) return; if (instance.value == null) return;
await misskeyApi('admin/federation/update-instance', { host: instance.value.host, moderationNote: moderationNote.value }); await os.apiWithDialog('admin/federation/update-instance', { host: instance.value.host, moderationNote: moderationNote.value });
}); });
} }
async function fetch(): Promise<void> { async function fetch(): Promise<void> {
if (iAmAdmin) { const [m, i] = await Promise.all([
meta.value = await misskeyApi('admin/meta'); iAmAdmin ? misskeyApi('admin/meta') : null,
} misskeyApi('federation/show-instance', {
instance.value = await misskeyApi('federation/show-instance', { host: props.host,
host: props.host, }),
}); ]);
meta.value = m;
instance.value = i;
suspensionState.value = instance.value?.suspensionState ?? 'none'; suspensionState.value = instance.value?.suspensionState ?? 'none';
isSuspended.value = suspensionState.value !== 'none'; isSuspended.value = suspensionState.value !== 'none';
isBlocked.value = instance.value?.isBlocked ?? false; isBlocked.value = instance.value?.isBlocked ?? false;
@ -381,80 +384,106 @@ async function fetch(): Promise<void> {
async function toggleBlock(): Promise<void> { async function toggleBlock(): Promise<void> {
if (!iAmAdmin) return; if (!iAmAdmin) return;
if (!meta.value) throw new Error('No meta?'); await os.promiseDialog(async () => {
if (!instance.value) throw new Error('No instance?'); if (!meta.value) throw new Error('No meta?');
const { host } = instance.value; if (!instance.value) throw new Error('No instance?');
await misskeyApi('admin/update-meta', { const { host } = instance.value;
blockedHosts: isBlocked.value ? meta.value.blockedHosts.concat([host]) : meta.value.blockedHosts.filter(x => x !== host), await os.apiWithDialog('admin/update-meta', {
blockedHosts: isBlocked.value ? meta.value.blockedHosts.concat([host]) : meta.value.blockedHosts.filter(x => x !== host),
});
await fetch();
}); });
} }
async function toggleSilenced(): Promise<void> { async function toggleSilenced(): Promise<void> {
if (!iAmAdmin) return; if (!iAmAdmin) return;
if (!meta.value) throw new Error('No meta?'); await os.promiseDialog(async () => {
if (!instance.value) throw new Error('No instance?'); if (!meta.value) throw new Error('No meta?');
const { host } = instance.value; if (!instance.value) throw new Error('No instance?');
const silencedHosts = meta.value.silencedHosts ?? []; const { host } = instance.value;
await misskeyApi('admin/update-meta', { const silencedHosts = meta.value.silencedHosts ?? [];
silencedHosts: isSilenced.value ? silencedHosts.concat([host]) : silencedHosts.filter(x => x !== host), await os.promiseDialog(async () => {
await misskeyApi('admin/update-meta', {
silencedHosts: isSilenced.value ? silencedHosts.concat([host]) : silencedHosts.filter(x => x !== host),
});
await fetch();
});
}); });
} }
async function toggleMediaSilenced(): Promise<void> { async function toggleMediaSilenced(): Promise<void> {
if (!iAmAdmin) return; if (!iAmAdmin) return;
if (!meta.value) throw new Error('No meta?'); await os.promiseDialog(async () => {
if (!instance.value) throw new Error('No instance?'); if (!meta.value) throw new Error('No meta?');
const { host } = instance.value; if (!instance.value) throw new Error('No instance?');
const mediaSilencedHosts = meta.value.mediaSilencedHosts ?? []; const { host } = instance.value;
await misskeyApi('admin/update-meta', { const mediaSilencedHosts = meta.value.mediaSilencedHosts ?? [];
mediaSilencedHosts: isMediaSilenced.value ? mediaSilencedHosts.concat([host]) : mediaSilencedHosts.filter(x => x !== host), await misskeyApi('admin/update-meta', {
mediaSilencedHosts: isMediaSilenced.value ? mediaSilencedHosts.concat([host]) : mediaSilencedHosts.filter(x => x !== host),
});
await fetch();
}); });
} }
async function toggleSuspended(): Promise<void> { async function toggleSuspended(): Promise<void> {
if (!iAmModerator) return; if (!iAmModerator) return;
if (!instance.value) throw new Error('No instance?'); await os.promiseDialog(async () => {
suspensionState.value = isSuspended.value ? 'manuallySuspended' : 'none'; if (!instance.value) throw new Error('No instance?');
await misskeyApi('admin/federation/update-instance', { suspensionState.value = isSuspended.value ? 'manuallySuspended' : 'none';
host: instance.value.host, await misskeyApi('admin/federation/update-instance', {
isSuspended: isSuspended.value, host: instance.value.host,
isSuspended: isSuspended.value,
});
await fetch();
}); });
} }
async function toggleNSFW(): Promise<void> { async function toggleNSFW(): Promise<void> {
if (!iAmModerator) return; if (!iAmModerator) return;
if (!instance.value) throw new Error('No instance?'); await os.promiseDialog(async () => {
await misskeyApi('admin/federation/update-instance', { if (!instance.value) throw new Error('No instance?');
host: instance.value.host, await misskeyApi('admin/federation/update-instance', {
isNSFW: isNSFW.value, host: instance.value.host,
isNSFW: isNSFW.value,
});
await fetch();
}); });
} }
async function toggleRejectReports(): Promise<void> { async function toggleRejectReports(): Promise<void> {
if (!iAmModerator) return; if (!iAmModerator) return;
if (!instance.value) throw new Error('No instance?'); await os.promiseDialog(async () => {
await misskeyApi('admin/federation/update-instance', { if (!instance.value) throw new Error('No instance?');
host: instance.value.host, await misskeyApi('admin/federation/update-instance', {
rejectReports: rejectReports.value, host: instance.value.host,
rejectReports: rejectReports.value,
});
await fetch();
}); });
} }
async function toggleRejectQuotes(): Promise<void> { async function toggleRejectQuotes(): Promise<void> {
if (!iAmModerator) return; if (!iAmModerator) return;
if (!instance.value) throw new Error('No instance?'); await os.promiseDialog(async () => {
await misskeyApi('admin/federation/update-instance', { if (!instance.value) throw new Error('No instance?');
host: instance.value.host, await misskeyApi('admin/federation/update-instance', {
rejectQuotes: rejectQuotes.value, host: instance.value.host,
rejectQuotes: rejectQuotes.value,
});
await fetch();
}); });
} }
function refreshMetadata(): void { async function refreshMetadata(): Promise<void> {
if (!iAmModerator) return; if (!iAmModerator) return;
if (!instance.value) throw new Error('No instance?'); await os.promiseDialog(async () => {
misskeyApi('admin/federation/refresh-remote-instance-metadata', { if (!instance.value) throw new Error('No instance?');
host: instance.value.host, await misskeyApi('admin/federation/refresh-remote-instance-metadata', {
host: instance.value.host,
});
await fetch();
}); });
os.alert({ await os.alert({
text: 'Refresh requested', text: 'Refresh requested',
}); });
} }
@ -469,14 +498,12 @@ async function deleteAllFiles(): Promise<void> {
}); });
if (confirm.canceled) return; if (confirm.canceled) return;
await Promise.all([ await os.apiWithDialog('admin/federation/delete-all-files', {
misskeyApi('admin/federation/delete-all-files', { host: instance.value.host,
host: instance.value.host, });
}), await os.alert({
os.alert({ text: i18n.ts.deleteAllFilesQueued,
text: i18n.ts.deleteAllFilesQueued, });
}),
]);
} }
async function severAllFollowRelations(): Promise<void> { async function severAllFollowRelations(): Promise<void> {
@ -493,14 +520,12 @@ async function severAllFollowRelations(): Promise<void> {
}); });
if (confirm.canceled) return; if (confirm.canceled) return;
await Promise.all([ await os.apiWithDialog('admin/federation/remove-all-following', {
misskeyApi('admin/federation/remove-all-following', { host: instance.value.host,
host: instance.value.host, });
}), await os.alert({
os.alert({ text: i18n.tsx.severAllFollowRelationsQueued({ host: instance.value.host }),
text: i18n.tsx.severAllFollowRelationsQueued({ host: instance.value.host }), });
}),
]);
} }
fetch(); fetch();