diff --git a/src/scripts/km-sparks-renderHelper.jsx b/src/scripts/km-sparks-renderHelper.jsx index 10147f4..32957ea 100644 --- a/src/scripts/km-sparks-renderHelper.jsx +++ b/src/scripts/km-sparks-renderHelper.jsx @@ -1,6 +1,6 @@ - /** + /** * @description a script with a UI that will automate rendering process for multiple screens - * @name show-render-helper + * @name Show Render Helper * @author Kyle Harter * * @license This script is provided "as is," without warranty of any kind, expressed or implied. In @@ -15,15 +15,15 @@ (function(thisObj){ - //@include "../library/km_helperFunctions.jsx"; - //@include "../library/km_scriptUI_functions.jsx"; - //@include "../library/km_utilityFunctions.jsx"; - //@include "../library/km_textAnimators.jsx"; - //@include "../library/km_systemFunctions.jsx"; - //@include "../library/OS.jsx"; - //@include "../library/json2.js" + //@include "../library/km_helperFunctions.jsx"; + //@include "../library/km_scriptUI_functions.jsx"; + //@include "../library/km_utilityFunctions.jsx"; + //@include "../library/km_textAnimators.jsx"; + //@include "../library/km_systemFunctions.jsx"; + //@include "../library/OS.jsx"; + //@include "../library/json2.js" - var versionNumber = '0.1.2'; + var versionNumber = '0.1.4'; var scriptName = "Show Render Helper" + ' v' + versionNumber; createUI(thisObj) @@ -39,21 +39,22 @@ win.orientation = 'column'; win.alignChildren = ["fill", "top"]; - var tabMargins = [16,15,16,0]; - var panelMargins = 16; - var separator = getSeparator(); + var tabMargins = [16,15,16,0]; + var panelMargins = 16; + var separator = getSeparator(); var proj = null; - // if(!proj) return + // if(!proj) return if(app.project){ proj = app.project; } + var defaultFolder = proj && proj.file ? new Folder(proj.file.parent.absoluteURI + '/renders') : Folder.desktop var DEFAULT_SETTINGS = { settings:{ - defaultOutputPath: proj && proj.file ? proj.file.parent.fsName + separator + 'renders' : Folder.desktop.fsName, - qcExports: true + defaultOutputPath: defaultFolder.absoluteURI, + qcExports : true } } @@ -72,7 +73,7 @@ var mainTabbedPanel = win.add("tabbedpanel", undefined, undefined); mainTabbedPanel.orientation = 'column'; mainTabbedPanel.alignChildren = ['fill', 'fill'] - // mainTabbedPanel.size = [350,450]; + // mainTabbedPanel.size = [350,450]; var renderTab = mainTabbedPanel.add('tab', undefined, 'Render'); renderTab.orientation = 'column'; @@ -81,23 +82,23 @@ renderTab.spacing = 10; - // WALLSELECTPANEL - // =============== + // WALLSELECTPANEL + // =============== var wallSelectPanel = renderTab.add("panel", undefined, undefined, {name: "wallSelectPanel"}); wallSelectPanel.text = "Select Walls"; wallSelectPanel.orientation = "column"; wallSelectPanel.alignChildren = ["fill","center"]; wallSelectPanel.margins = panelMargins; - // WALLSGROUP - // ========== + // WALLSGROUP + // ========== var wallsGroup = wallSelectPanel.add("group", undefined, {name: "wallsGroup"}); wallsGroup.orientation = "row"; wallsGroup.alignChildren = ["fill","fill"]; wallsGroup.spacing = 20; - // TOPROW - // ====== + // TOPROW + // ====== var leftColumn = wallsGroup.add("group", undefined, {name: "leftColumn"}); leftColumn.orientation = "column"; leftColumn.alignChildren = ["left","center"]; @@ -113,42 +114,42 @@ wallC.text = "C - Right Wall"; wallC.value = true; - // BOTTOMROW - // ========= + // BOTTOMROW + // ========= var rightColumn = wallsGroup.add("group", undefined, {name: "rightColumn"}); - rightColumn.orientation = "column"; - rightColumn.alignment = ['right', 'top']; - rightColumn.alignChildren = ["left","center"]; - rightColumn.spacing = 20; + rightColumn.orientation = "column"; + rightColumn.alignment = ['right', 'top']; + rightColumn.alignChildren = ["left","center"]; + rightColumn.spacing = 20; var wallB = rightColumn.add("checkbox", undefined, undefined, {name: "wallB"}); wallB.text = "B - Center Wall"; wallB.value = true; - var wallD = rightColumn.add("checkbox", undefined, undefined, {name: "wallD"}); - wallD.text = "D - Header Wall"; - wallD.value = true; - var allWalls = wallSelectPanel.add("checkbox", undefined, undefined, {name: "selectAllWalls"}); - allWalls.alignment = ['center', 'top']; - allWalls.text = "Deselect All Walls"; - allWalls.value = true; + var wallD = rightColumn.add("checkbox", undefined, undefined, {name: "wallD"}); + wallD.text = "D - Header Wall"; + wallD.value = true; + var allWalls = wallSelectPanel.add("checkbox", undefined, undefined, {name: "selectAllWalls"}); + allWalls.alignment = ['center', 'top']; + allWalls.text = "Deselect All Walls"; + allWalls.value = true; - // ALPHAROW - // ======== + // ALPHAROW + // ======== var utilityPanel = renderTab.add("panel", undefined, 'Utility', {name: "utlityPanel"}); utilityPanel.orientation = "row"; utilityPanel.alignChildren = ["fill","center"]; utilityPanel.margins = panelMargins; - var wallAlpha = utilityPanel.add("checkbox", undefined, undefined, {name: "wallAlpha"}); - wallAlpha.text = "Walls on Alpha"; - var qcExports = utilityPanel.add("checkbox", undefined, undefined); - qcExports.text = "QC Exports in AE"; + var wallAlpha = utilityPanel.add("checkbox", undefined, undefined, {name: "wallAlpha"}); + wallAlpha.text = "Walls on Alpha"; + var qcExports = utilityPanel.add("checkbox", undefined, undefined); + qcExports.text = "QC Exports in AE"; qcExports.alignment = ['right', 'center'] - qcExports.value = DEFAULT_SETTINGS.settings.qcExports; + qcExports.value = DEFAULT_SETTINGS.settings.qcExports; - // OUTPUTPANEL - // =========== + // OUTPUTPANEL + // =========== var locationPanel = renderTab.add("panel", undefined, 'Output Location', {name: "locationPanel"}); locationPanel.orientation = "column"; locationPanel.alignChildren = ["fill","center"]; @@ -158,7 +159,7 @@ var locationButton = locationPanel.add("button", undefined, undefined, {name: "locationButton"}); locationButton.text = "Choose Location..."; var renderLocationText = locationPanel.add("statictext", undefined, undefined, {name: "renderLocationText"}); - renderLocationText.text = truncateFilePath(DEFAULT_SETTINGS.settings.defaultOutputPath, separator); + renderLocationText.text = truncateFilePath(Folder.decode(DEFAULT_SETTINGS.settings.defaultOutputPath), separator); renderLocationText.characters = 25; @@ -167,11 +168,13 @@ renderPanel.alignChildren = ['fill', 'top']; renderPanel.margins = panelMargins; var renderButton = renderPanel.add("button", undefined, 'Render', {name: "renderButton"}); - // var testButton = renderPanel.add("button", undefined, 'Test', {name: "renderButton"}); + //<------ TEST -------> + // Button used for spot bug testing to avoid going through entire render process + // var testButton = renderPanel.add("button", undefined, 'Test', {name: "renderButton"}); - // HELP TAB - // ========== + // HELP TAB + // ========== var helpTab = mainTabbedPanel.add('tab', undefined, 'Help') helpTab.orientation = 'column'; helpTab.alignChildren = ['fill', 'top']; @@ -183,15 +186,15 @@ var helpEditText = helpGroup.add('edittext', undefined, undefined,{multiline: true, readonly: true ,scrollable: true}); helpEditText.text = 'Help instructions loading'; helpEditText.preferredSize.height = 325; - // helpEditText.alignment = ['fill', 'fill']; + // helpEditText.alignment = ['fill', 'fill']; var omButtonGroup = helpTab.add('group', undefined, 'Output Modules Source Button Group'); omButtonGroup.orientation = 'row'; omButtonGroup.alignChildren = ['fill', 'top']; var omSourceButton = omButtonGroup.add('button', undefined, 'Get Output Modules'); - // omSourceButton.alignment = ['fill', 'fill']; + // omSourceButton.alignment = ['fill', 'fill']; - // Settings TAB - // ========== + // Settings TAB + // ========== var settingsTab = mainTabbedPanel.add('tab', undefined, 'Settings') settingsTab.orientation = 'column'; settingsTab.alignChildren = ['fill', 'fill']; @@ -210,49 +213,67 @@ var settingsLocationButton = settingsLocationPanel.add("button", undefined, undefined, {name: "settingsLocationButton"}); settingsLocationButton.text = "Choose Default Location..."; var settingsLocationText = settingsLocationPanel.add("statictext", undefined, undefined, {name: "settingsLocationText"}); - settingsLocationText.text = truncateFilePath(DEFAULT_SETTINGS.settings.defaultOutputPath, separator); + settingsLocationText.text = truncateFilePath(Folder.decode(DEFAULT_SETTINGS.settings.defaultOutputPath), separator); var settingsQCPanel = settingsGroup.add('panel', undefined, undefined); settingsQCPanel.orientation = 'column' settingsQCPanel.alignChildren = ['fill', 'fill']; settingsQCPanel.margins = panelMargins; - var settingsQCCB = settingsQCPanel.add("checkbox", undefined, undefined); - settingsQCCB.text = "Import Exports for QC"; + var settingsQCCB = settingsQCPanel.add("checkbox", undefined, undefined); + settingsQCCB.text = "Import Exports for QC"; settingsQCCB.value = DEFAULT_SETTINGS.settings.qcExports; - var saveSettingsPanel = settingsGroup.add('panel', undefined, undefined); - saveSettingsPanel.orientation = 'row'; - // saveSettingsPanel.alignment = ['fill', 'bottom']; + var saveSettingsPanel = settingsGroup.add('panel', undefined, undefined); + saveSettingsPanel.orientation = 'row'; + // saveSettingsPanel.alignment = ['fill', 'bottom']; saveSettingsPanel.alignChildren = ['fill', 'fill']; saveSettingsPanel.margins = panelMargins; + var revealSettingsButton = saveSettingsPanel.add("button", undefined, undefined, {name: "saveSettingsButton"}); + revealSettingsButton.text = "Reveal Settings"; var saveSettingsButton = saveSettingsPanel.add("button", undefined, undefined, {name: "saveSettingsButton"}); saveSettingsButton.text = "Save Settings"; + //<------ TEST -------> + // Event handler used for spot bug testing to avoid going through entire render process + /* testButton.addEventListener('mousedown', function(){ + var renderFolder = new Folder(renderFolderPath); + var test = renderFolder; + alert(test.toString()) + }) */ + + + revealSettingsButton.addEventListener('mousedown', function(){ + var settingsFolder = getSettingsFolder(); + return settingsFolder.execute() + }) settingsLocationButton.addEventListener('mousedown', function(){ var updatedDefaultLocation = Folder.selectDialog('Select a default output location'); + var settingsLocation = updatedDefaultLocation.absoluteURI; + var settingsDisplay = Folder.decode(settingsLocation); if(updatedDefaultLocation !== null){ - var truncatedDisplayText = truncateFilePath(updatedDefaultLocation.fsName, separator); + var truncatedDisplayText = truncateFilePath(settingsDisplay, separator); settingsLocationText.text = truncatedDisplayText; renderLocationText.text = truncatedDisplayText; - DEFAULT_SETTINGS.settings.defaultOutputPath = updatedDefaultLocation.fsName + DEFAULT_SETTINGS.settings.defaultOutputPath = updatedDefaultLocation.absoluteURI } return }) - function syncQCExports(newVal){ - settingsQCCB.value = newVal; - qcExports.value = newVal; - DEFAULT_SETTINGS.settings.qcExports = newVal; - } - + /** + * @description updates QC checkbox in UI + */ settingsQCCB.onClick = function(){ - qcExports.value = settingsQCCB.value; + qcExports.value = settingsQCCB.value; DEFAULT_SETTINGS.settings.qcExports = settingsQCCB.value; } + /** + * @description saves settings to settings file on disk + */ + saveSettingsButton.addEventListener('mousedown', function(){ saveSettingsButton.text = 'Saving...' if(writeSettingsFile(DEFAULT_SETTINGS)){ @@ -261,14 +282,17 @@ saveSettingsButton.text = "Save Settings" }) - - // Opens URL in browser for AOM file + /** + * @description opens default browser to reveal output module location on GDrive + */ omSourceButton.addEventListener('mousedown', function(){ var userOS = OS; var launchCode = userOS.openUrl("https://drive.google.com/file/d/1c7ezAQF5_Sy-e0WlRHLGbPluproroBw1/view") }) + + helpEditText.text = setHelpMessage(scriptName, versionNumber); @@ -276,7 +300,9 @@ var bottomWalls = rightColumn.children; var wallsArray = [topWalls[0], topWalls[1], bottomWalls[0], bottomWalls[1]]; - + /** + * @description selects or deselects all wall checkboxes + */ allWalls.onClick = function(){ if(allWalls.value == false){ @@ -291,28 +317,28 @@ var renderFolderPath = DEFAULT_SETTINGS.settings.defaultOutputPath; -function truncateFilePath(filePathString, separator) { - var pathArray = filePathString.split(separator); - var startString = pathArray.slice(0, 1).join(separator); - var endString = pathArray.slice(-2,pathArray.length).join(separator); - - var outputString = '...' + separator + endString + separator; - return outputString; -} + /** + * @description sets location of parent output folder + */ locationButton.addEventListener('mousedown', function(){ var renderFolder = Folder.selectDialog('Select render destination'); if(renderFolder !== null){ - renderFolderPath = renderFolder.fsName; - var outputString = truncateFilePath(renderFolderPath, separator) + renderFolderPath = renderFolder.absoluteURI; + var displayFolderPath = Folder.decode(renderFolderPath) + var outputString = truncateFilePath(displayFolderPath, separator) renderLocationText.text = outputString } }) + /** + * @description begins render process and post-reender actions + */ + renderButton.onClick = function(){ try { app.beginUndoGroup("Renders Comps"); - var km = kmFunction; + var km = kmFunction; var proj = km.getProj(); if(!proj) return var renderComps = []; @@ -353,22 +379,20 @@ function truncateFilePath(filePathString, separator) { } - if(!Folder.renderFolderPath){ - renderFolderPath = new Folder(renderFolderPath); - if(!renderFolderPath.exists){ - renderFolderPath.create() + var renderFolder = new Folder(renderFolderPath); + if(!renderFolder.exists){ + renderFolder.create() } - } - if(renderFolderPath == '') { + if(renderFolder.absoluteURI == '') { alert('Whoops!\rYou don\'t have a folder destination selcted. Select one and try again.'); return } var templateArray = []; - var objKey = wallAlpha.value ? 'alpha' : 'base'; - var dataSelect = nlOMs[objKey] + var objKey = wallAlpha.value ? 'alpha' : 'base'; + var dataSelect = nlOMs[objKey] for(var t = 0; t 0){ - var baseOutputAlert = 'Success!\rYour files were exported to:\r\r' + renderFolderPath.toString() + '\r\r'; + var baseOutputAlert = 'Success!\rYour files were exported to:\r\r' + Folder.decode(renderFolderPath) + '\r\r'; if(qcExports.value){ var aeFolders = createImportFolders('zz_QC', completedComps, km.getOrCreateFolder); - alert(baseOutputAlert += 'Your exports will be imported into AE inside the folder named zz_QC for quality control'); - importExportsIntoAE(proj, aeFolders, renderFolderPath, renderPipeline.outputFileNames) + alert(baseOutputAlert += 'Your exports will be imported into AE inside the folder named zz_QC for quality control.'); + importExportsIntoAE(proj, aeFolders, renderPipeline.outputFolders, renderPipeline.outputFileNames) } else { alert(baseOutputAlert) - var outputFolder = new Folder(renderFolderPath); + var outputFolder = new Folder.decode(renderFolderPath); outputFolder.execute() } } @@ -433,21 +457,56 @@ function truncateFilePath(filePathString, separator) { } + // HELPER FUNCTIONS + /** + * @description syncs QC exports settings + * @param {any} newVal + */ + function syncQCExports(newVal){ + settingsQCCB.value = newVal; + qcExports.value = newVal; + DEFAULT_SETTINGS.settings.qcExports = newVal; + } + + + /** + * @description truncates input file path string for eventual display in UI + * @param {string} filePathString + * @param {string} separator - OS-specific path separator + * @return {string} outputstring for display + */ + function truncateFilePath(filePathString, separator) { + var pathArray = filePathString.split(separator); + var startString = pathArray.slice(0, 1).join(separator); + var endString = pathArray.slice(-2,pathArray.length).join(separator); - function importExportsIntoAE(proj, folders, location, names){ - var exports = getExports(location, names); + var outputString = '...' + separator + endString + separator; + return outputString; +} + + + + /** + * @description imports exported files back into AE and sorts into targeted folders + * @param {object} proj - app project + * @param {array} folders - array of comp folders + * @param {string} locations - file path locations of exported files + * @param {array} names - output file names + */ + function importExportsIntoAE(proj, folders, locations, names){ + var exports = getExports(locations, names); var compFolders = folders.compFolders; for(var e = 0; e= 0 ? "MAC": "WINDOWS"; + var os = $.os.toLowerCase().indexOf('mac') >= 0 ? "MAC": "WINDOWS"; var separator = os === 'MAC' ? '/' : '\\'; return separator } + /** + * @description gets settings folder where settings json lives + * @return {Folder} OS-targeted settings folder + */ function getSettingsFolder(){ - var userDataFolder = new Folder(Folder.userData.fsName); - var kmToolsFolder = new Folder(userDataFolder.fsName + '/km-tools'); + var separator = getSeparator(); + var userDataFolder = new Folder(Folder.userData.absoluteURI); + var kmToolsFolder = new Folder(userDataFolder.absoluteURI + '/km-tools'); if(!kmToolsFolder.exists){ kmToolsFolder.create() } - var settingsFolder = new Folder(kmToolsFolder.fsName + '/sparks-render-helper'); + var settingsFolder = new Folder(kmToolsFolder.absoluteURI + '/sparks-render-helper'); if(!settingsFolder.exists){ settingsFolder.create() } @@ -564,11 +659,19 @@ function truncateFilePath(filePathString, separator) { return settingsFolder } + /** + * @description gets settings file + * @return {File} settings json file + */ function getSettingsFile(){ - var settingsFile = new File(getSettingsFolder().fsName + '/settings.json') + var settingsFile = new File(getSettingsFolder().absoluteURI + '/settings.json') return settingsFile } + /** + * @description reads settings json file + * @return {Object} json data from settings file + */ function readSettingsFile(){ var file = getSettingsFile(); if(!file.exists){ @@ -591,18 +694,23 @@ function truncateFilePath(filePathString, separator) { } + /** + * @description writes data to settings file + * @param {Object} data - data to be written to json file + * @return {boolean} + */ function writeSettingsFile(data){ var file = getSettingsFile(); var json = JSON.stringify(data, null, 4); if(!file.open('w')){ - alert('Could not open settings file:\n' + file.fsName) + alert('Could not open settings file:\n' + file.absoluteURI) return false } - // file.open('w'); + // file.open('w'); file.write(json); file.close() @@ -611,6 +719,12 @@ function truncateFilePath(filePathString, separator) { +/** + * @description builds help message for help tab + * @param {string} scriptName + * @param {srting} versionNumber + * @return {string} + */ function setHelpMessage(scriptName, versionNumber){ var lines = [ 'ABOUT ' + scriptName.toUpperCase(),