Skip to content

Commit 6d8911f

Browse files
committed
feat: add /api/v1/get_bgm_list and /api/v1/upload_bgm_file
1 parent 28199c9 commit 6d8911f

File tree

2 files changed

+88
-3
lines changed

2 files changed

+88
-3
lines changed

app/controllers/v1/video.py

+52-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
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
25
from loguru import logger
36

47
from app.config import config
58
from app.controllers import base
69
from app.controllers.v1.base import new_router
710
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
913
from app.services import task as tm
1014
from app.services import state as sm
1115
from app.utils import utils
@@ -52,6 +56,52 @@ def get_task(request: Request, task_id: str = Path(..., description="Task ID"),
5256
uri_path = v.replace(task_dir, "tasks")
5357
urls.append(f"{endpoint}/{uri_path}")
5458
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
5567
return utils.get_response(200, task)
5668

5769
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")

app/models/schema.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ class Config:
196196
"progress": 100,
197197
"videos": [
198198
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/final-1.mp4"
199+
],
200+
"combined_videos": [
201+
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/combined-1.mp4"
199202
]
200203
}
201204
},
@@ -222,7 +225,39 @@ class Config:
222225
"status": 200,
223226
"message": "success",
224227
"data": {
225-
"video_terms": []
228+
"video_terms": ["sky", "tree"]
229+
}
230+
},
231+
}
232+
233+
234+
class BgmListResponse(BaseResponse):
235+
class Config:
236+
json_schema_extra = {
237+
"example": {
238+
"status": 200,
239+
"message": "success",
240+
"data": {
241+
"bgm_list": [
242+
{
243+
"filename": "output000.mp3",
244+
"size": 2249517,
245+
"filepath": "C:\\Users\\cathy\\Desktop\\MoneyPrinterTurbo\\resource\\songs\\output000.mp3"
246+
}
247+
]
248+
}
249+
},
250+
}
251+
252+
253+
class BgmUploadResponse(BaseResponse):
254+
class Config:
255+
json_schema_extra = {
256+
"example": {
257+
"status": 200,
258+
"message": "success",
259+
"data": {
260+
"uploaded_path": "/root/home/MoneyPrinterTurbo/resource/songs/example.mp3"
226261
}
227262
},
228263
}

0 commit comments

Comments
 (0)