v0.3 = Change the Location Logic

+ Change how to specify the location logic -- original concept was not possible
This commit is contained in:
Zack T
2018-04-05 11:17:44 -07:00
parent 1bda43f7e7
commit 27b6d58567

View File

@@ -3,7 +3,7 @@
################################################################################################### ###################################################################################################
# Script Name: create_Shortcut.sh # Script Name: create_Shortcut.sh
# By: Zack Thompson / Created: 3/26/2018 # By: Zack Thompson / Created: 3/26/2018
# Version: 0.2 / Updated: 3/27/2018 / By: ZT # Version: 0.3 / Updated: 4/5/2018 / By: ZT
# #
# Description: This script will create a website shortcut in a specified location with a specified icon. # Description: This script will create a website shortcut in a specified location with a specified icon.
# #
@@ -28,7 +28,7 @@ echo "***** Create Shortcut process: START *****"
getHelp() { getHelp() {
echo " echo "
usage: jamf_CreateShortcut.sh <filename> <URL> <icon> <location> usage: jamf_CreateShortcut.sh <filename> <URL> <icon> [<location> Dock | Desktop]
Info: This script will create a website shortcut in a specified location with a specified icon. Info: This script will create a website shortcut in a specified location with a specified icon.
@@ -83,40 +83,47 @@ echo "Adding the requested icon..."
/usr/bin/python -c "import Cocoa; import sys; Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit(\"Unable to set file icon\")" "${icon}" "${defaultLocation}/${fileName}.url" /usr/bin/python -c "import Cocoa; import sys; Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit(\"Unable to set file icon\")" "${icon}" "${defaultLocation}/${fileName}.url"
# Check where to place the file. # Check where to place the file.
if [[ "${location}" == "Dock" ]]; then case "${location}" in
Dock )
# Setting a variable that holds whether the Dock item already exists or not (if it does, we don't want to unnecessarily edit and kill the Dock).
alreadyExists=0
# Setting a variable that holds whether the Dock item already exists or not (if it does, we don't want to unnecessarily edit and kill the Dock). # Get the number of items in the persistent-others node; then subtract one for Array value notation.
alreadyExists=0 indexItem=$(/usr/libexec/PlistBuddy -x -c "Print :persistent-others" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist" | /usr/bin/xmllint --format - | /usr/bin/xpath 'count(//plist/array/dict)' 2>/dev/null)
indexItem=$((indexItem-1))
# Get the number of items in the persistent-others node; then subtract one for Array value notation. # Loop through all the items in the persistent-others node and compare to the new item being added.
indexItem=$(/usr/libexec/PlistBuddy -x -c "Print :persistent-others" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist" | /usr/bin/xmllint --format - | /usr/bin/xpath 'count(//plist/array/dict)' 2>/dev/null) for ((i=1; i<=$indexItem; ++i)); do
indexItem=$((indexItem-1)) indexLabel=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-label" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist")
indexData=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-data:_CFURLString" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist")
# Loop through all the items in the persistent-others node and compare to the new item being added. # Check if the current indexItem values equal the new items' values.
for ((i=1; i<=$indexItem; ++i)); do if [[ "${indexLabel}" == "${fileName}" && "${indexData}" == "file://${defaultLocation}/${fileName}.url" ]]; then
indexLabel=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-label" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist") alreadyExists=1
indexData=$(/usr/libexec/PlistBuddy -c "Print :persistent-others:${i}:tile-data:file-data:_CFURLString" "/Users/${currentUser}/Library/Preferences/com.apple.dock.plist") echo "Already exists!"
fi
done
# Check if the current indexItem values equal the new items' values. # If the new item does not already exist, add it to the Dock.
if [[ "${indexLabel}" == "${fileName}" && "${indexData}" == "file://${defaultLocation}/${fileName}.url" ]]; then if [[ $alreadyExists == 0 ]]; then
alreadyExists=1 echo "Adding to the dock..."
echo "Already exists!" fileNameLocation=$(echo "${fileName}" | /usr/bin/sed 's/ /%20/g')
/usr/bin/sudo -s -u "${currentUser}" /usr/bin/defaults write "/Users/${currentUser}/Library/Preferences/com.apple.dock" persistent-others -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>file://${defaultLocation}/${fileNameLocation}.url</string><key>_CFURLStringType</key><integer>15</integer></dict><key>file-label</key><string>${fileName}</string><key>file-type</key><integer>32</integer></dict><key>tile-type</key><string>file-tile</string></dict>"
/usr/bin/killall Dock
fi fi
done ;;
Desktop )
# If the new item does not already exist, add it to the Dock. # Move file to the specified location if not adding to the Dock.
if [[ $alreadyExists == 0 ]]; then echo "Moving file in place..."
echo "Adding to the dock..." /bin/mv "${defaultLocation}/${fileName}.url" "/Users/${currentUser}/Desktop"
fileNameLocation=$(echo "${fileName}" | /usr/bin/sed 's/ /%20/g') ;;
/usr/bin/sudo -s -u "${currentUser}" /usr/bin/defaults write "/Users/${currentUser}/Library/Preferences/com.apple.dock" persistent-others -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>file://${defaultLocation}/${fileNameLocation}.url</string><key>_CFURLStringType</key><integer>15</integer></dict><key>file-label</key><string>${fileName}</string><key>file-type</key><integer>32</integer></dict><key>tile-type</key><string>file-tile</string></dict>" * )
/usr/bin/killall Dock echo "ERROR: The specified location is not configurable at this time."
fi # Function getHelp
getHelp
else echo "***** Create Shortcut process: FAILED *****"
# Move file to the specified location if not adding to the Dock. ;;
echo "Moving file in place..." esac
/bin/mv "${defaultLocation}/${fileName}.url" "${location}"
fi
echo "***** Create Shortcut process: COMPLETE *****" echo "***** Create Shortcut process: COMPLETE *****"
exit 0 exit 0