private/Build-iTunesMovieXML.ps1
|
function Build-iTunesMovieXML { <# .DESCRIPTION Rebuilds the plist XML document embedded in a media file's "iTunesMovie" atom (AtomID iTunMOVI, domain com.apple.iTunes) from its flattened components — lists of Cast/CoDirectors/Directors/Producers/Screenwriters in "Name:adamId" CSV strings. .OUTPUTS [String] The plist XML document suitable for writing back as the iTunesMovie atom's value. .PARAMETER Atoms REQUIRED. Hashtable. Alias: -a. A collection of metadata / atoms in name/value pairs. .EXAMPLE Build-iTunesMovieXML -Atoms $atoms #> [OutputType([String])] [CmdletBinding()] param ( [Parameter()] [Alias('a')] [Hashtable] $Atoms ) begin { # Rebuilds a single "<key>role</key><array>...</array>" item from the "Name:adamId" string. function ConvertTo-PersonArrayXml ( [String[]] $People ) { if ( -not $People -or $People.Count -eq 0 ) { return '<array/>' } $entries = $People | ForEach-Object { $name, $id = $_ -split ':', 2 if ( [string]::IsNullOrEmpty($id) ) { "`t`t<dict>`n`t`t`t<key>name</key>`n`t`t`t<string>$name</string>`n`t`t</dict>" } else { "`t`t<dict>`n`t`t`t<key>adamId</key>`n`t`t`t<integer>$id</integer>`n`t`t`t<key>name</key>`n`t`t`t<string>$name</string>`n`t`t</dict>" } } "<array>`n$($entries -join "`n")`n`t</array>" } } process { Write-Msg -FunctionCall -IncludeParameters $xml = @" <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>cast</key> $(ConvertTo-PersonArrayXml $Atoms.iTunesMovieCast) <key>codirectors</key> $(ConvertTo-PersonArrayXml $Atoms.iTunesMovieCoDirectors) <key>directors</key> $(ConvertTo-PersonArrayXml $Atoms.iTunesMovieDirectors) <key>producers</key> $(ConvertTo-PersonArrayXml $Atoms.iTunesMovieProducers) <key>screenwriters</key> $(ConvertTo-PersonArrayXml $Atoms.iTunesMovieScreenwriters) <key>studio</key> <string>$($Atoms.iTunesMovieStudio)</string> </dict> </plist> "@ Write-Msg -FunctionResult -m 'iTunesMovie XML rebuilt.' return $xml } } |