Files
martin-rizzo-ComfyUI-ZImage…/js/common_timer.js
T
Martin Rizzo a75c1ba1c3 chore: Fix missing semicolons as identified by ESLint
This commit addresses a few missing semicolon errors in the codebase,
aligning with ESLint's recommendations.
2026-02-09 19:29:56 -03:00

67 lines
2.4 KiB
JavaScript

/**
* File : common/timer.js
* Purpose : Helper functions to execute periodic low-priority tasks.
* Author : Martin Rizzo | <martinrizzo@gmail.com>
* Date : Feb 1, 2026
* Repo : https://github.com/martin-rizzo/ComfyUI-ZImagePowerNodes
* License : MIT
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* ComfyUI-ZImagePowerNodes
* ComfyUI nodes designed specifically for the "Z-Image" model.
*_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
*/
export { executeLowPriorityTasks, scheduleIntervalCalls };
let nodes = new Set();
/**
* Registers a controller to receive periodic interval calls.
*
* This function sets up automatic, repeated calls to the specified controller's
* `onInterval` method. It attempts to use the node associated with the given
* controller, unless a specific node is provided as an argument.
*
* Key features:
* - Automatically detects the controller's node if no explicit node is supplied.
* - Ensures that interval calls stop when the associated node is removed from ComfyUI.
*
* @param {Object} controller - The controller object, which must have an `onInterval` method.
* @param {Object} [node] - An optional node to associate with the interval calls.
* If not provided, the controller's own node will be used.
*/
function scheduleIntervalCalls(controller, node) {
if( !node ) { node = controller?.node; }
if( !node ) {
console.error("No node or controller found to call the onInterval method.");
}
// add the node to the set to call the `onInterval()` method
nodes.add(node);
// intercept the `onRemoved` method to remove the node from the set
const originalOnRemoved = node.onRemoved;
node.onRemoved = function() {
nodes.delete(this);
return originalOnRemoved?.apply(this, arguments);
};
}
/**
* Executes low-priority tasks for all registered nodes.
*
* This function is designed to be called periodically, such as every 5 seconds.
* It handles lower priority background operations across all registered nodes.
*
* Note: The "low priority timer extension" will be responsible for
* calling this function.
*/
function executeLowPriorityTasks() {
// iterate over all registered nodes and call `onInterval()` from the controller
for( const node of nodes ) {
node.zzController?.onInterval?.();
}
}