#!/bin/zsh
# This script syncs an Android with a Mac using adb and adb-sync.
# Version 12.1 (09 June 2021)
# Added excluding .DS_Store. Unfortunately can only exclude one file

# Export paths for use if the script is turned into an app using Platypus.
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/$"

# Sets the local paths
export LOG=~/Library/Logs/mobisync.log
export DOWNLOADS=~/Downloads/

# Set error variable
ERROR=0

echo "NOTIFICATION: Sync is starting..." # Send a notification (with logo)

# Function: Reviews the last command for errors. Then prints update complete to log or shows error dialog. Takes section variable.
catcher () {
if [ "$?" = "0" ]; then
    printf "$1 synced." >> $LOG # If no error, print sync complete to file.
    echo "" >> $LOG # Add a line to file.
else # If error, show a dialog stating the section where the error occured.
    echo "NOTIFICATION: '$1' sync failed."
    printf "$1 failed to sync." >> $LOG # If error, print sync failed to file.
    echo "" >> $LOG # Add a line to file.
    ERROR=1 # Sets variable for error in script to 1.
fi
}

# Function: If there has been an error in the script open the log file.
verify () {
if [ $ERROR = 1 ]; then
        { echo "Error: Mobisync encountered an error in execution"; line; } >> $LOG
        open $LOG
        echo "NOTIFICATION: Syncing completed with some errors."
else
        { echo "Success: Mobisync completed successfully"; line; } >> $LOG
        echo "NOTIFICATION: Syncing is complete"
fi
}

# Function: Creates a horizontal line in the text file.
line () {
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - >> $LOG # Prints line
}

# Writes the header for the log file: Program, Version number, Date and Line.
{ echo "mobisync 12.1"; echo "Log: " `date`; line; } >> $LOG

# Syncing Music from the computer.
{ 
    adb-sync --delete --exclude .DS_Store  ~/Music/ "/sdcard/Music/"; 
} >> $LOG
catcher Music
line

# Syncing documents on device to the Downloads folder on computer.
{ 
    adb-sync --reverse --times "/sdcard/Documents/Checkin/" ~/Documents/Checkin/; 
    adb-sync --reverse --times --delete "/sdcard/Documents/Logistics/" ~/Documents/Logistics/; 
    adb-sync --exclude .DS_Store --delete ~/Documents/Papers.sparsebundle/ "/sdcard/Documents/Papers.sparsebundle/"; 
    adb-sync --reverse "/sdcard/Download/" $DOWNLOADS; 
} >> $LOG
catcher Documents
line

# Syncing Automate data on device to the computer.
{ 
    adb-sync --two-way --exclude .DS_Store ~/Projects/Programming/push/automate/ "/sdcard/.automate/Interface/"; 
    adb-sync --reverse "/sdcard/.automate/" ~/Mobile/Automate/; 
} >> $LOG
catcher Automate
line

# Syncing app, recovery and backups.
{ 
    adb-sync --reverse "/sdcard/Restore/" ~/Mobile/Restore/; 
    adb-sync --reverse --times "/sdcard/Backup/" ~/Mobile/Backup/; 
} >> $LOG
catcher Backup
line

# Notification that the sync is over.
printf "Syncing is complete. END" >> $LOG
line
verify $ERROR

echo "QUITAPP"