aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/locales
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-21 13:52:11 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-21 13:52:11 +0200
commit8730281d739d9ed1d6f2d366772582eea8ba0294 (patch)
tree4df2f3c8d42dc17147bcdec23109aa9c0f1b5b35 /packages/meshbay-hub/src/meshbay_hub/static/locales
parentae52b69b14a6997d01aad66f49fbea7b5ca2dfe6 (diff)
downloadmeshbay-8730281d739d9ed1d6f2d366772582eea8ba0294.tar.gz
feat: LAN Wi-Fi casting to Chromecast via local HTTP relay
Re-serve decrypted fMP4 video over HTTP on the LAN so a Chromecast can play the stream. The relay runs in the Electron main process — same trust boundary as downloads and MSE playback. - cast-relay.js: HTTP server with BoxAccumulator (reassembles WebRTC chunks into moof+mdat pairs), ring buffer, backpressure, finish() for clean end-of-stream, fixed port range 19550-19553 - cast-chromecast.js: mDNS discovery (bonjour-service) + CASTV2 protocol (castv2-client), connect/reload/disconnect lifecycle - Seek-aware: relay restarts on every seek, Chromecast reloads new URL; generation counter prevents stale async errors from killing active restarts; landingPlayheadRef suppresses programmatic seeking events - Device picker in video top bar with scan, device selection, copy-URL fallback, and cast status indicator - IPC bridge (main/preload/platform) for start/push/stop/finish/status/ discover/chromecastConnect/chromecastReload/chromecastDisconnect - Phase 3 design doc for DLNA/Smart TV in docs/cast-smart-tv.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/de.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/en.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/es.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/it.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js8
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js8
10 files changed, 80 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
index ec56f03..e309834 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js
@@ -154,6 +154,14 @@ export default {
'video.err_transport': 'Transport nicht verbunden',
'video.err_mse': 'Codec wird für das Streaming nicht unterstützt: {codec}',
+ // LAN-Cast
+ 'cast.start': 'Auf Gerät übertragen',
+ 'cast.stop': 'Übertragung beenden',
+ 'cast.copy_url': 'Stream-URL kopieren',
+ 'cast.copied': 'URL kopiert',
+ 'cast.scanning': 'Suche nach Geräten…',
+ 'cast.no_devices': 'Keine Geräte gefunden',
+
// Settings
'settings.title': 'Einstellungen',
'settings.coming_soon': 'Demnächst verfügbar.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
index a8392c7..9a5058e 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js
@@ -152,6 +152,14 @@ export default {
'video.err_transport': 'Transport not connected',
'video.err_mse': 'Codec not supported for streaming: {codec}',
+ // LAN cast
+ 'cast.start': 'Cast to device',
+ 'cast.stop': 'Stop casting',
+ 'cast.copy_url': 'Copy stream URL',
+ 'cast.copied': 'URL copied',
+ 'cast.scanning': 'Scanning for devices…',
+ 'cast.no_devices': 'No devices found',
+
// Settings
'settings.title': 'Settings',
'settings.coming_soon': 'Coming soon.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
index 5afb3c3..5a95347 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js
@@ -152,6 +152,14 @@ export default {
'video.err_transport': 'Transporte no conectado',
'video.err_mse': 'Códec no compatible con la reproducción en continuo: {codec}',
+ // LAN cast
+ 'cast.start': 'Enviar a dispositivo',
+ 'cast.stop': 'Detener envío',
+ 'cast.copy_url': 'Copiar URL del stream',
+ 'cast.copied': 'URL copiada',
+ 'cast.scanning': 'Buscando dispositivos…',
+ 'cast.no_devices': 'No se encontraron dispositivos',
+
// Settings
'settings.title': 'Ajustes',
'settings.coming_soon': 'Próximamente.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
index 9eb2f30..4139fc9 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js
@@ -153,6 +153,14 @@ export default {
'video.err_transport': 'Transport non connecté',
'video.err_mse': 'Codec non pris en charge pour la diffusion : {codec}',
+ // LAN cast
+ 'cast.start': 'Diffuser sur un appareil',
+ 'cast.stop': 'Arrêter la diffusion',
+ 'cast.copy_url': "Copier l'URL du flux",
+ 'cast.copied': 'URL copiée',
+ 'cast.scanning': "Recherche d'appareils…",
+ 'cast.no_devices': 'Aucun appareil trouvé',
+
// Settings
'settings.title': 'Paramètres',
'settings.coming_soon': 'Bientôt disponible.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
index 5653ec0..531c8f7 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js
@@ -153,6 +153,14 @@ export default {
'video.err_transport': 'Trasporto non connesso',
'video.err_mse': 'Codec non supportato per lo streaming: {codec}',
+ // LAN cast
+ 'cast.start': 'Trasmetti al dispositivo',
+ 'cast.stop': 'Interrompi trasmissione',
+ 'cast.copy_url': 'Copia URL dello stream',
+ 'cast.copied': 'URL copiato',
+ 'cast.scanning': 'Ricerca dispositivi…',
+ 'cast.no_devices': 'Nessun dispositivo trovato',
+
// Settings
'settings.title': 'Impostazioni',
'settings.coming_soon': 'Prossimamente.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
index aa3899d..1a68827 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
@@ -150,6 +150,14 @@ export default {
'video.err_transport': 'トランスポートが接続されていません',
'video.err_mse': 'ストリーミング再生に対応していないコーデックです:{codec}',
+ // LAN cast
+ 'cast.start': 'デバイスにキャスト',
+ 'cast.stop': 'キャストを停止',
+ 'cast.copy_url': 'ストリームURLをコピー',
+ 'cast.copied': 'URLをコピーしました',
+ 'cast.scanning': 'デバイスを検索中…',
+ 'cast.no_devices': 'デバイスが見つかりません',
+
// Settings
'settings.title': '設定',
'settings.coming_soon': '近日公開。',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
index c5841dd..d0c9649 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js
@@ -154,6 +154,14 @@ export default {
'video.err_transport': 'Transport niet verbonden',
'video.err_mse': 'Codec wordt niet ondersteund voor streamen: {codec}',
+ // LAN cast
+ 'cast.start': 'Naar apparaat casten',
+ 'cast.stop': 'Casten stoppen',
+ 'cast.copy_url': 'Stream-URL kopiëren',
+ 'cast.copied': 'URL gekopieerd',
+ 'cast.scanning': 'Apparaten zoeken…',
+ 'cast.no_devices': 'Geen apparaten gevonden',
+
// Settings
'settings.title': 'Instellingen',
'settings.coming_soon': 'Binnenkort beschikbaar.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
index eec144b..630548b 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js
@@ -159,6 +159,14 @@ export default {
'video.err_transport': 'Transport nie jest połączony',
'video.err_mse': 'Kodek nieobsługiwany przy odtwarzaniu strumieniowym: {codec}',
+ // LAN cast
+ 'cast.start': 'Przesyłaj na urządzenie',
+ 'cast.stop': 'Zatrzymaj przesyłanie',
+ 'cast.copy_url': 'Kopiuj URL strumienia',
+ 'cast.copied': 'URL skopiowany',
+ 'cast.scanning': 'Wyszukiwanie urządzeń…',
+ 'cast.no_devices': 'Nie znaleziono urządzeń',
+
// Settings
'settings.title': 'Ustawienia',
'settings.coming_soon': 'Wkrótce.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
index ce2adf2..9a6809a 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js
@@ -154,6 +154,14 @@ export default {
'video.err_transport': 'Transporte não conectado',
'video.err_mse': 'Codec sem suporte para transmissão: {codec}',
+ // LAN cast
+ 'cast.start': 'Transmitir para dispositivo',
+ 'cast.stop': 'Parar transmissão',
+ 'cast.copy_url': 'Copiar URL do stream',
+ 'cast.copied': 'URL copiada',
+ 'cast.scanning': 'Procurando dispositivos…',
+ 'cast.no_devices': 'Nenhum dispositivo encontrado',
+
// Settings
'settings.title': 'Configurações',
'settings.coming_soon': 'Em breve.',
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
index f249835..549b77e 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
@@ -147,6 +147,14 @@ export default {
'video.err_transport': '传输未连接',
'video.err_mse': '该编解码器不支持流式播放:{codec}',
+ // LAN cast
+ 'cast.start': '投射到设备',
+ 'cast.stop': '停止投射',
+ 'cast.copy_url': '复制流媒体链接',
+ 'cast.copied': '链接已复制',
+ 'cast.scanning': '正在搜索设备…',
+ 'cast.no_devices': '未找到设备',
+
// Settings
'settings.title': '设置',
'settings.coming_soon': '即将推出。',