55 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
draw() {
 | 
						|
  path="$(readlink -f -- "$1" | sed 's/\\/\\\\/g;s/"/\\"/g')"
 | 
						|
  printf '{"action":"add","identifier":"preview","x":%d,"y":%d,"width":%d,"height":%d,"scaler":"contain","scaling_position_x":0.5,"scaling_position_y":0.5,"path":"%s"}\n' \
 | 
						|
    "$x" "$y" "$width" "$height" "$path" >"$FIFO_UEBERZUG"
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
hash() {
 | 
						|
  cache="$HOME/.cache/lf/$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f -- "$1")" | sha256sum | cut -d' ' -f1).jpg"
 | 
						|
}
 | 
						|
 | 
						|
cache() {
 | 
						|
  if ! [ -f "$cache" ]; then
 | 
						|
    dir="$(dirname -- "$cache")"
 | 
						|
    [ -d "$dir" ] || mkdir -p -- "$dir"
 | 
						|
    "$@"
 | 
						|
  fi
 | 
						|
  draw "$cache"
 | 
						|
}
 | 
						|
 | 
						|
file="$1"
 | 
						|
width="$2"
 | 
						|
height="$3"
 | 
						|
x="$4"
 | 
						|
y="$5"
 | 
						|
 | 
						|
case "$(file -Lb --mime-type -- "$file")" in
 | 
						|
  image/*)
 | 
						|
    if [ -n "$FIFO_UEBERZUG" ]; then
 | 
						|
      # ueberzug doesn't handle image orientation correctly
 | 
						|
      orientation="$(magick identify -format '%[orientation]\n' -- "$file")"
 | 
						|
      if [ -n "$orientation" ] \
 | 
						|
          && [ "$orientation" != Undefined ] \
 | 
						|
          && [ "$orientation" != TopLeft ]; then
 | 
						|
        hash "$file"
 | 
						|
        cache magick -- "$file" -auto-orient "$cache"
 | 
						|
      else
 | 
						|
        draw "$file"
 | 
						|
      fi
 | 
						|
    fi
 | 
						|
    ;;
 | 
						|
  video/*)
 | 
						|
    if [ -n "$FIFO_UEBERZUG" ]; then
 | 
						|
      hash "$file"
 | 
						|
      cache ffmpegthumbnailer -i "$file" -o "$cache" -s 0
 | 
						|
    fi
 | 
						|
    ;;
 | 
						|
  text/*)
 | 
						|
    exec cat "$file"
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
file -Lb -- "$file" | fold -s -w "$width"
 | 
						|
exit 0
 |