Do not abort early if not all data is received within 25ms

0b106b10692ed7efd5eae81b498f591ad39b6222 introduced a 25ms hard limit on how long a transfer could last. This is often too low, especially on wireless frontends

Now read by 50ms blocks and handle smaller reads than requested.
Read will attempt if more than 150ms was spent without receiving any data.

Fixes #11769
Fix crashes should we get an invalid response from the backend or timeout

If the read from the backend timed-out and we got no data, it would crash as the list was empty.
Styling: Make consistent use of Qt style vs STL style
Only send one DL failure event when a download failed.

There's no way to tell which image failed to download anyway...
Display any errors when retrieving metadata.

Popups were dismissed with no user feedback.