mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25: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
@@ -123,10 +123,30 @@ export const deTranslation = {
|
||||
selectedAlbums: '{{count}} Alben ausgewählt',
|
||||
selectedArtists: '{{count}} Künstler ausgewählt',
|
||||
songInfo: 'Song-Infos',
|
||||
shareLink: 'Freigabe-Link kopieren',
|
||||
shareCopied: 'Freigabe-Link wurde in die Zwischenablage kopiert.',
|
||||
shareCopyFailed: 'Kopieren in die Zwischenablage fehlgeschlagen.',
|
||||
},
|
||||
sharePaste: {
|
||||
notLoggedIn: 'Melde dich an und füge den Server hinzu, bevor du einen Freigabe-Link einfügst.',
|
||||
noMatchingServer: 'Kein gespeicherter Server passt zu diesem Link. Füge einen Server mit dieser Adresse hinzu: {{url}}',
|
||||
trackUnavailable: 'Dieser Titel wurde auf dem Server nicht gefunden.',
|
||||
albumUnavailable: 'Dieses Album wurde auf dem Server nicht gefunden.',
|
||||
artistUnavailable: 'Dieser Künstler wurde auf dem Server nicht gefunden.',
|
||||
openedTrack: 'Geteilter Titel wird abgespielt.',
|
||||
openedAlbum: 'Geteiltes Album wird geöffnet.',
|
||||
openedArtist: 'Geteilter Künstler wird geöffnet.',
|
||||
openedQueue_one: '{{count}} Titel aus Freigabe-Link wird abgespielt.',
|
||||
openedQueue_other: '{{count}} Titel aus Freigabe-Link werden abgespielt.',
|
||||
openedQueuePartial:
|
||||
'{{played}} von {{total}} Titeln aus dem Link werden abgespielt ({{skipped}} auf diesem Server nicht gefunden).',
|
||||
queueAllUnavailable: 'Keiner der Titel aus diesem Link wurde auf dem Server gefunden.',
|
||||
genericError: 'Freigabe-Link konnte nicht geöffnet werden.',
|
||||
},
|
||||
albumDetail: {
|
||||
back: 'Zurück',
|
||||
playAll: 'Alle abspielen',
|
||||
shareAlbum: 'Album teilen',
|
||||
enqueue: 'Einreihen',
|
||||
enqueueTooltip: 'Ganzes Album zur Warteschlange hinzufügen',
|
||||
artistBio: 'Künstler-Bio',
|
||||
@@ -181,6 +201,7 @@ export const deTranslation = {
|
||||
albums: 'Alben',
|
||||
album: 'Album',
|
||||
playAll: 'Alle abspielen',
|
||||
shareArtist: 'Künstler teilen',
|
||||
shuffle: 'Zufallswiedergabe',
|
||||
radio: 'Radio',
|
||||
loading: 'Lädt…',
|
||||
@@ -992,6 +1013,8 @@ export const deTranslation = {
|
||||
hide: 'Verbergen',
|
||||
close: 'Schließen',
|
||||
nextTracks: 'Nächste Titel',
|
||||
shareQueue: 'Warteschlangen-Link kopieren',
|
||||
shareQueueEmpty: 'Die Warteschlange ist leer — nichts zu teilen.',
|
||||
emptyQueue: 'Die Warteschlange ist leer.',
|
||||
trackSingular: 'Titel',
|
||||
trackPlural: 'Titel',
|
||||
|
||||
Reference in New Issue
Block a user