From e3d8e49ce0f3522fb811d660b1d64ed7fb19822e Mon Sep 17 00:00:00 2001
From: Dorian Koch <doriank@fsmpi.rwth-aachen.de>
Date: Thu, 5 Sep 2024 21:34:55 +0200
Subject: [PATCH] Translations for Download Manager, Fix error handling in
 lecture import

---
 lang/de.slf                        | 10 ++++++++++
 lang/en.slf                        | 10 ++++++++++
 src/components/DownloadManager.tsx | 20 ++++++++++++-------
 src/pages/internal/import.tsx      | 32 ++++++++++++++++++++++++------
 4 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/lang/de.slf b/lang/de.slf
index 97792e6..64d8631 100644
--- a/lang/de.slf
+++ b/lang/de.slf
@@ -150,6 +150,7 @@ ui.generic.create = "Erstellen"
 // ui.generic.download = "Download"
 ui.generic.search = "Suche"
 ui.generic.login = "Anmelden"
+ui.generic.close = "Schließen"
 
 ui.generic.filter.any = "Alle"
 
@@ -167,6 +168,15 @@ ui.course_list.show_only_public_courses = "Nur öffentliche Veranstaltungen anze
 ui.course.back_to_list = "Zur Kursliste"
 ui.course.download_all_videos = "Download aller Videos"
 
+// ui.download_manager.title = "Download Manager"
+// ui.download_manager.start_download = "Start Download"
+// ui.download_manager.stop_download = "Stop Download"
+ui.download_manager.select_all = "Alle auswählen"
+ui.download_manager.select_none = "Keine auswählen"
+ui.download_manager.quality = "Qualität"
+// ui.download_manager.download_now = #ui.generic.download
+// ui.download_manager.close = #ui.generic.close
+
 ui.video_player.back_to_course = "Zur Veranstaltungsseite"
 ui.video_player.suggest_chapter = "Kapitelmarker vorschlagen"
 ui.video_player.embed = "Einbetten"
diff --git a/lang/en.slf b/lang/en.slf
index 8b09fb8..956c5f4 100644
--- a/lang/en.slf
+++ b/lang/en.slf
@@ -154,6 +154,7 @@ ui.generic.create = "Create"
 ui.generic.download = "Download"
 ui.generic.search = "Search"
 ui.generic.login = "Login"
+ui.generic.close = "Close"
 
 ui.generic.filter.any = "Any"
 
@@ -171,6 +172,15 @@ ui.course_list.show_only_public_courses = "Show only public courses"
 ui.course.back_to_list = "Back to course list"
 ui.course.download_all_videos = "Download all videos"
 
+ui.download_manager.title = "Download Manager"
+ui.download_manager.start_download = "Start Download"
+ui.download_manager.stop_download = "Stop Download"
+ui.download_manager.select_all = "Select all"
+ui.download_manager.select_none = "Select none"
+ui.download_manager.quality = "Quality"
+ui.download_manager.download_now = #ui.generic.download
+ui.download_manager.close = #ui.generic.close
+
 ui.video_player.back_to_course = "Back to course"
 ui.video_player.suggest_chapter = "Suggest chapter"
 ui.video_player.embed = "Embed"
diff --git a/src/components/DownloadManager.tsx b/src/components/DownloadManager.tsx
index 3881c3a..161929b 100644
--- a/src/components/DownloadManager.tsx
+++ b/src/components/DownloadManager.tsx
@@ -408,7 +408,7 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
                         className="btn btn-primary"
                         disabled={chosenQualities.current.get(lecture.id) === undefined}
                     >
-                        Download Now
+                        {language.get("ui.download_manager.download_now")}
                     </button>
                 </a>
             );
@@ -566,7 +566,7 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
             </button>
             <Modal show={showModal} size="xl" onHide={closeClicked}>
                 <Modal.Header closeButton>
-                    <Modal.Title>Download Manager</Modal.Title>
+                    <Modal.Title>{language.get("ui.download_manager.title")}</Modal.Title>
                 </Modal.Header>
                 <Modal.Body>
                     <div className="mb-2">
@@ -582,7 +582,9 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
                                     (downloadStarted ? "bi-pause-fill" : "bi-play-fill")
                                 }
                             />
-                            {downloadStarted ? "Stop" : "Start"} Download
+                            {downloadStarted
+                                ? language.get("ui.download_manager.stop_download")
+                                : language.get("ui.download_manager.start_download")}
                         </button>
                     </div>
                     <div className="mb-2 d-flex">
@@ -592,7 +594,7 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
                             onClick={selectAll}
                             disabled={downloadStarted}
                         >
-                            Select All
+                            {language.get("ui.download_manager.select_all")}
                         </button>
 
                         <button
@@ -601,10 +603,14 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
                             onClick={selectNone}
                             disabled={downloadStarted}
                         >
-                            Select None
+                            {language.get("ui.download_manager.select_none")}
                         </button>
 
-                        <DropdownButton variant="primary" title={"Quality"} className="">
+                        <DropdownButton
+                            variant="primary"
+                            title={language.get("ui.download_manager.quality")}
+                            className=""
+                        >
                             {allQualities.map((q) => (
                                 <DropdownItem
                                     key={q}
@@ -630,7 +636,7 @@ export default function DownloadAllModal({ course }: { course: GetCourseResponse
                         onClick={closeClicked}
                         disabled={downloadStarted}
                     >
-                        Close
+                        {language.get("ui.download_manager.close")}
                     </button>
                 </Modal.Footer>
             </Modal>
diff --git a/src/pages/internal/import.tsx b/src/pages/internal/import.tsx
index d56b1a9..63314cc 100644
--- a/src/pages/internal/import.tsx
+++ b/src/pages/internal/import.tsx
@@ -80,7 +80,7 @@ function TerminBody({
             .then((res: GetNewConfigurationResponse) => {
                 const defaultValues: any = {};
                 res.fields?.forEach((field) => {
-                    if (field.default_value !== undefined && field.default_value !== undefined) {
+                    if (field.default_value !== undefined) {
                         defaultValues[field.id] = field.default_value;
                     } else if (
                         field.type === "string" &&
@@ -124,7 +124,7 @@ function TerminBody({
             .then((res: GetNewConfigurationResponse) => {
                 const defaultValues: any = {};
                 res.fields?.forEach((field) => {
-                    if (field.default_value !== undefined && field.default_value !== undefined) {
+                    if (field.default_value !== undefined) {
                         defaultValues[field.id] = field.default_value;
                     } else if (
                         field.type === "string" &&
@@ -151,8 +151,18 @@ function TerminBody({
                     }),
                 );
             })
-            .catch((e) => {
-                showError(e, "Unable to create lectures");
+            .then((results) => {
+                let failed = 0;
+                results.forEach((result, idx) => {
+                    if (result.status === "rejected") {
+                        failed++;
+                    }
+                });
+                if (failed > 0) {
+                    showErrorToast(
+                        `${failed} lectures could not be imported, see console for details`,
+                    );
+                }
             })
             .then(reloadFunc)
             .finally(() => {
@@ -200,8 +210,18 @@ function TerminBody({
             return [api.deleteOMObject("lecture", event.id_in_videoag_system)];
         });
         Promise.allSettled(promises)
-            .catch((e) => {
-                showError(e, "Unable to delete lectures");
+            .then((results) => {
+                let failed = 0;
+                results.forEach((result, idx) => {
+                    if (result.status === "rejected") {
+                        failed++;
+                    }
+                });
+                if (failed > 0) {
+                    showErrorToast(
+                        `${failed} lectures could not be deleted, see console for details`,
+                    );
+                }
             })
             .then(reloadFunc)
             .finally(() => {
-- 
GitLab