feat(plex): grouped collapsible playlist view + drag-and-drop + bulk add

Playlist view now groups a run of episodes from the same show into a
collapsible season/show block so a whole series doesn't sprawl into an
endless flat list; movies stay standalone (larger poster card in the
accordion). Two per-account layouts — Accordion and Tree — persisted via
LS.plexPlaylistLayout; show groups start collapsed. Reorder is drag &
drop (@dnd-kit): a show block moves as one unit, episodes reorder within
their show, keyboard-draggable via KeyboardSensor. Remove works per item,
per season, or per whole show. The add-to-playlist dialog is generalised
to a single leaf or a whole group (tri-state none/some/all with an in/size
count); the show page gains add buttons for an episode, a season, and the
whole show. i18n en/hu/de.
This commit is contained in:
npeter83 2026-07-06 22:14:56 +02:00
parent e6b22f971a
commit 2ef22982bb
9 changed files with 603 additions and 139 deletions

View file

@ -158,7 +158,8 @@
"newPlaceholder": "Name der neuen Playlist…",
"create": "Erstellen",
"none": "Noch keine Playlists. Erstelle oben eine.",
"count": "{{count}} Titel"
"count": "{{count}} Titel",
"groupProgress": "{{in}} / {{size}}"
},
"playlist": {
"section": "Playlists",
@ -172,6 +173,16 @@
"empty": "Diese Playlist ist leer. Füge Titel über deren Infoseite hinzu.",
"up": "Nach oben",
"down": "Nach unten",
"remove": "Entfernen"
"remove": "Entfernen",
"layoutAccordion": "Akkordeon-Ansicht",
"layoutTree": "Baum-Ansicht",
"removeShow": "Ganze Serie entfernen",
"removeSeason": "Ganze Staffel entfernen",
"episodes": "{{count}} Folgen",
"season": "Staffel {{n}}",
"seasonUnknown": "Folgen",
"addShow": "Ganze Serie zu einer Playlist",
"addSeason": "Staffel zu einer Playlist",
"addEpisode": "Folge zu einer Playlist"
}
}

View file

@ -158,7 +158,8 @@
"newPlaceholder": "New playlist name…",
"create": "Create",
"none": "No playlists yet. Create one above.",
"count": "{{count}} items"
"count": "{{count}} items",
"groupProgress": "{{in}} / {{size}}"
},
"playlist": {
"section": "Playlists",
@ -172,6 +173,16 @@
"empty": "This playlist is empty. Add titles from their info page.",
"up": "Move up",
"down": "Move down",
"remove": "Remove"
"remove": "Remove",
"layoutAccordion": "Accordion view",
"layoutTree": "Tree view",
"removeShow": "Remove whole show",
"removeSeason": "Remove whole season",
"episodes": "{{count}} episodes",
"season": "Season {{n}}",
"seasonUnknown": "Episodes",
"addShow": "Add whole show to a playlist",
"addSeason": "Add season to a playlist",
"addEpisode": "Add episode to a playlist"
}
}

View file

@ -158,7 +158,8 @@
"newPlaceholder": "Új lista neve…",
"create": "Létrehozás",
"none": "Még nincs lista. Hozz létre egyet fent.",
"count": "{{count}} elem"
"count": "{{count}} elem",
"groupProgress": "{{in}} / {{size}}"
},
"playlist": {
"section": "Lejátszási listák",
@ -172,6 +173,16 @@
"empty": "Ez a lista üres. Adj hozzá címeket az info-oldalukról.",
"up": "Fel",
"down": "Le",
"remove": "Eltávolítás"
"remove": "Eltávolítás",
"layoutAccordion": "Harmonika nézet",
"layoutTree": "Fa nézet",
"removeShow": "Egész sorozat eltávolítása",
"removeSeason": "Egész évad eltávolítása",
"episodes": "{{count}} epizód",
"season": "{{n}}. évad",
"seasonUnknown": "Epizódok",
"addShow": "Egész sorozat listához adása",
"addSeason": "Évad listához adása",
"addEpisode": "Epizód listához adása"
}
}