mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 14:35:41 +00:00
Merge remote-tracking branch 'origin/main' into exp/orbit
This commit is contained in:
@@ -1282,6 +1282,7 @@ export const deTranslation = {
|
|||||||
deleteSuccess: '{{count}} Playlists gelöscht',
|
deleteSuccess: '{{count}} Playlists gelöscht',
|
||||||
deleteFailed: 'Fehler beim Löschen von {{name}}',
|
deleteFailed: 'Fehler beim Löschen von {{name}}',
|
||||||
deleteSelected: 'Ausgewählte löschen',
|
deleteSelected: 'Ausgewählte löschen',
|
||||||
|
deleteSelectedPartial: 'Nur {{n}} von {{total}} ausgewählten Playlists können gelöscht werden (die anderen gehören jemand anderem).',
|
||||||
mergeSuccess: '{{count}} Songs in {{playlist}} zusammengeführt',
|
mergeSuccess: '{{count}} Songs in {{playlist}} zusammengeführt',
|
||||||
mergeNoNewSongs: 'Keine neuen Songs zum Hinzufügen',
|
mergeNoNewSongs: 'Keine neuen Songs zum Hinzufügen',
|
||||||
mergeError: 'Fehler beim Zusammenführen von Playlists',
|
mergeError: 'Fehler beim Zusammenführen von Playlists',
|
||||||
|
|||||||
@@ -1285,6 +1285,7 @@ export const enTranslation = {
|
|||||||
deleteSuccess: '{{count}} playlists deleted',
|
deleteSuccess: '{{count}} playlists deleted',
|
||||||
deleteFailed: 'Error deleting {{name}}',
|
deleteFailed: 'Error deleting {{name}}',
|
||||||
deleteSelected: 'Delete selected',
|
deleteSelected: 'Delete selected',
|
||||||
|
deleteSelectedPartial: 'Only {{n}} of {{total}} selected playlists can be deleted (the others belong to someone else).',
|
||||||
mergeSuccess: '{{count}} songs merged into {{playlist}}',
|
mergeSuccess: '{{count}} songs merged into {{playlist}}',
|
||||||
mergeNoNewSongs: 'No new songs to add',
|
mergeNoNewSongs: 'No new songs to add',
|
||||||
mergeError: 'Error merging playlists',
|
mergeError: 'Error merging playlists',
|
||||||
|
|||||||
@@ -1275,6 +1275,7 @@ export const esTranslation = {
|
|||||||
deleteSuccess: '{{count}} listas eliminadas',
|
deleteSuccess: '{{count}} listas eliminadas',
|
||||||
deleteFailed: 'Error al eliminar {{name}}',
|
deleteFailed: 'Error al eliminar {{name}}',
|
||||||
deleteSelected: 'Eliminar seleccionadas',
|
deleteSelected: 'Eliminar seleccionadas',
|
||||||
|
deleteSelectedPartial: 'Solo {{n}} de {{total}} listas seleccionadas pueden eliminarse (las demás pertenecen a otro usuario).',
|
||||||
mergeSuccess: '{{count}} canciones unificadas en {{playlist}}',
|
mergeSuccess: '{{count}} canciones unificadas en {{playlist}}',
|
||||||
mergeNoNewSongs: 'No hay canciones nuevas para agregar',
|
mergeNoNewSongs: 'No hay canciones nuevas para agregar',
|
||||||
mergeError: 'Error al unificar listas',
|
mergeError: 'Error al unificar listas',
|
||||||
|
|||||||
@@ -1270,6 +1270,7 @@ export const frTranslation = {
|
|||||||
deleteSuccess: '{{count}} playlists supprimées',
|
deleteSuccess: '{{count}} playlists supprimées',
|
||||||
deleteFailed: 'Erreur lors de la suppression de {{name}}',
|
deleteFailed: 'Erreur lors de la suppression de {{name}}',
|
||||||
deleteSelected: 'Supprimer la sélection',
|
deleteSelected: 'Supprimer la sélection',
|
||||||
|
deleteSelectedPartial: 'Seulement {{n}} des {{total}} playlists sélectionnées peuvent être supprimées (les autres appartiennent à quelqu\'un d\'autre).',
|
||||||
mergeSuccess: '{{count}} morceaux fusionnés dans {{playlist}}',
|
mergeSuccess: '{{count}} morceaux fusionnés dans {{playlist}}',
|
||||||
mergeNoNewSongs: 'Aucun nouveau morceau à ajouter',
|
mergeNoNewSongs: 'Aucun nouveau morceau à ajouter',
|
||||||
mergeError: 'Erreur lors de la fusion des playlists',
|
mergeError: 'Erreur lors de la fusion des playlists',
|
||||||
|
|||||||
@@ -1269,6 +1269,7 @@ export const nbTranslation = {
|
|||||||
deleteSuccess: '{{count}} spillelister slettet',
|
deleteSuccess: '{{count}} spillelister slettet',
|
||||||
deleteFailed: 'Feil ved sletting av {{name}}',
|
deleteFailed: 'Feil ved sletting av {{name}}',
|
||||||
deleteSelected: 'Slett valgte',
|
deleteSelected: 'Slett valgte',
|
||||||
|
deleteSelectedPartial: 'Bare {{n}} av {{total}} valgte spillelister kan slettes (de andre tilhører noen andre).',
|
||||||
mergeSuccess: '{{count}} sanger slått sammen i {{playlist}}',
|
mergeSuccess: '{{count}} sanger slått sammen i {{playlist}}',
|
||||||
mergeNoNewSongs: 'Ingen nye sanger å legge til',
|
mergeNoNewSongs: 'Ingen nye sanger å legge til',
|
||||||
mergeError: 'Feil ved sammenslåing av spillelister',
|
mergeError: 'Feil ved sammenslåing av spillelister',
|
||||||
|
|||||||
@@ -1269,6 +1269,7 @@ export const nlTranslation = {
|
|||||||
deleteSuccess: '{{count}} playlists verwijderd',
|
deleteSuccess: '{{count}} playlists verwijderd',
|
||||||
deleteFailed: 'Fout bij verwijderen van {{name}}',
|
deleteFailed: 'Fout bij verwijderen van {{name}}',
|
||||||
deleteSelected: 'Geselecteerde verwijderen',
|
deleteSelected: 'Geselecteerde verwijderen',
|
||||||
|
deleteSelectedPartial: 'Slechts {{n}} van de {{total}} geselecteerde playlists kunnen worden verwijderd (de andere zijn van iemand anders).',
|
||||||
mergeSuccess: '{{count}} nummers samengevoegd in {{playlist}}',
|
mergeSuccess: '{{count}} nummers samengevoegd in {{playlist}}',
|
||||||
mergeNoNewSongs: 'Geen nieuwe nummers om toe te voegen',
|
mergeNoNewSongs: 'Geen nieuwe nummers om toe te voegen',
|
||||||
mergeError: 'Fout bij samenvoegen van playlists',
|
mergeError: 'Fout bij samenvoegen van playlists',
|
||||||
|
|||||||
@@ -1349,6 +1349,7 @@ export const ruTranslation = {
|
|||||||
deleteSuccess: '{{count}} плейлистов удалено',
|
deleteSuccess: '{{count}} плейлистов удалено',
|
||||||
deleteFailed: 'Ошибка при удалении {{name}}',
|
deleteFailed: 'Ошибка при удалении {{name}}',
|
||||||
deleteSelected: 'Удалить выбранные',
|
deleteSelected: 'Удалить выбранные',
|
||||||
|
deleteSelectedPartial: 'Можно удалить только {{n}} из {{total}} выбранных плейлистов (остальные принадлежат другим пользователям).',
|
||||||
mergeSuccess: '{{count}} треков объединено в {{playlist}}',
|
mergeSuccess: '{{count}} треков объединено в {{playlist}}',
|
||||||
mergeNoNewSongs: 'Нет новых треков для добавления',
|
mergeNoNewSongs: 'Нет новых треков для добавления',
|
||||||
mergeError: 'Ошибка при объединении плейлистов',
|
mergeError: 'Ошибка при объединении плейлистов',
|
||||||
|
|||||||
@@ -1264,6 +1264,7 @@ export const zhTranslation = {
|
|||||||
deleteSuccess: '{{count}} 个播放列表已删除',
|
deleteSuccess: '{{count}} 个播放列表已删除',
|
||||||
deleteFailed: '删除 {{name}} 时出错',
|
deleteFailed: '删除 {{name}} 时出错',
|
||||||
deleteSelected: '删除所选',
|
deleteSelected: '删除所选',
|
||||||
|
deleteSelectedPartial: '所选 {{total}} 个播放列表中只有 {{n}} 个可删除(其余属于他人)。',
|
||||||
mergeSuccess: '{{count}} 首歌曲已合并到 {{playlist}}',
|
mergeSuccess: '{{count}} 首歌曲已合并到 {{playlist}}',
|
||||||
mergeNoNewSongs: '没有新歌曲可添加',
|
mergeNoNewSongs: '没有新歌曲可添加',
|
||||||
mergeError: '合并播放列表时出错',
|
mergeError: '合并播放列表时出错',
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const HOME_DISCOVER_SLICE = 20;
|
|||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const homeSections = useHomeStore(s => s.sections);
|
const homeSections = useHomeStore(s => s.sections);
|
||||||
|
const activeServerId = useAuthStore(s => s.activeServerId);
|
||||||
const musicLibraryFilterVersion = useAuthStore(s => s.musicLibraryFilterVersion);
|
const musicLibraryFilterVersion = useAuthStore(s => s.musicLibraryFilterVersion);
|
||||||
const mixMinRatingFilterEnabled = useAuthStore(s => s.mixMinRatingFilterEnabled);
|
const mixMinRatingFilterEnabled = useAuthStore(s => s.mixMinRatingFilterEnabled);
|
||||||
const mixMinRatingAlbum = useAuthStore(s => s.mixMinRatingAlbum);
|
const mixMinRatingAlbum = useAuthStore(s => s.mixMinRatingAlbum);
|
||||||
@@ -70,6 +71,7 @@ export default function Home() {
|
|||||||
})();
|
})();
|
||||||
return () => { cancelled = true; };
|
return () => { cancelled = true; };
|
||||||
}, [
|
}, [
|
||||||
|
activeServerId,
|
||||||
musicLibraryFilterVersion,
|
musicLibraryFilterVersion,
|
||||||
homeSections,
|
homeSections,
|
||||||
mixMinRatingFilterEnabled,
|
mixMinRatingFilterEnabled,
|
||||||
|
|||||||
@@ -734,6 +734,23 @@ export default function Playlists() {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
{selectionMode && selectedIds.size > 0 && (() => {
|
||||||
|
const deletableCount = selectedPlaylists.filter(isPlaylistDeletable).length;
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
className="btn btn-danger"
|
||||||
|
onClick={handleDeleteSelected}
|
||||||
|
disabled={deletableCount === 0}
|
||||||
|
data-tooltip={deletableCount === selectedIds.size
|
||||||
|
? undefined
|
||||||
|
: t('playlists.deleteSelectedPartial', { n: deletableCount, total: selectedIds.size })}
|
||||||
|
data-tooltip-pos="bottom"
|
||||||
|
>
|
||||||
|
<Trash2 size={15} />
|
||||||
|
{t('playlists.deleteSelected')}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
<button
|
<button
|
||||||
className={`btn btn-surface${selectionMode ? ' btn-sort-active' : ''}`}
|
className={`btn btn-surface${selectionMode ? ' btn-sort-active' : ''}`}
|
||||||
onClick={toggleSelectionMode}
|
onClick={toggleSelectionMode}
|
||||||
|
|||||||
Reference in New Issue
Block a user