diff --git a/routes/api.php b/routes/api.php index c59b539..5f2a9f3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -126,10 +126,25 @@ Route::get('/display', function (Request $request) { $image_path = 'images/setup-logo.bmp'; $filename = 'setup-logo.bmp'; } else { - if (isset($device->last_firmware_version) - && version_compare($device->last_firmware_version, '1.5.2', '<') - && Storage::disk('public')->exists('images/generated/'.$image_uuid.'.bmp')) { - $image_path = 'images/generated/'.$image_uuid.'.bmp'; + // Determine image format based on device settings + $preferred_format = 'png'; // Default to PNG for newer firmware + + if (! $device->device_model_id) { + // No device model, use device's image_format setting + if (str_contains($device->image_format, 'bmp')) { + $preferred_format = 'bmp'; + } + // For 'auto' or unknown formats, fall back to firmware version logic + if (isset($device->last_firmware_version) + && version_compare($device->last_firmware_version, '1.5.2', '<') + && Storage::disk('public')->exists('images/generated/'.$image_uuid.'.bmp')) { + $preferred_format = 'bmp'; + } + } + + // Check if a preferred format exists, otherwise fall back + if (Storage::disk('public')->exists('images/generated/'.$image_uuid.'.'.$preferred_format)) { + $image_path = 'images/generated/'.$image_uuid.'.'.$preferred_format; } elseif (Storage::disk('public')->exists('images/generated/'.$image_uuid.'.png')) { $image_path = 'images/generated/'.$image_uuid.'.png'; } else { @@ -422,10 +437,25 @@ Route::get('/current_screen', function (Request $request) { $image_path = 'images/setup-logo.bmp'; $filename = 'setup-logo.bmp'; } else { - if (isset($device->last_firmware_version) - && version_compare($device->last_firmware_version, '1.5.2', '<') - && Storage::disk('public')->exists('images/generated/'.$image_uuid.'.bmp')) { - $image_path = 'images/generated/'.$image_uuid.'.bmp'; + // Determine image format based on device settings + $preferred_format = 'png'; // Default to PNG for newer firmware + + if (! $device->device_model_id) { + // No device model, use device's image_format setting + if (str_contains($device->image_format, 'bmp')) { + $preferred_format = 'bmp'; + } + // For 'auto' or unknown formats, fall back to firmware version logic + if (isset($device->last_firmware_version) + && version_compare($device->last_firmware_version, '1.5.2', '<') + && Storage::disk('public')->exists('images/generated/'.$image_uuid.'.bmp')) { + $preferred_format = 'bmp'; + } + } + + // Check if preferred format exists, otherwise fall back + if (Storage::disk('public')->exists('images/generated/'.$image_uuid.'.'.$preferred_format)) { + $image_path = 'images/generated/'.$image_uuid.'.'.$preferred_format; } elseif (Storage::disk('public')->exists('images/generated/'.$image_uuid.'.png')) { $image_path = 'images/generated/'.$image_uuid.'.png'; } else { diff --git a/tests/Feature/Api/DeviceImageFormatTest.php b/tests/Feature/Api/DeviceImageFormatTest.php index ff24744..fcb7555 100644 --- a/tests/Feature/Api/DeviceImageFormatTest.php +++ b/tests/Feature/Api/DeviceImageFormatTest.php @@ -1,6 +1,11 @@ 'test-image.bmp', ]); }); + +test('device without device_model_id and image_format bmp3_1bit_srgb returns bmp when plugin is rendered', function () { + // Create a user with auto-assign enabled + $user = User::factory()->create([ + 'assign_new_devices' => true, + ]); + + // Create a device without device_model_id and with bmp3_1bit_srgb format + $device = Device::factory()->create([ + 'user_id' => $user->id, + 'mac_address' => '00:11:22:33:44:55', + 'api_key' => 'test-api-key', + 'device_model_id' => null, // Explicitly set to null + 'image_format' => ImageFormat::BMP3_1BIT_SRGB->value, + 'last_firmware_version' => '1.5.2', + ]); + + // Create a plugin + $plugin = Plugin::factory()->create([ + 'user_id' => $user->id, + 'name' => 'Test Plugin', + 'render_markup' => '