soldosluka857
b2ccd04844
fix(dlna): always return non-nil device slice so API serializes [] not null
...
The DLNA device list endpoint could return {"devices":null} in two cases:
the SSDP-failure path returned a nil slice, and the cached path copied an
empty cache via append([]DLNADevice(nil), cache...) which also yields nil.
The web UI reads res.devices.length, so a null devices field crashed the
DLNA page to a white screen. Return non-nil slices in both paths and guard
the frontend with a null coalesce. Adds a regression test.
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-30 13:02:16 +08:00
..
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 17:32:55 +08:00
2026-05-16 17:57:34 +08:00
2026-05-16 09:49:35 +00:00
2026-05-14 16:07:49 +00:00
2026-05-30 03:33:36 +08:00
2026-05-30 03:33:36 +08:00
2026-05-30 10:44:47 +08:00
2026-05-28 14:52:20 +08:00
2026-05-15 10:58:32 +00:00
2026-05-15 10:58:32 +00:00
2026-05-16 17:57:34 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 13:02:16 +08:00
2026-05-30 13:02:16 +08:00
2026-05-28 14:52:20 +08:00
2026-05-16 17:57:34 +08:00
2026-05-29 04:15:44 +08:00
2026-05-16 17:57:34 +08:00
2026-05-28 23:27:34 +08:00
2026-05-30 12:01:46 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 03:24:08 +08:00
2026-05-30 01:39:11 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-29 12:47:54 +08:00
2026-05-28 14:52:20 +08:00
2026-05-29 12:47:54 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 12:07:35 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:07:35 +08:00
2026-05-15 10:58:32 +00:00
2026-05-28 14:52:20 +08:00
2026-05-30 10:03:43 +08:00
2026-05-29 12:47:54 +08:00
2026-05-29 12:47:54 +08:00
2026-05-29 10:13:34 +08:00
2026-05-29 09:52:16 +08:00
2026-05-29 02:08:38 +08:00
2026-05-29 02:08:38 +08:00
2026-05-29 02:44:52 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 03:24:08 +08:00
2026-05-30 03:24:08 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 02:07:09 +08:00
2026-05-16 17:57:34 +08:00
2026-05-30 02:54:25 +08:00
2026-05-16 17:57:34 +08:00
2026-05-16 17:57:34 +08:00
2026-05-30 02:16:18 +08:00
2026-05-16 17:57:34 +08:00
2026-05-16 17:57:34 +08:00
2026-05-29 03:04:27 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-29 12:47:54 +08:00
2026-05-29 15:56:51 +08:00
2026-05-30 10:19:57 +08:00
2026-05-14 15:44:31 +00:00
2026-05-30 01:39:11 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-29 04:15:44 +08:00
2026-05-29 04:15:44 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-29 13:54:19 +08:00
2026-05-29 13:54:19 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:52 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-28 17:32:55 +08:00
2026-05-30 10:31:54 +08:00
2026-05-16 17:57:34 +08:00
2026-05-14 16:07:49 +00:00
2026-05-16 09:49:35 +00:00
2026-05-15 10:58:32 +00:00
2026-05-28 14:52:20 +08:00
2026-05-29 13:54:19 +08:00
2026-05-16 17:57:34 +08:00
2026-05-29 17:39:57 +08:00
2026-05-29 17:39:57 +08:00
2026-05-28 14:52:20 +08:00
2026-05-28 14:52:20 +08:00
2026-05-30 03:04:30 +08:00
2026-05-30 02:54:25 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-28 14:52:20 +08:00
2026-05-29 12:47:54 +08:00
2026-05-16 17:57:34 +08:00
2026-05-29 13:54:19 +08:00
2026-05-29 13:54:19 +08:00
2026-05-30 12:01:46 +08:00
2026-05-30 12:01:46 +08:00
2026-05-16 17:57:34 +08:00
2026-05-30 03:24:08 +08:00
2026-05-14 15:26:29 +00:00
2026-05-30 12:01:46 +08:00
2026-05-14 15:26:29 +00:00