fix: Use promiseLimit
This commit is contained in:
parent
04605283f9
commit
29c6bcd714
3 changed files with 38 additions and 54 deletions
|
|
@ -49,8 +49,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import type { SortOrder } from '@/components/MkSortOrderEditor.define.js';
|
||||
import type { GridSortOrderKey } from './custom-emojis-manager.impl.js';
|
||||
import type {SortOrder} from '@/components/MkSortOrderEditor.define.js';
|
||||
import type {GridSortOrderKey} from './custom-emojis-manager.impl.js';
|
||||
|
||||
export type EmojiSearchQuery = {
|
||||
name: string | null;
|
||||
|
|
@ -91,6 +91,7 @@ import { selectFile } from '@/utility/select-file.js';
|
|||
import { copyGridDataToClipboard, removeDataFromGrid } from '@/components/grid/grid-utils.js';
|
||||
import { useLoading } from '@/components/hook/useLoading.js';
|
||||
import { retryOnThrottled } from '@@/js/retry-on-throttled';
|
||||
import promiseLimit from "promise-limit";
|
||||
|
||||
type GridItem = {
|
||||
checked: boolean;
|
||||
|
|
@ -355,11 +356,8 @@ async function onUpdateButtonClicked() {
|
|||
};
|
||||
|
||||
const action = async (): Promise<ApiResponse[]> => {
|
||||
const results: ApiResponse[] = [];
|
||||
for (const item of updatedItems) {
|
||||
results.push(await execute(item));
|
||||
}
|
||||
return results;
|
||||
const limit = promiseLimit<ApiResponse>(2);
|
||||
return await Promise.all(updatedItems.map(async it => limit(() => execute(it))));
|
||||
};
|
||||
|
||||
const result = await os.promiseDialog(action());
|
||||
|
|
|
|||
|
|
@ -74,34 +74,31 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<script setup lang="ts">
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { onMounted, ref, useCssModule } from 'vue';
|
||||
import { retryOnThrottled } from '@@/js/retry-on-throttled';
|
||||
import type { RequestLogItem } from '@/pages/admin/custom-emojis-manager.impl.js';
|
||||
import type { GridCellValidationEvent, GridCellValueChangeEvent, GridEvent } from '@/components/grid/grid-event.js';
|
||||
import type { DroppedFile } from '@/utility/file-drop.js';
|
||||
import type { GridSetting } from '@/components/grid/grid.js';
|
||||
import type { GridRow } from '@/components/grid/row.js';
|
||||
import { misskeyApi } from '@/utility/misskey-api.js';
|
||||
import {
|
||||
emptyStrToEmptyArray,
|
||||
emptyStrToNull,
|
||||
roleIdsParser,
|
||||
} from '@/pages/admin/custom-emojis-manager.impl.js';
|
||||
import {onMounted, ref, useCssModule} from 'vue';
|
||||
import {retryOnThrottled} from '@@/js/retry-on-throttled';
|
||||
import promiseLimit from 'promise-limit';
|
||||
import type {RequestLogItem} from '@/pages/admin/custom-emojis-manager.impl.js';
|
||||
import {emptyStrToEmptyArray, emptyStrToNull, roleIdsParser} from '@/pages/admin/custom-emojis-manager.impl.js';
|
||||
import type {GridCellValidationEvent, GridCellValueChangeEvent, GridEvent} from '@/components/grid/grid-event.js';
|
||||
import type {DroppedFile} from '@/utility/file-drop.js';
|
||||
import {extractDroppedItems, flattenDroppedFiles} from '@/utility/file-drop.js';
|
||||
import type {GridSetting} from '@/components/grid/grid.js';
|
||||
import type {GridRow} from '@/components/grid/row.js';
|
||||
import {misskeyApi} from '@/utility/misskey-api.js';
|
||||
import MkGrid from '@/components/grid/MkGrid.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import {i18n} from '@/i18n.js';
|
||||
import MkSelect from '@/components/MkSelect.vue';
|
||||
import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkFolder from '@/components/MkFolder.vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { validators } from '@/components/grid/cell-validators.js';
|
||||
import { chooseFileFromDrive, chooseFileFromPc } from '@/utility/select-file.js';
|
||||
import { uploadFile } from '@/utility/upload.js';
|
||||
import { extractDroppedItems, flattenDroppedFiles } from '@/utility/file-drop.js';
|
||||
import {validators} from '@/components/grid/cell-validators.js';
|
||||
import {chooseFileFromDrive, chooseFileFromPc} from '@/utility/select-file.js';
|
||||
import {uploadFile} from '@/utility/upload.js';
|
||||
import XRegisterLogs from '@/pages/admin/custom-emojis-manager.logs.vue';
|
||||
import { copyGridDataToClipboard } from '@/components/grid/grid-utils.js';
|
||||
import {copyGridDataToClipboard} from '@/components/grid/grid-utils.js';
|
||||
|
||||
import { prefer } from '@/preferences.js';
|
||||
import {prefer} from '@/preferences.js';
|
||||
|
||||
const MAXIMUM_EMOJI_REGISTER_COUNT = 100;
|
||||
|
||||
|
|
@ -275,12 +272,8 @@ const importEmojis = async (targets: any[]): Promise<void> => {
|
|||
}
|
||||
|
||||
async function action(): Promise<ApiResponse[]> {
|
||||
const results: ApiResponse[] = [];
|
||||
for (const item of targets) {
|
||||
results.push(await execute(item, 'admin/emoji/copy', { emojiId: item.id }));
|
||||
}
|
||||
|
||||
return results;
|
||||
const limit = promiseLimit<ApiResponse>(3);
|
||||
return await Promise.all(targets.map(item => limit(() => execute(item, 'admin/emoji/copy', { emojiId: item.id }))));
|
||||
}
|
||||
|
||||
const result = await os.promiseDialog(action());
|
||||
|
|
@ -314,23 +307,17 @@ const onRegistryClicked = async (): Promise<void> => {
|
|||
const items = gridItems.value.slice(0, MAXIMUM_EMOJI_REGISTER_COUNT);
|
||||
|
||||
async function action(): Promise<ApiResponse[]> {
|
||||
const results: ApiResponse[] = [];
|
||||
for (const item of items) {
|
||||
results.push(
|
||||
await execute(item, 'admin/emoji/add', {
|
||||
name: item.name,
|
||||
category: emptyStrToNull(item.category),
|
||||
aliases: emptyStrToEmptyArray(item.aliases),
|
||||
license: emptyStrToNull(item.license),
|
||||
isSensitive: item.isSensitive,
|
||||
localOnly: item.localOnly,
|
||||
roleIdsThatCanBeUsedThisEmojiAsReaction: item.roleIdsThatCanBeUsedThisEmojiAsReaction.map((it: any) => it.id),
|
||||
fileId: item.fileId!,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
return results;
|
||||
const limit = promiseLimit<ApiResponse>(2);
|
||||
return await Promise.all(items.map(item => limit(() => execute(item, 'admin/emoji/add', {
|
||||
name: item.name,
|
||||
category: emptyStrToNull(item.category),
|
||||
aliases: emptyStrToEmptyArray(item.aliases),
|
||||
license: emptyStrToNull(item.license),
|
||||
isSensitive: item.isSensitive,
|
||||
localOnly: item.localOnly,
|
||||
roleIdsThatCanBeUsedThisEmojiAsReaction: item.roleIdsThatCanBeUsedThisEmojiAsReaction.map((it: any) => it.id),
|
||||
fileId: item.fileId!,
|
||||
}))));
|
||||
}
|
||||
|
||||
const result = await os.promiseDialog(action());
|
||||
|
|
|
|||
|
|
@ -161,6 +161,7 @@ import { deviceKind } from '@/utility/device-kind.js';
|
|||
import MkPagingButtons from '@/components/MkPagingButtons.vue';
|
||||
import MkSortOrderEditor from '@/components/MkSortOrderEditor.vue';
|
||||
import { useLoading } from '@/components/hook/useLoading.js';
|
||||
import promiseLimit from "promise-limit";
|
||||
|
||||
type GridItem = {
|
||||
checked: boolean;
|
||||
|
|
@ -339,10 +340,8 @@ const importEmojis = async (targets: any[]): Promise<void> => {
|
|||
return;
|
||||
}
|
||||
|
||||
const results: ApiResponse[] = [];
|
||||
for (const item of targets) {
|
||||
results.push(await execute(item));
|
||||
}
|
||||
const limit = promiseLimit<ApiResponse>(2);
|
||||
const results = await Promise.all(targets.map(it => limit(() => execute(it))));
|
||||
|
||||
const failedItems = results.filter(it => !it.success);
|
||||
if (failedItems.length > 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue