#!/bin/bash # TODO replace `zenity` with `wofi` # Required settings host=192.168.2.66 port=8080 # Optional login for Kodi user=kodi pass=kodi # Settings for netcat (local file) local_hostname=$(hostname) local_port=12345 show_help() { cat</dev/null; then zenity --error --ellipsize --text "$*" else echo "$*" 1>&2 fi exit 1 } send_json() { curl \ ${user:+--user "$user:$pass"} \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"'"$1"'"}},"id":1}' \ http://$host:$port/jsonrpc \ || error "Failed to send link - is Kodi running?" } ytplugin='plugin://plugin.video.youtube/?action=play_video&videoid=' [[ $host && $port ]] || error "Please set host and port in configuration" [[ "$1" = --help ]] && show_help # Dialog box? input=$1 until [[ $input ]]; do input="$(zenity --entry --title "Send to Kodi" --text \ "Paste a video link here")" || exit done if [[ $input =~ ^file:// ]]; then # Remove file:// and carrige return (\r) at the end input="$(sed 's%^file://%%;s/\r$//' <<< "$input")" fi # Get URL for... # Local media if [[ -e $input ]]; then type nc &>/dev/null || error "netcat required" [[ $local_hostname && $local_port ]] || \ error "Please set local hostname and port in configuration" # Start netcat in background and kill it when we exit nc -lp $local_port < "$input" & trap "kill $!" EXIT url="tcp://$local_hostname:$local_port" # youtube.com / youtu.be elif [[ $input =~ ^https?://(www\.)?youtu(\.be/|be\.com/watch\?v=) ]]; then url="$ytplugin$(\ sed 's/.*\(youtu\.be\/\|[&?]v=\)\([a-zA-Z0-9_-]\+\).*/\2/'\ <<< "$input"\ )" # Playable formats elif [[ $input =~ \.(mp4|mkv|mov|avi|flv|wmv|asf|mp3|flac|mka|m4a|aac|ogg|pls|jpg|png|gif|jpeg|tiff)(\?.*)?$ ]]; then url="$input" # Youtube-dl else type youtube-dl &>/dev/null || error "youtube-dl required" url="$(youtube-dl -gf best "$input")" || \ error "No videos found, or site not supported by youtube-dl" fi [[ $url ]] && send_json "$url" # Wait for netcat to exit wait # Don't kill netcat trap - EXIT