Fatto il vostro backup?
Allora siamo pronti a partire con lo sviluppo del cuore del nostro progetto: una procedura di creazione di una libreria indipendente e condivisa.
Da questo momento consideriamo la libreria del nostro utente (che è amministratore per ragioni che vedremo in seguito) la libreria master nella nostra architettura, che evidentemente è stata scelta in quanto ragionevolmente é quella che per ragioni anche storiche ha il peso maggiore di media condivisibili nel sistema.
Creiamo una nuova libreria nella Cartella condivisa (con procedura ormai nota se avete letto la documentazione consigliata).
Apriamola. Configuriamola in modo che non esegua copia degli oggetti importanti (consolidamento) e non mantenga ordinata la libreria: non è il suo ruolo: questa sarà una libreria slave, non dovrebbe avere diritto di gestione (anche se vedremo possibile, entro certi limiti, utilizzando uno strumento di gestione che proporremo alla fine della trattazione).
Il problema (rilevato ma non risolto dal supporto Apple) sarà trovare il modo di rendere sincrone le due librerie. Vedremo di risolverlo.
Rimuoviamo ora la cartella Music nella nuova libreria (in iTunes Media); al suo posto ci poniamo (muovendola) la cartella Music della libreria master (è la cartella che contiene tutti i media da condividere).
Nella libreria master spoglia della cartella Music (in iTunes Media) creiamo un collegamento (semplicemente tenendo premuto alt+cmd mentre fate un drag&drop) della cartella Music ora mossa nella nuova posizione. Questo garantirà alla libreria master di mantenere la visibilità dei media a lei noti.
Come amministratore possiamo ora modificare i diritti della cartella Musica appena spostata consentendo la lettura a tutti gli utenti con cui volete condividere il suo contenuto; non autorizziamo la scrittura se vogliamo rendere la libreria puramente slave e non abbia quindi diritto di modificare i media.
Ora è il momento di riaprire la libreria master: tutto è al suo posto, giusto? Se qualcosa non è al posto giusto possiamo verificare la posizione della cartella Music nelle Preferenze ed eventualmente reimpostarla. Se iTunes pensa di dove iniziare la copia dei media potrebbe avviare tale procedura: bloccatela! Non è necessaria. Abbiamo giocato con spostamento e collegamento, andando oltre la procedura Apple che prevede necessita di spazio disco libero pari alla dimensione dei media da spostare. Se tutto è dunque a posto esportiamo la libreria master in formato xml.
Ora riaprite la nuova libreria costituita in precedenza (slave): questa è vuota pur avendo collocati una cartella Music piena di materiale. Abbiamo detto già che la libreria è tale in quanto raccoglitore di metadati. Ora importate il file xml esportato precedentemente con la funzione “Importa playlist”.
Chiaro no? L’importazione parla di playlist; Music è una playlist, e iTunes ci sta dicendo che l’importazione riguarderà solo musica.
Finita l’operazione ecco dunque che avrete due librerie identiche (solo nel contenuto migrato) ma che condividono anche fisicamente gli stessi media, ma solo per ciò che attiene alla musica. Per gli altri media la gestione risulterà indipendente. Potrete aggiungere libri, applicazioni o quanto altro alla nuova libreria nei modi di sempre: questo è dunque possibile. Ciò trova anche una soluzione alla gestione ad esempio delle app “legacy” per vecchi dispositivi (basta creare una libreria slave per gestire questi, pur condividendo altri media).
Ma adesso arriva il difficile: aggiungendo nuovi media musicali nella libreria master (che consolida) avremo nuovi oggetti nella cartella media condivisa, ma non li avremo come metadati nella libreria (o nelle librerie) slave (nel file .itl, per intenderci).
Ogni volta che si modifica la libreria master andrebbe aggiornata la slave aprendo iTunes su questa e aggiungendo o rimuovendo oggetti (alterare playlist, ecc).
È evidente come sia necessario automatizzare questa procedura, almeno per quanto riguarda l’aggiunta di nuovi media condivisi (le pllaylist sono raccolte soggettive che lasciamo ai singoli utenti).
Per risolvere questo problema ancora una colta ho scritto un po’ di codice AppleScript (ci ho preso gusto!).
Purtroppo iTunes non espone metodi per salvare tutte le informazioni in un colpo solo, ma solo un metodo add per aggiungere file a partire da un loro alias: questo mi sono fatto comunque bastare. Un unico script che esporti ed importi i metadati attraverso un file di interscambio (un semplice file contenente la lista dei nuovi file) tra le due istanze di libreria.
Andrà attivato prima sulla libreria sorgente (usando la playlist “Aggiunti di recente” quale fonte dell’elenco dei brani da migrare), poi su quella destinazione: questa procedura ci offre la soluzione cercata.
Possiamo eseguire esportazioni successive dalla libreria master ed importare il tutto nella libreria slave in un unico momento. L’importazione finisce con la rimozione del file di interscambio, iniziando una nuova accumulazione.
Ma non dilunghiamoci in descrizioni ulteriori di implementazione; ecco di seguito il sorgente.
[codesyntax lang=”applescript”]
-- -- @author Andrea Tassotti -- -- differenza tra due insiemi -- on difference(set1, set2) set differ to {} repeat with o in set2 if set1 does not contain o then set differ to differ & o end if end repeat return differ end difference -- -- Esistenza file -- on existsFile(migrationFile) tell application "Finder" if not (exists migrationFile) then return false else return true end if end tell end existsFile -- -- Lettura lista migrazione -- on readMigrationFile(migrationFile) -- read if existsFile(migrationFile) is true then tell current application set fileRef to open for access alias migrationFile set lista to read alias migrationFile as list close access fileRef return lista end tell else return false end if end readMigrationFile -- -- Scrittura (overwrite) lista migrazione -- on writeMigrationFile(migrationFile, lista) -- write try tell current application set fileRef to open for access alias migrationFile with write permission write lista to fileRef as list close access fileRef end tell on error display alert "Errore scrittura:" & (migrationFile as text) end try end writeMigrationFile -- -- Preleva alias da voci di playlist selezionata (no Libreria intera) -- to itemsToMigrate() tell application "iTunes" set currentPlayList to view of window 1 set currentPlayListName to name of currentPlayList if special kind of currentPlayList is none then return location of every file track of currentPlayList else display alert "Possono essere esportate solo playlist effettive" message "Le playlist speciali (Music, Books, Podcasts, ecc) non sono contemplate" giving up after 2 return {} end if end tell return {} end itemsToMigrate -- -- Corpo principale del programma -- on run set migrati to {} set migrationFile to ((path to shared documents) as text) & "migration.itpl" set migrati to readMigrationFile(migrationFile) if migrati is not false then -- - -- Verifica se master o slave display alert "Controllo esistenza elementi in libreria. Questa operazione può durare molto. Attendere" giving up after 1 set primo to first item of migrati tell application "iTunes" set libreria to location of every file track of library playlist 1 if libreria does not contain primo then -- Libreria Slave: importiamo repeat with aFile in migrati add aFile end repeat -- Rimuoviamo il file consumato tell application "Finder" if exists migrationFile then delete migrationFile end if end tell display alert "Fine importazione" return end if end tell end if if migrati is false then set migrati to {} end if -- Esportazione controllata set daMigrare to itemsToMigrate() if daMigrare is not {} then -- Calcoliamo la differenza per evitare doppioni -- poi aggiungiamo comunque quelli migrati per fare append del file set lista to difference(migrati, daMigrare) if lista is {} then display alert "Contenuto migrato in precedenza" else writeMigrationFile(migrationFile, migrati & lista) display alert "Esportazione lista migrazione terminata" end if end if end run
[/codesyntax]
In quanto risultato delle nostre analisi, lo script lo rilasciamo liberamente, ma gradiremmo almeno un commento su questo blog se sarete tra quelli che lo copieranno ed utilizzeranno.
Buona condivisione!
Riferimenti
iTunes: How to share music between different user accounts on a single computer
iTunes for Mac: Moving your iTunes Media folder