mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 14:35:41 +00:00
feat(share): library deep links (psysonic2) with paste + toolbar actions (#261)
* feat(share): library deep links (psysonic2) with paste and toolbar actions Add base64url-encoded payloads for track, album, artist, and ordered queue. Handle paste outside inputs to switch server, validate entities, navigate or play. Reuse clipboard helper for context menu, queue panel, album and artist headers. Tests distinguish server invite strings from library shares. * fix(share): play partial queue when some shared tracks are missing Skip unavailable song IDs when pasting a queue share while preserving order. Toast when some tracks are missing; error only if none resolve. Add openedQueuePartial and queueAllUnavailable i18n; remove queueTracksMissing. * feat(settings): paste server invites globally and scroll to add form Handle psysonic1- magic strings outside inputs: navigate to settings or login with prefilled add-server fields. Decode invites embedded in surrounding text. Scroll the add-server block into view when opening from a paste so long server lists stay oriented. --------- Co-authored-by: Maxim Isaev <im@friclub.ru>
This commit is contained in:
committed by
GitHub
parent
21d00889aa
commit
7c9a300022
@@ -124,10 +124,30 @@ export const esTranslation = {
|
||||
selectedAlbums: '{{count}} álbumes seleccionados',
|
||||
selectedArtists: '{{count}} artistas seleccionados',
|
||||
songInfo: 'Información de la Canción',
|
||||
shareLink: 'Copiar enlace para compartir',
|
||||
shareCopied: 'Enlace copiado al portapapeles.',
|
||||
shareCopyFailed: 'No se pudo copiar al portapapeles.',
|
||||
},
|
||||
sharePaste: {
|
||||
notLoggedIn: 'Inicia sesión y añade el servidor antes de pegar un enlace para compartir.',
|
||||
noMatchingServer: 'Ningún servidor guardado coincide con este enlace. Añade un servidor con esta dirección: {{url}}',
|
||||
trackUnavailable: 'No se encontró esta canción en el servidor.',
|
||||
albumUnavailable: 'No se encontró este álbum en el servidor.',
|
||||
artistUnavailable: 'No se encontró este artista en el servidor.',
|
||||
openedTrack: 'Reproduciendo la canción compartida.',
|
||||
openedAlbum: 'Abriendo el álbum compartido.',
|
||||
openedArtist: 'Abriendo el artista compartido.',
|
||||
openedQueue_one: 'Reproduciendo {{count}} pista del enlace para compartir.',
|
||||
openedQueue_other: 'Reproduciendo {{count}} pistas del enlace para compartir.',
|
||||
openedQueuePartial:
|
||||
'Reproduciendo {{played}} de {{total}} pistas del enlace ({{skipped}} no encontradas en este servidor).',
|
||||
queueAllUnavailable: 'Ninguna pista de este enlace se encontró en el servidor.',
|
||||
genericError: 'No se pudo abrir el enlace para compartir.',
|
||||
},
|
||||
albumDetail: {
|
||||
back: 'Volver',
|
||||
playAll: 'Reproducir Todo',
|
||||
shareAlbum: 'Compartir álbum',
|
||||
enqueue: 'Agregar a la Cola',
|
||||
enqueueTooltip: 'Agregar álbum completo a la cola',
|
||||
artistBio: 'Biografía del Artista',
|
||||
@@ -182,6 +202,7 @@ export const esTranslation = {
|
||||
albums: 'Álbumes',
|
||||
album: 'Álbum',
|
||||
playAll: 'Reproducir Todo',
|
||||
shareArtist: 'Compartir artista',
|
||||
shuffle: 'Aleatorio',
|
||||
radio: 'Radio',
|
||||
loading: 'Cargando…',
|
||||
@@ -985,6 +1006,8 @@ export const esTranslation = {
|
||||
hide: 'Ocultar',
|
||||
close: 'Cerrar',
|
||||
nextTracks: 'Siguientes',
|
||||
shareQueue: 'Copiar enlace de la cola',
|
||||
shareQueueEmpty: 'La cola está vacía — no hay nada que compartir.',
|
||||
emptyQueue: 'La cola está vacía.',
|
||||
trackSingular: 'pista',
|
||||
trackPlural: 'pistas',
|
||||
|
||||
Reference in New Issue
Block a user