blob: b8d414274a5401986ae904ca01a3ea62306c57d6 [file] [log] [blame]
var virtualbox = require('./virtualbox.js');
var exec = require('child_process').exec;
var timeout = {id:undefined};
module.exports = {
is_running: function(callback) {
module.exports.active_emulator(function(vm) {
callback(vm!==undefined);
});
},
active_emulator: function(callback) {
virtualbox.list(function(allVMs) {
var runningVMs = [];
// look for active webOS VMs
for(var x in allVMs) {
if(allVMs[x].running && allVMs[x].name) {
var name = allVMs[x].name.toLowerCase();
allVMs[x].id = x;
if(name.indexOf("webos")>-1) {
callback(allVMs[x]);
return;
} else {
runningVMs.push(allVMs[x]);
}
}
}
// check for legacy emulator VMs
var checkVM = function(status) {
if(status || runningVMs.length===0) {
callback(status);
} else {
var curr = runningVMs.pop();
virtualbox.info(curr.id, function(info) {
if(info["Forwarding(0)"] && info["Forwarding(0)"].indexOf("palm")>-1) {
checkVM(curr);
} else {
checkVM();
}
});
}
};
checkVM();
});
},
wait_for_emulator: function(callback) {
var count = 0;
var TIMECAP = 20000;
var nextTimeout = function(funct) {
if(count>=TIMECAP) {
callback(new Error("Emulator connection timeout"));
} else {
count+= 2000;
setTimeout(funct, 2000);
}
};
var wait = function() {
module.exports.active_emulator(function(vm) {
if(vm) {
callback();
} else {
nextTimeout(wait);
}
});
}
setTimeout(wait, 5000);
},
webos_images: function(callback) {
virtualbox.list(function(availableVMs) {
var webOS_VMs = {};
for(var x in availableVMs) {
if(availableVMs[x] && availableVMs[x].name) {
var name = availableVMs[x].name.toLowerCase();
if(name.indexOf("webos")>-1) {
webOS_VMs[x] = availableVMs[x];
}
}
}
callback(webOS_VMs);
});
},
legacy_emulator: function(callback) {
exec("palm-emulator", function (err, stdout, stderr) {
callback(err);
});
},
start_emulator: function(callback) {
module.exports.webos_images(function(webOS_VMs) {
var vm;
for(var x in webOS_VMs) {
vm = x;
if(webOS_VMs[x].name==="LG webOS TV Emulator") {
// ideal default VM name for SmartTV SDK-installed VM
break;
}
}
var emu_started = function(err) {
if(err) {
console.error("Unable to start emulator");
};
callback(err);
}
if(vm) {
virtualbox.start(vm, true, emu_started);
} else {
module.exports.legacy_emulator(emu_started);
}
});
},
stop_emulator: function(callback) {
module.exports.active_emulator(function(active) {
if(active) {
virtualbox.poweroff(active.id, function(err) {
if(err) {
console.error("Unable to poweroff emulator");
};
callback(err);
});
} else {
callback();
}
})
}
};