modules/renderqueue.js

aeq = ( function ( aeq ) {
/**
 * Module for dealing with the render queue.
 * @namespace aeq.renderqueue
 * @memberof aeq
 * @type {Object}
 */
aeq.renderqueue = aeq.extend({}, {
	toString: function () {
		return '[object aeq.RenderQueue]';
	},

	// Function for extending the object using objects
	extend: aeq.extend,

	/**
	 * Add a project item to the render queue.
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {Item|CompItem} item The item to add to the queue.
	 * @return {RenderQueueItem}      The added RenderQueueItem.
	 */
	queue: function ( item ) {
		return app.project.renderQueue.items.add( item );
	},

	/**
	 * Unqueues all items in the render queue
	 * @method
	 * @memberof aeq.renderqueue
	 */
	unqueueAll: function () {
		var items = aeq.renderqueue.getRQItems();

		items.forEach( function ( item ) {
			if ( item.status !== RQItemStatus.USER_STOPPED &&
				item.status !== RQItemStatus.ERR_STOPPED &&
				item.status !== RQItemStatus.RENDERING &&
				item.status !== RQItemStatus.DONE ) {
				item.render = false;
			}
		});
	},

	/**
	 * Removes all items from the render queue.
	 * @method
	 * @memberof aeq.renderqueue
	 */
	clear: function () {
		var items = aeq.renderqueue.getRQItems();
		items = items.reverse();
		items.forEach( function ( item ) {
			item.remove();
		});
	},

	/**
	 * Check if an item in the render queue is queued for rendering.
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {RenderQueueItem} rqItem The item to check.
	 * @return {boolean}        `true` if the item is going to be rendered.
	 */
	isQueued: function ( rqItem ) {
		return rqItem.status === RQItemStatus.QUEUED;
	},

	/**
	 * Gets all `RenderQueueItem`s in the render queue which are queued for
	 * rendering.
	 * @method
	 * @memberof aeq.renderqueue
	 * @return {aeq.arrayEx} ArrayEx of `RenderQueueItem`s
	 */
	getQueuedItems: function () {
		var items = aeq.renderqueue.getRQItems();
		return items.filter( function ( item ) {
			return aeq.renderqueue.isQueued( item );
		});
	},

	/**
	 * Gets all `CompItem`s that are queued for rendering.
	 * @method
	 * @memberof aeq.renderqueue
	 * @return {aeq.arrayEx} ArrayEx of `CompItem`s
	 */
	getQueuedComps: function () {
		var queuedItems = aeq.renderqueue.getQueuedItems();
		var compIDs = {};
		var comps = [];

		queuedItems.forEach( function ( item ) {
			var comp = item.comp;
			var compID = comp.id;

			if ( compIDs[compID] === undefined ) {
				compIDs[compID] = true;
				comps.push( comp );
			}
		});

		return aeq.arrayEx( comps );
	},

	/**
	 * Gets all render queue items.
	 * @method
	 * @memberof aeq.renderqueue
	 * @return {aeq.arrayEx} ArrayEx of `RenderQueueItem`s
	 */
	getRQItems: function () {
		return aeq.arrayEx( aeq.normalizeCollection( app.project.renderQueue.items ) );
	},

	/**
	 * Gets all `compItem`s added to the render queue.
	 * @method
	 * @memberof aeq.renderqueue
	 * @return {aeq.arrayEx} ArrayEx of CompItems in the render queue.
	 */
	getRQComps: function () {
		var rqItems = aeq.renderqueue.getRQItems();
		var compIDs = {};
		var comps = [];

		rqItems.forEach( function ( item ) {
			var comp = item.comp;
			var compID = comp.id;

			if ( compIDs[compID] === undefined ) {
				compIDs[compID] = true;
				comps.push( comp );
			}
		});

		return aeq.arrayEx( comps );
	},

	/**
	 * Gets settings from a `RenderQueueItem` or `OutputModule`.
	 * @see [OutputModule.getSettings]{@link
	 * http://docs.aenhancers.com/outputmodule/#outputmodule-getsettings}
	 * @see [RenderQueueItem.getSettings]{@link
	 * http://docs.aenhancers.com/renderqueueitem/#renderqueueitem-getsettings}
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {RenderQueueItem|OutputModule} renderItem The object to get settings
	 * from.
	 * @return {Object}        Object with render settings as strings.
	 */
	getSettings: function ( renderItem ) {
		return renderItem.getSettings( GetSettingsFormat.STRING );
	},

	/**
	 * Checks if the folder where the output module is rendering to exists, if
	 * it does not exist, it gets created.
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {OutputModule} outputModule The output module to check the render
	 *                                     path of.
	 */
	ensureRenderPathExists: function ( outputModule ) {
		aeq.app.ensureSecurityPrefEnabled();
		aeq.file.ensureFolderExists( outputModule.file.parent );
	},

	/**
	 * Checks if the given output module template exists.
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {string} templateName Name of the template to check if exists.
	 * @return {boolean}             `true` if the output module template exists.
	 */
	omTemplateExists: function ( templateName ) {
		var tempComp = aeq.comp.create();
		var tempRQItem = aeq.renderqueue.queue( tempComp );
		var templates = aeq.arrayEx( tempRQItem.outputModule( 1 ).templates );

		var templateExists = templates.some( function ( template ) {
			return template === templateName;
		});

		tempRQItem.remove();
		tempComp.remove();
		return templateExists;
	},

	/**
	 * Checks if the given render queue template exists.
	 * @method
	 * @memberof aeq.renderqueue
	 * @param  {string} templateName Name of the template to check.
	 * @return {boolean}             `true` if the template exists.
	 */
	rqTemplateExists: function ( templateName ) {
		var tempComp = aeq.comp.create();
		var tempRQItem = aeq.renderqueue.queue( tempComp );
		var templates = aeq.arrayEx( tempRQItem.templates );

		var templateExists = templates.some( function ( template ) {
			return template === templateName;
		});

		tempRQItem.remove();
		tempComp.remove();
		return templateExists;
	}
});

// Function aliases

return aeq;
}( aeq || {}) );