Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion backend/endpoints/responses/music.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import Any
from urllib.parse import quote

from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, Field

from config import FRONTEND_RESOURCES_PATH

Expand All @@ -26,11 +26,14 @@ class MusicTrackSchema(BaseModel):
has_embedded_cover: bool = False
is_favorite: bool = False
game_name: str | None = None
game_genres: list[str] = Field(default_factory=list)
added_at: UTCDatetime
platform_id: int
platform_slug: str
platform_name: str
stream_url: str
cover_url: str | None = None
game_cover_url: str | None = None

@staticmethod
def cover_url_for(cover_path: str | None, rom_cover_path: str | None) -> str | None:
Expand All @@ -55,11 +58,18 @@ def from_row(cls, row: Any) -> MusicTrackSchema:
has_embedded_cover=row.has_embedded_cover,
is_favorite=bool(row.is_favorite),
game_name=row.game_name,
game_genres=row.game_genres or [],
added_at=row.added_at,
platform_id=row.platform_id,
platform_slug=row.platform_slug,
platform_name=row.platform_name,
stream_url=f"/api/roms/{row.rom_file_id}/files/content/{quote(row.file_name)}",
cover_url=cls.cover_url_for(row.cover_path, row.path_cover_l),
game_cover_url=(
f"{FRONTEND_RESOURCES_PATH}/{row.path_cover_l}"
if row.path_cover_l
else None
),
)


Expand Down
3 changes: 3 additions & 0 deletions backend/endpoints/responses/permission.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class ActionKey(enum.StrEnum):
COLLECTION_CREATE = "collection.create"
COLLECTION_EDIT = "collection.edit"
COLLECTION_DELETE = "collection.delete"
# Playlists
PLAYLIST_EDIT = "playlist.edit"
# Library
LIBRARY_SCAN = "library.scan"
# Users
Expand Down Expand Up @@ -83,6 +85,7 @@ class ActionKey(enum.StrEnum):
ActionKey.COLLECTION_EDIT,
),
(PermEntity.COLLECTIONS, PermAction.DELETE): (ActionKey.COLLECTION_DELETE,),
(PermEntity.PLAYLISTS, PermAction.WRITE): (ActionKey.PLAYLIST_EDIT,),
(PermEntity.USERS, PermAction.READ): (ActionKey.USER_VIEW,),
(PermEntity.USERS, PermAction.WRITE): (
ActionKey.USER_CREATE,
Expand Down
3 changes: 3 additions & 0 deletions backend/handler/database/roms_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -2353,13 +2353,16 @@ def get_music_tracks(
is_favorite_col.label("is_favorite"),
Rom.name.label("game_name"),
Rom.path_cover_l.label("path_cover_l"),
RomMetadata.genres.label("game_genres"),
RomFile.created_at.label("added_at"),
Platform.id.label("platform_id"),
Platform.slug.label("platform_slug"),
Platform.name.label("platform_name"),
)
.select_from(TrackMeta)
.join(RomFile, TrackMeta.rom_file_id == RomFile.id)
.join(Rom, TrackMeta.rom_id == Rom.id)
.outerjoin(RomMetadata, RomMetadata.rom_id == Rom.id)
.join(Platform, Rom.platform_id == Platform.id)
)
if is_favorite_user_id is not None:
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/__generated__/models/ActionKey.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions frontend/src/__generated__/models/MusicTrackSchema.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions frontend/src/locales/bg_BG/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
"activity": "Активност",
"add": "Добави",
"administration": "Администрация",
"albums-n": "{n} албум | {n} албума",
"all": "Всички",
"all-files-skipped": "Всички файлове са пропуснати, нищо не е качено.",
"all-platforms": "Всички платформи",
"and": "и",
"apply": "Приложи",
"artists-n": "{n} изпълнител | {n} изпълнители",
"ascii-only": "Само ASCII символи",
"back": "Назад",
"back-btn": "Назад",
Expand Down Expand Up @@ -42,6 +44,8 @@
"core": "Основни",
"create": "Създай",
"crt-mode": "CRT mode",
"decade-mix": "Микс по десетилетия",
"decades-n": "{n} десетилетие | {n} десетилетия",
"delete": "Изтрий",
"details": "Детайли",
"discard": "Отхвърли",
Expand All @@ -54,20 +58,24 @@
"edit": "Редактирай",
"exclude-on-delete": "Не добавяй повторно след изтриване",
"expand": "Разшири",
"favorite-soundtracks": "Любими саундтраци",
"filter": "Филтър",
"firmware": "Фърмуер",
"first-page": "Първа страница",
"for": "за",
"free-radio": "Свободно радио",
"games": "Игри",
"games-header": "Игри",
"games-n": "{n} игра | {n} игри",
"generate": "Генерирай",
"genres-n": "{n} жанр | {n} жанра",
"got-it": "Разбрах",
"hide-password": "Скрий паролата",
"home": "Начало",
"in-library": "В библиотеката",
"invalid-email": "Невалиден имейл",
"invalid-name": "Невалидно име",
"jukebox": "Музикален плеър",
"kind": "Вид",
"last-page": "Последна страница",
"last-updated": "Последна промяна",
Expand All @@ -79,6 +87,9 @@
"local": "Локален",
"logout": "Изход",
"logs": "Logs",
"minutes-n": "{n} мин",
"music-by-album": "Саундтраци по албум",
"music-by-artist": "Саундтраци по изпълнител",
"name": "Име",
"new-version-available": "Налична е нова версия",
"next-page": "Следваща страница",
Expand All @@ -95,10 +106,13 @@
"platform-created": "Платформата {name} е създадена",
"platforms": "Платформи",
"platforms-n": "{n} платформа | {n} платформи",
"play-all": "Пусни всички",
"playlists": "Плейлисти",
"previous-page": "Предишна страница",
"primary-navigation": "Основна навигация",
"profile": "Профил",
"random": "Случайно",
"recently-added-soundtracks": "Наскоро добавени саундтраци",
"remove": "Премахни",
"removing-from-filesystem": "Премахване от файловата система",
"required": "Задължително",
Expand All @@ -116,11 +130,17 @@
"server-stats": "Статистики на сървъра",
"settings": "Настройки",
"show-password": "Покажи паролата",
"shuffle": "Разбъркване",
"size": "Размер",
"size-on-disk": "Размер на диска",
"slug": "Слъг",
"smart-collection": "Умна колекция",
"smart-collections": "Умни колекции",
"soundtrack-favorite-added": "Песента е добавена към любимите",
"soundtrack-favorite-failed": "Неуспешна промяна на любимата песен",
"soundtrack-favorite-removed": "Песента е премахната от любимите",
"soundtracks-by-genre": "Саундтраци по жанр",
"soundtracks-by-platform": "Саундтраци по платформа",
"state": "Състояние",
"states": "Състояния",
"states-n": "{n} състояние | {n} състояния",
Expand Down
22 changes: 21 additions & 1 deletion frontend/src/locales/cs_CZ/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
"activity": "Aktivita",
"add": "Přidat",
"administration": "Administrace",
"albums-n": "{n} album | {n} alba",
"all": "Vše",
"all-files-skipped": "Všechny soubory přeskočeny, nic nebylo nahráno.",
"all-platforms": "Všechny platformy",
"and": "a",
"apply": "Použít",
"artists-n": "{n} interpret | {n} interpreti",
"ascii-only": "Pouze ASCII znaky",
"back": "Zpět",
"back-btn": "Zpět",
Expand Down Expand Up @@ -42,6 +44,8 @@
"core": "Jádro",
"create": "Vytvořit",
"crt-mode": "CRT mode",
"decade-mix": "Mix desetiletí",
"decades-n": "{n} desetiletí | {n} desetiletí",
"delete": "Smazat",
"details": "Detaily",
"discard": "Zahodit",
Expand All @@ -54,20 +58,24 @@
"edit": "Upravit",
"exclude-on-delete": "Vynechat při mazání",
"expand": "Rozbalit",
"favorite-soundtracks": "Oblíbené soundtracky",
"filter": "Filtr",
"firmware": "Firmware",
"first-page": "První stránka",
"for": "pro",
"free-radio": "Volné rádio",
"games": "Hry",
"games-header": "Hry",
"games-n": "{n} her | {n} hra | {n} hry | {n} her",
"generate": "Vygenerovat",
"genres-n": "{n} žánr | {n} žánry",
"got-it": "Rozumím",
"hide-password": "Skrýt heslo",
"home": "Domů",
"in-library": "V knihovně",
"invalid-email": "Neplatný e-mail",
"invalid-name": "Neplatný název",
"jukebox": "Hudební přehrávač",
"kind": "Druh",
"last-page": "Poslední stránka",
"last-updated": "Naposledy aktualizováno",
Expand All @@ -79,6 +87,9 @@
"local": "Lokální",
"logout": "Odhlásit se",
"logs": "Logs",
"minutes-n": "{n} min",
"music-by-album": "Soundtracky podle alba",
"music-by-artist": "Soundtracky podle interpreta",
"name": "Název",
"new-version-available": "Je k dispozici nová verze",
"next-page": "Další stránka",
Expand All @@ -94,11 +105,14 @@
"platform": "Platforma",
"platform-created": "Platforma {name} vytvořena",
"platforms": "Platformy",
"platforms-n": "{n} platforem | {n} platforma | {n} platformy | {n} platforem",
"platforms-n": "{n} platforma | {n} platformy",
"play-all": "Přehrát vše",
"playlists": "Playlisty",
"previous-page": "Předchozí stránka",
"primary-navigation": "Hlavní navigace",
"profile": "Profil",
"random": "Náhodně",
"recently-added-soundtracks": "Nedávno přidané soundtracky",
"remove": "Odebrat",
"removing-from-filesystem": "Odstraňování ze systému",
"required": "Povinné",
Expand All @@ -116,11 +130,17 @@
"server-stats": "Statistiky serveru",
"settings": "Nastavení",
"show-password": "Zobrazit heslo",
"shuffle": "Náhodné pořadí",
"size": "Velikost",
"size-on-disk": "Velikost na disku",
"slug": "Slug",
"smart-collection": "Chytrá kolekce",
"smart-collections": "Chytré kolekce",
"soundtrack-favorite-added": "Skladba byla přidána do oblíbených",
"soundtrack-favorite-failed": "Oblíbenou skladbu se nepodařilo změnit",
"soundtrack-favorite-removed": "Skladba byla odebrána z oblíbených",
"soundtracks-by-genre": "Soundtracky podle žánru",
"soundtracks-by-platform": "Soundtracky podle platformy",
"state": "Stav",
"states": "Stavy",
"states-n": "{n} stavů | {n} stav | {n} stavy | {n} stavů",
Expand Down
20 changes: 20 additions & 0 deletions frontend/src/locales/de_DE/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
"activity": "Aktivität",
"add": "Hinzufügen",
"administration": "Administration",
"albums-n": "{n} Album | {n} Alben",
"all": "Alle",
"all-files-skipped": "Alle Dateien übersprungen, nichts hochgeladen.",
"all-platforms": "Alle Plattformen",
"and": "und",
"apply": "Anwenden",
"artists-n": "{n} Künstler | {n} Künstler",
"ascii-only": "Nur ASCII-Zeichen",
"back": "Zurück",
"back-btn": "Zurück",
Expand Down Expand Up @@ -42,6 +44,8 @@
"core": "Core",
"create": "Erstellen",
"crt-mode": "CRT-Modus",
"decade-mix": "Jahrzehnte-Mix",
"decades-n": "{n} Jahrzehnt | {n} Jahrzehnte",
"delete": "Löschen",
"details": "Details",
"discard": "Verwerfen",
Expand All @@ -54,20 +58,24 @@
"edit": "Bearbeiten",
"exclude-on-delete": "Beim Löschen ausschließen",
"expand": "Ausklappen",
"favorite-soundtracks": "Favorisierte Soundtracks",
"filter": "Filter",
"firmware": "Firmware",
"first-page": "Erste Seite",
"for": "für",
"free-radio": "Freies Radio",
"games": "Spiele",
"games-header": "Spiele",
"games-n": "{n} Spiel | {n} Spiele",
"generate": "Generieren",
"genres-n": "{n} Genre | {n} Genres",
"got-it": "Verstanden",
"hide-password": "Passwort ausblenden",
"home": "Startseite",
"in-library": "In der Bibliothek",
"invalid-email": "Ungültige E-Mail",
"invalid-name": "Ungültiger Name",
"jukebox": "Musikbox",
"kind": "Typ",
"last-page": "Letzte Seite",
"last-updated": "Zuletzt aktualisiert",
Expand All @@ -79,6 +87,9 @@
"local": "Lokal",
"logout": "Ausloggen",
"logs": "Logs",
"minutes-n": "{n} Min.",
"music-by-album": "Soundtracks nach Album",
"music-by-artist": "Soundtracks nach Künstler",
"name": "Name",
"new-version-available": "Neue Version verfügbar",
"next-page": "Nächste Seite",
Expand All @@ -95,10 +106,13 @@
"platform-created": "Plattform {name} erstellt",
"platforms": "Plattformen",
"platforms-n": "{n} Plattform | {n} Plattformen",
"play-all": "Alle abspielen",
"playlists": "Wiedergabelisten",
"previous-page": "Vorherige Seite",
"primary-navigation": "Hauptnavigation",
"profile": "Profil",
"random": "Zufällig",
"recently-added-soundtracks": "Kürzlich hinzugefügte Soundtracks",
"remove": "Entfernen",
"removing-from-filesystem": "Entfernen vom System",
"required": "Erforderlich",
Expand All @@ -116,11 +130,17 @@
"server-stats": "Serverstatistiken",
"settings": "Einstellungen",
"show-password": "Passwort anzeigen",
"shuffle": "Zufallswiedergabe",
"size": "Größe",
"size-on-disk": "Größe auf Festplatte",
"slug": "Slug",
"smart-collection": "Intelligente Sammlung",
"smart-collections": "Intelligente Sammlungen",
"soundtrack-favorite-added": "Titel zu Favoriten hinzugefügt",
"soundtrack-favorite-failed": "Favoritenstatus konnte nicht geändert werden",
"soundtrack-favorite-removed": "Titel aus Favoriten entfernt",
"soundtracks-by-genre": "Soundtracks nach Genre",
"soundtracks-by-platform": "Soundtracks nach Plattform",
"state": "Spielstand",
"states": "Spielstände",
"states-n": "{n} Spielstand | {n} Spielstände",
Expand Down
Loading