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 enTranslation = {
|
||||
selectedAlbums: '{{count}} albums selected',
|
||||
selectedArtists: '{{count}} artists selected',
|
||||
songInfo: 'Song Info',
|
||||
shareLink: 'Copy share link',
|
||||
shareCopied: 'Share link copied to the clipboard.',
|
||||
shareCopyFailed: 'Could not copy to the clipboard.',
|
||||
},
|
||||
sharePaste: {
|
||||
notLoggedIn: 'Sign in and add the server before pasting a share link.',
|
||||
noMatchingServer: 'No saved server matches this link. Add a server with this address: {{url}}',
|
||||
trackUnavailable: 'This track was not found on the server.',
|
||||
albumUnavailable: 'This album was not found on the server.',
|
||||
artistUnavailable: 'This artist was not found on the server.',
|
||||
openedTrack: 'Playing shared track.',
|
||||
openedAlbum: 'Opening shared album.',
|
||||
openedArtist: 'Opening shared artist.',
|
||||
openedQueue_one: 'Playing {{count}} track from the share link.',
|
||||
openedQueue_other: 'Playing {{count}} tracks from the share link.',
|
||||
openedQueuePartial:
|
||||
'Playing {{played}} of {{total}} tracks from the link ({{skipped}} not found on this server).',
|
||||
queueAllUnavailable: 'None of the tracks from this link were found on the server.',
|
||||
genericError: 'Could not open the share link.',
|
||||
},
|
||||
albumDetail: {
|
||||
back: 'Back',
|
||||
playAll: 'Play All',
|
||||
shareAlbum: 'Share album',
|
||||
enqueue: 'Enqueue',
|
||||
enqueueTooltip: 'Add entire album to queue',
|
||||
artistBio: 'Artist Bio',
|
||||
@@ -182,6 +202,7 @@ export const enTranslation = {
|
||||
albums: 'Albums',
|
||||
album: 'Album',
|
||||
playAll: 'Play All',
|
||||
shareArtist: 'Share artist',
|
||||
shuffle: 'Shuffle',
|
||||
radio: 'Radio',
|
||||
loading: 'Loading…',
|
||||
@@ -994,6 +1015,8 @@ export const enTranslation = {
|
||||
hide: 'Hide',
|
||||
close: 'Close',
|
||||
nextTracks: 'Next Tracks',
|
||||
shareQueue: 'Copy queue share link',
|
||||
shareQueueEmpty: 'The queue is empty — nothing to share.',
|
||||
emptyQueue: 'The queue is empty.',
|
||||
trackSingular: 'track',
|
||||
trackPlural: 'tracks',
|
||||
|
||||
Reference in New Issue
Block a user