trialed windows file path issues
This commit is contained in:
@@ -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 <kylenmotion@gmail.com>
|
||||
*
|
||||
* @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<wallsArray.length; t++){
|
||||
var wall = wallsArray[t];
|
||||
if(wall.value){
|
||||
@@ -387,8 +411,8 @@ function truncateFilePath(filePathString, separator) {
|
||||
}
|
||||
}
|
||||
|
||||
var renderPipeline = buildRenderPipeline(renderComps,renderQueue,templateArray,renderFolderPath);
|
||||
// RENDERRRRR //
|
||||
var renderPipeline = buildRenderPipeline(renderComps,renderQueue,templateArray,renderFolder);
|
||||
// RENDERRRRR //
|
||||
app.endUndoGroup()
|
||||
|
||||
|
||||
@@ -400,7 +424,7 @@ function truncateFilePath(filePathString, separator) {
|
||||
|
||||
var completedComps = [];
|
||||
var completedNames = [];
|
||||
var failedComps = [];
|
||||
var failedComps = [];
|
||||
|
||||
for(var r = 0; r<renderPipeline.rqItems.length; r++){
|
||||
var item = renderPipeline.rqItems[r];
|
||||
@@ -408,21 +432,21 @@ function truncateFilePath(filePathString, separator) {
|
||||
completedComps.push(renderPipeline.rqComps[r]);
|
||||
} else {
|
||||
failedComps.push({
|
||||
comps: renderPipeline.rqComps[r],
|
||||
comps : renderPipeline.rqComps[r],
|
||||
status: item.status
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if(completedComps.length > 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<exports.length; e++){
|
||||
var renders = exports[e];
|
||||
var renders = exports[e];
|
||||
var importedFootage = proj.importFile(new ImportOptions(File(renders)));
|
||||
for(var f = 0; f< compFolders.length; f++){
|
||||
var folder = compFolders[f];
|
||||
var importBaseName = importedFootage.name.replace(/.mov/g, '');
|
||||
var folder = compFolders[f];
|
||||
var importBaseName = importedFootage.name.replace(/.mov/g, '');
|
||||
var importBaseSplit = importBaseName.split('_');
|
||||
var importScreen = importBaseSplit.slice(-2,-1).toString();
|
||||
var pattern = new RegExp('_' + importScreen + '_', 'g');
|
||||
var importScreen = importBaseSplit.slice(-2,-1).toString();
|
||||
var pattern = new RegExp('_' + importScreen + '_', 'g');
|
||||
var importAssetTest = importBaseName.replace(pattern,'_')
|
||||
if(importAssetTest === folder.name){
|
||||
importedFootage.parentFolder = folder;
|
||||
@@ -460,35 +519,51 @@ function truncateFilePath(filePathString, separator) {
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* @description creates folders for imported renders to be sorted into
|
||||
* @param {string} parentFolderName
|
||||
* @param {array} exportedComps exported comps from AE
|
||||
* @param {Function} getFolders - callback function to search folders in AE
|
||||
* @return {Object} returns parent folder to import files into and comp folders that are created per rendered comp
|
||||
*/
|
||||
function createImportFolders(parentFolderName, exportedComps, getFolders){
|
||||
var parentFolder = getFolders(app.project,parentFolderName);
|
||||
var compFolders = [];
|
||||
var compFolders = [];
|
||||
for(var c = 0; c<exportedComps.length; c++){
|
||||
var exportedComp = exportedComps[c];
|
||||
var compFolder = getFolders(app.project, exportedComp.name);
|
||||
compFolder.parentFolder = parentFolder;
|
||||
var exportedComp = exportedComps[c];
|
||||
var compFolder = getFolders(app.project, exportedComp.name);
|
||||
compFolder.parentFolder = parentFolder;
|
||||
compFolders.push(compFolder)
|
||||
}
|
||||
return {
|
||||
parentFolder: parentFolder,
|
||||
compFolders: compFolders
|
||||
compFolders : compFolders
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getExports(location, names){
|
||||
/**
|
||||
* @description gets exported files from output location
|
||||
* @param {array} locations - gets locations of output folders of each exported comp
|
||||
* @param {array} names - output filenames based on output modules
|
||||
* @return {array} absolute file paths of exports
|
||||
*/
|
||||
function getExports(locations, names){
|
||||
var exports = [];
|
||||
var outputFolder = new Folder(location)
|
||||
var files = outputFolder.getFiles('*.mov');
|
||||
for(var f = 0; f<files.length; f++){
|
||||
var file = files[f];
|
||||
for(var d = 0; d<names.length; d++){
|
||||
var dataName = names[d];
|
||||
if(file.name.replace(/%20/g, ' ') === dataName){
|
||||
exports.push(file.fsName)
|
||||
for(var l = 0; l< locations.length; l++){
|
||||
var location = locations[l];
|
||||
var outputFolder = new Folder(location);
|
||||
var files = outputFolder.getFiles('*.mov');
|
||||
for(var f = 0; f<files.length; f++){
|
||||
var file = files[f];
|
||||
for(var d = 0; d<names.length; d++){
|
||||
var dataName = names[d];
|
||||
if(file.name.replace(/%20/g, ' ') === dataName){
|
||||
exports.push(file.absoluteURI)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return exports
|
||||
@@ -496,19 +571,29 @@ function truncateFilePath(filePathString, separator) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description builds render queue items, output modules, and output files
|
||||
* @param {array} comps - selected comps to be exported
|
||||
* @param {Object} rq - render queue object
|
||||
* @param {array} wallTemplates - output module templates
|
||||
* @param {Object} folderOutput - Selected parent output folder
|
||||
* @return {Object} render queue items, render queue comp references, output file names, output subfolders
|
||||
*/
|
||||
function buildRenderPipeline(comps,rq,wallTemplates,folderOutput){
|
||||
var outputFileNames = [];
|
||||
var rqComps = [];
|
||||
var rqItems = [];
|
||||
var rqComps = [];
|
||||
var rqItems = [];
|
||||
var outputFolders = [];
|
||||
for(var c = 0; c<comps.length; c++){
|
||||
var comp = comps[c];
|
||||
var rqComp = rq.items.add(comp);
|
||||
var comp = comps[c];
|
||||
var rqComp = rq.items.add(comp);
|
||||
rqItems.push(rqComp)
|
||||
rqComps.push(rqComp.comp)
|
||||
var rqCompOMCollect = rqComp.outputModules;
|
||||
while(rqCompOMCollect.length < wallTemplates.length){
|
||||
rqCompOMCollect.add()
|
||||
}
|
||||
var folder_path = Folder.decode(folderOutput.absoluteURI);
|
||||
for(var i = 0; i<rqCompOMCollect.length; i++){
|
||||
var om = rqComp.outputModule(i+1);
|
||||
var templateName = wallTemplates[i];
|
||||
@@ -517,46 +602,56 @@ function truncateFilePath(filePathString, separator) {
|
||||
|
||||
|
||||
var file_name = File.decode(om.file.name);
|
||||
var folder_path = Folder.decode(folderOutput);
|
||||
var fileNameSplit = file_name.split('.');
|
||||
var fileNameString = fileNameSplit[0].split('_');
|
||||
var fileNameString = fileNameSplit[0].split('_');
|
||||
var fileNameBaseWall = fileNameString.slice(0,fileNameString.length-1).join('_') + '_'+ templateNameWall.toString() + '_' + fileNameString.slice(-1).toString();
|
||||
var fileNameExtension = fileNameSplit.slice(-1);
|
||||
var outputFileName = fileNameBaseWall.toString() + '.' + fileNameExtension.toString();
|
||||
outputFileNames.push(outputFileName)
|
||||
var new_data = {
|
||||
"Output File Info": {
|
||||
"Base Path": folder_path,
|
||||
"File Name": outputFileName
|
||||
"Base Path" : folder_path,
|
||||
"Subfolder Path": rqComp.comp.name,
|
||||
"File Name" : outputFileName
|
||||
}
|
||||
}
|
||||
|
||||
om.setSettings(new_data)
|
||||
}
|
||||
outputFolders.push(folder_path + '/' + rqComp.comp.name);
|
||||
}
|
||||
|
||||
return {
|
||||
rqItems: rqItems,
|
||||
rqComps : rqComps,
|
||||
outputFileNames: outputFileNames
|
||||
rqItems : rqItems,
|
||||
rqComps : rqComps,
|
||||
outputFileNames: outputFileNames,
|
||||
outputFolders : outputFolders
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description gets targeted OS-specific path separator
|
||||
* @return {string} separator
|
||||
*/
|
||||
function getSeparator(){
|
||||
var os = $.os.toLowerCase().indexOf('mac') >= 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(),
|
||||
|
||||
Reference in New Issue
Block a user