From 8a281b5b611fc82c53e088c5b8d428e7cdf01140 Mon Sep 17 00:00:00 2001 From: Hickmeister <35031453+Hickmeister@users.noreply.github.com> Date: Sun, 11 Oct 2026 20:17:15 +0100 Subject: [PATCH] Show the real reason when BamBuddy is unavailable Co-Authored-By: Claude Sonnet 5.5 --- app/Http/Controllers/BambuddyController.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/BambuddyController.php b/app/Http/Controllers/BambuddyController.php index e977bcf..34da21b 100644 --- a/app/Http/Controllers/BambuddyController.php +++ b/app/Http/Controllers/BambuddyController.php @@ -4,7 +4,10 @@ namespace App\Http\Controllers; use App\Services\Bambuddy; use Closure; +use Illuminate\Http\Client\ConnectionException; +use Illuminate\Http\Client\RequestException; use Illuminate\View\View; +use RuntimeException; use Throwable; class BambuddyController extends Controller @@ -18,7 +21,7 @@ class BambuddyController extends Controller $printers = $bambuddy->printers(); } catch (Throwable $exception) { report($exception); - $integrationError = 'BamBuddy is unavailable. Check its API key and connection.'; + $integrationError = 'BamBuddy is unavailable. '.$this->failureReason($exception); } $queue = $printers === [] ? [] : $this->optional(fn (): array => $bambuddy->queue()); @@ -28,6 +31,16 @@ class BambuddyController extends Controller return view('printers.index', compact('printers', 'integrationError', 'queue', 'recentPrints', 'stats') + ['bambuddyUrl' => $bambuddy->url()]); } + private function failureReason(Throwable $exception): string + { + return match (true) { + $exception instanceof RequestException => 'BamBuddy answered HTTP '.$exception->response->status().($exception->response->status() === 401 || $exception->response->status() === 403 ? ' — check the API key.' : '.'), + $exception instanceof ConnectionException => 'The dashboard server could not connect: '.str($exception->getMessage())->limit(160), + $exception instanceof RuntimeException => $exception->getMessage(), + default => 'Check its API key and connection.', + }; + } + /** * Load secondary page data without letting a failure hide the printers. *