1- exports . version = '0.0.2' ;
1+ var Promise = require ( 'bluebird' ) ;
2+
3+ // Setup irsend
24exports . IRSend = require ( './irsend' ) ;
35exports . irsend = new exports . IRSend ( ) ;
46exports . remotes = { } ;
57
8+ // Setup irreceive
69exports . IRReceive = require ( './irreceive' ) ;
710var irreceive = new exports . IRReceive ( ) ;
11+
12+ // Setup event listeners for irreceive
813exports . addListener = irreceive . addListener . bind ( irreceive ) ;
914exports . on = exports . addListener ;
1015exports . removeListener = irreceive . removeListener . bind ( irreceive ) ;
@@ -15,45 +20,64 @@ exports.setSocket = function(socket) {
1520 exports . irsend . setSocket ( socket ) ;
1621}
1722
18- exports . init = function ( callback ) {
19- exports . irsend . list ( '' , '' , irsendCallback ) ;
23+ exports . init = function ( ) {
24+ return exports . irsend . list ( '' , '' )
25+ . then ( exports . _populateRemotes )
26+ . then ( exports . _populateCommands )
27+ . then ( function ( remotes ) {
28+ return exports . remotes = remotes ;
29+ } ) ;
30+ } ;
2031
21- function irsendCallback ( error , stdout , stderr ) {
22- exports . _populateRemotes ( error , stdout , stderr ) ;
23- exports . _populateCommands ( ) ;
24- if ( callback ) callback ( ) ;
25- }
32+ // Parse the list of remotes that irsend knows about
33+ exports . _populateRemotes = function ( irsendResult ) {
34+ var remotes = { } ;
35+
36+ irsendResult [ 1 ] . split ( '\n' ) . forEach ( function ( remote ) {
37+ var remoteName = remote . match ( / \s ( .* ) $ / ) ;
38+ if ( remoteName ) remotes [ remoteName [ 1 ] ] = [ ] ;
39+ } ) ;
2640
27- return true ;
41+ return remotes ;
2842} ;
2943
30- // Private
31- exports . _populateRemotes = function ( error , stdout , stderr ) {
32- var remotes = stderr . split ( '\n' ) ;
44+ // Given object whose keys represent remotes, get commands for each remote
45+ // Returns promise that will resolve when all irsend invocations complete
46+ exports . _populateCommands = function ( remotesObject ) {
47+ var commandPromises = [ ] ;
48+ var remoteNames = Object . keys ( remotesObject ) ;
3349
34- exports . remotes = { } ;
50+ remoteNames . forEach ( function ( remote ) {
51+ commandPromises . push ( exports . irsend . list ( remote , '' )
52+ . then ( function ( irsendResult ) {
53+ return { [ remote ] : exports . _parseCommands ( irsendResult ) }
54+ } )
55+ ) ;
56+ } )
3557
36- remotes . forEach ( function ( element , index , array ) {
37- var remoteName = element . match ( / \s ( .* ) $ / ) ;
38- if ( remoteName ) exports . remotes [ remoteName [ 1 ] ] = [ ] ;
39- } ) ;
58+ return Promise . all ( commandPromises )
59+ . then ( exports . _joinRemoteCommands ) ;
4060} ;
4161
42- exports . _populateCommands = function ( ) {
43- for ( var remote in exports . remotes ) {
44- ( function ( remote ) {
45- exports . irsend . list ( remote , '' , function ( error , stdout , stderr ) {
46- exports . _populateRemoteCommands ( remote , error , stdout , stderr ) ;
47- } ) ;
48- } ) ( remote ) ;
49- }
62+ // Merges an array of remoteCommands into a single object
63+ exports . _joinRemoteCommands = function ( remoteCommands ) {
64+ var remotes = { } ;
65+
66+ remoteCommands . forEach ( function ( remote ) {
67+ remotes = Object . assign ( remotes , remote ) ;
68+ } ) ;
69+
70+ return remotes ;
5071} ;
5172
52- exports . _populateRemoteCommands = function ( remote , error , stdout , stderr ) {
53- var commands = stderr . split ( '\n' ) ;
73+ // Parses the results of irsend for a specifif remote
74+ exports . _parseCommands = function ( irsendResult ) {
75+ var commands = [ ] ;
5476
55- commands . forEach ( function ( element , index , array ) {
56- var commandName = element . match ( / \s .* \s ( .* ) $ / ) ;
57- if ( commandName && commandName [ 1 ] ) exports . remotes [ remote ] . push ( commandName [ 1 ] ) ;
77+ irsendResult [ 1 ] . split ( '\n' ) . forEach ( function ( command ) {
78+ var commandName = command . match ( / \s .* \s ( .* ) $ / ) ;
79+ if ( commandName && commandName [ 1 ] ) commands . push ( commandName [ 1 ] ) ;
5880 } ) ;
81+
82+ return commands ;
5983} ;
0 commit comments