From 1d81dba8970b4daded176c340abea63c41668890 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Sun, 31 May 2020 08:58:28 -0700 Subject: [PATCH] Updated power-monitor for linux --- microscript/ILibDuktape_Polyfills.c | 2 +- modules/power-monitor.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index f4bca0a..2d17a08 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2158,7 +2158,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // power-monitor, refer to modules/power-monitor.js for details - duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHBvd2VyTW9uaXRvcigpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncG93ZXItbW9uaXRvcic7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjaGFuZ2VkJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdzeCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnYmF0dGVyeUxldmVsJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdhY2RjJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdkaXNwbGF5Jyk7DQoNCiAgICB0aGlzLl9BQ1N0YXRlID0gMTsNCiAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSAtMTsNCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICAvLyBUaGVzZSBtdXN0IGJlIHJlZ2lzdGVyZWQgQkVGT1JFIG5ld0xpc3RlbmVyIGlzIGhvb2tlZCB1cA0KICAgICAgICB0aGlzLm9uKCdiYXR0ZXJ5TGV2ZWwnLCBmdW5jdGlvbiAobGV2ZWwpIHsgdGhpcy5fQmF0dGVyeUxldmVsID0gbGV2ZWw7IH0pOw0KICAgICAgICB0aGlzLm9uKCdhY2RjJywgZnVuY3Rpb24gKG0pIHsgdGhpcy5fQUNTdGF0ZSA9IChtID09ICdBQycgPyAxIDogMCk7IH0pOw0KICAgIH0NCg0KICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykNCiAgICAgICAgeyAgIC8vIFdpbmRvd3Mgd2lsbCBhbHJlYWR5IHNlbmRzIGFuIGluaXRpYWwgZXZlbnQgd2hlbiB5b3UgaG9va3VwIHRoZSBBQ1BJIGV2ZW50LCBzbyB0aGlzIHdvdWxkIGJlIHJlZHVuZGFudA0KICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2FjZGMnKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fQUNTdGF0ZSA9PSAxID8gJ0FDJyA6ICdCQVRURVJZJyk7IH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAobmFtZSA9PSAnYmF0dGVyeUxldmVsJykgeyBpZiAodGhpcy5fQmF0dGVyeUxldmVsID49IDApIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9CYXR0ZXJ5TGV2ZWwpOyB9IH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2kgPSBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKHNlbGYpDQogICAgew0KICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJyk7IC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgV2luZG93cyBNZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGZvciB0aGVzZSBldmVudHMNCiAgICAgICAgZGVsZXRlIHNlbGYuX2k7DQogICAgfSwgdGhpcyk7DQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgew0KICAgICAgICB0aGlzLl9BQ1BhdGggPSBudWxsOw0KICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aCA9IFtdOw0KDQogICAgICAgIHZhciBkZXZpY2VzID0gcmVxdWlyZSgnZnMnKS5yZWFkZGlyU3luYygnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHknKTsKICAgICAgICBmb3IgKHZhciBpIGluIGRldmljZXMpCiAgICAgICAgewogICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy90eXBlJykudG9TdHJpbmcoKS50cmltKCkgPT0gJ01haW5zJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy5fQUNQYXRoID0gJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy8nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdCYXR0ZXJ5JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aC5wdXNoKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYodGhpcy5fQUNQYXRoICE9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX0FDU3RhdGUgPSBwYXJzZUludChyZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYyh0aGlzLl9BQ1BhdGggKyAnb25saW5lJykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICB9DQogICAgICAgIGlmKHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aD4wKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwgPSBmdW5jdGlvbiBfZ2V0QmF0dGVyeUxldmVsKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgc3VtID0gMDsNCiAgICAgICAgICAgICAgICB2YXIgaTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgaW4gdGhpcy5fQmF0dGVyeVBhdGgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQmF0dGVyeVBhdGhbaV0gKyAnY2FwYWNpdHknKS50b1N0cmluZygpLnRyaW0oKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHN1bSA9IE1hdGguZmxvb3Ioc3VtIC8gdGhpcy5fQmF0dGVyeVBhdGgubGVuZ3RoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHN1bSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwoKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLl9hY3BpU2luayA9IGZ1bmN0aW9uIF9hY3BpU2luayhhY3BpRXZlbnQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKGFjcGlFdmVudC5uYW1lID09ICdhY19hZGFwdGVyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5fQUNTdGF0ZSA9IGFjcGlFdmVudC52YWx1ZTsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5lbWl0KCdhY2RjJywgYWNwaUV2ZW50LnZhbHVlID09IDEgPyAnQUMnIDogJ0JBVFRFUlknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fYWNwaVNpbmsuc2VsZiA9IHRoaXM7DQogICAgICAgIHJlcXVpcmUoJ2xpbnV4LWFjcGknKS5vbignYWNwaScsIHRoaXMuX2FjcGlTaW5rKTsNCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHBvd2VyTW9uaXRvcigpOw==', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('power-monitor', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHBvd2VyTW9uaXRvcigpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncG93ZXItbW9uaXRvcic7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjaGFuZ2VkJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdzeCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnYmF0dGVyeUxldmVsJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdhY2RjJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdkaXNwbGF5Jyk7DQoNCiAgICB0aGlzLl9BQ1N0YXRlID0gMTsNCiAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSAtMTsNCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICAvLyBUaGVzZSBtdXN0IGJlIHJlZ2lzdGVyZWQgQkVGT1JFIG5ld0xpc3RlbmVyIGlzIGhvb2tlZCB1cA0KICAgICAgICB0aGlzLm9uKCdiYXR0ZXJ5TGV2ZWwnLCBmdW5jdGlvbiAobGV2ZWwpIHsgdGhpcy5fQmF0dGVyeUxldmVsID0gbGV2ZWw7IH0pOw0KICAgICAgICB0aGlzLm9uKCdhY2RjJywgZnVuY3Rpb24gKG0pIHsgdGhpcy5fQUNTdGF0ZSA9IChtID09ICdBQycgPyAxIDogMCk7IH0pOw0KICAgIH0NCg0KICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykNCiAgICAgICAgeyAgIC8vIFdpbmRvd3Mgd2lsbCBhbHJlYWR5IHNlbmRzIGFuIGluaXRpYWwgZXZlbnQgd2hlbiB5b3UgaG9va3VwIHRoZSBBQ1BJIGV2ZW50LCBzbyB0aGlzIHdvdWxkIGJlIHJlZHVuZGFudA0KICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2FjZGMnKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fQUNTdGF0ZSA9PSAxID8gJ0FDJyA6ICdCQVRURVJZJyk7IH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAobmFtZSA9PSAnYmF0dGVyeUxldmVsJykgeyBpZiAodGhpcy5fQmF0dGVyeUxldmVsID49IDApIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9CYXR0ZXJ5TGV2ZWwpOyB9IH0NCiAgICB9KTsNCg0KICAgIHRoaXMuX2kgPSBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKHNlbGYpDQogICAgew0KICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJyk7IC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgV2luZG93cyBNZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGZvciB0aGVzZSBldmVudHMNCiAgICAgICAgZGVsZXRlIHNlbGYuX2k7DQogICAgfSwgdGhpcyk7DQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgew0KICAgICAgICB0aGlzLl9BQ1BhdGggPSBudWxsOw0KICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aCA9IFtdOw0KDQogICAgICAgIHZhciBkZXZpY2VzID0gcmVxdWlyZSgnZnMnKS5yZWFkZGlyU3luYygnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHknKTsKICAgICAgICBmb3IgKHZhciBpIGluIGRldmljZXMpCiAgICAgICAgewogICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy90eXBlJykudG9TdHJpbmcoKS50cmltKCkgPT0gJ01haW5zJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy5fQUNQYXRoID0gJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LycgKyBkZXZpY2VzW2ldICsgJy8nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9DQogICAgICAgIGZvciAodmFyIGkgaW4gZGV2aWNlcykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvdHlwZScpLnRvU3RyaW5nKCkudHJpbSgpID09ICdCYXR0ZXJ5JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5UGF0aC5wdXNoKCcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8nICsgZGV2aWNlc1tpXSArICcvJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYodGhpcy5fQUNQYXRoICE9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX0FDU3RhdGUgPSBwYXJzZUludChyZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYyh0aGlzLl9BQ1BhdGggKyAnb25saW5lJykudG9TdHJpbmcoKS50cmltKCkpOw0KICAgICAgICB9DQogICAgICAgIGlmKHRoaXMuX0JhdHRlcnlQYXRoLmxlbmd0aD4wKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwgPSBmdW5jdGlvbiBfZ2V0QmF0dGVyeUxldmVsKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgc3VtID0gMDsNCiAgICAgICAgICAgICAgICB2YXIgaTsNCiAgICAgICAgICAgICAgICBmb3IgKGkgaW4gdGhpcy5fQmF0dGVyeVBhdGgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQocmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmModGhpcy5fQmF0dGVyeVBhdGhbaV0gKyAnY2FwYWNpdHknKS50b1N0cmluZygpLnRyaW0oKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHN1bSA9IE1hdGguZmxvb3Ioc3VtIC8gdGhpcy5fQmF0dGVyeVBhdGgubGVuZ3RoKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHN1bSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSB0aGlzLl9nZXRCYXR0ZXJ5TGV2ZWwoKTsNCg0KICAgICAgICAgICAgLy8gU2luY2UgQmF0dGVyeSBMZXZlbHMgYXJlIG5vdCBwcm9wYWdhdGVkIHdpdGggQUNQSSwgd2UgbmVlZCB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIGJhdHRlcnkgbGV2ZWwNCiAgICAgICAgICAgIHRoaXMuX0JhdHRlcnlMZXZlbENoZWNrID0gZnVuY3Rpb24gX0JhdHRlcnlMZXZlbENoZWNrKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5fZ2V0QmF0dGVyeUxldmVsKCk7DQogICAgICAgICAgICAgICAgaWYgKHZhbCAhPSB0aGlzLl9CYXR0ZXJ5TGV2ZWwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9CYXR0ZXJ5TGV2ZWwgPSB2YWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYmF0dGVyeUxldmVsJywgdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdGhpcy5fQmF0dENoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLl9CYXR0ZXJ5TGV2ZWxDaGVjay5jYWxsKHNlbGYpOw0KICAgICAgICAgICAgfSwgMzAwMDAwLCB0aGlzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLl9hY3BpU2luayA9IGZ1bmN0aW9uIF9hY3BpU2luayhhY3BpRXZlbnQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKGFjcGlFdmVudC5uYW1lID09ICdhY19hZGFwdGVyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5fQUNTdGF0ZSA9IGFjcGlFdmVudC52YWx1ZTsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5lbWl0KCdhY2RjJywgYWNwaUV2ZW50LnZhbHVlID09IDEgPyAnQUMnIDogJ0JBVFRFUlknKTsNCiAgICAgICAgICAgICAgICBfYWNwaVNpbmsuc2VsZi5fQmF0dGVyeUxldmVsQ2hlY2soKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fYWNwaVNpbmsuc2VsZiA9IHRoaXM7DQogICAgICAgIHJlcXVpcmUoJ2xpbnV4LWFjcGknKS5vbignYWNwaScsIHRoaXMuX2FjcGlTaW5rKTsNCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHBvd2VyTW9uaXRvcigpOw==', 'base64').toString());"); // service-manager, which on linux has a dependency on user-sessions and process-manager. Refer to /modules folder for human readable versions. duk_peval_string_noresult(ctx, "addModule('process-manager', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KdmFyIFRIMzJDU19TTkFQUFJPQ0VTUyA9IDB4MDI7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUzMiA9IDB4MTA7DQp2YXIgVEgzMkNTX1NOQVBNT0RVTEUgPSAweDA4Ow0KdmFyIFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiA9IDB4MTAwMDsNCg0KDQovLyBVc2VkIG9uIFdpbmRvd3MgYW5kIExpbnV4IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIHByb2Nlc3Nlcw0KZnVuY3Rpb24gcHJvY2Vzc01hbmFnZXIoKSB7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAncHJvY2Vzcy1tYW5hZ2VyJzsgLy8gVXNlZCBmb3IgZGVidWdnaW5nLCBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0IHR5cGUgYXQgcnVudGltZS4NCiAgICANCiAgICAvLyBTZXR1cCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY2FsbHMuDQogICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgIHsNCiAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlSGFuZGxlJyk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldExhc3RFcnJvcicpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdDcmVhdGVUb29saGVscDMyU25hcHNob3QnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnTW9kdWxlMzJOZXh0VycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdPcGVuUHJvY2VzcycpOw0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdQcm9jZXNzMzJGaXJzdFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyTmV4dFcnKTsNCiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUXVlcnlGdWxsUHJvY2Vzc0ltYWdlTmFtZVcnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KCWNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIHRocm93IChwcm9jZXNzLnBsYXRmb3JtICsgJyBub3Qgc3VwcG9ydGVkJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICB9DQogICAgdGhpcy5lbnVtZXJhdGVQcm9jZXNzZXMgPSBmdW5jdGlvbiBlbnVtZXJhdGVQcm9jZXNzZXMoKQ0KICAgIHsNCiAgICAgICAgdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhwcykNCiAgICAgICAgew0KICAgICAgICAgICAgY2FsbGJhY2sucHJvbS5fcmVzKHBzKTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuY2FsbGJhY2sucHJvbSA9IHJldDsNCiAgICAgICAgdGhpcy5nZXRQcm9jZXNzZXMocmV0LmNhbGxiYWNrKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCiAgICAvLyBSZXR1cm4gYSBvYmplY3Qgb2Y6IHBpZCAtPiBwcm9jZXNzIGluZm9ybWF0aW9uLg0KICAgIHRoaXMuZ2V0UHJvY2Vzc2VzID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc2VzKGNhbGxiYWNrKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgKCdFbnVtZXJhdGluZyBwcm9jZXNzZXMgb24gJyArIHByb2Nlc3MucGxhdGZvcm0gKyAnIG5vdCBzdXBwb3J0ZWQnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzogLy8gV2luZG93cyBwcm9jZXNzZXMNCiAgICAgICAgICAgICAgICB2YXIgcGlkOw0KICAgICAgICAgICAgICAgIHZhciByZXRWYWwgPSB7fTsNCiAgICAgICAgICAgICAgICB2YXIgaCA9IHRoaXMuX2tlcm5lbDMyLkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOw0KICAgICAgICAgICAgICAgIHZhciBpbmZvID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDU2OCA6IDU1Nik7DQogICAgICAgICAgICAgICAgdmFyIGZ1bGxwYXRoID0gR00uQ3JlYXRlVmFyaWFibGUoMjA0OCk7DQogICAgICAgICAgICAgICAgdmFyIHBhdGhTaXplID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICAgICAgdmFyIHBoOw0KDQogICAgICAgICAgICAgICAgaW5mby50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaW5mby5fc2l6ZSwgMCk7DQogICAgICAgICAgICAgICAgdmFyIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyRmlyc3RXKGgsIGluZm8pOw0KICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0UHJvY2Vzcy5WYWwpIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcGlkID0gaW5mby5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgwKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsW3BpZF0gPSB7IHBpZDogcGlkLCBjbWQ6IGluZm8uRGVyZWYoR00uUG9pbnRlclNpemUgPT0gNCA/IDM2IDogNDQsIDI2MCkuV2lkZTJVVEY4IH07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKChwaCA9IHRoaXMuX2tlcm5lbDMyLk9wZW5Qcm9jZXNzKFBST0NFU1NfUVVFUllfTElNSVRFRF9JTkZPUk1BVElPTiwgMCwgcGlkKSkuVmFsICE9IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXRoU2l6ZS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZnVsbHBhdGguX3NpemUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2tlcm5lbDMyLlF1ZXJ5RnVsbFByb2Nlc3NJbWFnZU5hbWVXKHBoLCAwLCBmdWxscGF0aCwgcGF0aFNpemUpLlZhbCAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbFtwaWRdLnBhdGggPSBmdWxscGF0aC5XaWRlMlVURjg7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DbG9zZUhhbmRsZShwaCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWxbcGlkXS51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocGlkKS5uYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIG5leHRQcm9jZXNzID0gdGhpcy5fa2VybmVsMzIuUHJvY2VzczMyTmV4dFcoaCwgaW5mbyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNsb3NlSGFuZGxlKGgpOw0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjay5hcHBseSh0aGlzLCBbcmV0VmFsXSk7IH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzogLy8gTGludXggcHJvY2Vzc2VzDQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXggLW8gcGlkIC1vIHVzZXI6OTkgLW8gY29tbWFuZCB8IHRyICcgKyAiJ1xcbicgJ1xcdCcgfCBhd2sgLUYiICsgJyJcXHQiIFwneyBwcmludGYgInsiOyBmb3IoaT0yO2k8TkY7KytpKSB7IHNwbGl0KCRpLHRvaywiICIpOyBwaWQ9dG9rWzFdOyB1c2VyPXRva1syXTsgY21kPXN1YnN0cigkaSxsZW5ndGgodG9rWzFdKSsxMDIpOyBnc3ViKC9cXFxcLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC8iLywiXFxcXFxcXFwmIixjbWQpOyBnc3ViKC9eWyBdKy8sIiIsY21kKTsgcHJpbnRmICIlc1xcIiVzXFwiOntcXCJwaWRcXCI6XFwiJXNcXCIsXFwidXNlclxcIjpcXCIlc1xcIixcXCJjbWRcXCI6XFwiJXNcXCJ9IiwoaSE9Mj8iLCI6IiIpLHBpZCxwaWQsdXNlcixjbWQ7IH0gcHJpbnRmICJ9IjsgfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICBwLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwLmFyZ3MgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsgcC5hcmdzLnB1c2goYXJndW1lbnRzW2ldKTsgfQ0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7DQogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIHAuYXJncyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICAgICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIHAuc3Rkb3V0LnN0ciA9ICcnOyBwLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyB1c2VyIC1vIGNvbW1hbmQgfCB0ciAnICsgIidcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJ7IjsgZm9yKGk9MjtpPE5GOysraSkgeyBnc3ViKC9eWyBdKy8sIiIsJGkpOyBzcGxpdCgkaSx0b2ssIiAiKTsgcGlkPXRva1sxXTsgdXNlcj10b2tbMl07IGNtZD1zdWJzdHIoJGksbGVuZ3RoKHRva1sxXSkrbGVuZ3RoKHRva1syXSkrMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIHAud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeyBwLmFyZ3MucHVzaChhcmd1bWVudHNbaV0pOyB9DQoNCiAgICAgICAgICAgICAgICAgICAgcC5hcmdzLnVuc2hpZnQoSlNPTi5wYXJzZShwLnN0ZG91dC5zdHIpKTsNCiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBwcm9jZXNzIG9uIExpbnV4DQogICAgdGhpcy5nZXRQcm9jZXNzSW5mbyA9IGZ1bmN0aW9uIGdldFByb2Nlc3NJbmZvKHBpZCkNCiAgICB7DQogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0KICAgICAgICB7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHRocm93ICgnZ2V0UHJvY2Vzc0luZm8oKSBub3Qgc3VwcG9ydGVkIGZvciAnICsgcHJvY2Vzcy5wbGF0Zm9ybSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdsaW51eCc6DQogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgcGlkICsgJy9zdGF0dXMnKTsNCiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHt9Ow0KICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IHN0YXR1cy50b1N0cmluZygpLnNwbGl0KCdcbicpOw0KICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8bGluZXMubGVuZ3RoOysraSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnOicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHsgdG9rZW5zWzFdID0gdG9rZW5zWzFdLnRyaW0oKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpbmZvW3Rva2Vuc1swXV0gPSB0b2tlbnNbMV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiAoaW5mbyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfcGdyZXAnLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHBncmVwIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAodGhpcy5fcGdyZXAgIT0gJycpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZ2V0UHJvY2VzcyA9IGZ1bmN0aW9uIGdldFByb2Nlc3MoY21kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicGdyZXAgZ25vbWUtc2Vzc2lvbiB8IHRyICdcXG4nICdcXHQnIHwiICsgJyBhd2sgLUYiXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVkIiwgJGk7IH0gcHJpbnRmICJdIjsgfVwnJyk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3RkZXJyLnN0ciAhPSAnJykgeyB0aHJvdyAoY2hpbGQuc3RkZXJyLnN0ci50cmltKCkpOyB9DQogICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnKSB7IHRocm93IChjbWQgKyAnIG5vdCBmb3VuZCcpOyB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgIH07DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLmdldFByb2Nlc3NFeCA9IGZ1bmN0aW9uIGdldFByb2Nlc3NFeChjbWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgncHMgLWF4IC1vIHBpZCAtbyBjb21tYW5kIHwgZ3JlcCAnICsgY21kICsgIiB8IHRyICdcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBzcGxpdCgkaSxyLCIgIik7IGlmKHJbMl0hPSJncmVwIikgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVzIiwgclsxXTsgfSB9IHByaW50ZiAiXSI7IH1cJycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyb3cgKGNtZCArICcgbm90IGZvdW5kJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCm1vZHVsZS5leHBvcnRzID0gbmV3IHByb2Nlc3NNYW5hZ2VyKCk7DQo=', 'base64').toString());"); diff --git a/modules/power-monitor.js b/modules/power-monitor.js index 50d3341..757157f 100644 --- a/modules/power-monitor.js +++ b/modules/power-monitor.js @@ -88,6 +88,21 @@ function powerMonitor() return (sum); } this._BatteryLevel = this._getBatteryLevel(); + + // Since Battery Levels are not propagated with ACPI, we need to periodically check the battery level + this._BatteryLevelCheck = function _BatteryLevelCheck() + { + var val = this._getBatteryLevel(); + if (val != this._BatteryLevel) + { + this._BatteryLevel = val; + this.emit('batteryLevel', val); + } + }; + this._BattCheckInterval = setInterval(function (self) + { + self._BatteryLevelCheck.call(self); + }, 300000, this); } this._acpiSink = function _acpiSink(acpiEvent) { @@ -95,6 +110,7 @@ function powerMonitor() { _acpiSink.self._ACState = acpiEvent.value; _acpiSink.self.emit('acdc', acpiEvent.value == 1 ? 'AC' : 'BATTERY'); + _acpiSink.self._BatteryLevelCheck(); } }; this._acpiSink.self = this;