From 8a971f750f5d9a53da0be4d05d943dba22fa1087 Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 12 Apr 2024 14:20:15 +0300 Subject: [PATCH] Fix uploading audio files --- .../controllers/main_frontend/page_audio_files.rs | 6 +----- .../courses/id/pages/PageList/PageAudioWidget.tsx | 5 ++--- .../src/services/backend/page-audio-files.ts | 14 ++++++++++---- .../main-frontend/src/services/backend/pages.ts | 15 --------------- 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/services/headless-lms/server/src/controllers/main_frontend/page_audio_files.rs b/services/headless-lms/server/src/controllers/main_frontend/page_audio_files.rs index efab64f18415..5aa29a25ea4f 100644 --- a/services/headless-lms/server/src/controllers/main_frontend/page_audio_files.rs +++ b/services/headless-lms/server/src/controllers/main_frontend/page_audio_files.rs @@ -57,11 +57,7 @@ async fn set_page_audio( .content_type() .map(|ct| ct.to_string()) .unwrap_or_else(|| "".to_string()); - /* - if !matches!(mime_type.as_str(), "audio/mpeg" | "audio/ogg") { - return Err(...) - } - */ + match mime_type.as_str() { "audio/mpeg" | "audio/ogg" => {} unsupported => { diff --git a/services/main-frontend/src/components/page-specific/manage/courses/id/pages/PageList/PageAudioWidget.tsx b/services/main-frontend/src/components/page-specific/manage/courses/id/pages/PageList/PageAudioWidget.tsx index 562928506e58..568de0fe411b 100644 --- a/services/main-frontend/src/components/page-specific/manage/courses/id/pages/PageList/PageAudioWidget.tsx +++ b/services/main-frontend/src/components/page-specific/manage/courses/id/pages/PageList/PageAudioWidget.tsx @@ -6,10 +6,10 @@ import { useTranslation } from "react-i18next" import CloseIcon from "../../../../../../../imgs/close.svg" import TrashIcon from "../../../../../../../imgs/trash.svg" import { - fetchPageAudioFiles, postPageAudioFile, removePageAudioFile, -} from "../../../../../../../services/backend/pages" +} from "../../../../../../../services/backend/page-audio-files" +import { fetchPageAudioFiles } from "../../../../../../../services/backend/pages" import Dialog from "../../../../../../../shared-module/components/Dialog" import ErrorBanner from "../../../../../../../shared-module/components/ErrorBanner" import Spinner from "../../../../../../../shared-module/components/Spinner" @@ -56,7 +56,6 @@ const PageAudioWidget: React.FC> { onSuccess: () => { getPageAudioFiles.refetch() - // onClose() }, }, ) diff --git a/services/main-frontend/src/services/backend/page-audio-files.ts b/services/main-frontend/src/services/backend/page-audio-files.ts index 57643ada2493..5fd32246af49 100644 --- a/services/main-frontend/src/services/backend/page-audio-files.ts +++ b/services/main-frontend/src/services/backend/page-audio-files.ts @@ -1,21 +1,27 @@ +import { isBoolean } from "lodash" + import { PageAudioFile } from "../../shared-module/bindings" import { isPageAudioFile } from "../../shared-module/bindings.guard" import { validateResponse } from "../../shared-module/utils/fetching" import { validateFile } from "../../shared-module/utils/files" import { mainFrontendClient } from "../mainFrontendClient" -export const postPageAudioFile = async (pageId: string, file: File): Promise => { +export const postPageAudioFile = async (pageId: string, file: File): Promise => { // eslint-disable-next-line i18next/no-literal-string validateFile(file, ["audio"]) const data = new FormData() // eslint-disable-next-line i18next/no-literal-string data.append("file", file, file.name || "unknown") - const response = await mainFrontendClient.post(`/page_audio/${pageId}`, data) - return validateResponse(response, isPageAudioFile) + const response = await mainFrontendClient.post(`/page_audio/${pageId}`, data, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) + return validateResponse(response, isBoolean) } export const removePageAudioFile = async (fileId: string): Promise => { - await mainFrontendClient.delete(`page_audio/${fileId}`) + await mainFrontendClient.delete(`/page_audio/${fileId}`) } export const fetchPageAudioFiles = async (pageId: string): Promise => { diff --git a/services/main-frontend/src/services/backend/pages.ts b/services/main-frontend/src/services/backend/pages.ts index 1363eb0421b0..18db9284cd22 100644 --- a/services/main-frontend/src/services/backend/pages.ts +++ b/services/main-frontend/src/services/backend/pages.ts @@ -16,7 +16,6 @@ import { isPageInfo, } from "../../shared-module/bindings.guard" import { isArray, isNumber, isString, validateResponse } from "../../shared-module/utils/fetching" -import { validateFile } from "../../shared-module/utils/files" import { mainFrontendClient } from "../mainFrontendClient" export const postNewPage = async (data: NewPage): Promise => { @@ -56,20 +55,6 @@ export const fetchPageInfo = async (pageId: string): Promise => { return validateResponse(response, isPageInfo) } -export const postPageAudioFile = async (pageId: string, file: File): Promise => { - // eslint-disable-next-line i18next/no-literal-string - validateFile(file, ["audio"]) - const data = new FormData() - // eslint-disable-next-line i18next/no-literal-string - data.append("file", file, file.name || "unknown") - const response = await mainFrontendClient.post(`/page_audio/${pageId}`, data) - return validateResponse(response, isBoolean) -} - -export const removePageAudioFile = async (fileId: string): Promise => { - await mainFrontendClient.delete(`/page_audio/${fileId}`) -} - export const fetchPageAudioFiles = async (pageId: string): Promise => { const response = await mainFrontendClient.get(`/page_audio/${pageId}/files`) return validateResponse(response, isArray(isPageAudioFile))