feat(orbit): show track attribution in host queue + host label in guest queue

Before: the guest queue already labelled guest-suggested tracks with
"Suggested by {user}", but host picks had no label — and the host's own
queue had no attribution at all. The host couldn't tell which upcoming
rows came from guests without checking the pending-approvals list.

- Guest queue: host-pick rows now show "Added by host" instead of hiding
  the attribution line.
- Host queue: each row (and the current track) shows "Added by you" or
  "Added by {user}" while an Orbit session is active. Lookup uses the
  existing OrbitState.queue / currentTrack addedBy field, so no new
  protocol fields.

New i18n keys (en+de+fr+nl+zh+nb+ru+es):
  orbit.queueAddedByHost · queueAddedByYou · queueAddedByUser

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-25 00:28:46 +02:00
parent 2b1124d14a
commit a84be98140
11 changed files with 79 additions and 5 deletions
+3
View File
@@ -1650,6 +1650,9 @@ export const deTranslation = {
approvalDecline: 'Ablehnen',
guestUpNextMore: '+ {{count}} weitere in der Host-Warteschlange',
guestSubmitter: 'von {{user}}',
queueAddedByHost: 'Vom Host hinzugefügt',
queueAddedByYou: 'Von dir hinzugefügt',
queueAddedByUser: 'Hinzugefügt von {{user}}',
guestEmpty: 'Noch keine Vorschläge. Öffne bei einem Song das Kontextmenü und wähle „Zur Orbit-Session hinzufügen".',
guestFooter: 'Die Wiedergabe wird vom Gastgeber gesteuert — du kannst die Liste nicht ändern.',
exitKickedTitle: 'Du wurdest aus der Session gebannt',
+3
View File
@@ -1654,6 +1654,9 @@ export const enTranslation = {
approvalDecline: 'Decline',
guestUpNextMore: '+ {{count}} more in the host\'s queue',
guestSubmitter: 'by {{user}}',
queueAddedByHost: 'Added by host',
queueAddedByYou: 'Added by you',
queueAddedByUser: 'Added by {{user}}',
guestEmpty: 'No suggestions yet. Open a track\'s context menu and pick "Add to Orbit session".',
guestFooter: "The host controls playback — you can't change the list.",
exitKickedTitle: 'You were banned from the session',
+3
View File
@@ -1637,6 +1637,9 @@ export const esTranslation = {
approvalDecline: 'Rechazar',
guestUpNextMore: '+ {{count}} más en la cola del anfitrión',
guestSubmitter: 'de {{user}}',
queueAddedByHost: 'Añadido por el anfitrión',
queueAddedByYou: 'Añadido por ti',
queueAddedByUser: 'Añadido por {{user}}',
guestEmpty: 'Aún no hay sugerencias. Abre el menú contextual de una canción y elige "Añadir a la sesión Orbit".',
guestFooter: 'El anfitrión controla la reproducción — no puedes cambiar la lista.',
exitKickedTitle: 'Has sido baneado de la sesión',
+3
View File
@@ -1632,6 +1632,9 @@ export const frTranslation = {
approvalDecline: 'Refuser',
guestUpNextMore: '+ {{count}} autres dans la file de l\'hôte',
guestSubmitter: 'par {{user}}',
queueAddedByHost: 'Ajouté par l\'hôte',
queueAddedByYou: 'Ajouté par toi',
queueAddedByUser: 'Ajouté par {{user}}',
guestEmpty: 'Aucune suggestion. Ouvre le menu contextuel d\'un morceau et choisis « Ajouter à la session Orbit ».',
guestFooter: 'L\'hôte contrôle la lecture — tu ne peux pas modifier la liste.',
exitKickedTitle: 'Tu as été banni de la session',
+3
View File
@@ -1631,6 +1631,9 @@ export const nbTranslation = {
approvalDecline: 'Avvis',
guestUpNextMore: '+ {{count}} flere i vertens kø',
guestSubmitter: 'av {{user}}',
queueAddedByHost: 'Lagt til av verten',
queueAddedByYou: 'Lagt til av deg',
queueAddedByUser: 'Lagt til av {{user}}',
guestEmpty: 'Ingen forslag ennå. Åpne et spors kontekstmeny og velg "Legg til i Orbit-økt".',
guestFooter: 'Verten kontrollerer avspillingen — du kan ikke endre listen.',
exitKickedTitle: 'Du ble utestengt fra økten',
+3
View File
@@ -1631,6 +1631,9 @@ export const nlTranslation = {
approvalDecline: 'Weigeren',
guestUpNextMore: '+ {{count}} meer in de wachtrij van de host',
guestSubmitter: 'door {{user}}',
queueAddedByHost: 'Toegevoegd door host',
queueAddedByYou: 'Toegevoegd door jou',
queueAddedByUser: 'Toegevoegd door {{user}}',
guestEmpty: 'Nog geen suggesties. Open het contextmenu van een nummer en kies "Aan Orbit-sessie toevoegen".',
guestFooter: 'De host bedient de weergave — je kunt de lijst niet wijzigen.',
exitKickedTitle: 'Je bent uit de sessie gebannen',
+3
View File
@@ -1713,6 +1713,9 @@ export const ruTranslation = {
approvalDecline: 'Отклонить',
guestUpNextMore: '+ ещё {{count}} в очереди хоста',
guestSubmitter: 'от {{user}}',
queueAddedByHost: 'Добавил хост',
queueAddedByYou: 'Добавил(а) ты',
queueAddedByUser: 'Добавил {{user}}',
guestEmpty: 'Предложений пока нет. Открой контекстное меню трека и выбери «Добавить в сессию Orbit».',
guestFooter: 'Хост управляет воспроизведением — ты не можешь изменять список.',
exitKickedTitle: 'Тебя забанили в сессии',
+3
View File
@@ -1624,6 +1624,9 @@ export const zhTranslation = {
approvalDecline: '拒绝',
guestUpNextMore: '+ 主持人队列中还有 {{count}} 首',
guestSubmitter: '来自 {{user}}',
queueAddedByHost: '由主持人添加',
queueAddedByYou: '由你添加',
queueAddedByUser: '由 {{user}} 添加',
guestEmpty: '还没有建议。打开曲目的上下文菜单并选择"添加到 Orbit 会话"。',
guestFooter: '主持人控制播放 — 你无法更改列表。',
exitKickedTitle: '你已被会话封禁',