Show file sizes in list
Include mp3 size display in API responses and render it in the list; remove obsolete Apache config.
This commit is contained in:
@@ -1,21 +0,0 @@
|
|||||||
<VirtualHost *:80>
|
|
||||||
ServerName tts.ncue.net
|
|
||||||
Redirect permanent / https://tts.ncue.net/
|
|
||||||
</VirtualHost>
|
|
||||||
|
|
||||||
<VirtualHost *:443>
|
|
||||||
ServerName tts.ncue.net
|
|
||||||
|
|
||||||
SSLEngine on
|
|
||||||
SSLCertificateFile /etc/letsencrypt/live/ncue.net/fullchain.pem
|
|
||||||
SSLCertificateKeyFile /etc/letsencrypt/live/ncue.net/privkey.pem
|
|
||||||
# 선택: 체인 파일이 필요하면 아래 경로 사용
|
|
||||||
# SSLCertificateChainFile /etc/letsencrypt/live/ncue.net/chain.pem
|
|
||||||
|
|
||||||
ProxyRequests Off
|
|
||||||
ProxyPreserveHost On
|
|
||||||
|
|
||||||
# 전체 프록시 (FastAPI가 정적/템플릿 포함 제공)
|
|
||||||
ProxyPass / http://127.0.0.1:8019/
|
|
||||||
ProxyPassReverse / http://127.0.0.1:8019/
|
|
||||||
</VirtualHost>
|
|
||||||
@@ -84,7 +84,9 @@ function renderList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const label = document.createElement("span");
|
const label = document.createElement("span");
|
||||||
label.textContent = item.display_time;
|
label.textContent = item.size_display
|
||||||
|
? `${item.display_time} (${item.size_display})`
|
||||||
|
: item.display_time;
|
||||||
label.className = "item-label";
|
label.className = "item-label";
|
||||||
li.appendChild(label);
|
li.appendChild(label);
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,23 @@ def ensure_resources_dir():
|
|||||||
RESOURCES_DIR.mkdir(parents=True, exist_ok=True)
|
RESOURCES_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
def format_size(bytes_size: int) -> str:
|
||||||
|
if bytes_size < 1024:
|
||||||
|
return f"{bytes_size}B"
|
||||||
|
if bytes_size < 1024 * 1024:
|
||||||
|
return f"{bytes_size / 1024:.1f}KB"
|
||||||
|
return f"{bytes_size / (1024 * 1024):.1f}MB"
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_size_display(filename: str | None) -> str | None:
|
||||||
|
if not filename:
|
||||||
|
return None
|
||||||
|
file_path = RESOURCES_DIR / filename
|
||||||
|
if not file_path.exists():
|
||||||
|
return None
|
||||||
|
return format_size(file_path.stat().st_size)
|
||||||
|
|
||||||
|
|
||||||
@app.on_event("startup")
|
@app.on_event("startup")
|
||||||
def on_startup():
|
def on_startup():
|
||||||
ensure_resources_dir()
|
ensure_resources_dir()
|
||||||
@@ -84,6 +101,7 @@ def api_list_tts():
|
|||||||
"created_at": row["created_at"].isoformat(),
|
"created_at": row["created_at"].isoformat(),
|
||||||
"display_time": format_display_time(row["created_at"]),
|
"display_time": format_display_time(row["created_at"]),
|
||||||
"filename": row["filename"],
|
"filename": row["filename"],
|
||||||
|
"size_display": get_file_size_display(row["filename"]),
|
||||||
}
|
}
|
||||||
for row in rows
|
for row in rows
|
||||||
]
|
]
|
||||||
@@ -117,6 +135,7 @@ def api_create_tts(payload: TtsCreateRequest):
|
|||||||
"created_at": created_at.isoformat(),
|
"created_at": created_at.isoformat(),
|
||||||
"display_time": format_display_time(created_at),
|
"display_time": format_display_time(created_at),
|
||||||
"filename": filename,
|
"filename": filename,
|
||||||
|
"size_display": get_file_size_display(filename),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user