mirror of
https://github.com/rommapp/romm.git
synced 2026-02-18 23:42:07 +01:00
91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
import os
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
from config import ASSETS_BASE_PATH
|
|
from fastapi import UploadFile
|
|
from logger.logger import log
|
|
from models.user import User
|
|
|
|
from .base_handler import FSHandler
|
|
|
|
|
|
class FSAssetsHandler(FSHandler):
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def remove_file(self, file_name: str, file_path: str):
|
|
try:
|
|
os.remove(os.path.join(ASSETS_BASE_PATH, file_path, file_name))
|
|
except IsADirectoryError:
|
|
shutil.rmtree(os.path.join(ASSETS_BASE_PATH, file_path, file_name))
|
|
|
|
def write_file(self, file: UploadFile, path: str) -> None:
|
|
if not file.filename:
|
|
log.error("No file name provided")
|
|
return
|
|
|
|
Path(os.path.join(ASSETS_BASE_PATH, path)).mkdir(parents=True, exist_ok=True)
|
|
file_location = os.path.join(ASSETS_BASE_PATH, path, file.filename)
|
|
|
|
with open(file_location, "wb") as f:
|
|
shutil.copyfileobj(file.file, f)
|
|
|
|
def get_asset_size(self, file_name: str, asset_path: str) -> int:
|
|
return os.path.getsize(os.path.join(ASSETS_BASE_PATH, asset_path, file_name))
|
|
|
|
def user_folder_path(self, user: User):
|
|
return os.path.join("users", user.fs_safe_folder_name)
|
|
|
|
# /users/557365723a31/profile
|
|
def build_avatar_path(self, user: User):
|
|
return os.path.join(self.user_folder_path(user), "profile")
|
|
|
|
def _build_asset_file_path(
|
|
self,
|
|
user: User,
|
|
folder: str,
|
|
platform_fs_slug: str,
|
|
rom_id: int,
|
|
emulator: str | None = None,
|
|
):
|
|
user_folder_path = self.user_folder_path(user)
|
|
assets_path = os.path.join(
|
|
user_folder_path, folder, platform_fs_slug, str(rom_id)
|
|
)
|
|
if emulator:
|
|
assets_path = os.path.join(assets_path, emulator)
|
|
return assets_path
|
|
|
|
# /users/557365723a31/saves/n64/{rom.id}/mupen64plus/
|
|
def build_saves_file_path(
|
|
self,
|
|
user: User,
|
|
platform_fs_slug: str,
|
|
rom_id: int,
|
|
emulator: str | None = None,
|
|
):
|
|
return self._build_asset_file_path(
|
|
user, "saves", platform_fs_slug, rom_id, emulator
|
|
)
|
|
|
|
# /users/557365723a31/states/n64/{rom.id}/mupen64plus
|
|
def build_states_file_path(
|
|
self,
|
|
user: User,
|
|
platform_fs_slug: str,
|
|
rom_id: int,
|
|
emulator: str | None = None,
|
|
):
|
|
return self._build_asset_file_path(
|
|
user, "states", platform_fs_slug, rom_id, emulator
|
|
)
|
|
|
|
# /users/557365723a31/screenshots/{rom.id}/n64
|
|
def build_screenshots_file_path(
|
|
self, user: User, platform_fs_slug: str, rom_id: int
|
|
):
|
|
return self._build_asset_file_path(
|
|
user, "screenshots", platform_fs_slug, rom_id
|
|
)
|