diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 39b77411..cecfb771 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -179,13 +179,17 @@ "sonarr": { "wanted": "مطلوب", "queued": "في الإنتظار", - "series": "سلسلة" + "series": "سلسلة", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "مطلوب", "missing": "مفقود", "queued": "في الإنتظار", - "movies": "أفلام" + "movies": "أفلام", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "مطلوب", diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 3fec6dbd..e567de17 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -117,13 +117,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "queued": "Queued", "movies": "Movies", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 33fe5338..b133c24f 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -26,7 +26,9 @@ "sonarr": { "wanted": "Volgut", "queued": "En cua", - "series": "Sèries" + "series": "Sèries", + "queue": "Queue", + "unknown": "Unknown" }, "speedtest": { "ping": "Ping", @@ -99,7 +101,9 @@ "wanted": "Volgut", "queued": "En cua", "movies": "Pel·lícules", - "missing": "Faltant" + "missing": "Faltant", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Volgut", diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 6088851b..e4699e86 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -133,13 +133,17 @@ "sonarr": { "wanted": "Hledané", "queued": "Ve frontě", - "series": "Seriály" + "series": "Seriály", + "unknown": "Unknown", + "queue": "Queue" }, "radarr": { "wanted": "Hledané", "missing": "Chybějící", "queued": "Ve frontě", - "movies": "Filmy" + "movies": "Filmy", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Hledané", diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 3769da6f..ccaa5d52 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -9,7 +9,9 @@ "queued": "I Kø", "movies": "Film", "wanted": "Ønskede", - "missing": "Mangler" + "missing": "Mangler", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Ønsket", @@ -264,7 +266,9 @@ "sonarr": { "wanted": "Ønsket", "queued": "I Kø", - "series": "Serier" + "series": "Serier", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Ønskede", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index b62c5e6a..0d664d99 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Gesucht", "queued": "In Warteschlange", - "series": "Serien" + "series": "Serien", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Gesucht", "queued": "In Warteschlange", "movies": "Filme", - "missing": "Fehlt" + "missing": "Fehlt", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Gesucht", diff --git a/public/locales/el/common.json b/public/locales/el/common.json index d42fdfe5..19f4a0ae 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -206,7 +206,9 @@ "sonarr": { "series": "Σειρές", "wanted": "Επιθυμούντε", - "queued": "Σε σειρά" + "queued": "Σε σειρά", + "queue": "Queue", + "unknown": "Unknown" }, "downloadstation": { "download": "Μεταφόρτωση", @@ -218,7 +220,9 @@ "wanted": "Επιθυμούντε", "missing": "Απουσιάζει", "queued": "Σε σειρά", - "movies": "Ταινίες" + "movies": "Ταινίες", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Θέλετε", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 185fce08..7a6034e2 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -194,13 +194,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies" + "movies": "Movies", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 50d305ac..8aa16f14 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -131,13 +131,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Serio" + "series": "Serio", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Filmoj" + "movies": "Filmoj", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 1ca5a62f..5d528e64 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Buscando", "queued": "En cola", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Buscando", "queued": "En cola", "movies": "Películas", - "missing": "Faltan" + "missing": "Faltan", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Buscando", diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index aad674a1..07dbb8e5 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -94,13 +94,17 @@ "sonarr": { "wanted": "Haluttu", "queued": "Jonossa", - "series": "Sarja" + "series": "Sarja", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Haluttu", "queued": "Jonossa", "movies": "Elokuvia", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Haluttu", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index a85eb438..12f2098c 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Demande", "queued": "Attente", - "series": "Séries" + "series": "Séries", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Demande", "queued": "Attente", "movies": "Films", - "missing": "Manquant" + "missing": "Manquant", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Demande", diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 50f61ae5..9e682c20 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -94,13 +94,17 @@ "sonarr": { "wanted": "מבוקש", "queued": "בתור", - "series": "סדרות" + "series": "סדרות", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "מבוקש", "queued": "בתור", "movies": "סרטים", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "מבוקש", diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 6736caf0..4efc87e0 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -155,13 +155,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies" + "movies": "Movies", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 268a1f89..fce370ce 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -125,13 +125,17 @@ "sonarr": { "wanted": "Zatraženo", "queued": "U redu čekanja", - "series": "Serije" + "series": "Serije", + "unknown": "Unknown", + "queue": "Queue" }, "radarr": { "wanted": "Zatraženo", "queued": "U redu čekanja", "movies": "Filmovi", - "missing": "Nedostaje" + "missing": "Nedostaje", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Zatraženo", diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index b417692d..98687d9f 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -108,13 +108,17 @@ "sonarr": { "wanted": "Keresett", "queued": "Sorban áll", - "series": "Sorozat" + "series": "Sorozat", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Keresett", "queued": "Sorban áll", "movies": "Filmek", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "ombi": { "pending": "Függőben", diff --git a/public/locales/id/common.json b/public/locales/id/common.json index e9169cbd..c36ae790 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -55,13 +55,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies" + "movies": "Movies", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 8dc065d4..5eed8b41 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -81,13 +81,17 @@ "sonarr": { "series": "Serie", "wanted": "Richiesti", - "queued": "In coda" + "queued": "In coda", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Richiesti", "queued": "In coda", "movies": "Film", - "missing": "Mancanti" + "missing": "Mancanti", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Richiesti", diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index bcca3d2a..1a96786b 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -193,13 +193,17 @@ "sonarr": { "wanted": "募集中", "queued": "待機中", - "series": "シリーズ" + "series": "シリーズ", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "募集中", "missing": "不明", "queued": "キュー", - "movies": "映画" + "movies": "映画", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "募集中", diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 4e5e6298..56e8dd77 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -163,13 +163,17 @@ "sonarr": { "wanted": "요청", "queued": "대기 중", - "series": "시리즈" + "series": "시리즈", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "요청", "missing": "빠짐", "queued": "대기 중", - "movies": "영화" + "movies": "영화", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "요청", diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index fa73f2c7..3e4c9173 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -154,13 +154,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Filmas" + "movies": "Filmas", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index da42ff44..716049ef 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -233,13 +233,17 @@ "sonarr": { "wanted": "Mahu", "queued": "Dibaris Gilir", - "series": "Bersiri" + "series": "Bersiri", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Mahu", "missing": "Hilang", "queued": "Dibaris Gilir", - "movies": "Filem" + "movies": "Filem", + "queue": "Queue", + "unknown": "Unknown" }, "bazarr": { "missingEpisodes": "Episod Yang Hilang", diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index e7a2dd5c..5761e333 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Ønsket", "queued": "I kø", - "series": "Serie" + "series": "Serie", + "unknown": "Unknown", + "queue": "Queue" }, "radarr": { "wanted": "Ønsket", "queued": "I kø", "movies": "Filmer", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Wanted", diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 0be39980..fad081f6 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -82,13 +82,17 @@ "sonarr": { "wanted": "Gezocht", "queued": "In de wachtrij", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "movies": "Films", "wanted": "Gezocht", "queued": "In de wachtrij", - "missing": "Missend" + "missing": "Missend", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Gezocht", diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index a900de72..18a57078 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -110,13 +110,17 @@ "sonarr": { "wanted": "Poszukiwane", "queued": "W kolejce", - "series": "Seriale" + "series": "Seriale", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Poszukiwane", "queued": "W kolejce", "movies": "Filmy", - "missing": "Brakujące" + "missing": "Brakujące", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Poszukiwane", diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index bc405db0..d4392e18 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -112,13 +112,17 @@ "sonarr": { "wanted": "Desejado", "queued": "Na fila", - "series": "Séries" + "series": "Séries", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Desejado", "queued": "Na fila", "movies": "Filmes", - "missing": "Faltando" + "missing": "Faltando", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Desejado", diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index b0df5367..ef5f7cd8 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Desejada", "queued": "Em fila", - "series": "Séries" + "series": "Séries", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Desejado", "queued": "Fila", "movies": "Filmes", - "missing": "Faltando" + "missing": "Faltando", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Desejados", diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index a1f62db2..535ecb7d 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -134,13 +134,17 @@ "sonarr": { "wanted": "Dorite", "queued": "În coadă", - "series": "Seriale" + "series": "Seriale", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "queued": "În coadă", "wanted": "Dorite", "movies": "Filme", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Dorite", diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 454bfdfe..5e16f154 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Хотел", "queued": "В очереди", - "series": "Серии" + "series": "Серии", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Хотел", "queued": "В очереди", "movies": "Фильмы", - "missing": "Пропущено" + "missing": "Пропущено", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Хотел", diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index a66ef5e6..70c699f8 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -273,13 +273,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies" + "movies": "Movies", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index afca8429..7632e2aa 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -235,13 +235,17 @@ "sonarr": { "wanted": "Iskano", "queued": "V vrsti", - "series": "Serije" + "series": "Serije", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Iskano", "missing": "Manjka", "queued": "V vrsti", - "movies": "Filmi" + "movies": "Filmi", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Iskano", diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index b30db3fe..5c6e0b2e 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -117,13 +117,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "queued": "Queued", "movies": "Movies", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 37b38a71..0da6efb3 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -88,13 +88,17 @@ "sonarr": { "wanted": "Eftersöker", "queued": "I kö", - "series": "Serier" + "series": "Serier", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Eftersöker", "queued": "I kö", "movies": "Filmer", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Eftersöker", diff --git a/public/locales/te/common.json b/public/locales/te/common.json index e357b266..867baeae 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -111,13 +111,17 @@ "sonarr": { "wanted": "కావలెను", "queued": "క్యూయూఎడ్", - "series": "సిరీస్" + "series": "సిరీస్", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "కావలెను", "queued": "క్యూయూఎడ్", "movies": "సినిమాలు", - "missing": "మిస్సింగ్" + "missing": "మిస్సింగ్", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "కావలెను", diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 65c1b90a..660744b7 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -190,7 +190,9 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "queued": "Queued", @@ -216,7 +218,9 @@ "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies" + "movies": "Movies", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Wanted", diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index a2a872f4..d2f9667d 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -117,13 +117,17 @@ "sonarr": { "wanted": "Aranan", "queued": "Kuyrukta", - "series": "Seriler" + "series": "Seriler", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Aranan", "queued": "Kuyrukta", "movies": "Filmler", - "missing": "Kayıp" + "missing": "Kayıp", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Aranan", diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 37320dfd..2561f4a8 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -232,13 +232,17 @@ "sonarr": { "wanted": "Розшукується", "queued": "У черзі", - "series": "Серії" + "series": "Серії", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Розшукується", "missing": "Відсутній", "queued": "У черзі", - "movies": "Фільми" + "movies": "Фільми", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "Розшукується", diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 54431b3c..2b551546 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Series", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "Wanted", "queued": "Queued", "movies": "Phim", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "Đang tìm", diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 5ab69f88..ce9af7e4 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -94,13 +94,17 @@ "sonarr": { "wanted": "想睇", "queued": "排緊隊", - "series": "電視劇" + "series": "電視劇", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "想睇", "queued": "排緊隊", "movies": "電影", - "missing": "Missing" + "missing": "Missing", + "queue": "Queue", + "unknown": "Unknown" }, "lidarr": { "wanted": "想睇", diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 0d6f427e..1b6a7ea2 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -66,13 +66,17 @@ "sonarr": { "wanted": "想看", "queued": "排队", - "series": "系列" + "series": "系列", + "queue": "Queue", + "unknown": "Unknown" }, "radarr": { "wanted": "想看", "queued": "队列", "movies": "电影", - "missing": "丢失" + "missing": "丢失", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "订阅", diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 75674709..7ea7c835 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -88,12 +88,16 @@ "movies": "電影", "wanted": "關注中", "queued": "已加入佇列", - "missing": "缺少" + "missing": "缺少", + "queue": "Queue", + "unknown": "Unknown" }, "sonarr": { "wanted": "關注中", "queued": "已加入佇列", - "series": "影集" + "series": "影集", + "queue": "Queue", + "unknown": "Unknown" }, "readarr": { "wanted": "關注中", diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index f4d8c13e..4b8a06ca 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -15,7 +15,9 @@ export default function Container({ error = false, children, service }) { return } - let visibleChildren = children; + const childrenArray = Array.isArray(children) ? children : [children]; + + let visibleChildren = childrenArray; const fields = service?.widget?.fields; const type = service?.widget?.type; if (fields && type) { @@ -24,7 +26,7 @@ export default function Container({ error = false, children, service }) { // fields: [ "resources.cpu", "resources.mem", "field"] // or even // fields: [ "resources.cpu", "widget_type.field" ] - visibleChildren = children?.filter(child => fields.some(field => { + visibleChildren = childrenArray?.filter(child => fields.some(field => { let fullField = field; if (!field.includes(".")) { fullField = `${type}.${field}`; diff --git a/src/components/widgets/queue/queueEntry.jsx b/src/components/widgets/queue/queueEntry.jsx new file mode 100644 index 00000000..adea45ad --- /dev/null +++ b/src/components/widgets/queue/queueEntry.jsx @@ -0,0 +1,18 @@ +export default function QueueEntry({ title, activity, timeLeft, progress}) { + return ( +
+
+
+
{title}
+
+
+ {timeLeft ? `${activity} - ${timeLeft}` : activity} +
+
+ ); +} diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 7f9d45e4..41fe263a 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -168,7 +168,7 @@ export async function servicesFromKubernetes() { .filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/href`]) ingressList.items.push(...traefikServices); } - + if (!ingressList) { return []; } @@ -276,7 +276,8 @@ export function cleanServiceGroups(groups) { wan, // opnsense widget, pfsense widget enableBlocks, // emby/jellyfin enableNowPlaying, - volume, // diskstation widget + volume, // diskstation widget, + enableQueue, // sonarr/radarr } = cleanedService.widget; const fieldsList = typeof fields === 'string' ? JSON.parse(fields) : fields; @@ -312,6 +313,9 @@ export function cleanServiceGroups(groups) { if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks); if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying); } + if (["sonarr", "radarr"].includes(type)) { + if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue); + } if (["diskstation", "qnap"].includes(type)) { if (volume) cleanedService.widget.volume = volume; } diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index e022fb46..f869cd0b 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -1,5 +1,7 @@ /* eslint-disable prefer-promise-reject-errors */ /* eslint-disable no-param-reassign */ +import { createUnzip } from "node:zlib"; + import { http, https } from "follow-redirects"; import { addCookieToJar, setCookieHeader } from "./cookie-jar"; @@ -28,12 +30,19 @@ function handleRequest(requestor, url, params) { const request = requestor.request(url, params, (response) => { const data = []; + const contentEncoding = response.headers['content-encoding']?.trim().toLowerCase(); - response.on("data", (chunk) => { + let responseContent = response; + if (contentEncoding === 'gzip' || contentEncoding === 'deflate') { + responseContent = createUnzip(); + response.pipe(responseContent); + } + + responseContent.on("data", (chunk) => { data.push(chunk); }); - response.on("end", () => { + responseContent.on("end", () => { addCookieToJar(url, response.headers); resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]); }); diff --git a/src/widgets/radarr/component.jsx b/src/widgets/radarr/component.jsx index f8a932ea..6ce2f599 100644 --- a/src/widgets/radarr/component.jsx +++ b/src/widgets/radarr/component.jsx @@ -1,22 +1,41 @@ import { useTranslation } from "next-i18next"; +import { useCallback } from 'react'; + +import QueueEntry from "../../components/widgets/queue/queueEntry"; import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; +function getProgress(sizeLeft, size) { + return sizeLeft === 0 ? 100 : (1 - sizeLeft / size) * 100 +} + export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movie"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue/status"); + const { data: queueDetailsData, error: queueDetailsError } = useWidgetAPI(widget, "queue/details"); - if (moviesError || queuedError) { - const finalError = moviesError ?? queuedError; + const formatDownloadState = useCallback((downloadState) => { + switch (downloadState) { + case "importPending": + return "import pending"; + case "failedPending": + return "failed pending"; + default: + return downloadState; + } + }, []); + + if (moviesError || queuedError || queueDetailsError) { + const finalError = moviesError ?? queuedError ?? queueDetailsError; return ; } - if (!moviesData || !queuedData) { + if (!moviesData || !queuedData || !queueDetailsData) { return ( @@ -27,12 +46,27 @@ export default function Component({ service }) { ); } + const enableQueue = widget?.enableQueue && Array.isArray(queueDetailsData) && queueDetailsData.length > 0; + return ( - - - - - - + <> + + + + + + + {enableQueue && + queueDetailsData.map((queueEntry) => ( + entry.id === queueEntry.movieId)?.title ?? t("radarr.unknown")} + activity={formatDownloadState(queueEntry.trackedDownloadState)} + key={`${queueEntry.movieId}-${queueEntry.sizeLeft}`} + /> + )) + } + ); } diff --git a/src/widgets/radarr/widget.js b/src/widgets/radarr/widget.js index 78054219..3373975e 100644 --- a/src/widgets/radarr/widget.js +++ b/src/widgets/radarr/widget.js @@ -1,5 +1,5 @@ import genericProxyHandler from "utils/proxy/handlers/generic"; -import { jsonArrayFilter } from "utils/proxy/api-helpers"; +import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", @@ -12,6 +12,7 @@ const widget = { wanted: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile && item.isAvailable).length, have: jsonArrayFilter(data, (item) => item.hasFile).length, missing: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile).length, + all: asJson(data), }), }, "queue/status": { @@ -20,6 +21,37 @@ const widget = { "totalCount" ] }, + "queue/details": { + endpoint: "queue/details", + map: (data) => asJson(data).map((entry) => ({ + trackedDownloadState: entry.trackedDownloadState, + trackedDownloadStatus: entry.trackedDownloadStatus, + timeLeft: entry.timeleft, + size: entry.size, + sizeLeft: entry.sizeleft, + movieId: entry.movieId ?? entry.id, + status: entry.status + })).sort((a, b) => { + const downloadingA = a.trackedDownloadState === "downloading" + const downloadingB = b.trackedDownloadState === "downloading" + if (downloadingA && !downloadingB) { + return -1; + } + if (downloadingB && !downloadingA) { + return 1; + } + + const percentA = a.sizeLeft / a.size; + const percentB = b.sizeLeft / b.size; + if (percentA < percentB) { + return -1; + } + if (percentA > percentB) { + return 1; + } + return 0; + }) + }, }, }; diff --git a/src/widgets/sonarr/component.jsx b/src/widgets/sonarr/component.jsx index adbb8c30..27b1ab03 100644 --- a/src/widgets/sonarr/component.jsx +++ b/src/widgets/sonarr/component.jsx @@ -1,9 +1,26 @@ import { useTranslation } from "next-i18next"; +import { useCallback } from 'react'; + +import QueueEntry from "../../components/widgets/queue/queueEntry"; import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; +function getProgress(sizeLeft, size) { + return sizeLeft === 0 ? 100 : (1 - sizeLeft / size) * 100 +} + +function getTitle(queueEntry, seriesData) { + let title = '' + const seriesTitle = seriesData.find((entry) => entry.id === queueEntry.seriesId)?.title; + if (seriesTitle) title += `${seriesTitle}: `; + const { episodeTitle } = queueEntry; + if (episodeTitle) title += episodeTitle; + if (title === '') return null; + return title; +} + export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; @@ -11,13 +28,25 @@ export default function Component({ service }) { const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue"); const { data: seriesData, error: seriesError } = useWidgetAPI(widget, "series"); + const { data: queueDetailsData, error: queueDetailsError } = useWidgetAPI(widget, "queue/details"); - if (wantedError || queuedError || seriesError) { - const finalError = wantedError ?? queuedError ?? seriesError; + const formatDownloadState = useCallback((downloadState) => { + switch (downloadState) { + case "importPending": + return "import pending"; + case "failedPending": + return "failed pending"; + default: + return downloadState; + } + }, []); + + if (wantedError || queuedError || seriesError || queueDetailsError) { + const finalError = wantedError ?? queuedError ?? seriesError ?? queueDetailsError; return ; } - if (!wantedData || !queuedData || !seriesData) { + if (!wantedData || !queuedData || !seriesData || !queueDetailsData) { return ( @@ -27,11 +56,26 @@ export default function Component({ service }) { ); } + const enableQueue = widget?.enableQueue && Array.isArray(queueDetailsData) && queueDetailsData.length > 0; + return ( - - - - - + <> + + + + + + {enableQueue && + queueDetailsData.map((queueEntry) => ( + + )) + } + ); } diff --git a/src/widgets/sonarr/widget.js b/src/widgets/sonarr/widget.js index c1413975..7f658eb1 100644 --- a/src/widgets/sonarr/widget.js +++ b/src/widgets/sonarr/widget.js @@ -8,9 +8,10 @@ const widget = { mappings: { series: { endpoint: "series", - map: (data) => ({ - total: asJson(data).length, - }) + map: (data) => asJson(data).map((entry) => ({ + title: entry.title, + id: entry.id + })) }, queue: { endpoint: "queue", @@ -24,6 +25,39 @@ const widget = { "totalRecords" ] }, + "queue/details": { + endpoint: "queue/details", + map: (data) => asJson(data).map((entry) => ({ + trackedDownloadState: entry.trackedDownloadState, + trackedDownloadStatus: entry.trackedDownloadStatus, + timeLeft: entry.timeleft, + size: entry.size, + sizeLeft: entry.sizeleft, + seriesId: entry.seriesId, + episodeTitle: entry.episode?.title ?? entry.title, + episodeId: entry.episodeId ?? entry.id, + status: entry.status, + })).sort((a, b) => { + const downloadingA = a.trackedDownloadState === "downloading" + const downloadingB = b.trackedDownloadState === "downloading" + if (downloadingA && !downloadingB) { + return -1; + } + if (downloadingB && !downloadingA) { + return 1; + } + + const percentA = a.sizeLeft / a.size; + const percentB = b.sizeLeft / b.size; + if (percentA < percentB) { + return -1; + } + if (percentA > percentB) { + return 1; + } + return 0; + }) + } }, };