Deploy HickLab3D Dashboard / Deploy to production (push) Successful in 28s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
48 lines
1.3 KiB
PHP
48 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Services\Bambuddy;
|
|
use Closure;
|
|
use Illuminate\View\View;
|
|
use Throwable;
|
|
|
|
class BambuddyController extends Controller
|
|
{
|
|
public function __invoke(Bambuddy $bambuddy): View
|
|
{
|
|
$printers = [];
|
|
$integrationError = null;
|
|
|
|
try {
|
|
$printers = $bambuddy->printers();
|
|
} catch (Throwable $exception) {
|
|
report($exception);
|
|
$integrationError = 'BamBuddy is unavailable. Check its API key and connection.';
|
|
}
|
|
|
|
$queue = $printers === [] ? [] : $this->optional(fn (): array => $bambuddy->queue());
|
|
$recentPrints = $printers === [] ? [] : $this->optional(fn (): array => $bambuddy->recentPrints());
|
|
$stats = $printers === [] ? [] : $this->optional(fn (): array => $bambuddy->stats());
|
|
|
|
return view('printers.index', compact('printers', 'integrationError', 'queue', 'recentPrints', 'stats') + ['bambuddyUrl' => $bambuddy->url()]);
|
|
}
|
|
|
|
/**
|
|
* Load secondary page data without letting a failure hide the printers.
|
|
*
|
|
* @param Closure(): array<mixed> $load
|
|
* @return array<mixed>
|
|
*/
|
|
private function optional(Closure $load): array
|
|
{
|
|
try {
|
|
return $load();
|
|
} catch (Throwable $exception) {
|
|
report($exception);
|
|
|
|
return [];
|
|
}
|
|
}
|
|
}
|