Preferences eines Programms sichern/wiederherstellen

Die eigentliche Idee stammt von hier und dabei herausgekommen ist dieses Skript (Vor dem Ausführen als AppleScript Bundle oder Programm speichern, da es sonst zu Schwierigkeiten mit den Speicherpfad kommt.):

–17.09.2011 hubionmac.com

— Prefs-Save-Restore_v1: Saves and Restores an app’s preferences, Library Folder, Application Support Folder using a tar archive

— inspired by http://macscripter.net/viewtopic.php?id=37052

— STORE THIS AS AN APPLICATION OR SCRIPT BUNDLE!!!!

global store_here

–first get the folder where all the saved prefs should be saved….

try

set store_here to quoted form of POSIX path of (path to resource “saved_prefs”)

on error msg

do shell script “mkdir ” & quoted form of POSIX path of (path to me as alias) & “Contents/Resources/saved_prefs”

–NOT USING PATH TO RESSOURCE BECAUSE IT DOESN’T SEEM TO UPDATE THAT FAST….

set store_here to quoted form of POSIX path of (path to me as alias) & “Contents/Resources/saved_prefs”

end try

— WHAT TO DO?

set theaction to button returned of (display dialog “Do you want to restore or backup an app Prefs?” buttons {“Restore”, “Backup”, “Cancel”} default button {“Restore”})

if theaction = “Backup” then

make_backup(choose file of type “app”)

else if theaction = “Restore” then

make_restore()

end if

on make_restore()

set thebackups to every paragraph of (do shell script “ls ” & store_here)

if thebackups = {} then

error “There are no backups that can be used to restore….”

else

set t to (choose from list thebackups with prompt “Choose one or more backup(s):” default items (item 1 of thebackups) with multiple selections allowed)

if tfalse then

repeat with m in t

do shell script “cd ~/Library; tar xf ” & store_here & quoted form of m

my display_message(“Restored ” & m & “.”, 2)

end repeat

end if

end if

end make_restore

on make_backup(this)

set search_folders to {“./”, “‘Application Support’/”, “Preferences/”}

tell application “Finder”

–GET THE IMPORTANT INFOS OUT OF INFO.PLIST FOR GETTING THE NAMES OF PLIST AND OTHER FILES AND FOLDERS INSIDE THE LIBARAY

set this_info_plist to quoted form of POSIX path of (item “Info.plist” of folder “Contents” of this as alias)

set this_id to do shell script “defaults read ” & this_info_plist & ” CFBundleIdentifier”

set this_bundleName to do shell script “defaults read ” & this_info_plist & ” CFBundleName”

–THIS LOOKS COMPLICATED BUT IS FASTER THAN USING THE FINDER

–AND IS IS THAT COMPLICATED BECAUSE OF THE OUTPUT OF THE FIND COMMAND THAT NEEDS TO BE QUOTED ;-/

set this_app_files to {}

repeat with search_folder in search_folders

–SEARCH THE SEARCH_FOLDER FOR FILES AND FOLDERS BUT ONLY ON THE FIRST LEVEL!!!

set tmp to every paragraph of (do shell script “cd ~/Library/” & search_folder & “; find . -maxdepth 1 -name ‘” & this_id & “*’ -exec basename {} \\;”)

repeat with t in tmp

set this_app_files to this_app_files & ((search_folder & quoted form of t) as text)

end repeat

set tmp to every paragraph of (do shell script “cd ~/Library/” & search_folder & “; find . -maxdepth 1 -name ‘” & this_bundleName & “‘ -exec basename {} \\;”)

repeat with t in tmp

set this_app_files to this_app_files & ((search_folder & quoted form of t) as text)

end repeat

end repeat

set old_delimiters to AppleScript‘s text item delimiters

set AppleScript‘s text item delimiters to ” “

set this_app_files to this_app_files as text

set AppleScript‘s text item delimiters to old_delimiters

–NOW MAKE A TAR FILE OF ALL THESE IN THIS APPS RESSOURCE FOLDER

do shell script “cd ~/Library/; tar -czf ” & store_here & this_id & “.tar.gz ” & this_app_files

my display_message(“Stored ” & this_id & “.”, 2)

end tell

end make_backup

on display_message(msgTXT, msgTimeout)

tell application “System Events”

set isRunning to ¬

(count of (every process whose name is “GrowlHelperApp”)) > 0

end tell

if isRunning = true then

tell application “GrowlHelperApp”

— Make a list of all the notification types 

— that this script will ever send:

set the allNotificationsList to ¬

{“Status”}

— Make a list of the notifications 

— that will be enabled by default.      

— Those not enabled by default can be enabled later 

— in the ‘Applications’ tab of the growl prefpane.

set the enabledNotificationsList to ¬

{“Status”}

— Register our script with growl.

— You can optionally (as here) set a default icon 

— for this script’s notifications.

register as application ¬

“Finder” all notifications allNotificationsList ¬

default notifications enabledNotificationsList ¬

icon of application “Finder”

Send a Notification…

notify with name ¬

“Status” title ¬

“Prefs-Safe-Restore” description ¬

msgTXT application name ¬

“Finder”

return true

end tell

else

activate

display dialog msgTXT giving up after msgTimeout

end if

end display_message

Leave a Reply