#!/usr/bin/env bash
# Set up linphone 4.4.6-beta.0 mime types
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"

cd $SCRIPT_DIR
echo
# file associations and mime associations can be overrided
# by user. In file /home/SER/.config/mimeapps.list
#
# Add a line like:
# [Added Associations]
# x-scheme-handler/tel=linphone446-beta0.desktop

DESKTOPFILE=linphone446-beta0.desktop
MIMEFILE=/home/$USER/.config/mimeapps.list
# echo MIMEFILE=$MIMEFILE

function findHeadings () {
    # Remove all blank lines in $MIMEFILE
    sed -i '/^[[:space:]]*$/d' "$MIMEFILE"
    export FLAG_DEFAULT_APPLICATIONS=0
    export FLAG_ADDED_ASSOCIATIONS=0
    export FLAG_REMOVED_ASSOCIATIONS=0
    # Find the line where these sections currently are located:
    export LINE_DEFAULT_APPLICATIONS=$(grep -Fn '[Default Applications]' "$MIMEFILE" | cut -d':' -f1)
    export LINE_ADDED_ASSOCIATIONS=$(grep -Fn '[Added Associations]' "$MIMEFILE" | cut -d':' -f1)
    export LINE_REMOVED_ASSOCIATIONS=$(grep -Fn '[Removed Associations]' "$MIMEFILE" | cut -d':' -f1)
    if [ $((LINE_DEFAULT_APPLICATIONS)) -gt 0 ];then
	export FLAG_DEFAULT_APPLICATIONS=1
    else
	# Add section '[Default Applications]'
	# echo '[Default Applications]' >> "IMEFILE"
	export LINE_DEFAULT_APPLICATIONS=-1
    fi
    # echo LINE_DEFAULT_APPLICATIONS=$LINE_DEFAULT_APPLICATIONS
    if [ $((LINE_ADDED_ASSOCIATIONS)) -gt 0 ];then
	export FLAG_ADDED_ASSOCIATIONS=1
    else
	# Add section '[Added Associations]'
	echo '[Added Associations]' >> "$MIMEFILE"
	export FLAG_ADDED_ASSOCIATIONS=1
	# export LINE_ADDED_ASSOCIATIONS=$(grep -Fn '[Added Associations]' "$MIMEFILE" | cut -d':' -f1)
    fi
    # echo LINE_ADDED_ASSOCIATIONS=$LINE_ADDED_ASSOCIATIONS
    if [ $((LINE_REMOVED_ASSOCIATIONS)) -gt 0 ];then
	export FLAG_REMOVED_ASSOCIATIONS=1
    else
	# Add section '[Removed Associations]'
	# echo '[Removed Associations]' >> "IMEFILE"
	export LINE_REMOVED_ASSOCIATIONS=-1
    fi
    # echo LINE_REMOVED_ASSOCIATIONS=$LINE_REMOVED_ASSOCIATIONS
    # echo LINE_DEFAULT_APPLICATIONS=$LINE_DEFAULT_APPLICATIONS
    # echo LINE_ADDED_ASSOCIATIONS=$LINE_ADDED_ASSOCIATIONS
    # echo LINE_REMOVED_ASSOCIATIONS=$LINE_REMOVED_ASSOCIATIONS
    # echo FLAG_DEFAULT_APPLICATIONS=$FLAG_DEFAULT_APPLICATIONS
    # echo FLAG_ADDED_ASSOCIATIONS=$FLAG_ADDED_ASSOCIATIONS
    # echo FLAG_REMOVED_ASSOCIATIONS=$FLAG_REMOVED_ASSOCIATIONS
}
# Separate the file by section:
# [Default Applications]
# [Added Associations]
findHeadings # run twice
findHeadings
# Order the sections, 'Added Associations' last

if  [ $((FLAG_REMOVED_ASSOCIATIONS)) -eq 1 ];then
    # Section [Removed Associations] is present in $MIMEFILE
    echo Section [Removed Associations] is present in $MIMEFILE
    if [ $((LINE_REMOVED_ASSOCIATIONS)) -lt $((LINE_ADDED_ASSOCIATIONS)) ];then
	echo "[OK] Heading [Added Associations] is located after heading [Removed Associations]"
    else
	# echo "[RE-ARRANGE] Heading [Added Associations] is located before heading [Removed Associations]"
	FROMLINE=$LINE_ADDED_ASSOCIATIONS
	TOLINE=$((INE_REMOVED_ASSOCIATIONS - 1))
	# echo FROMLINE=$FROMLINE
	# echo TOLINE=$TOLINE
	# Move first section to end of file
	# Add empty line first, at the end of the file
	echo >> "$MIMEFILE"
	# sed -n ${LINE},\ ${INPUT_FILE} > ${OUTPUT_FILE}
	sed -n ${FROMLINE},${TOLINE}p $MIMEFILE >> "$MIMEFILE"
	# awk 'NR>=$FROMLINE && NR<=$TOLINE' file1.txt > file2.txt
	# Delete first section
	sed -i -e ${FROMLINE},${TOLINE}d "$MIMEFILE"
	# Replace double empty lines with one empty line
	sed -i 'N;/^\n$/D;P;D;' "$MIMEFILE"
	findHeadings # run twice
	findHeadings
    fi
fi
if [ $((FLAG_DEFAULT_APPLICATIONS)) -eq 1 ];then
    # Section [Default Applications] is present in $MIMEFILE
    echo Section [Default Applications] is present in $MIMEFILE
    if [ $((LINE_DEFAULT_APPLICATIONS)) -lt $((LINE_ADDED_ASSOCIATIONS)) ];then
	echo "[OK] Heading [Added Associations] is located after heading [Default Applications]"
    else
	# echo "[RE-ARRANGE] Heading [Added Associations] is located before heading [Default Applications]"
	FROMLINE=$LINE_ADDED_ASSOCIATIONS
	TOLINE=$(($LINE_DEFAULT_APPLICATIONS - 1))
	# echo FROMLINE=$FROMLINE
	# echo TOLINE=$TOLINE
	# Move first section to end of file
	# Add empty line first, at the end of the file
	echo >> "$MIMEFILE"
	# sed -n ${LINE},\ ${INPUT_FILE} > ${OUTPUT_FILE}
	sed -n ${FROMLINE},${TOLINE}p $MIMEFILE >> "$MIMEFILE"
	# awk 'NR>=$FROMLINE && NR<=$TOLINE' file1.txt > file2.txt
	# Delete first section
	sed -i -e ${FROMLINE},${TOLINE}d "$MIMEFILE"
	# Replace double empty lines with one empty line
	sed -i 'N;/^\n$/D;P;D;' "$MIMEFILE"
	findHeadings # run twice
	findHeadings
    fi
fi

# Sections should now be organized so that additions into section
# [Added Associations] can be done by appending lines to $MIMEFILE.

# Combine the mime-types already there with new associations
function editMimeType () {
    # echo "--- Start function editMimeType () ---"
    # echo "mime type \'x-scheme-handler/$MIMETYPE\'"
    # Filter out $MIMETYPE x-scheme-handler/sip from /usr/share/applications/mimeapps.list
    CURRENT_SIP_MIME_HANDLING=$(cat "$MIMEFILE" | grep "x-scheme-handler/$MIMETYPE" | cut -d'=' -f2 | sed 's/,/;/g' | sed 's/; /;/g') # Replace all commas with semicolons
    # echo CURRENT_SIP_MIME_HANDLING=$CURRENT_SIP_MIME_HANDLING
    # Create new xdg-open handling variable
    variable=$(echo "$DESKTOPFILE;$CURRENT_SIP_MIME_HANDLING;" | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-)
    # To wipe all other mime handler associations:
    variable="$DESKTOPFILE"
    # echo variable=$variable
    # Remove existing URI sip handler
    sed -i "/x-scheme-handler\/$MIMETYPE/d" "$MIMEFILE"
    # Add mime-type as default
    # xdg-mime default "$DESKTOPFILE" x-scheme-handler/${MIMETYPE}
    # Add URI sip handler
    # echo "x-scheme-handler/${MIMETYPE}=${DESKTOPFILE};${CURRENT_SIP_MIME_HANDLING};" | sed 's/;;/;/g' >> "$MIMEFILE"
    echo "x-scheme-handler/${MIMETYPE}=${variable}" | sed 's/;;/;/g' >> "$MIMEFILE"
    # echo "${str: -1}"
    # echo "--- End function editMimeType () ---"
}

# MIMETYPE='x-scheme-handler/sip'
MIMETYPE='tel'
editMimeType

MIMETYPE='callto'
editMimeType

MIMETYPE='sip'
editMimeType

MIMETYPE='sips'
editMimeType

MIMETYPE='linphone-sip'
editMimeType

MIMETYPE='linphone-sips'
editMimeType

MIMETYPE='linphone-config'
editMimeType

# Filter out x-scheme-handler/sip from /usr/share/applications/mimeapps.list
# CURRENT_SIP_MIME_HANDLING=$(cat $MIMEFILE | grep 'x-scheme-handler/sip' | cut -d'=' -f2)

# Remove existing URI sip handler
# sed -i '/x-scheme-handler\/sip/d' /usr/share/applications/mimeapps.list

# Add URI sip handler
# echo "x-scheme-handler/sip=linphone430-beta4.desktop,$CURRENT_SIP_MIME_HANDLING" >> /usr/share/applications/mimeapps.list
# xdg-mime default "$DESKTOPFILE" x-scheme-handler/sip

# Reorder headings
export LINE_DEFAULT_APPLICATIONS=$(grep -Fn '[Default Applications]' "$MIMEFILE" | cut -d':' -f1)
export LINE_ADDED_ASSOCIATIONS=$(grep -Fn '[Added Associations]' "$MIMEFILE" | cut -d':' -f1)
export LINE_REMOVED_ASSOCIATIONS=$(grep -Fn '[Removed Associations]' "$MIMEFILE" | cut -d':' -f1)

if [ $((FLAG_DEFAULT_APPLICATIONS)) -eq 1 ];then
    if [ $((LINE_DEFAULT_APPLICATIONS)) -lt $((LINE_ADDED_ASSOCIATIONS)) ];then
	echo "[OK] Heading [Added Associations] is located after heading [Default Applications]"
    else
	# echo "[FINAL-RE-ARRANGE] Heading [Added Associations] is located before heading [Default Applications]"
	FROMLINE=$LINE_ADDED_ASSOCIATIONS
	TOLINE=$(($LINE_DEFAULT_APPLICATIONS - 1))
	# echo FROMLINE=$FROMLINE
	# echo TOLINE=$TOLINE
	# Move first section to end of file
	# Add empty line first, at the end of the file
	# echo >> "$MIMEFILE"
	# sed -n ${LINE},\ ${INPUT_FILE} > ${OUTPUT_FILE}
	sed -n ${FROMLINE},${TOLINE}p $MIMEFILE >> "$MIMEFILE"
	# awk 'NR>=$FROMLINE && NR<=$TOLINE' file1.txt > file2.txt
	# Delete first section
	sed -i -e ${FROMLINE},${TOLINE}d "$MIMEFILE"
	# Replace double empty lines with one empty line
	# sed -i 'N;/^\n$/D;P;D;' "$MIMEFILE"
	findHeadings # run twice
	findHeadings
    fi
fi

if  [ $((FLAG_REMOVED_ASSOCIATIONS)) -eq 1 ];then
    if [  $((LINE_ADDED_ASSOCIATIONS)) -lt  $((LINE_REMOVED_ASSOCIATIONS)) ];then
	echo "[OK] Heading [Removed Associations] is located after heading [Added Associations]"
    else
	# echo "[FINAL-RE-ARRANGE] Heading [Removed Associations] is located before heading [Added Associations]"
	FROMLINE=$LINE_REMOVED_ASSOCIATIONS
	TOLINE=$((INE_ADDED_ASSOCIATIONS - 1))
	# echo FROMLINE=$FROMLINE
	# echo TOLINE=$TOLINE
	# Move first section to end of file
	# Add empty line first, at the end of the file
	# echo >> "$MIMEFILE"
	# sed -n ${LINE},\ ${INPUT_FILE} > ${OUTPUT_FILE}
	sed -n ${FROMLINE},${TOLINE}p $MIMEFILE >> "$MIMEFILE"
	# awk 'NR>=$FROMLINE && NR<=$TOLINE' file1.txt > file2.txt
	# Delete first section
	sed -i -e ${FROMLINE},${TOLINE}d "$MIMEFILE"
	# Replace double empty lines with one empty line
	# sed -i 'N;/^\n$/D;P;D;' "$MIMEFILE"
	findHeadings # run twice
	findHeadings
    fi
fi

if  [ $((FLAG_DEFAULT_APPLICATIONS)) -eq 1 ];then
    if [  $((FLAG_DEFAULT_APPLICATIONS)) -lt $((LINE_ADDED_ASSOCIATIONS)) ];then
	echo "[OK] Heading [Added Associations] is located after heading [Default Applications]"
    else
	# echo "[FINAL-RE-ARRANGE] Heading [Added Associations] is located before heading [Default Applications]"
	FROMLINE=$LINE_ADDED_ASSOCIATIONS
	TOLINE=$(($LINE_DEFAULT_APPLICATIONS - 1))
	# echo FROMLINE=$FROMLINE
	# echo TOLINE=$TOLINE
	# Move first section to end of file
	# Add empty line first, at the end of the file
	# echo >> "$MIMEFILE"
	# sed -n ${LINE},\ ${INPUT_FILE} > ${OUTPUT_FILE}
	sed -n ${FROMLINE},${TOLINE}p $MIMEFILE >> "$MIMEFILE"
	# awk 'NR>=$FROMLINE && NR<=$TOLINE' file1.txt > file2.txt
	# Delete first section
	sed -i -e ${FROMLINE},${TOLINE}d "$MIMEFILE"
	# Replace double empty lines with one empty line
	# sed -i 'N;/^\n$/D;P;D;' "$MIMEFILE"
	findHeadings # run twice
	findHeadings
    fi
fi

# insert a blank line below every line which matches "regex"
# sed '/regex/G'
# or
sed -i '/^\[Removed Associations\]/i \' "$MIMEFILE"
sed -i '/^\[Added Associations\]/i \' "$MIMEFILE"

# Delete all the blank lines before the first line(containing any chars)
# sed -i '1,/^$/d' "$MIMEFILE"

# Delete first line if empty
# sed '0,/^$/d' "$MIMEFILE"
sed -i '1{/^$/d}' "$MIMEFILE"

# Update mime database
update-desktop-database /home/$USER/.local/share/applications
#sudo update-desktop-database /usr/share/applications
#sudo update-mime-database /usr/share/mime

echo "Done."

exit 0
