|
1 |
| -from fastapi import Request, Depends, Path, BackgroundTasks |
| 1 | +import os |
| 2 | +import glob |
| 3 | +from fastapi import Request, Depends, Path, BackgroundTasks, UploadFile |
| 4 | +from fastapi.params import File |
2 | 5 | from loguru import logger
|
3 | 6 |
|
4 | 7 | from app.config import config
|
5 | 8 | from app.controllers import base
|
6 | 9 | from app.controllers.v1.base import new_router
|
7 | 10 | from app.models.exception import HttpException
|
8 |
| -from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest |
| 11 | +from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, BgmListResponse, \ |
| 12 | + BgmUploadResponse |
9 | 13 | from app.services import task as tm
|
10 | 14 | from app.services import state as sm
|
11 | 15 | from app.utils import utils
|
@@ -52,6 +56,52 @@ def get_task(request: Request, task_id: str = Path(..., description="Task ID"),
|
52 | 56 | uri_path = v.replace(task_dir, "tasks")
|
53 | 57 | urls.append(f"{endpoint}/{uri_path}")
|
54 | 58 | task["videos"] = urls
|
| 59 | + if "combined_videos" in task: |
| 60 | + combined_videos = task["combined_videos"] |
| 61 | + task_dir = utils.task_dir() |
| 62 | + urls = [] |
| 63 | + for v in combined_videos: |
| 64 | + uri_path = v.replace(task_dir, "tasks") |
| 65 | + urls.append(f"{endpoint}/{uri_path}") |
| 66 | + task["combined_videos"] = urls |
55 | 67 | return utils.get_response(200, task)
|
56 | 68 |
|
57 | 69 | raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|
| 70 | + |
| 71 | + |
| 72 | +@router.get("/get_bgm_list", response_model=BgmListResponse, summary="get local bgm file list") |
| 73 | +def get_bgm_list(request: Request): |
| 74 | + suffix = "*.mp3" |
| 75 | + song_dir = utils.song_dir() |
| 76 | + files = glob.glob(os.path.join(song_dir, suffix)) |
| 77 | + bgm_list = [] |
| 78 | + for file in files: |
| 79 | + bgm_list.append({ |
| 80 | + "filename": os.path.basename(file), |
| 81 | + "size": os.path.getsize(file), |
| 82 | + "filepath": file, |
| 83 | + }) |
| 84 | + response = { |
| 85 | + "bgm_list": bgm_list |
| 86 | + } |
| 87 | + return utils.get_response(200, response) |
| 88 | + |
| 89 | + |
| 90 | +@router.post("/upload_bgm_file", response_model=BgmUploadResponse, summary="upload bgm file to songs directory") |
| 91 | +def upload_bgm_file(request: Request, file: UploadFile = File(...)): |
| 92 | + request_id = base.get_task_id(request) |
| 93 | + # check file ext |
| 94 | + if file.filename.endswith('mp3'): |
| 95 | + song_dir = utils.song_dir() |
| 96 | + save_path = os.path.join(song_dir, file.filename) |
| 97 | + # save file |
| 98 | + with open(save_path, "wb+") as buffer: |
| 99 | + # If the file already exists, it will be overwritten |
| 100 | + file.file.seek(0) |
| 101 | + buffer.write(file.file.read()) |
| 102 | + response = { |
| 103 | + "uploaded_path": save_path |
| 104 | + } |
| 105 | + return utils.get_response(200, response) |
| 106 | + |
| 107 | + raise HttpException('', status_code=400, message=f"{request_id}: Only *.mp3 files can be uploaded") |
0 commit comments