Project Size Estimator
Current version: v3 09
Built on: Aperture 1.5.3
This AppleScript operates on one or more Projects.
Built on: Aperture 1.5.3
This AppleScript operates on one or more Projects.
This script allows a user to select one or more Aperture Projects and then it does some Script Magic© where it will estimate the size of the Project if it is exported with all Masters. It'll give its results in a new TextEdit window because you can display the info in a fixed-width font.
Download
-- -----------------------------------------------------------------------------------------------
-- Forked from v1 04 on 2007-05-15 to incorporate Steve's wicked cool shell script
-- grep -h -A 1 -R --include='*.apfile' fileSize . | awk -F '[<>]' '/integer/ { sum += $3} END {print sum }'
-- -----------------------------------------------------------------------------------------------
property steveOpen : " grep -h -A 1 -R --include='*.apfile' fileSize "
property steveClose : " | awk -F '[<>]' '/integer/ { sum += $3} END {print sum }' "
-- -----------------------------------------------------------------------------------------------
-- p_versCruft is an approximation of all of the files associated with every .apversion file such as previews, thumbnails, etc
-- feel free to adjust this size up or down to suit your configuration.
-- 0.27 works pretty well for me
property p_versCruft : 0.27
-- -----------------------------------------------------------------------------------------------
global g_libPath
-- -----------------------------------------------------------------------------------------------
on run
my getLibPath()
set retCD to "Projects that will fit on a single CD (650MB)"
set retDVD to "Projects that will fit on a single-layer DVD (4500MB)"
set retDLDVD to "Projects that will fit on a dual-layer DVD (9000MB)"
set retBig to "Projects too big for common optical media"
set retErr to "Errors processing the following projects"
-- set projPaths to my findByName("*.approject", g_libPath)
-- ----------------------------------------------------------- Get the names of all Projects
tell application "Aperture"
set projList to {}
set theProjs to projects
repeat with curProj in theProjs
set end of projList to name of curProj
end repeat
log projList
end tell
-- ----------------------------------------------------------- Choose Project(s) to estimate
set theOut to choose from list projList with prompt "Choose a Project to estimate:" default items {"2007 Misc"} with multiple selections allowed
set theRet to ""
set grandTotal to 0
repeat with curName in theOut
try
set projSize to 0
set projName to (contents of curName)
set padLen to (35 - (length of projName))
set thePadding to " "
repeat padLen times
set thePadding to thePadding & space
end repeat
-- set theRet to theRet & projName & thePadding
set projPath to (paragraph 1 of (my findByName((projName & ".approject"), g_libPath)))
set theScript to steveOpen & (quoted form of projPath) & steveClose
set masterSize to do shell script theScript
set projSize to projSize + (masterSize / 1024 / 1024)
-- --------------------------------------------------------------------------------
-- apversions
-- include apversion file
-- include previews
-- include thumbnails
-- set numFound to (count of paragraphs of (my findByName("*.apversion", projPath)))
set numFound to (my countByName("*.apversion", projPath))
log ("Number of versions: " & numFound)
set tmpSize to (numFound * (p_versCruft))
set projSize to projSize + tmpSize
log projSize
set grandTotal to grandTotal + projSize
-- set theRet to theRet & (projSize as integer) & " MB" & return
if projSize > 9000 then
-- ------------------- Too big for a dual-layer DVD
set retBig to retBig & return & tab & projName & thePadding & (projSize as integer) & "MB"
else if projSize > 4500 then
-- ------------------- It will fit on a dual-layer DVD
set retDLDVD to retDLDVD & return & tab & projName & thePadding & (projSize as integer) & "MB"
else if projSize > 650 then
-- ------------------- It will fit on a single-layer DVD
set retDVD to retDVD & return & tab & projName & thePadding & (projSize as integer) & "MB"
else
-- ------------------- It will fit on a CD
set retCD to retCD & return & tab & projName & thePadding & (projSize as integer) & "MB"
end if
-- set theRet to (theRet & " Masters: " & ((masterSize / 1024 / 1024) as integer) & " MB" & return)
on error
set retErr to retErr & return & tab & "Error processing Project: " & projName
end try
end repeat
if ((count of paragraphs of retBig) > 1) then
set theRet to theRet & retBig & return & return
end if
if ((count of paragraphs of retDLDVD) > 1) then
set theRet to theRet & retDLDVD & return & return
end if
if ((count of paragraphs of retDVD) > 1) then
set theRet to theRet & retDVD & return & return
end if
if ((count of paragraphs of retCD) > 1) then
set theRet to theRet & retCD & return & return
end if
if ((count of paragraphs of retErr) > 1) then
set theRet to theRet & retErr & return & return
end if
(*
set theRet to retBig & return & return & retDLDVD & return & return & retDVD & return & return & retCD & return & return & retErr & return & return
*)
set theRet to theRet & return & " -------------------------------- " & return
set theRet to theRet & "Grand total: " & (grandTotal as integer) & " MB" & return
tell application "TextEdit"
make new document
tell document 1
set paragraph 1 to theRet
set font to "Monaco"
end tell
end tell
try
display dialog theRet giving up after 60
end try
end run
-- ---------------------------------------------------------------------------------------------------------------------------
on countByName(p_fileName, p_rootPath)
set p_comm to "/usr/bin/find"
set p_script to p_comm & space & quote & p_rootPath & quote & " -name " & quote & p_fileName & quote & " -print | wc -l"
-- log p_script
set theOut to do shell script p_script
return theOut
end countByName
-- ---------------------------------------------------------------------------------------------------------------------------
on findByName(p_fileName, p_rootPath)
set p_comm to "/usr/bin/find"
set p_script to p_comm & space & quote & p_rootPath & quote & " -name " & quote & p_fileName & quote & " -print"
-- log p_script
set theOut to do shell script p_script
return theOut
end findByName
-- ---------------------------------------------------------------------------------------------------------------------------
on getLibPath()
tell application "System Events" to set p_libPath to value of property list item "LibraryPath" of property list file ((path to preferences as Unicode text) & "com.apple.aperture.plist")
if ((offset of "~" in p_libPath) is not 0) then
-- set p_posix to POSIX file p_libPath
set p_script to "/bin/echo $HOME"
set p_homePath to (do shell script p_script)
set p_offset to offset of "~" in p_libPath
set p_path to text (p_offset + 1) thru -1 of p_libPath
set g_libPath to p_homePath & p_path
log g_libPath
--set g_libPath to "/Work/brett/Pictures/Aperture Library.aplibrary"
else
set g_libPath to p_libPath
end if
end getLibPath