fix register logs

This commit is contained in:
samunohito 2024-01-29 11:28:48 +09:00
parent e0ad0f2aae
commit de07347087
1 changed files with 60 additions and 3 deletions

View File

@ -20,6 +20,26 @@
</div> </div>
</MkFolder> </MkFolder>
<MkFolder>
<template #icon><i class="ti ti-notes"></i></template>
<template #label>登録ログ</template>
<template #caption>
絵文字登録時のログが表示されます登録操作を行ったりページをリロードすると消えます
</template>
<div>
<div v-if="registerLogs.length > 0" style="overflow-y: scroll;">
<MkGrid
:data="convertedRegisterLogs"
:columnSettings="registerLogColumnSettings"
/>
</div>
<div v-else>
ログはありません
</div>
</div>
</MkFolder>
<div <div
:class="$style.uploadBox" :class="$style.uploadBox"
@dragover.prevent @dragover.prevent
@ -44,7 +64,9 @@
v-if="gridItems.length > 0" v-if="gridItems.length > 0"
:class="$style.buttons" :class="$style.buttons"
> >
<MkButton primary :disabled="registerButtonDisabled" @click="onRegistryClicked">{{ i18n.ts.registration }}</MkButton> <MkButton primary :disabled="registerButtonDisabled" @click="onRegistryClicked">
{{ i18n.ts.registration }}
</MkButton>
<MkButton @click="onClearClicked">{{ i18n.ts.clear }}</MkButton> <MkButton @click="onClearClicked">{{ i18n.ts.clear }}</MkButton>
</div> </div>
</div> </div>
@ -73,10 +95,22 @@ type FolderItem = {
name: string; name: string;
}; };
type UploadResult = { key: string, item: IGridItem, success: boolean, err: any }; type UploadResult = {
key: string,
item: IGridItem,
success: boolean,
err?: Error
};
type RegisterLogItem = {
failed: boolean;
url: string;
name: string;
error?: string;
};
const columnSettings: ColumnSetting[] = [ const columnSettings: ColumnSetting[] = [
{ bindTo: 'url', title: '🎨', type: 'image', editable: false, width: 50, validators: [required] }, { bindTo: 'url', icon: 'ti-icons', type: 'image', editable: true, width: 50, validators: [required] },
{ bindTo: 'name', title: 'name', type: 'text', editable: true, width: 140, validators: [required] }, { bindTo: 'name', title: 'name', type: 'text', editable: true, width: 140, validators: [required] },
{ bindTo: 'category', title: 'category', type: 'text', editable: true, width: 140 }, { bindTo: 'category', title: 'category', type: 'text', editable: true, width: 140 },
{ bindTo: 'aliases', title: 'aliases', type: 'text', editable: true, width: 140 }, { bindTo: 'aliases', title: 'aliases', type: 'text', editable: true, width: 140 },
@ -86,6 +120,13 @@ const columnSettings: ColumnSetting[] = [
{ bindTo: 'roleIdsThatCanBeUsedThisEmojiAsReaction', title: 'role', type: 'text', editable: true, width: 100 }, { bindTo: 'roleIdsThatCanBeUsedThisEmojiAsReaction', title: 'role', type: 'text', editable: true, width: 100 },
]; ];
const registerLogColumnSettings: ColumnSetting[] = [
{ bindTo: 'failed', title: 'failed', type: 'boolean', editable: false, width: 50 },
{ bindTo: 'url', icon: 'ti-icons', type: 'image', editable: false, width: 50 },
{ bindTo: 'name', title: 'name', type: 'text', editable: false, width: 140 },
{ bindTo: 'error', title: 'log', type: 'text', editable: false, width: 'auto' },
];
const emit = defineEmits<{ const emit = defineEmits<{
(ev: 'operation:registered'): void; (ev: 'operation:registered'): void;
}>(); }>();
@ -95,8 +136,10 @@ const gridItems = ref<IGridItem[]>([]);
const selectedFolderId = ref(defaultStore.state.uploadFolder); const selectedFolderId = ref(defaultStore.state.uploadFolder);
const keepOriginalUploading = ref(defaultStore.state.keepOriginalUploading); const keepOriginalUploading = ref(defaultStore.state.keepOriginalUploading);
const registerButtonDisabled = ref<boolean>(false); const registerButtonDisabled = ref<boolean>(false);
const registerLogs = ref<RegisterLogItem[]>([]);
const convertedGridItems = computed(() => gridItems.value.map(it => it as Record<string, any>)); const convertedGridItems = computed(() => gridItems.value.map(it => it as Record<string, any>));
const convertedRegisterLogs = computed(() => registerLogs.value.map(it => it as Record<string, any>));
async function onRegistryClicked() { async function onRegistryClicked() {
const dialogSelection = await os.confirm({ const dialogSelection = await os.confirm({
@ -135,6 +178,20 @@ async function onRegistryClicked() {
const result = await os.promiseDialog(upload()); const result = await os.promiseDialog(upload());
const failedItems = result.filter(it => !it.success); const failedItems = result.filter(it => !it.success);
if (failedItems.length > 0) {
await os.alert({
type: 'error',
title: 'エラー',
text: '絵文字の登録に失敗しました。詳細は登録ログをご確認ください。',
});
}
registerLogs.value = result.map(it => ({
failed: !it.success,
url: it.item.url,
name: it.item.name,
error: it.err ? JSON.stringify(it.err) : undefined,
}));
gridItems.value = failedItems.map(it => it.item); gridItems.value = failedItems.map(it => it.item);
emit('operation:registered'); emit('operation:registered');