diff -r 000000000000 -r 52d30e6014a0 js/yubi.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/yubi.js Mon Feb 09 09:20:01 2015 -0800 @@ -0,0 +1,77 @@ + +/*###################################################################### +### I N I T I A L I Z A T I O N +######################################################################*/ +var Y = global.Y; + +// Global jQuery callback queues. Used across the application to trigger actions +// on various events. +// +Y.callback = function( name, flags ) { + if ( ! Y.callbacks ) Y.callbacks = {}; + + // Create a new callback queue if one doesn't already exist + // for the provided +name+. + // + if ( ! Y.callbacks[name] ) { + if ( ! flags ) flags = 'unique'; + Y.callbacks[name] = $.Callbacks( flags ); + } + + return Y.callbacks[name]; +}; + +// Node's gui interface. +Y.gui = require( 'nw.gui' ); + + +// Execute yubi external processes. +// +Y.yubiexec = function( cmd, args ) { + + // Add the dynamic lib path for libyubi. + // + var lib = './yubi/' + process.platform + '/lib'; + var env = process.env; + env[ 'DYLD_LIBRARY_PATH' ] = env[ 'DYLD_LIBRARY_PATH' ] + ':' + lib; + // FIXME: need to add linux and windows + + if ( ! args ) args = []; + var binary = './yubi/' + process.platform + '/bin/' + cmd; + Y.fs.chmodSync( binary, 0755 ); + var child = Y.spawn( binary, args, { env: env }); + + if ( ! child ) { + Y.callback( cmd + '-fatal' ).fire(); + return; + } + + // Send callbacks when data is received. + // + child.stdout.on( 'data', function(data) { + Y.callback( cmd ).fire( data ); + }); + child.stderr.on( 'data', function(data) { + Y.callback( cmd + '-error' ).fire( data ); + }); + + // Log exit code. + // + child.on( 'close', function(code) { + console.log( cmd + ' process exited with code: ' + code); + }); +}; + + +// Callback behaviors for ykinfo execution. +// +Y.callback( 'ykinfo' ).add( function(data) { + Y.keyinfo = {}; + $.each( data.toString().split("\n"), function(i, info) { + var match = info.match( /^(\w+):\s+(.+)$/ ); + if ( match ) Y.keyinfo[ match[1] ] = match[2]; + }); +}); +Y.callback( 'ykinfo-fatal' ).add( function() { Y.keyinfo = {} } ); +Y.callback( 'ykinfo-error' ).add( function() { Y.keyinfo = {} } ); +