Non-blocking PreviewJob
Make mimetype lookup async using a StatJob. Thus PreviewJob no longer blocks on determining mimetype, as often happens on slow filesystems.
Test Plan
Test non-blocking-ness
Since Dolphin has other factors which cause the UI to block on slow filesystems, I suggest using KIO previewtest to test this change in isolation.
Either use a slow network filesystem, or simulate one like this:
# Create a device with an artificial delay of 3 seconds for all read operations
dd if=/dev/zero of=/tmp/10M-of-zeroes bs=1024k count=10
loopdev=$(sudo losetup --show --find /tmp/10M-of-zeroes)
devsize=$(sudo blockdev --getsize "$loopdev")
# This will probably take a while to finish
echo "0 $devsize delay $loopdev 0 3000 $loopdev 0 0" | sudo dmsetup create dm-slow
sudo mkfs.ext4 /dev/mapper/dm-slow
sudo mkdir -p /mnt/slow
sudo mount /dev/mapper/dm-slow /mnt/slow
sudo chmod a+rwx /mnt/slow
Then copy something like a JPEG to /mnt/slow.
Note: Before each test, tell the kernel to drop disk cache with sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
and remove ~/.cache/thumbnails.
Then, enter the path to the slow file into previewtest and click Generate. Move your mouse over various UI elements.
With this patch, the UI will not block.
Test existing real users of PreviewJob
Use Dolphin and the file picker as usual, ensure there are no crashes or new slowdowns.