diff --git a/enjoy/src/i18n/en.json b/enjoy/src/i18n/en.json index 627a3822..79a6db7d 100644 --- a/enjoy/src/i18n/en.json +++ b/enjoy/src/i18n/en.json @@ -297,7 +297,8 @@ "addResource": "add resource", "addResourceFromUrlOrLocal": "add resource from url or local", "resourceAdded": "Resource added", - "resourcesAdded": "{{fulfilled}} resources added, {{rejected}} failed to add.", + "resourcesAdded": "{{fulfilled}} resources added, {{rejected}} failed to add. {{reasons}}", + "resourcesAddInBatchLimitError": "You can only add {{limit}} resources at a time", "editResource": "edit resource", "deleteResource": "delete resource", "deleteResourceConfirmation": "Are you sure to delete {{name}}?", diff --git a/enjoy/src/i18n/zh-CN.json b/enjoy/src/i18n/zh-CN.json index adb6a9c0..5d4a063d 100644 --- a/enjoy/src/i18n/zh-CN.json +++ b/enjoy/src/i18n/zh-CN.json @@ -297,7 +297,8 @@ "addResource": "添加资源", "addResourceFromUrlOrLocal": "添加资源, 可以是 URL 或本地文件", "resourceAdded": "资源添加成功", - "resourcesAdded": "成功添加 {{fulfilled}} 个资源, {{rejected}} 个资源添加失败", + "resourcesAdded": "成功添加 {{fulfilled}} 个资源, {{rejected}} 个资源添加失败。{{reasons}}", + "resourcesAddInBatchLimitError": "一次最多添加 {{limit}} 个资源", "editResource": "编辑资源", "deleteResource": "删除资源", "deleteResourceConfirmation": "您确定要删除资源 {{name}} 吗?", diff --git a/enjoy/src/renderer/components/medias/add-media-button.tsx b/enjoy/src/renderer/components/medias/add-media-button.tsx index 9db87cf9..407d071f 100644 --- a/enjoy/src/renderer/components/medias/add-media-button.tsx +++ b/enjoy/src/renderer/components/medias/add-media-button.tsx @@ -40,23 +40,42 @@ export const AddMediaButton = (props: { type?: "Audio" | "Video" }) => { const handleSubmit = async () => { if (!uri) return; + if (files.length > 50) { + toast.error(t("resourcesAddInBatchLimitError", { limit: 50 })); + return; + } + setSubmitting(true); - setTimeout(() => { - setSubmitting(false); - }, 3000); - - if (files.length > 0) { + if (files.length > 1) { Promise.allSettled(files.map((f) => EnjoyApp.audios.create(f))) .then((results) => { - const fulfilled = results.filter( - (r) => r.status === "fulfilled" - ).length; - const rejected = results.filter( - (r) => r.status === "rejected" - ).length; + const fulfilled = results.filter((r) => r.status === "fulfilled"); + const rejected = results.filter((r) => r.status === "rejected"); - toast.success(t("resourcesAdded", { fulfilled, rejected })); + if (fulfilled.length === 0) { + toast.error( + t("resourcesAdded", { + fulfilled: fulfilled.length, + rejected: rejected.length, + }) + ); + } else if (rejected.length > 0) { + toast.warning( + t("resourcesAdded", { + fulfilled: fulfilled.length, + rejected: rejected.length, + reasons: rejected.map((r: any) => r.reason?.message).join("; "), + }) + ); + } else { + toast.success( + t("resourcesAdded", { + fulfilled: fulfilled.length, + rejected: rejected.length, + }) + ); + } }) .catch((err) => { toast.error(err.message);