each(function ($device) { if (! $device->getNextPlaylistItem()) { try { $response = Http::withHeaders([ 'id' => $device->mac_address, 'access-token' => $device->api_key, 'width' => 800, 'height' => 480, 'rssi' => $device->last_rssi_level, 'battery_voltage' => $device->last_battery_voltage, 'refresh-rate' => $device->default_refresh_interval, 'fw-version' => $device->last_firmware_version, 'accept-encoding' => 'identity;q=1,chunked;q=0.1,*;q=0', 'user-agent' => 'ESP32HTTPClient', ])->get(config('services.trmnl.proxy_base_url').'/api/display'); $device->update([ 'proxy_cloud_response' => $response->json(), ]); $imageUrl = $response->json('image_url'); $filename = $response->json('filename'); parse_str(parse_url($imageUrl)['query'] ?? '', $queryParams); $imageType = urldecode($queryParams['response-content-type'] ?? 'image/bmp'); $imageExtension = $imageType === 'image/png' ? 'png' : 'bmp'; if (Str::contains($imageUrl, '.png')) { $imageExtension = 'png'; } \Log::info("Response data: $imageUrl. Image Extension: $imageExtension"); if (isset($imageUrl)) { try { $imageContents = Http::get($imageUrl)->body(); if (! Storage::disk('public')->exists("images/generated/{$filename}.{$imageExtension}")) { Storage::disk('public')->put( "images/generated/{$filename}.{$imageExtension}", $imageContents ); } $device->update([ 'current_screen_image' => $filename, ]); } catch (Exception $e) { Log::error("Failed to download and save image for device: {$device->mac_address}", [ 'error' => $e->getMessage(), ]); } } Log::info("Successfully updated proxy cloud response for device: {$device->mac_address}"); if ($device->last_log_request) { Http::withHeaders([ 'id' => $device->mac_address, 'access-token' => $device->api_key, 'width' => 800, 'height' => 480, 'rssi' => $device->last_rssi_level, 'battery_voltage' => $device->last_battery_voltage, 'refresh-rate' => $device->default_refresh_interval, 'fw-version' => $device->last_firmware_version, 'accept-encoding' => 'identity;q=1,chunked;q=0.1,*;q=0', 'user-agent' => 'ESP32HTTPClient', ])->post(config('services.trmnl.proxy_base_url').'/api/log', $device->last_log_request); $device->update([ 'last_log_request' => null, ]); } } catch (Exception $e) { Log::error("Failed to fetch proxy cloud response for device: {$device->mac_address}", [ 'error' => $e->getMessage(), ]); } } else { Log::info("Skipping device: {$device->mac_address} as it has a pending playlist item."); } }); } }