
SyncPAppX
Download SyncPAppX application
You can download SyncPAppX application with a minimum amount of $4.80 or donating more:-
SyncPAppX.dmg - 272KB (Current release 1.1 - 12 Jan, 2007)
Change log
r1.1 (12 Jan. 2007)
- First public release
- 10.4.2 OS X version check.
- Quit application already running.
- Growl style notification windows.
Dowload SyncPAppX script source
You can dowload SyncPAppX script source from sourceforge.net and then wrap application yourself.You also need Platypus and CocoaDialog.
Requires OS X 10.4.2 or later
SyncPAppX script source code
#!/bin/sh -x ########################################################################## # # SyncPAppX - Syncronize Portable Application # $Revision: 1.1 # # The Contents of this file are made available subject to the terms # of the following license # # - GNU General Public License Version 2.1 # # Carlo Gandolfi, January 2007 # # GNU General Public License Version 2.1 # ============================================= # Copyright 2006 by Carlo Gandolfi (cgand@users.sourceforge.net) # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License version 2.1, as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # ########################################################################## # Reset PATH PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH p_userbase="$1/Contents/Resources" CD="$p_userbase/CocoaDialog.app/Contents/MacOS/CocoaDialog" appicon="$p_userbase/appIcon.icns" cautionicon="$p_userbase/P_${appid}_Caution.icns" mycautionicon="$1/Contents/Resources/SyncPAppX_Caution.icns" myappicon="$1/Contents/Resources/appIcon.icns" NOW=`date "+%y-%m-%d_%H.%M.%S"` sync_out="/tmp/Sync_${NOW}.txt" # ======================================================== # CDokmessage # CocoaDialog Ok/Cancel message box # $1 "text" # $2 "informative text" # $3 "--no-cancel" = don't show a cancel button # ======================================================== function CDokmessage { beep "$CD" ok-msgbox --icon-file "$appicon" \ --text "$1" --informative-text "$2" "$3" } function CDokmessagec { beep "$CD" ok-msgbox --icon-file "$cautionicon" \ --text "$1" --informative-text "$2" "$3" } function beep { /usr/bin/osascript << EOT tell application "Finder" beep end tell EOT } # ======================================================== # bsd_command_check # Check that the required BSD command are installed # ======================================================== function command_check_msg { message1="One or more *BSD commands* to run Portable $appid were not found on \ this machine. You must install the BSD Subsystem package that is in the \ following folder on disk 1 of your Mac OS X installation DVD:\n/Welcome to Mac \ OS X/Optional Installs.\n\nNow quit." button=`/usr/bin/osascript << EOT tell application "Finder" beep display dialog "$message1" buttons {"Quit"} \ with icon caution default button "Quit" set result to button returned of result end tell EOT` if test "$button" == "Quit"; then # Quit application exit 112 fi } function bsd_command_check { # written by Patrick Luby commands="awk cp defaults diskutil echo grep ln mkfifo mkdir mv \ plutil ps rm sed sleep touch rsync" for i in $commands ; do if [ ! -x "/usr/bin/$i" -a ! -x "/bin/$i" -a ! -x "/usr/sbin/$i" -a \ ! -x "/sbin/$i" ] ; then # Return 96 + 16 if a command is not found command_check_msg; exit 112; fi done } # ======================================================== # osx_version_check # Check that the user is running Mac OS X 10.4.2 or higher # ======================================================== function version_check_msg { message1="You are running OS X version $version.\n\ Portable $appid can only be opened on Mac OS X 10.4.2 or higher." button=`/usr/bin/osascript << EOT tell application "Finder" beep display dialog "$message1" buttons {"Quit"} \ with icon caution default button "Quit" set result to button returned of result end tell EOT` if test "$button" == "Quit"; then # Quit application exit 113 fi } function osx_version_check { # written by Patrick Luby if [ -x "/usr/bin/sw_vers" ] ; then # Return 96 + 17 if it is a bad version version=`/usr/bin/sw_vers | grep '^ProductVersion:' | awk '{ print $2 }'` case "$version" in 10.[01234]) version_check_msg ; exit 113;; 10.[01234].[01]) version_check_msg ; exit 113;; esac fi } # ======================================================== # get_p_app # Select Portable Application to sync # ======================================================== function sync_p_app { case "${s_app}" in 'Portable Safari') sync_p_safari "Safari";; 'Portable Mail') sync_p_mail "Mail"; sync_mail_dl "Mail";; 'Portable iCal') sync_p_ical "iCal";; 'Portable Address Book') sync_p_addressbook "Address Book";; 'Portable iChat') sync_p_ichat "iChat";; esac } function copy_p { case "${s_app}" in 'Portable Safari') copy_p_app "Safari";; 'Portable Mail') copy_p_app "Mail";; 'Portable iCal') copy_p_app "iCal";; 'Portable Address Book') copy_p_app "Address Book";; 'Portable iChat') copy_p_app "iChat";; esac } function copy_sync { text="Sync or copy Portable Preferences?" informativetext="You can sync your Portable preferences to \ local ones or copy local preferences to Portable ones?" rv=` "$CD" msgbox --no-newline --icon-file "$myappicon" \ --text "$text" --informative-text "$informativetext" \ --button1 "Sync" --button2 "Copy" --button3 "Cancel" ` if [ "$rv" == "1" ] ; then get_p_app if [ -n "$rvf" ]; then sync_p_app else exit 0 fi elif [ "$rv" == "2" ] ; then get_p_app if [ -n "$rvf" ]; then copy_p else exit 0 fi elif [ "$rv" == "3" ] ; then exit 0 fi } function copy_p_app { p_userbase="$p_path/Contents/Resources" copy_pref="$p_userbase/CopyPref_Done" copy_dl="$p_userbase/CopyDL_Done" function rm_touch { if [ -f "$copy_pref" ] ; then rm -f "$copy_pref" fi if [ -f "$copy_dl" ] ; then rm -f "$copy_dl" fi } if rm_touch ; then rv=` CDokmessage "Copy ${s_app} preferences" \ "You can now open your ${s_app} and it will ask you to copy local preferences." \ "--no-cancel" ` if [ "$rv" == "1" ] ; then # open "$p_path" # "$p_path/Contents/MacOS/${s_app}" # disabled as Portable app open with icon on the dock exit 0 elif [ "$rv" == "2" ] ; then exit 0 fi else CDokmessagec "Copy ${s_app} preferences error" \ "An error occur while copying local preferences." "--no-cancel" > /dev/null exit 0 fi } function get_p_app { rvf=` "$CD" fileselect --title "Select Portable Application" --text "Please select \ Portable Application to sync:" --with-directory /Volumes --with-extensions .app ` p_path="$rvf"; s_app=` defaults read "$p_path/Contents/Info" CFBundleName ` case "${s_app}" in 'Portable Safari') ;; 'Portable Mail') ;; 'Portable iCal') ;; 'Portable Address Book') ;; 'Portable iChat') ;; * ) wrong_path;; esac } function wrong_path { cautionicon=$mycautionicon rv=` CDokmessagec "Portable Application not selected" \ "You have not selected a compatible Portable Application to sync. \ Try again?"` if [ "$rv" == "1" ] ; then get_p_app elif [ "$rv" == "2" ] ; then exit 0 fi } # ======================================================== # quitapp # Check if local or portable app is open and quit # ======================================================== function quitapp { if ps cx | grep "$1"'$' > /dev/null; then rv=` CDokmessage "$1 is already running on this system" \ "Quit runnig $1 and reopen SyncPApp." "--no-cancel" ` if [ "$rv" == "1" ] ; then # Quit application exit 0 fi fi } # ======================================================== function sync_p_safari { quitapp "${1}" # appurl=`cat "$p_path/${1}.app/Contents/Resources/script" | \ # grep 'appurl=' | awk 'BEGIN{FS="="}{print $2}'` appurl=com.apple.Safari.plist appurl2=Cookies.plist appid=${1} userplistbase="Library/Preferences" usercookiesbase="Library/Cookies" userplist="$userplistbase/$appurl" userplist2="$usercookiesbase/$appurl2" upl="$userplist $userplist2" userprefbase="Library" userpref="$HOME/$userprefbase/$appid" p_userbase="$p_path/Contents/Resources" p_userpref="$p_userbase/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" sync "${1}" sync_txt } function sync_p_mail { quitapp "${1}" appurl=com.apple.mail.plist appid=${1} userplistbase="Library/Preferences" userplist="$userplistbase/$appurl" upl="$userplist" userprefbase="Library" userpref="$HOME/$userprefbase/$appid" p_userbase="$p_path/Contents/Resources" p_userpref="$p_userbase/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" function sync_mail { userprefsize=`du -hc "$p_userpref" | cut -f1 | tail -1` freesize=`df -h "$userprefbase" | tail -1 | awk '{print $4}'` buserprefsize=`du -c "$p_userpref" | cut -f1 | tail -1` bfreesize=`df "$userprefbase" | tail -1 | awk '{print $4}'` if [ $buserprefsize -lt $bfreesize ] ; then rv=` CDokmessage "Sync ${1} Preferences" \ "Your Portable ${1} Preferences are $userprefsize. \ You have $freesize available. Sync to local ${1}?" ` if [ "$rv" == "1" ] ; then sync "${1}" fi else CDokmessagec "No space to copy ${1} folder" \ "Your ${1} Preferences are $userprefsize. \ You have $freesize available. There is no enough space. Now quit" \ "--no-cancel" > /dev/null exit 0 fi } userdlplist=`defaults read com.apple.mail MailDownloadsPath` sync_mail "${1}" defaults write com.apple.mail MailDownloadsPath "$userdlplist" } function sync_mail_dl { appid=${1} userplistbase="Library/Preferences" userprefbase="Library" userpref="$HOME/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" p_dl_folder=` defaults read "$p_path/Contents/Resources/Library/Preferences/com.apple.mail" MailDownloadsPath ` userdlplist=` defaults read com.apple.mail MailDownloadsPath ` function select_dl { if [ -d "${userdlplist}" ] ; then sync_dl "${1}" else rvdl=` "$CD" fileselect --title "Select ${1} Downloads folder" \ --text "Locate your \"${1} Downloads\" folder." --with-directory ~/Library --select-directories ` if [ -n "$rvdl" ] ; then userdlplist="$rvdl"; export userdlplist sync_dl "${1}" fi fi } function runsyncdl { # written by Kevin Hendricks rm -f /tmp/hpipe mkfifo /tmp/hpipe "$CD" progressbar --indeterminate --title "Sycn \"${1} Downloads\" folder" \ --text "Sync \"$userdlplist\". Please wait..." < /tmp/hpipe & exec 3<> /tmp/hpipe echo -n . >&3 # do all of your work here rsync -av "$p_dl_folder/" "$userdlplist" | cat>>"$sync_out" exec 3>&- wait rm -f /tmp/hpipe } function sync_dl { userdlsize=`du -hc "$p_dl_folder" | cut -f1 | tail -1` freesize=`df -h "$userprefbase" | tail -1 | awk '{print $4}'` buserdlsize=`du -c "$p_dl_folder" | cut -f1 | tail -1` bfreesize=`df "$userprefbase" | tail -1 | awk '{print $4}'` if [ $buserdlsize -lt $bfreesize ] ; then rv=` CDokmessage "Sync \"${1} Downloads\" folder" \ "Your Portable ${1} Downloads folder is $userdlsize. \ You have $freesize available. Sync to local ${1} Download folder?" ` if [ "$rv" == "1" ] ; then if runsyncdl ; then "$CD" bubble --title "${1} Downloads folder sync" \ --text "Portable ${1} Downloads folder synced to local system \ with success." --icon-file "$appicon" else "$CD" bubble --title "Sync ${1} Downloads folder error" \ --text "Empty folder or an error occurred syncing ${1} Downloads folder." \ --icon-file "$cautionicon" fi fi else CDokmessagec "No space to copy \"${1} Downloads\" folder" \ "Your portable ${1} Downloads folder is $userdlsize. \ You have $freesize available. There is no enough space. \ Now quit." "--no-cancel" > /dev/null fi } function copy_p_dl { if [ -d "$p_dl_folder" ] ; then beep text="Sync Portable \"${1} Downloads\" folder" informativetext="Sync Portable \"${1} Downloads\" folder to this system?" rv=` "$CD" msgbox --no-newline --icon-file "$appicon" \ --text "$text" --informative-text "$informativetext" \ --button1 "Sync" --button2 "Cancel" ` if [ "$rv" == "1" ] ; then select_dl "${1}" fi fi } copy_p_dl "${1}" sync_txt } function sync_p_ical { quitapp "${1}" appurl=com.apple.iCal.plist appurl2=com.apple.iCal.AlarmScheduler.plist appurl3=com.apple.iCal.helper.plist appid=${1} userplistbase="Library/Preferences" userplist="$userplistbase/$appurl" userplist2="$userplistbase/$appurl2" userplist3="$userplistbase/$appurl3" upl="$userplist $userplist2 $userplist3" userprefbase="Library/Application Support" userpref="$HOME/$userprefbase/$appid" p_userbase="$p_path/Contents/Resources" p_userpref="$p_userbase/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" sync "${1}" sync_txt } function sync_p_addressbook { quitapp "${1}" appurl=com.apple.AddressBook.plist appid=${1} userplistbase="Library/Preferences" userplist="$userplistbase/$appurl" userprefbase="Library/Application Support" userpref="$HOME/$userprefbase/AddressBook" upl="$userplist" p_userbase="$p_path/Contents/Resources" p_userpref="$p_userbase/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" sync "${1}" sync_txt } function sync_p_ichat { quitapp "${1}" appurl=com.apple.iChat.plist appurl2=com.apple.iChat.AIM.plist appurl3=com.apple.iChat.jabber.plist appurl4=com.apple.iChatAgent.plist appurl5=com.apple.iChat.SubNet.plist appid=${1} userplistbase="Library/Preferences" userplist="$userplistbase/$appurl" userplist2="$userplistbase/$appurl2" userplist3="$userplistbase/$appurl3" userplist4="$userplistbase/$appurl4" userplist5="$userplistbase/$appurl5" upl="$userplist $userplist2 $userplist3 $userplist4 $userplist5" userprefbase="Library/Logs" userpref="$HOME/$userprefbase/${appid}ConnectionErrors" p_userbase="$p_path/Contents/Resources" p_userpref="$p_userbase/$userprefbase/$appid" appicon="$p_userbase/appIcon.icns" sync "${1}" sync_txt } function do_back_up { if [ -d "$userpref" ] ; then mv "$userpref" "$userpref.${NOW}" echo "Back-up folder(s) file(s):" | cat>>"$sync_out" echo "$userpref.${NOW}" | cat>>"$sync_out" fi for i in $upl ; do if [ -f "$HOME/$i" ] ; then mv -f "$HOME/$i" "$HOME/$i.${NOW}" echo "$HOME/$i.${NOW}" | cat>>"$sync_out" fi done echo "#########################" | cat>>"$sync_out" } function run_sync { function warning_sync { beep text="Overwrite local $1 Preferences?" informativetext="Running sync will overwrite $1 local \ Preferences on this system. Continue sync?" rv=` "$CD" msgbox --no-newline --icon-file "$mycautionicon" \ --text "$text" --informative-text "$informativetext" \ --button1 "Back-up & Sync" --button2 "Sync" --button3 "Cancel" ` if [ "$rv" == "1" ] ; then do_back_up do_sync elif [ "$rv" == "2" ] ; then do_sync elif [ "$rv" == "3" ] ; then "$CD" bubble --title "$1 sync cancel" --text "No sync \ performed, SyncPAppX quit without sync." --icon-file "$myappicon" & exit 0 fi } function do_sync { # written by Kevin Hendricks rm -f /tmp/hpipe mkfifo /tmp/hpipe "$CD" progressbar --indeterminate --title "Syncing Portable $appid Preferences" \ --text "Syncing \"$p_path\". Please wait..." < /tmp/hpipe & exec 3<> /tmp/hpipe echo -n . >&3 # do all of your work here rsync -av --delete "$p_userpref/" "$userpref" | cat>>"$sync_out" for i in $upl ; do if [ -f "$p_userbase/$i" ] ; then rsync -av "$p_userbase/$i" "$HOME/$i" | cat>>"$sync_out" fi done exec 3>&- wait rm -f /tmp/hpipe } warning_sync "${1}" } function save_txt { mv -f "$sync_out" "$HOME/Documents/Sync-${s_app}_${NOW}.txt" } function sync_txt { rv=` "$CD" textbox --title "SyncPAppX log" --no-newline \ --informative-text "Save SyncPAppX log text as: \"~/Documents/Sync-${s_app}_${NOW}.txt\"?" \ --text-from-file "$sync_out" --button1 "Save" --button2 "Cancel" ` if [ "$rv" == "1" ] ; then if save_txt ; then appicon="$myappicon" CDokmessage "SyncPAppX log text saved" \ "\"Sync-${s_app}_${NOW}.txt\" file saved in \"~/Documents\" folder." \ "--no-cancel" > /dev/null exit 0 else cautionicon="$mycautionicon" CDokmessagec "Error saving Sync log text" \ "An error occour while saving sync log text. Now quit." \ "--no-cancel" > /dev/null exit 0 fi fi } function sync { if run_sync "${1}" ; then "$CD" bubble --title "$1 sync done" --text "Sync \ $1 end with success." --icon-file "$appicon" & else CDokmessagec "Sync $1 setup error" \ "An error occour while sync preferences. Now quit." "--no-cancel" > /dev/null exit 0 fi } # ======================================================== bsd_command_check osx_version_check copy_sync exit 0