mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
feat(playlists): integrate Navidrome smart playlist flow into playlists page
Move smart playlist creation and management into Playlists, including Navidrome-only gating, smart-name/icon presentation, and smarter refresh handling while server-side smart rules are being applied.
This commit is contained in:
@@ -23,6 +23,7 @@ export const enTranslation = {
|
||||
offlineLibrary: 'Offline Library',
|
||||
genres: 'Genres',
|
||||
playlists: 'Playlists',
|
||||
smartPlaylists: 'Smart Playlists',
|
||||
mostPlayed: 'Most Played',
|
||||
radio: 'Internet Radio',
|
||||
folderBrowser: 'Folder Browser',
|
||||
@@ -1317,6 +1318,50 @@ export const enTranslation = {
|
||||
csvImportDownloadSuccess: 'Report downloaded successfully',
|
||||
csvImportDownloadError: 'Failed to download report',
|
||||
},
|
||||
smartPlaylists: {
|
||||
title: 'Smart Playlists',
|
||||
empty: 'No smart playlists yet.',
|
||||
sectionBasic: '1. Basic',
|
||||
sectionGenres: '2. Genres',
|
||||
sectionYearsAndFilters: '3. Years and filters',
|
||||
genreMode: 'Genre mode',
|
||||
genreModeInclude: 'Include genres',
|
||||
genreModeExclude: 'Exclude genres',
|
||||
genreSearchPlaceholder: 'Filter genres...',
|
||||
availableGenres: 'Available',
|
||||
selectedGenres: 'Selected',
|
||||
yearMode: 'Year mode',
|
||||
yearModeInclude: 'Include range',
|
||||
yearModeExclude: 'Exclude range',
|
||||
name: 'Name (without prefix)',
|
||||
anyGenre: 'Any genre',
|
||||
limit: 'Limit',
|
||||
limitHint: 'How many tracks to include in playlist (1-{{max}}, usually 50).',
|
||||
artistContains: 'Artist contains…',
|
||||
albumContains: 'Album contains…',
|
||||
titleContains: 'Title contains…',
|
||||
minRating: 'Minimum rating',
|
||||
minRatingAria: 'Minimum rating for smart playlist',
|
||||
minRatingHint: '0 disables minimum threshold; 1-5 keeps tracks with rating above selected value.',
|
||||
fromYear: 'From year',
|
||||
toYear: 'To year',
|
||||
excludeUnrated: 'Exclude unrated tracks',
|
||||
compilationOnly: 'Only compilations',
|
||||
create: 'New Smart Playlist',
|
||||
created: 'Created {{name}}',
|
||||
createFailed: 'Could not create smart playlist.',
|
||||
deleted: 'Deleted {{name}}',
|
||||
deleteFailed: 'Could not delete smart playlist.',
|
||||
navidromeOnly: 'Smart playlists can only be created on Navidrome servers.',
|
||||
loadFailed: 'Could not load smart playlists from Navidrome.',
|
||||
liveBadge: 'live',
|
||||
sortRandom: 'Sort: random',
|
||||
sortTitleAsc: 'Sort: title A-Z',
|
||||
sortTitleDesc: 'Sort: title Z-A',
|
||||
sortYearDesc: 'Sort: year desc',
|
||||
sortYearAsc: 'Sort: year asc',
|
||||
sortPlayCountDesc: 'Sort: play count desc',
|
||||
},
|
||||
mostPlayed: {
|
||||
title: 'Most Played',
|
||||
topArtists: 'Top Artists',
|
||||
|
||||
@@ -23,6 +23,7 @@ export const ruTranslation = {
|
||||
offlineLibrary: 'Офлайн-библиотека',
|
||||
genres: 'Жанры',
|
||||
playlists: 'Плейлисты',
|
||||
smartPlaylists: 'Смарт-плейлисты',
|
||||
mostPlayed: 'Популярное',
|
||||
radio: 'Онлайн-радио',
|
||||
folderBrowser: 'Браузер папок',
|
||||
@@ -1381,6 +1382,50 @@ export const ruTranslation = {
|
||||
csvImportDownloadSuccess: 'Отчёт успешно скачан',
|
||||
csvImportDownloadError: 'Не удалось скачать отчёт',
|
||||
},
|
||||
smartPlaylists: {
|
||||
title: 'Смарт-плейлисты',
|
||||
empty: 'Смарт-плейлистов пока нет.',
|
||||
sectionBasic: '1. База',
|
||||
sectionGenres: '2. Жанры',
|
||||
sectionYearsAndFilters: '3. Годы и фильтры',
|
||||
genreMode: 'Режим жанров',
|
||||
genreModeInclude: 'Включить жанры',
|
||||
genreModeExclude: 'Исключить жанры',
|
||||
genreSearchPlaceholder: 'Фильтр жанров...',
|
||||
availableGenres: 'Доступные',
|
||||
selectedGenres: 'Выбранные',
|
||||
yearMode: 'Режим годов',
|
||||
yearModeInclude: 'Включить диапазон',
|
||||
yearModeExclude: 'Исключить диапазон',
|
||||
name: 'Название (без префикса)',
|
||||
anyGenre: 'Любой жанр',
|
||||
limit: 'Лимит',
|
||||
limitHint: 'Сколько треков включать в плейлист (1-{{max}}, обычно 50).',
|
||||
artistContains: 'Исполнитель содержит…',
|
||||
albumContains: 'Альбом содержит…',
|
||||
titleContains: 'Название содержит…',
|
||||
minRating: 'Мин. рейтинг',
|
||||
minRatingAria: 'Минимальный рейтинг для смарт-плейлиста',
|
||||
minRatingHint: '0 — без минимального порога; 1-5 — оставить треки с рейтингом выше выбранного.',
|
||||
fromYear: 'Год от',
|
||||
toYear: 'Год до',
|
||||
excludeUnrated: 'Исключить треки без рейтинга',
|
||||
compilationOnly: 'Только сборники',
|
||||
create: 'Создать смарт-плейлист',
|
||||
created: 'Создан {{name}}',
|
||||
createFailed: 'Не удалось создать смарт-плейлист.',
|
||||
deleted: 'Удалён {{name}}',
|
||||
deleteFailed: 'Не удалось удалить смарт-плейлист.',
|
||||
navidromeOnly: 'Смарт-плейлисты можно создавать только на серверах Navidrome.',
|
||||
loadFailed: 'Не удалось загрузить смарт-плейлисты из Navidrome.',
|
||||
liveBadge: 'live',
|
||||
sortRandom: 'Сортировка: случайно',
|
||||
sortTitleAsc: 'Сортировка: название А-Я',
|
||||
sortTitleDesc: 'Сортировка: название Я-А',
|
||||
sortYearDesc: 'Сортировка: год по убыванию',
|
||||
sortYearAsc: 'Сортировка: год по возрастанию',
|
||||
sortPlayCountDesc: 'Сортировка: прослушивания по убыванию',
|
||||
},
|
||||
mostPlayed: {
|
||||
title: 'Популярное',
|
||||
topArtists: 'Топ исполнителей',
|
||||
|
||||
Reference in New Issue
Block a user