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)
Requires OS X 10.4.2 or later
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
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