From abeaf7ccb6fab9aa5ada90d29e83992643db6d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Resul=20=C3=96v=C3=BCr?= <92828257+ovurrsl@users.noreply.github.com> Date: Wed, 21 Oct 2026 07:56:05 +0300 Subject: [PATCH] fix: a failed Steam client download ends the session with a message instead of silently (#997) --- .../com/droiddeck/launcher/SessionActivity.kt | 17 ++-- .../session/SteamClientSetupFailure.kt | 28 +++++++ app/src/main/res/values-ar/strings.xml | 2 + app/src/main/res/values-b+es+419/strings.xml | 2 + app/src/main/res/values-bg/strings.xml | 2 + app/src/main/res/values-cs/strings.xml | 2 + app/src/main/res/values-da/strings.xml | 2 + app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values-el/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fi/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values-hi/strings.xml | 2 + app/src/main/res/values-hu/strings.xml | 2 + app/src/main/res/values-in/strings.xml | 2 + app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values-ja/strings.xml | 2 + app/src/main/res/values-ko/strings.xml | 2 + app/src/main/res/values-ms/strings.xml | 2 + app/src/main/res/values-nb/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 2 + app/src/main/res/values-pl/strings.xml | 2 + app/src/main/res/values-pt-rPT/strings.xml | 2 + app/src/main/res/values-pt/strings.xml | 2 + app/src/main/res/values-ro/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values-sv/strings.xml | 2 + app/src/main/res/values-th/strings.xml | 2 + app/src/main/res/values-tr/strings.xml | 2 + app/src/main/res/values-uk/strings.xml | 2 + app/src/main/res/values-vi/strings.xml | 2 + app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values-zh-rHK/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + .../session/SteamClientSetupFailureTest.kt | 72 ++++++++++++++++ .../overlay/usr/local/bin/droiddeck-session | 11 ++- .../tests/test_steam_client_setup_failure.py | 82 +++++++++++++++++++ 38 files changed, 267 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/droiddeck/launcher/session/SteamClientSetupFailure.kt create mode 100644 app/src/test/java/com/droiddeck/launcher/session/SteamClientSetupFailureTest.kt create mode 100644 tools/tests/test_steam_client_setup_failure.py diff --git a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt index 0e95a2635..8bddc2a0c 100644 --- a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt @@ -1879,17 +1879,22 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback { var enosys = 0 var fexMissing = false val size = log.length() - java.io.RandomAccessFile(log, "r").use { f -> + val text = java.io.RandomAccessFile(log, "r").use { f -> val start = maxOf(0L, size - 512L * 1024) f.seek(start) val bytes = ByteArray((size - start).toInt()) f.readFully(bytes) - String(bytes, Charsets.ISO_8859_1).lineSequence().forEach { line -> - if (line.contains("Function not implemented")) enosys++ - if (line.contains(FEX_MISSING)) fexMissing = true - } + String(bytes, Charsets.ISO_8859_1) } - if (fexMissing) { + text.lineSequence().forEach { line -> + if (line.contains("Function not implemented")) enosys++ + if (line.contains(FEX_MISSING)) fexMissing = true + } + val steamSetup = com.droiddeck.launcher.session.SteamClientSetupFailure.find(text.lineSequence()) + if (steamSetup != null) { + val message = getString(if (steamSetup.download) R.string.session_end_steam_download else R.string.session_end_steam_setup) + EndHint(listOfNotNull(message, steamSetup.curlError).joinToString("\n")) + } else if (fexMissing) { val what = com.droiddeck.launcher.frontend.Library.nameForProgram(SessionState.program) ?: getString(R.string.session_end_program) EndHint(getString(R.string.session_end_fex_missing, what), evenOnSuccess = true) } else if (enosys >= 8) { diff --git a/app/src/main/java/com/droiddeck/launcher/session/SteamClientSetupFailure.kt b/app/src/main/java/com/droiddeck/launcher/session/SteamClientSetupFailure.kt new file mode 100644 index 000000000..c0a53ca7a --- /dev/null +++ b/app/src/main/java/com/droiddeck/launcher/session/SteamClientSetupFailure.kt @@ -0,0 +1,28 @@ +package com.droiddeck.launcher.session + +class SteamClientSetupFailure(val curlError: String?) { + val download get() = curlError != null + + companion object { + const val MARKER = "== steam: the Steam client could not be set up" + private const val STEP = "checking the Steam client" + private const val X64_STEP = "checking the x86-64 Steam client" + private val CURL_ERROR = Regex("""curl: \(\d+\).*""") + + fun find(lines: Sequence): SteamClientSetupFailure? { + var curlError: String? = null + var found: SteamClientSetupFailure? = null + lines.forEach { line -> + when { + line.contains(STEP) || line.contains(X64_STEP) -> { + curlError = null + found = null + } + line.contains(MARKER) -> found = SteamClientSetupFailure(curlError) + else -> CURL_ERROR.find(line)?.let { curlError = it.value.trim() } + } + } + return found + } + } +} diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 27109fd06..c8fd949fb 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -176,6 +176,8 @@ %1$s عبر FEX هذا البرنامج مبني لأجهزة كمبيوتر %1$s ويعمل عبر FEX، الذي لم يتم إعداده بعد. افتح Steam مرة واحدة أثناء تسجيل الدخول: سيجعله DroidDeck يُنزّل FEX وSteam Linux Runtime اللازمة، ثم يُفتح هذا البرنامج. هذا البرنامج + تعذّر تنزيل عميل Steam. قد تكون شبكتك أو VPN تحظر خوادم Steam؛ تحقّق من الاتصال وحاول مرة أخرى. + تعذّر إعداد عميل Steam. تحقّق من الاتصال والمساحة الفارغة، ثم حاول مرة أخرى. %1$s مبني لأجهزة كمبيوتر x86 ويعمل عبر FEX، الذي لم يتم تثبيته بعد. شغّل Steam مرة واحدة أثناء تسجيل الدخول ودعه يُنزّل FEX وSteam Linux Runtime، ثم شغّل هذا البرنامج مجددًا. معرّف تطبيق على Flathub أو صفحته على Flathub. يُعَدّ Flatpak أولًا إن لم يكن مُعدًّا بعد. الملف diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml index 8988e18d1..a9303902a 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -176,6 +176,8 @@ %1$s con FEX Este programa está hecho para PC %1$s y se ejecuta con FEX, que aún no está listo. Abre Steam una vez con tu sesión iniciada: DroidDeck hará que descargue FEX y el Steam Linux Runtime que necesita, y después se abrirá. Este programa + No se pudo descargar el cliente de Steam. Es posible que tu red o VPN esté bloqueando los servidores de Steam; revisa la conexión e inténtalo de nuevo. + No se pudo configurar el cliente de Steam. Revisa la conexión y el espacio libre, y vuelve a intentarlo. %1$s está hecho para PC x86 y se ejecuta con FEX, que aún no está instalado. Abre Steam una vez con tu sesión iniciada y deja que descargue FEX y el Steam Linux Runtime; después vuelve a iniciarlo. Un ID de app de Flathub o su página en Flathub. Flatpak se configura primero si aún no lo está. Archivo diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index d48d3a0ca..aba51d559 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -176,6 +176,8 @@ %1$s през FEX Тази програма е компилирана за %1$s компютри и се стартира през FEX, който още не е настроен. Отворете Steam веднъж, докато сте влезли: DroidDeck ще изтегли FEX и необходимата Steam Linux Runtime, след което тя ще се отвори. Тази програма + Клиентът на Steam не можа да бъде изтеглен. Мрежата или VPN връзката ви може да блокира сървърите на Steam; проверете връзката и опитайте отново. + Клиентът на Steam не можа да бъде настроен. Проверете връзката и свободното място, след което опитайте отново. %1$s е компилирана за x86 компютри и се стартира през FEX, който още не е инсталиран. Стартирайте Steam веднъж, докато сте влезли, и го оставете да изтегли FEX и Steam Linux Runtime, след което стартирайте отново. ID на приложение в Flathub или страницата му в Flathub. Flatpak се настройва първо, ако още не е. Файл diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index e3b3bc3c0..2bef97b92 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -176,6 +176,8 @@ %1$s přes FEX Tento program je sestaven pro PC %1$s a běží přes FEX, který ještě není nastaven. Jednou spusťte přihlášený Steam: DroidDeck tím stáhne FEX a Steam Linux Runtime, který potřebuje, a pak se tento program otevře. Tento program + Klienta Steam se nepodařilo stáhnout. Vaše síť nebo VPN možná blokuje servery Steamu; zkontrolujte připojení a zkuste to znovu. + Klienta Steam se nepodařilo nastavit. Zkontrolujte připojení a volné místo a zkuste to znovu. %1$s je sestaven pro PC x86 a běží přes FEX, který ještě není nainstalován. Jednou spusťte přihlášený Steam a nechte ho stáhnout FEX a Steam Linux Runtime, pak to spusťte znovu. ID aplikace Flathub nebo její stránka na Flathub. Flatpak se nejprve nastaví, pokud ještě není. Soubor diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 85062308d..3fe4695cb 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -176,6 +176,8 @@ %1$s via FEX Dette program er bygget til %1$s-pc’er og køres via FEX, som ikke er sat op endnu. Åbn Steam én gang, mens du er logget ind: DroidDeck downloader så FEX og den Steam Linux Runtime, det kræver, hvorefter dette åbner. Dette program + Steam-klienten kunne ikke downloades. Dit netværk eller din VPN blokerer muligvis Steams servere; tjek forbindelsen, og prøv igen. + Steam-klienten kunne ikke konfigureres. Tjek forbindelsen og den ledige lagerplads, og prøv igen. %1$s er bygget til x86-pc’er og køres via FEX, som ikke er installeret endnu. Start Steam én gang, mens du er logget ind, og lad det downloade FEX og Steam Linux Runtime, og start så dette igen. Et Flathub-app-id eller dens Flathub-side. Flatpak sættes op først, hvis det ikke allerede er. Fil diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 18199e20e..9fe1c0e79 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -176,6 +176,8 @@ %1$s über FEX Dieses Programm ist für %1$s-PCs gebaut und läuft über FEX, das noch nicht eingerichtet ist. Öffne Steam einmal, während du angemeldet bist: DroidDeck lässt es FEX und die nötige Steam Linux Runtime herunterladen, danach lässt sich das Programm öffnen. Dieses Programm + Der Steam-Client konnte nicht heruntergeladen werden. Dein Netzwerk oder VPN blockiert möglicherweise die Server von Steam; prüfe die Verbindung und versuche es erneut. + Der Steam-Client konnte nicht eingerichtet werden. Prüfe die Verbindung und den freien Speicher und versuche es erneut. %1$s ist für x86-PCs gebaut und läuft über FEX, das noch nicht installiert ist. Starte Steam einmal, während du angemeldet bist, und lass es FEX und die Steam Linux Runtime herunterladen. Starte es danach erneut. Eine Flathub-App-ID oder ihre Flathub-Seite. Flatpak wird zuerst eingerichtet, falls noch nicht geschehen. Datei diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 0ff07c465..14f83431c 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -176,6 +176,8 @@ %1$s μέσω FEX Αυτό το πρόγραμμα είναι χτισμένο για υπολογιστές %1$s και εκτελείται μέσω FEX, το οποίο δεν έχει ρυθμιστεί ακόμα. Ανοίξτε το Steam μία φορά ενώ είστε συνδεδεμένοι: το DroidDeck κάνει λήψη του FEX και του Steam Linux Runtime που χρειάζεται, και μετά αυτό ανοίγει. Αυτό το πρόγραμμα + Δεν ήταν δυνατή η λήψη του πελάτη Steam. Το δίκτυο ή το VPN σας ίσως αποκλείει τους διακομιστές του Steam· ελέγξτε τη σύνδεση και δοκιμάστε ξανά. + Δεν ήταν δυνατή η ρύθμιση του πελάτη Steam. Ελέγξτε τη σύνδεση και τον ελεύθερο χώρο αποθήκευσης και δοκιμάστε ξανά. Το %1$s είναι χτισμένο για υπολογιστές x86 και εκτελείται μέσω FEX, το οποίο δεν έχει εγκατασταθεί ακόμα. Εκκινήστε το Steam μία φορά ενώ είστε συνδεδεμένοι και αφήστε το να κάνει λήψη του FEX και του Steam Linux Runtime, μετά εκκινήστε αυτό ξανά. Ένα ID εφαρμογής Flathub ή η σελίδα της στο Flathub. Το Flatpak ρυθμίζεται πρώτα, αν δεν έχει ρυθμιστεί ακόμα. Αρχείο diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0373f7ab3..ea6e05fb3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -176,6 +176,8 @@ %1$s con FEX Este programa está hecho para PC %1$s y se ejecuta con FEX, que aún no está listo. Abre Steam una vez con tu sesión iniciada: DroidDeck hará que descargue FEX y el Steam Linux Runtime que necesita, y después se abrirá. Este programa + No se ha podido descargar el cliente de Steam. Puede que tu red o VPN esté bloqueando los servidores de Steam; comprueba la conexión y vuelve a intentarlo. + No se ha podido configurar el cliente de Steam. Comprueba la conexión y el espacio libre y vuelve a intentarlo. %1$s está hecho para PC x86 y se ejecuta con FEX, que aún no está instalado. Abre Steam una vez con tu sesión iniciada y deja que descargue FEX y el Steam Linux Runtime; después vuelve a iniciarlo. Un ID de app de Flathub o su página en Flathub. Flatpak se configura primero si aún no lo está. Archivo diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 2a1f62a03..680b9c455 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -176,6 +176,8 @@ %1$s FEXin kautta Tämä ohjelma on tehty %1$s-tietokoneille ja käynnistyy FEXin kautta, jota ei ole vielä määritetty. Avaa Steam kerran kirjautuneena: DroidDeck lataa sen myötä FEXin ja tarvittavan Steam Linux Runtimen, jonka jälkeen tämä avautuu. Tämä ohjelma + Steam-asiakasohjelmaa ei voitu ladata. Verkkosi tai VPN saattaa estää Steamin palvelimet; tarkista yhteys ja yritä uudelleen. + Steam-asiakasohjelmaa ei voitu ottaa käyttöön. Tarkista yhteys ja vapaa tallennustila ja yritä uudelleen. %1$s on tehty x86-tietokoneille ja käynnistyy FEXin kautta, jota ei ole vielä asennettu. Käynnistä Steam kerran kirjautuneena ja anna sen ladata FEX ja Steam Linux Runtime, sitten käynnistä tämä uudelleen. Flathub-sovellustunnus tai sen Flathub-sivu. Flatpak otetaan käyttöön ensin, jos sitä ei ole vielä otettu. Tiedosto diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d151596fb..107215628 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -176,6 +176,8 @@ %1$s via FEX Ce programme est conçu pour les PC %1$s et s\'exécute via FEX, qui n\'est pas encore configuré. Ouvrez Steam une fois en étant connecté : DroidDeck lui fait télécharger FEX et le Steam Linux Runtime nécessaires, puis ce programme s\'ouvre. Ce programme + Impossible de télécharger le client Steam. Votre réseau ou votre VPN bloque peut-être les serveurs de Steam ; vérifiez la connexion et réessayez. + Impossible de configurer le client Steam. Vérifiez la connexion et l\'espace libre, puis réessayez. %1$s est conçu pour les PC x86 et s\'exécute via FEX, qui n\'est pas encore installé. Lancez Steam une fois en étant connecté et laissez-le télécharger FEX et le Steam Linux Runtime, puis relancez ce programme. ID d\'application Flathub ou sa page Flathub. Si Flatpak n\'est pas encore configuré, il le sera d\'abord. Fichier diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index af68d4524..2a246077f 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -176,6 +176,8 @@ FEX के ज़रिए %1$s यह प्रोग्राम %1$s पीसी के लिए बना है और FEX के ज़रिए चलता है, जो अभी सेट नहीं है। साइन इन रहते हुए Steam एक बार खोलें: DroidDeck इससे FEX और ज़रूरी Steam Linux Runtime डाउनलोड करवा लेगा, फिर यह खुल जाएगा। यह प्रोग्राम + Steam क्लाइंट डाउनलोड नहीं हो सका। हो सकता है आपका नेटवर्क या VPN Steam के सर्वर ब्लॉक कर रहा हो; कनेक्शन जांचें और फिर से कोशिश करें। + Steam क्लाइंट सेट अप नहीं हो सका। कनेक्शन और खाली स्टोरेज जांचें, फिर से कोशिश करें। %1$s x86 पीसी के लिए बना है और FEX के ज़रिए चलता है, जो अभी इंस्टॉल नहीं है। साइन इन रहते हुए Steam एक बार शुरू करें और इसे FEX और Steam Linux Runtime डाउनलोड करने दें, फिर इसे फिर से शुरू करें। एक Flathub ऐप ID या उसका Flathub पेज। अगर Flatpak अभी सेट नहीं है, तो पहले वह सेट होगा। फ़ाइल diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 67f33c54d..ab5bbef49 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -176,6 +176,8 @@ %1$s a FEX-en keresztül Ez a program %1$s PC-khez készült, és a FEX-en keresztül fut, amely még nincs beállítva. Nyissa meg egyszer a Steamet bejelentkezve: a DroidDeck ekkor letölti a FEX-et és a szükséges Steam Linux Runtime-ot, majd ez megnyílik. Ez a program + A Steam-klienst nem sikerült letölteni. Lehet, hogy a hálózat vagy a VPN blokkolja a Steam szervereit; ellenőrizd a kapcsolatot, és próbáld újra. + A Steam-klienst nem sikerült beállítani. Ellenőrizd a kapcsolatot és a szabad tárhelyet, majd próbáld újra. A %1$s x86 PC-khez készült, és a FEX-en keresztül fut, amely még nincs telepítve. Indítsa el egyszer a Steamet bejelentkezve, és hagyja letölteni a FEX-et és a Steam Linux Runtime-ot, majd indítsa el ezt újra. Egy Flathub-alkalmazásazonosító vagy a Flathub-oldala. A Flatpak előbb beállításra kerül, ha még nincs beállítva. Fájl diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 6a0371282..0bd3c783f 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -176,6 +176,8 @@ %1$s melalui FEX Program ini dibuat untuk PC %1$s dan berjalan melalui FEX, yang belum disiapkan. Buka Steam sekali saat masuk: DroidDeck akan mengunduh FEX dan Steam Linux Runtime yang diperlukan, lalu ini akan terbuka. Program ini + Tidak dapat mengunduh klien Steam. Jaringan atau VPN Anda mungkin memblokir server Steam; periksa koneksi lalu coba lagi. + Tidak dapat menyiapkan klien Steam. Periksa koneksi dan ruang penyimpanan kosong, lalu coba lagi. %1$s dibuat untuk PC x86 dan berjalan melalui FEX, yang belum terinstal. Mulai Steam sekali saat masuk dan biarkan FEX serta Steam Linux Runtime diunduh, lalu mulai lagi. ID aplikasi Flathub atau halaman Flathub-nya. Flatpak disiapkan dahulu jika belum. File diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6cf24b19d..a2c2c3c4c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -176,6 +176,8 @@ %1$s tramite FEX Questo programma è compilato per PC %1$s e viene eseguito tramite FEX, che non è ancora configurato. Apri Steam una volta dopo aver eseguito l\'accesso: DroidDeck gli farà scaricare FEX e lo Steam Linux Runtime necessario, poi il programma si aprirà. Questo programma + Impossibile scaricare il client Steam. La rete o la VPN potrebbe bloccare i server di Steam; controlla la connessione e riprova. + Impossibile configurare il client Steam. Controlla la connessione e lo spazio libero, poi riprova. %1$s è compilato per PC x86 e viene eseguito tramite FEX, che non è ancora installato. Avvia Steam una volta dopo aver eseguito l\'accesso e lascia che scarichi FEX e lo Steam Linux Runtime, poi riavvia il programma. Un ID app di Flathub o la sua pagina su Flathub. Se manca, Flatpak viene prima configurato. File diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a1f640853..213144bea 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -176,6 +176,8 @@ %1$s(FEX経由) このプログラムは%1$s PC向けにビルドされており、FEX経由で実行されますが、FEXはまだセットアップされていません。ログインした状態で一度Steamを開いてください。DroidDeckがFEXと必要なSteam Linux Runtimeをダウンロードした後、このプログラムが開きます。 このプログラム + Steamクライアントをダウンロードできませんでした。ネットワークまたはVPNがSteamのサーバーをブロックしている可能性があります。接続を確認して、もう一度お試しください。 + Steamクライアントをセットアップできませんでした。接続と空き容量を確認して、もう一度お試しください。 %1$sはx86 PC向けにビルドされており、FEX経由で実行されますが、FEXはまだインストールされていません。ログインした状態で一度Steamを起動し、FEXとSteam Linux Runtimeをダウンロードしてから、もう一度起動してください。 FlathubアプリIDまたはそのFlathubページ。Flatpakがまだセットアップされていない場合は、先にセットアップします。 ファイル diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index ffd0d5a7a..4fc869f78 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -176,6 +176,8 @@ FEX로 실행되는 %1$s 이 프로그램은 %1$s PC용으로 빌드되어 FEX를 통해 실행되지만, FEX가 아직 설정되지 않았습니다. 로그인한 상태로 Steam을 한 번 열면 DroidDeck이 FEX와 필요한 Steam Linux Runtime을 다운로드한 후 이 프로그램을 엽니다. 이 프로그램 + Steam 클라이언트를 다운로드할 수 없습니다. 네트워크나 VPN이 Steam 서버를 차단하고 있을 수 있습니다. 연결을 확인하고 다시 시도하세요. + Steam 클라이언트를 설정할 수 없습니다. 연결과 남은 저장 공간을 확인한 뒤 다시 시도하세요. %1$s은(는) x86 PC용으로 빌드되어 FEX를 통해 실행되지만, FEX가 아직 설치되지 않았습니다. 로그인한 상태로 Steam을 한 번 시작하여 FEX와 Steam Linux Runtime을 다운로드한 후 다시 시작하세요. Flathub 앱 ID 또는 해당 Flathub 페이지입니다. Flatpak이 아직 설정되지 않은 경우 먼저 설정합니다. 파일 diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 42d9888b7..599ff582f 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -176,6 +176,8 @@ %1$s melalui FEX Program ini dibina untuk PC %1$s dan berjalan melalui FEX, yang belum disediakan lagi. Buka Steam sekali semasa anda log masuk: DroidDeck akan memuat turun FEX dan Steam Linux Runtime yang diperlukan, kemudian ini akan dibuka. Program ini + Tidak dapat memuat turun klien Steam. Rangkaian atau VPN anda mungkin menyekat pelayan Steam; semak sambungan dan cuba lagi. + Tidak dapat menyediakan klien Steam. Semak sambungan dan ruang storan kosong, kemudian cuba lagi. %1$s dibina untuk PC x86 dan berjalan melalui FEX, yang belum dipasang lagi. Mulakan Steam sekali semasa anda log masuk dan biarkan ia memuat turun FEX dan Steam Linux Runtime, kemudian mulakan ini semula. ID apl Flathub atau halaman Flathubnya. Flatpak akan disediakan dahulu jika belum lagi. Fail diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 133d05378..68dcfc185 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -176,6 +176,8 @@ %1$s via FEX Dette programmet er bygget for %1$s-PC-er og kjører via FEX, som ikke er satt opp ennå. Åpne Steam én gang mens du er innlogget: DroidDeck lar den laste ned FEX og Steam Linux Runtime den trenger, og så åpnes dette. Dette programmet + Kunne ikke laste ned Steam-klienten. Nettverket eller VPN-en din blokkerer kanskje Steams servere; sjekk tilkoblingen og prøv igjen. + Kunne ikke sette opp Steam-klienten. Sjekk tilkoblingen og ledig lagringsplass, og prøv igjen. %1$s er bygget for x86-PC-er og kjører via FEX, som ikke er installert ennå. Start Steam én gang mens du er innlogget, og la den laste ned FEX og Steam Linux Runtime, og start dette på nytt. En Flathub-app-ID eller dens Flathub-side. Flatpak settes opp først hvis det ikke allerede er gjort. Fil diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f37c87582..267afcb69 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -176,6 +176,8 @@ %1$s via FEX Dit programma is gemaakt voor %1$s-pc’s en draait via FEX, dat nog niet is ingesteld. Open Steam één keer terwijl je bent ingelogd: DroidDeck laat het dan FEX en de benodigde Steam Linux Runtime downloaden. Daarna opent dit. Dit programma + De Steam-client kon niet worden gedownload. Je netwerk of VPN blokkeert mogelijk de servers van Steam; controleer de verbinding en probeer het opnieuw. + De Steam-client kon niet worden ingesteld. Controleer de verbinding en de vrije opslag en probeer het opnieuw. %1$s is gemaakt voor x86-pc’s en draait via FEX, dat nog niet is geïnstalleerd. Start Steam één keer terwijl je bent ingelogd en laat het FEX en de Steam Linux Runtime downloaden. Start dit daarna opnieuw. Een Flathub-app-ID of de Flathub-pagina ervan. Flatpak wordt eerst ingesteld als dat nog niet is gebeurd. Bestand diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index de29734d2..fc7bb39b1 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -176,6 +176,8 @@ %1$s przez FEX Ten program jest zbudowany dla komputerów %1$s i działa przez FEX, który nie jest jeszcze skonfigurowany. Otwórz raz Steam po zalogowaniu: DroidDeck pobierze wtedy FEX i potrzebne Steam Linux Runtime, a potem program się otworzy. Ten program + Nie udało się pobrać klienta Steam. Twoja sieć lub VPN może blokować serwery Steam; sprawdź połączenie i spróbuj ponownie. + Nie udało się skonfigurować klienta Steam. Sprawdź połączenie i wolne miejsce, a potem spróbuj ponownie. %1$s jest zbudowany dla komputerów x86 i działa przez FEX, który nie jest jeszcze zainstalowany. Uruchom raz Steam po zalogowaniu i pozwól mu pobrać FEX oraz Steam Linux Runtime, a potem uruchom program ponownie. ID aplikacji z Flathub lub jej strona na Flathub. Jeśli Flatpak nie jest jeszcze skonfigurowany, zostanie skonfigurowany najpierw. Plik diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index edffdf14a..8c51b09c9 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -176,6 +176,8 @@ %1$s através do FEX Este programa foi compilado para PCs %1$s e é executado através do FEX, que ainda não está configurado. Abra o Steam uma vez com a sessão iniciada: o DroidDeck transfere o FEX e o Steam Linux Runtime necessários e, depois, este programa abre. Este programa + Não foi possível transferir o cliente Steam. A sua rede ou VPN pode estar a bloquear os servidores da Steam; verifique a ligação e tente novamente. + Não foi possível configurar o cliente Steam. Verifique a ligação e o espaço livre e tente novamente. %1$s foi compilado para PCs x86 e é executado através do FEX, que ainda não está instalado. Abra o Steam uma vez com a sessão iniciada e deixe-o transferir o FEX e o Steam Linux Runtime; depois, volte a iniciá-lo. Um ID de app do Flathub ou a respetiva página no Flathub. O Flatpak é configurado primeiro, se ainda não estiver. Ficheiro diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index a4d96ea94..7c6f7f966 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -176,6 +176,8 @@ %1$s pelo FEX Este programa é feito para PCs %1$s e roda pelo FEX, que ainda não está configurado. Abra a Steam uma vez com a sessão iniciada: o DroidDeck faz com que ela baixe o FEX e o Steam Linux Runtime necessários, e então isto abre. Este programa + Não foi possível baixar o cliente Steam. Sua rede ou VPN pode estar bloqueando os servidores da Steam; verifique a conexão e tente novamente. + Não foi possível configurar o cliente Steam. Verifique a conexão e o espaço livre e tente novamente. %1$s é feito para PCs x86 e roda pelo FEX, que ainda não está instalado. Abra a Steam uma vez com a sessão iniciada e deixe-a baixar o FEX e o Steam Linux Runtime; depois, abra isto de novo. Um ID de app do Flathub ou a página dele no Flathub. O Flatpak é configurado antes, se ainda não estiver. Arquivo diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index d97af4aed..c9e753866 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -176,6 +176,8 @@ %1$s prin FEX Acest program este compilat pentru PC-uri %1$s și rulează prin FEX, care nu este încă configurat. Deschide Steam o dată, fiind autentificat: DroidDeck îl pune să descarce FEX și Steam Linux Runtime de care are nevoie, apoi acesta se deschide. Acest program + Clientul Steam nu a putut fi descărcat. Rețeaua sau VPN-ul tău poate bloca serverele Steam; verifică conexiunea și încearcă din nou. + Clientul Steam nu a putut fi configurat. Verifică conexiunea și spațiul liber, apoi încearcă din nou. %1$s este compilat pentru PC-uri x86 și rulează prin FEX, care nu este încă instalat. Pornește Steam o dată, fiind autentificat, și lasă-l să descarce FEX și Steam Linux Runtime, apoi pornește din nou acesta. Un ID de aplicație Flathub sau pagina sa Flathub. Flatpak este configurat mai întâi, dacă nu este deja. Fișier diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1388738db..4af87d354 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -176,6 +176,8 @@ %1$s через FEX Эта программа собрана для ПК на %1$s и работает через FEX, который еще не настроен. Откройте Steam один раз, войдя в аккаунт: DroidDeck скачает через него FEX и нужную Steam Linux Runtime, после чего программа откроется. Эта программа + Не удалось скачать клиент Steam. Возможно, ваша сеть или VPN блокирует серверы Steam; проверьте подключение и повторите попытку. + Не удалось настроить клиент Steam. Проверьте подключение и свободное место, затем повторите попытку. %1$s — сборка для x86-ПК, которая работает через FEX, а он еще не установлен. Запустите Steam один раз, войдя в аккаунт, и дайте ему скачать FEX и Steam Linux Runtime, затем запустите программу снова. ID приложения Flathub или ссылка на его страницу. Если Flatpak еще не настроен, сначала будет выполнена его настройка. Файл diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index caf787c3a..e740f9cb9 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -176,6 +176,8 @@ %1$s via FEX Programmet är byggt för %1$s-datorer och körs via FEX, som inte har konfigurerats än. Öppna Steam en gång medan du är inloggad: DroidDeck låter Steam ladda ned FEX och den Steam Linux Runtime som behövs, sedan öppnas detta. Det här programmet + Det gick inte att ladda ned Steam-klienten. Ditt nätverk eller din VPN kanske blockerar Steams servrar; kontrollera anslutningen och försök igen. + Det gick inte att konfigurera Steam-klienten. Kontrollera anslutningen och det lediga lagringsutrymmet och försök igen. %1$s är byggt för x86-datorer och körs via FEX, som inte är installerat än. Starta Steam en gång medan du är inloggad och låt det ladda ned FEX och Steam Linux Runtime. Starta sedan detta igen. Ett app-ID från Flathub eller appens Flathub-sida. Flatpak konfigureras först om det inte redan är gjort. Fil diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 1107a6777..3a9157bb7 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -176,6 +176,8 @@ %1$s ผ่าน FEX โปรแกรมนี้สร้างมาสำหรับพีซี %1$s และรันผ่าน FEX ซึ่งยังไม่ได้ตั้งค่า เปิด Steam สักครั้งขณะลงชื่อเข้าใช้: DroidDeck จะดาวน์โหลด FEX และ Steam Linux Runtime ที่จำเป็น จากนั้นโปรแกรมนี้จะเปิดขึ้น โปรแกรมนี้ + ดาวน์โหลดไคลเอนต์ Steam ไม่ได้ เครือข่ายหรือ VPN ของคุณอาจบล็อกเซิร์ฟเวอร์ของ Steam ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง + ตั้งค่าไคลเอนต์ Steam ไม่ได้ ตรวจสอบการเชื่อมต่อและพื้นที่ว่าง แล้วลองอีกครั้ง %1$s สร้างมาสำหรับพีซี x86 และรันผ่าน FEX ซึ่งยังไม่ได้ติดตั้ง เริ่ม Steam สักครั้งขณะลงชื่อเข้าใช้และให้ดาวน์โหลด FEX และ Steam Linux Runtime จากนั้นเริ่มโปรแกรมนี้อีกครั้ง รหัสแอป Flathub หรือหน้า Flathub ของมัน จะตั้งค่า Flatpak ก่อนหากยังไม่ได้ตั้งค่า ไฟล์ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 05cd0192b..9e6b9ab15 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -176,6 +176,8 @@ FEX ile %1$s Bu program %1$s PC\'ler için derlenmiş ve FEX ile çalışır, ancak FEX henüz kurulmadı. Oturum açmışken Steam\'i bir kez açın: DroidDeck, FEX\'i ve gereken Steam Linux Runtime\'ı indirtir, ardından bu program açılır. Bu program + Steam istemcisi indirilemedi. Ağınız veya VPN\'iniz Steam sunucularını engelliyor olabilir; bağlantıyı kontrol edip yeniden deneyin. + Steam istemcisi kurulamadı. Bağlantınızı ve boş depolama alanını kontrol edip yeniden deneyin. %1$s x86 PC\'ler için derlenmiş ve FEX ile çalışır, ancak FEX henüz yüklü değil. Oturum açmışken Steam\'i bir kez başlatıp FEX\'i ve Steam Linux Runtime\'ı indirmesini bekleyin, ardından bunu yeniden başlatın. Bir Flathub uygulama kimliği veya Flathub sayfası. Flatpak henüz kurulu değilse önce o kurulur. Dosya diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cf16a0938..931caa8ad 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -176,6 +176,8 @@ %1$s через FEX Цю програму зібрано для ПК з архітектурою %1$s, і вона працює через FEX, який ще не налаштовано. Один раз відкрийте Steam, увійшовши в обліковий запис: DroidDeck завантажить FEX і потрібний йому Steam Linux Runtime, після чого програма відкриється. Ця програма + Не вдалося завантажити клієнт Steam. Можливо, ваша мережа або VPN блокує сервери Steam; перевірте з’єднання та спробуйте ще раз. + Не вдалося налаштувати клієнт Steam. Перевірте з’єднання та вільне місце, потім спробуйте ще раз. %1$s зібрано для ПК x86; для запуску потрібен FEX, який ще не встановлено. Один раз запустіть Steam, увійшовши в обліковий запис, дайте йому завантажити FEX і Steam Linux Runtime, а потім запустіть це знову. ID додатка Flathub або його сторінка на Flathub. Якщо Flatpak ще не налаштовано, його буде налаштовано спочатку. Файл diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 785e8d57f..d636a67ea 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -176,6 +176,8 @@ %1$s qua FEX Chương trình này được build cho PC %1$s và chạy qua FEX, hiện chưa được thiết lập. Mở Steam một lần khi đã đăng nhập: DroidDeck sẽ tải FEX và Steam Linux Runtime cần thiết, sau đó ứng dụng này sẽ mở. Chương trình này + Không thể tải xuống client Steam. Mạng hoặc VPN của bạn có thể đang chặn máy chủ Steam; hãy kiểm tra kết nối rồi thử lại. + Không thể thiết lập client Steam. Hãy kiểm tra kết nối và dung lượng trống rồi thử lại. %1$s được build cho PC x86 và chạy qua FEX, hiện chưa được cài. Khởi động Steam một lần khi đã đăng nhập và để nó tải FEX cùng Steam Linux Runtime, sau đó khởi động lại ứng dụng này. Một app ID Flathub hoặc trang Flathub của nó. Flatpak sẽ được thiết lập trước nếu chưa có. Tệp diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 174e67158..f513e51a9 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -176,6 +176,8 @@ %1$s 经由 FEX 此程序面向 %1$s PC 构建,需经由 FEX 运行,而 FEX 尚未配置。请在登录状态下打开一次 Steam:DroidDeck 会让其下载 FEX 及所需的 Steam Linux Runtime,之后即可打开。 此程序 + 无法下载 Steam 客户端。你的网络或 VPN 可能屏蔽了 Steam 的服务器;请检查网络连接后重试。 + 无法设置 Steam 客户端。请检查网络连接和可用存储空间,然后重试。 %1$s 面向 x86 PC 构建,需经由 FEX 运行,而 FEX 尚未安装。请在登录状态下启动一次 Steam,让其下载 FEX 与 Steam Linux Runtime,然后重新启动。 一个 Flathub 应用 ID 或其 Flathub 页面。若尚未配置 Flatpak 会先进行配置。 文件 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 97d53634e..10cc860e7 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -176,6 +176,8 @@ %1$s,透過 FEX 此程式是為 %1$s 電腦而設,需透過 FEX 執行,但 FEX 尚未設定。請在登入狀態下開啟一次 Steam:DroidDeck 會讓它下載 FEX 及所需的 Steam Linux Runtime,之後便會開啟此程式。 此程式 + 無法下載 Steam 用戶端。你的網絡或 VPN 可能封鎖了 Steam 的伺服器;請檢查連線後再試。 + 無法設定 Steam 用戶端。請檢查連線和可用儲存空間,然後再試。 %1$s 是為 x86 電腦而設,需透過 FEX 執行,但 FEX 尚未安裝。請在登入狀態下啟動一次 Steam,讓它下載 FEX 和 Steam Linux Runtime,然後再啟動此程式。 Flathub 應用程式 ID 或其 Flathub 頁面。如尚未設定 Flatpak,會先進行設定。 檔案 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 2d09faba0..e11242c24 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -176,6 +176,8 @@ 透過 FEX 執行 %1$s 此程式是為 %1$s 電腦組建的,需透過 FEX 執行,但 FEX 尚未設定。請在登入狀態下開啟一次 Steam:DroidDeck 會讓它下載 FEX 和所需的 Steam Linux Runtime,之後就能開啟此程式。 此程式 + 無法下載 Steam 用戶端。你的網路或 VPN 可能封鎖了 Steam 的伺服器;請檢查連線後再試一次。 + 無法設定 Steam 用戶端。請檢查連線和可用儲存空間,然後再試一次。 %1$s 是為 x86 電腦組建的,需透過 FEX 執行,但 FEX 尚未安裝。請在登入狀態下啟動一次 Steam,讓它下載 FEX 和 Steam Linux Runtime,然後再重新啟動此程式。 Flathub 應用程式 ID 或其 Flathub 頁面。如果尚未設定 Flatpak,會先進行設定。 檔案 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 830e66378..ebef85297 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -181,6 +181,8 @@ %1$s through FEX This program is built for %1$s PCs and runs through FEX, which is not set up yet. Open Steam once while signed in: DroidDeck has it download FEX and the Steam Linux Runtime it needs, then this opens. This program + Couldn\'t download the Steam client. Your network or VPN may be blocking Steam\'s servers; check the connection and try again. + Couldn\'t set up the Steam client. Check your connection and free storage, then try again. %1$s is built for x86 PCs and runs through FEX, which is not installed yet. Start Steam once while signed in and let it download FEX and the Steam Linux Runtime, then start this again. A Flathub app ID or its Flathub page. Flatpak is set up first if it is not yet. File diff --git a/app/src/test/java/com/droiddeck/launcher/session/SteamClientSetupFailureTest.kt b/app/src/test/java/com/droiddeck/launcher/session/SteamClientSetupFailureTest.kt new file mode 100644 index 000000000..fd6400c60 --- /dev/null +++ b/app/src/test/java/com/droiddeck/launcher/session/SteamClientSetupFailureTest.kt @@ -0,0 +1,72 @@ +package com.droiddeck.launcher.session + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Test + +class SteamClientSetupFailureTest { + private fun find(vararg lines: String) = SteamClientSetupFailure.find(lines.asSequence()) + + @Test fun aBlockedDownloadCarriesTheLastCurlError() { + val failure = find( + "== STEP 12:35:22 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "curl: (7) Failed to connect to client-update.steamstatic.com:443 after 3 ms: Could not connect to server", + "curl: (35) Recv failure: Connection reset by peer", + "droiddeck-steam-install: no Steam client CDN answered for steam_client_steamdeck_publicbeta_linuxarm64", + "== steam: the Steam client could not be set up (status 1)", + "[gamescope] [Info] launch: Primary child shut down!", + )!! + assertTrue(failure.download) + assertEquals("curl: (35) Recv failure: Connection reset by peer", failure.curlError) + } + + @Test fun aFailureWithoutCurlErrorIsNotCalledADownloadProblem() { + val failure = find( + "== STEP 12:35:22 checking the Steam client (a first run downloads it)", + "== STEP 12:35:30 downloading Steam: bins_linuxarm64_linuxarm64 (2/17)", + "error: cannot create /root/.local/share/Steam/ubuntu12_32/steam-runtime.tar.xz", + "== steam: the Steam client could not be set up (status 50)", + )!! + assertFalse(failure.download) + assertNull(failure.curlError) + } + + @Test fun aReadyClientIsNoFailure() { + assertNull(find( + "== STEP 12:35:22 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "curl: (35) Recv failure: Connection reset by peer", + "== STEP 12:35:40 Steam client ready", + )) + } + + @Test fun onlyTheLatestCheckCounts() { + assertNull(find( + "== STEP 10:00:00 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "curl: (6) Could not resolve host: client-update.steamstatic.com", + "== steam: the Steam client could not be set up (status 1)", + "== STEP 10:05:00 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "== STEP 10:06:00 Steam client ready", + )) + val failure = find( + "== STEP 10:00:00 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "curl: (6) Could not resolve host: client-update.steamstatic.com", + "== steam: the Steam client could not be set up (status 1)", + "== STEP 10:05:00 checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)", + "== steam: the Steam client could not be set up (status 9)", + )!! + assertNull(failure.curlError) + } + + @Test fun anArm64SyncErrorIsNotBlamedForTheX64Client() { + val failure = find( + "== STEP 10:00:00 checking the Steam client's arm64 parts (first run downloads them, ~1-2 min)", + "curl: (6) Could not resolve host: client-update.steamstatic.com", + "== STEP 10:00:05 could not update the arm64 client's parts; the x86-64 client keeps its own web helper", + "== STEP 10:00:05 checking the x86-64 Steam client (FEX, experimental; the first run downloads ~2 GB)", + "== steam: the Steam client could not be set up (status 3)", + )!! + assertNull(failure.curlError) + } +} diff --git a/tools/linuxfs/overlay/usr/local/bin/droiddeck-session b/tools/linuxfs/overlay/usr/local/bin/droiddeck-session index e99f44409..9240aa150 100755 --- a/tools/linuxfs/overlay/usr/local/bin/droiddeck-session +++ b/tools/linuxfs/overlay/usr/local/bin/droiddeck-session @@ -4,6 +4,11 @@ export HOME=${HOME:-/root} mode=${1:-desktop} shift || true step() { echo "== STEP $(date -u +%H:%M:%S) $*"; } +steam_setup_failed() { + echo "== steam: the Steam client could not be set up (status $1)" + [ -z "${BL_STEAM_EXIT_FILE:-}" ] || printf '%s\n' "$1" > "$BL_STEAM_EXIT_FILE" + exit "$1" +} if [ -n "${BL_LOG:-}" ] && [ -z "${BL_INSIDE:-}" ]; then mkdir -p "$(dirname "$BL_LOG")" 2>/dev/null if [ "$(stat -c %s "$BL_LOG" 2>/dev/null || echo 0)" -gt 8388608 ]; then @@ -361,10 +366,10 @@ case $mode in # droiddeck-steam-install removes the repair request: read it first so Repair Steam covers both clients. _bl_x64_repair=0 [ -e "$HOME/.bl-steam-repair" ] && _bl_x64_repair=1 - droiddeck-steam-install || exit $? + droiddeck-steam-install || steam_setup_failed $? droiddeck-steam-install --sync steamdeck_publicbeta || step "could not update the arm64 client's parts; the x86-64 client keeps its own web helper" step "checking the x86-64 Steam client (FEX, experimental; the first run downloads ~2 GB)" - BL_X64_REPAIR=$_bl_x64_repair droiddeck-steam-x64 --prepare || exit $? + BL_X64_REPAIR=$_bl_x64_repair droiddeck-steam-x64 --prepare || steam_setup_failed $? step "x86-64 Steam client ready" steam_root=${BL_X64_HOME:-$HOME/.droiddeck-x64}/.local/share/Steam steam_client=(droiddeck-steam-x64 --exec) @@ -374,7 +379,7 @@ case $mode in fi else step "checking the Steam client (first run downloads it, ~1-2 min with nothing on screen)" - droiddeck-steam-install || exit $? + droiddeck-steam-install || steam_setup_failed $? step "Steam client ready" steam_root=$XDG_DATA_HOME/Steam if [ -f "${BL_X64_HOME:-$HOME/.droiddeck-x64}/.local/share/Steam/local.vdf" ]; then diff --git a/tools/tests/test_steam_client_setup_failure.py b/tools/tests/test_steam_client_setup_failure.py new file mode 100644 index 000000000..774e14aa4 --- /dev/null +++ b/tools/tests/test_steam_client_setup_failure.py @@ -0,0 +1,82 @@ +import os +from pathlib import Path +import re +import subprocess +import tempfile +import textwrap +import unittest + + +SESSION = Path(__file__).resolve().parents[1] / 'linuxfs/overlay/usr/local/bin/droiddeck-session' +SOURCE = SESSION.read_text() +ARM64_BRANCH = SOURCE.index(' else\n step "checking the Steam client (first run') +START = SOURCE.index(' droiddeck-steam-install || steam_setup_failed $?\n', ARM64_BRANCH) +END = SOURCE.index(' step "Steam client ready"\n', START) +HELPER = re.search(r'^steam_setup_failed\(\) \{\n.*?^\}\n', SOURCE, re.M | re.S).group() +INSTALL_BLOCK = HELPER + textwrap.dedent(SOURCE[START:END]) +RUN_GAMESCOPE = re.search(r'^run_gamescope\(\) \(\n.*?^\)\n', SOURCE, re.M | re.S).group() +MARKER = '== steam: the Steam client could not be set up' + + +class SteamClientSetupFailureTest(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + + def installer(self, status): + script = self.root / 'droiddeck-steam-install' + script.write_text('#!/bin/bash\n' + 'echo "curl: (35) Recv failure: Connection reset by peer" >&2\n' + 'exit ' + str(status) + '\n') + script.chmod(0o755) + + def env(self, **extra): + base = {k: v for k, v in os.environ.items() if k != 'BL_STEAM_EXIT_FILE'} + return dict(base, PATH=str(self.root) + os.pathsep + os.environ['PATH'], + XDG_RUNTIME_DIR=str(self.root), **extra) + + def run_block(self, status, exit_file=None): + self.installer(status) + extra = {'BL_STEAM_EXIT_FILE': str(exit_file)} if exit_file else {} + return subprocess.run(['bash', '-c', INSTALL_BLOCK + 'echo continued\n'], env=self.env(**extra), + capture_output=True, text=True, timeout=10) + + def test_failed_install_reports_its_status_in_the_exit_file(self): + exit_file = self.root / 'exit' + result = self.run_block(1, exit_file) + self.assertEqual(1, result.returncode) + self.assertIn(MARKER + ' (status 1)', result.stdout) + self.assertNotIn('continued', result.stdout) + self.assertEqual('1\n', exit_file.read_text()) + + def test_failed_install_outside_gamescope_still_exits_with_its_status(self): + result = self.run_block(50) + self.assertEqual(50, result.returncode) + self.assertIn(MARKER + ' (status 50)', result.stdout) + + def test_ready_client_continues_without_a_report(self): + exit_file = self.root / 'exit' + result = self.run_block(0, exit_file) + self.assertEqual(0, result.returncode) + self.assertIn('continued', result.stdout) + self.assertNotIn(MARKER, result.stdout) + self.assertFalse(exit_file.exists()) + + def test_failed_install_survives_successful_compositor_shutdown(self): + self.installer(1) + compositor = self.root / 'gamescope' + compositor.write_text('#!/bin/bash\n"$@"\nexit 0\n') + compositor.chmod(0o755) + child = self.root / 'session-child' + child.write_text('#!/bin/bash\n' + INSTALL_BLOCK + 'exit 0\n') + child.chmod(0o755) + result = subprocess.run(['bash', '-c', RUN_GAMESCOPE + '\nrun_gamescope "$@"', 'session', str(child)], + env=self.env(), capture_output=True, text=True, timeout=10) + self.assertEqual(1, result.returncode) + self.assertIn(MARKER, result.stdout) + self.assertEqual(list(self.root.glob('droiddeck-steam-exit.??????')), []) + + +if __name__ == '__main__': + unittest.main()