Newsgroup: it.comp.macintosh
Titolo: [AppleScript] Backup automatico della Rubrica Indirizzi

Visto lo spiacevole imprevisto di qualche tempo fa, ho pensato di farmi
un AppleScript che faccia il backup della rubrica, da far girare una
volta a settimana con iCal. Se qualcun altro fosse interessato, lo trova
qui sotto. Purtroppo il dizionario AppleScript di Rubrica Indirizzi non
prevede un comando per il backup, quindi ho dovuto "telecomandare"
l'interfaccia, con tutti i possibili inconvenienti del caso. Lo script
lascia gli ultimi tre backup in ordine cronologico, buttando quelli più
vecchi.
tell application "System Events"
if application process "Address Book" exists then
set x to 1
else
set x to 0
end if
end tell
tell application "Address Book"
activate
set theDate to current date
set theYear to year of theDate as text
set theMonth to (month of theDate as integer) as text
if length of theMonth < 2 then
set theMonth to ("0" & theMonth)
end if
set theDay to (day of theDate) as text
if length of theDay < 2 then
set theDay to ("0" & theDay)
end if
set theString to theYear & "-" & theMonth & "-" & theDay & " backup"
set the clipboard to theString
end tell
tell application "System Events"
tell process "Address Book"
click menu item 12 of menu 3 of menu bar 1
delay 2
keystroke "v" using command down
delay 4
keystroke "g" using {shift down, command down}
delay 3
set the clipboard to "~/Library/Application Support/AddressBook/"
keystroke "v" using command down
delay 2
click button 4 of window 1
delay 2
click button 1 of sheet 1 of window 1
end tell
end tell
if x = 0 then
tell application "Address Book" to quit
end if
tell application "Finder"
set theFolder to (home as text) & ¬
"Library:Application Support:AddressBook"
set theItems to ¬
every item of folder theFolder whose name extension is "abbu"
if (count of theItems) is greater than 3 then
set theItems to reverse of theItems
repeat with i from 1 to 3
set theItems to rest of theItems
end repeat
repeat with aItem in theItems
delete aItem
end repeat
end if
end tell
-- 
Salutandovi indistintamente

 qui sotto. 
grazie!
Lo possiamo mettere ovunque, o nella libreria, in iCal, ecc.?
-- 
salvo

 Lo possiamo mettere ovunque, o nella libreria, in iCal, ecc.?
Lo script lo puoi mettere dove vuoi. Comunque attenzione: mi sono
accorto che il backup che fa Rubrica Indirizzi è un bundle con dentro
tutta la roba che sta in ~/Library/Application Support/AddressBook/,
quindi ti ci ritrovi dentro anche i backup precedenti, il che fa
crescere di volta in volta le dimensioni del backup. Quindi bisogna
modificare lo script in modo che il backup venga salvato da un'altra
parte. Io mi sono fatto una cartella "Backup Rubrica" dentro la cartella
"~/Documenti". Questo lo script corretto:
tell application "System Events"
if application process "Address Book" exists then
set x to 1
else
set x to 0
end if
end tell
tell application "Finder"
set thePath to ((home as text) & "Documents:")
if (exists of folder (thePath & "Backup Rubrica")) is false then
set theFolder to ¬
(make new folder at thePath with properties {name:"Backup Rubrica"}) ¬
as alias
else
set theFolder to (thePath & "Backup Rubrica")
end if
end tell


set the clipboard to "~/Documents/Backup Rubrica/"
keystroke "v" using command down
delay 2
click button 4 of window 1
delay 2
click button 1 of sheet 1 of window 1
end tell
end tell
if x = 0 then
tell application "Address Book" to quit
end if
tell application "Finder"


 "~/Documenti". Questo lo script corretto:
ok, metto questo, allora.
E' comodo, comunque.
Ed è sempre bene fare i backup di Rubrica, ma anche di iCal, sia se si
usa iSync, sia se si usano altri programmi per sincronizzare palmari,
ecc...
Capita più spesso di quanto non si creda che uno di questi modifichi o
...elimini calendari e contatti, purtroppo.
ciao,
Salvo

 ok, metto questo, allora.
Aspetta. Ora che ci penso, visto che il backup di Rubrica Indirizzi non
è nient'altro che la copia della cartella "~/Library/Application
Support/AddressBook/" dentro un bundle, si può evitare di fare tutto il
casino scriptando la GUI di Rubrica Indirizzi, e far fare al Finder
semplicemente la copia della cartella. Dopo ci perdo 5 minuti...
-- 
Salutandovi indistintamente

 semplicemente la copia della cartella. Dopo ci perdo 5 minuti...
aspetto :)
...e ringrazio per la gentile opera ;-)
-- 
salvo

 ...e ringrazio per la gentile opera ;-)
In realtà ho visto che Rubrica Indirizzi piazza anche un file .plist nel
bundle del backup, però ho fatto delle prove e mi sembra che funzioni
senza problemi anche con la semplice copia della cartella. Questo lo
script:
tell application "System Events"
if application process "Address Book" exists then
set x to 1
tell application "Address Book" to quit
else
set x to 0
end if
end tell
tell application "Finder"
set AddressBookFolder to ¬
((home as text) & "Library:Application Support:AddressBook")
set DocumentsFolder to ¬
((home as text) & "Documents:")
if (exists of folder (DocumentsFolder & "Backup Rubrica")) is false then
set BackupFolder to ¬
(make new folder at DocumentsFolder ¬
with properties {name:"Backup Rubrica"}) as text
else
set BackupFolder to (DocumentsFolder & "Backup Rubrica:")
end if
set theDate to current date
set theYear to year of theDate as text
set theMonth to (month of theDate as integer) as text
if length of theMonth < 2 then
set theMonth to ("0" & theMonth)
end if
set theDay to (day of theDate) as text
if length of theDay < 2 then
set theDay to ("0" & theDay)
end if
set theName to ¬
theYear & "-" & theMonth & "-" & theDay & " backup.abbu"
duplicate folder AddressBookFolder to BackupFolder
set the name of folder (BackupFolder & "AddressBook") to theName
set AllBackups to ¬
every item of folder BackupFolder whose name extension is "abbu"
if (count of AllBackups) is greater than 3 then
set AllBackups to reverse of AllBackups
repeat with i from 1 to 3
set AllBackups to rest of AllBackups
end repeat
repeat with OldBackup in AllBackups
delete OldBackup
end repeat
end if
if x = 1 then
tell application "Address Book" to launch


 senza problemi anche con la semplice copia della cartella. 
bene, 
provato
Solo che se lo eseguo dopo averlo eseguito una prima volta, dice:
"Finder ha trovato un errore: Esiste già un elemento con lo stesso nome
nella destinazione."
Normale?
ciao,
Salvo

 Normale?
Sì, perché ho dato per scontato che uno non lo faccia girare più di una
volta al giorno. Prova a cambiare la data del file salvato e a far
girare di nuovo lo script. Comunque se vuoi si può provvedere...
-- 
Salutandovi indistintamente

 girare di nuovo lo script. Comunque se vuoi si puň provvedere...
no, va bene cosě, volevo solo capire se era una scelta deliberata, e in
fondo serve pure per verificare se č stato fatto.
-- 
salvo