From 5ab433eba3225ee414636ed137c7d45d21f81856 Mon Sep 17 00:00:00 2001 From: mixal_bl4 Date: Tue, 4 Apr 2017 12:19:43 +0300 Subject: [PATCH] made comments revision --- README.md | 20 ++++++------ index.js | 80 ++++++++++++++++++++++++------------------------ index.js.map | 2 +- index.ts | 86 ++++++++++++++++++++++++++-------------------------- 4 files changed, 94 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 4e0d843..4478c9d 100644 --- a/README.md +++ b/README.md @@ -4,27 +4,27 @@ Node keyboard and mouse activity detector without root! # Methods ## xinput_get_all_devices_id ( callback ) -Get list of all xinput devices +Gets list of all xinput devices ### attributes * callback - function - callback function ## new xinput_listener ( good_devices_id_list, callback, [optional] response_interval = 3000 ) -Create new listener for devices +Creates new listener for devices ### attributes * good_devices_id_list - array of numbers - list of devices id (you can get it from xinput_get_all_devices_id) * callback - function - callback function -* response_interval - number - time interval for send events list to callback. **If set 0 - live mode** +* response_interval - number - time interval for sending list of events to callback. **If 0 is set, live mode is active** ## destroy ( ) -Destroy all streams and clear class +Destroys all streams and clears class # Info ## standard mode (if response_interval > 0 ) -Every N seconds calls callback with events list +Calls callback with list of events every N seconds ## live mode (if response_interval === 0 ) -When any event triggered it create new event list with this event and immediately call callback, for every event make new call +When any event triggers, it creates new event list with this event calls callback immediately. For new call is made for every event. # Installing @@ -41,7 +41,7 @@ xinput_get_all_devices_id((devices_id_list: number[])=> { var listener = new xinput_listener(devices_id_list, (xinput_events_list: xinput_events_list)=> { console.log('events!', xinput_events_list); }); - // Destroy after 10 sec + // Destroys listener after 10 sec setTimeout(function () { listener.destroy(); }, 10000); @@ -55,7 +55,7 @@ xmkl.xinput_get_all_devices_id(function (devices_id_list) { var listener = new xmkl.xinput_listener(devices_id_list, function (xinput_events_list) { console.log('events!', xinput_events_list); }); - // Destroy after 10 sec + // Destroys listener after 10 sec setTimeout(function () { listener.destroy(); }, 10000); @@ -70,7 +70,7 @@ import {xinput_events_list, xinput_get_all_devices_id, xinput_listener} from 'xi xinput_get_all_devices_id((devices_id_list: number[])=> { var listener = new xinput_listener(devices_id_list, (xinput_events_list: xinput_events_list)=> { console.log('events!', xinput_events_list); - }, 0); // <- 0 is live mode! + }, 0); // <- 0 is set, live mode is active! }); ``` ### JavaScript @@ -80,6 +80,6 @@ xmkl.xinput_get_all_devices_id(function (devices_id_list) { console.log('all', devices_id_list); var listener = new xmkl.xinput_listener(devices_id_list, function (xinput_events_list) { console.log('events!', xinput_events_list); - }, 0); // <- 0 is live mode! + }, 0); // <- 0 is set, live mode is active! }); ``` \ No newline at end of file diff --git a/index.js b/index.js index 964c2e8..110f4ca 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,7 @@ // Match numbers to keys with: xmodmap -pke "use strict"; -var exec = require('child_process').exec; // import exec function -var spawn = require('child_process').spawn; // import spawn function +var exec = require('child_process').exec; // imports exec function +var spawn = require('child_process').spawn; // imports spawn function // regex tester function regexp_exec(pattern, str, flags) { if (flags === void 0) { flags = "img"; } @@ -15,29 +15,29 @@ function regexp_exec(pattern, str, flags) { } while (match); return results; } -// get list of all xinput devices +// gets list of all xinput devices function xinput_get_all_devices_id(callback) { - // get text list + // gets text list exec('xinput --list', { timeout: 5000 }, function (error, stdout, stderr) { if (stdout) { - // parse text list + // parses text list var devices_id_list = regexp_exec('^.*id=(\\d+?)\\t.*slave.*$', stdout); var only_id = []; - // add founded IDs to array + // adding found IDs to array for (var _i = 0, devices_id_list_1 = devices_id_list; _i < devices_id_list_1.length; _i++) { var obj = devices_id_list_1[_i]; only_id.push(+obj[1]); } - // check: callback is set + // checks if callback is set if (callback) callback(only_id); - // exit from function if result is good + // exits from function if the result is good return; } else if (stderr) { console.log('xinput-mouse-key-logger error', stderr); } - // if error happened - return empty array + // return empty array if error has happens if (callback) callback([]); }); @@ -48,34 +48,34 @@ var xinput_listener = (function () { function xinput_listener(good_devices_id_list, callback, response_interval) { var _this = this; if (response_interval === void 0) { response_interval = 3000; } - this.destroyed = false; // destroy class status - this.streams = []; // created streams array + this.destroyed = false; // destroying class status + this.streams = []; // already created streams array // init class variables this.devices = good_devices_id_list; this.callback = callback; this.response_interval = response_interval; this.clear_events(); - // create all streams + // creates all streams for (var _i = 0, _a = this.devices; _i < _a.length; _i++) { var id = _a[_i]; this.create_stream(id); } - // if not live mode it init first timeout + // if the live mode is not set, it init first timeout if (this.response_interval !== 0) { this.send_timeout = setTimeout(function () { _this.check(); }, this.response_interval); } - // when node destroyed it destroy all streams + // when node is destroyed, it destroys all streams process.on('exit', function () { _this.destroy(); }); } - // clear all buffered events + // clears all buffered events xinput_listener.prototype.clear_events = function () { this.events = xinput_listener.get_clear_events(); }; - // return clear events object + // return clear object of events xinput_listener.get_clear_events = function () { return { total_mouse_button_events: 0, @@ -85,63 +85,63 @@ var xinput_listener = (function () { mouse_button_codes: [] }; }; - // create new stream + // creates new stream xinput_listener.prototype.create_stream = function (id) { var _this = this; - // run stream with device id + // runs stream with device id var stream = spawn('xinput', ['--test', String(id)]); - // set event listener on data + // sets event listener on data stream.stdout.on('data', function (data) { - data = String(data); // convert bits to string - var keys = regexp_exec("^key press\\s+(\\d+?)\\s{0,}$", data); // searching keyboard press events - var mouse_keys = regexp_exec("^button press\\s+(\\d+?)\\s{0,}$", data); // searching mouse press events - var mouse_moves = regexp_exec("^motion\\s{1}.*$", data); // searching mouse move events - // if live mode enabled + data = String(data); // converts bits to string + var keys = regexp_exec("^key press\\s+(\\d+?)\\s{0,}$", data); // searches keyboard press events + var mouse_keys = regexp_exec("^button press\\s+(\\d+?)\\s{0,}$", data); // searches mouse press events + var mouse_moves = regexp_exec("^motion\\s{1}.*$", data); // searches mouse move events + // if live mode is enabled if (_this.response_interval === 0) { - var new_events_list = xinput_listener.get_clear_events(); // create clear events list - // add keys events + var new_events_list = xinput_listener.get_clear_events(); // create clear list of events + // add events of keyboard keys for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; new_events_list.keys_code.push(+key[1]); new_events_list.total_keyboard_events++; } - // add mouse_keys events + // adds events of mouse keys for (var _a = 0, mouse_keys_1 = mouse_keys; _a < mouse_keys_1.length; _a++) { var mouse_key = mouse_keys_1[_a]; new_events_list.mouse_button_codes.push(+mouse_key[1]); new_events_list.total_mouse_button_events++; } - // add mouse moves events counter + // adds events of mouse keys new_events_list.total_mouse_move_events += mouse_moves.length; - // if it got new events run callback + // if new events are got, run callback if ((keys.length > 0 || mouse_keys.length > 0 || mouse_moves.length > 0) && _this.callback) _this.callback(new_events_list); } else { - // add keys events + // adds events of keys for (var _b = 0, keys_2 = keys; _b < keys_2.length; _b++) { var key = keys_2[_b]; _this.events.keys_code.push(+key[1]); _this.events.total_keyboard_events++; } - // add mouse_keys events + // adds events of mouse_keys for (var _c = 0, mouse_keys_2 = mouse_keys; _c < mouse_keys_2.length; _c++) { var mouse_key = mouse_keys_2[_c]; _this.events.mouse_button_codes.push(+mouse_key[1]); _this.events.total_mouse_button_events++; } - // add mouse moves events counter + // adds counter of mouse move events _this.events.total_mouse_move_events += mouse_moves.length; } }); - // set event listener on ERROR data + // sets event listener on ERROR data // stream.stderr.on('data', (data: string) => { // console.log(`stderr: ${data}`); // }); - // push this stream to streams list + // pushed this stream to the list of streams this.streams.push(stream); }; - // send events to callback + // sends events to callback xinput_listener.prototype.check = function () { var _this = this; if (!this.destroyed) { @@ -153,9 +153,9 @@ var xinput_listener = (function () { } this.clear_events(); }; - // destroy all streams and this class + // destroys all streams and this class xinput_listener.prototype.destroy = function () { - // trying kill streams + // trying to kill streams for (var _i = 0, _a = this.streams; _i < _a.length; _i++) { var stream = _a[_i]; try { @@ -163,14 +163,14 @@ var xinput_listener = (function () { } catch (e) { } } - // trying clear timeout + // trying to clear timeout try { clearTimeout(this.send_timeout); } catch (e) { } - // set new status + // sets new status this.destroyed = true; - // clear events array + // clears array of events this.clear_events(); }; return xinput_listener; diff --git a/index.js.map b/index.js.map index ca3cbf2..dbee034 100644 --- a/index.js.map +++ b/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/index.ts b/index.ts index 139bf2a..f664b4c 100644 --- a/index.ts +++ b/index.ts @@ -1,9 +1,9 @@ // Match numbers to keys with: xmodmap -pke // Main import -import {ChildProcess} from "child_process"; // import ChildProcess type -const exec = require('child_process').exec; // import exec function -const spawn = require('child_process').spawn; // import spawn function +import {ChildProcess} from "child_process"; // imports ChildProcess type +const exec = require('child_process').exec; // imports exec function +const spawn = require('child_process').spawn; // imports spawn function // regex tester function regexp_exec(pattern: string, str: string, flags: string = "img"): string[] { @@ -18,26 +18,26 @@ function regexp_exec(pattern: string, str: string, flags: string = "img"): strin return results; } -// get list of all xinput devices +// gets list of all xinput devices export function xinput_get_all_devices_id(callback: (devices_id_list: number[])=>any) { - // get text list + // gets text list exec('xinput --list', {timeout: 5000}, function (error: any, stdout: string, stderr: string) { if (stdout) { - // parse text list + // parses text list var devices_id_list: string[] = regexp_exec('^.*id=(\\d+?)\\t.*slave.*$', stdout); var only_id: number[] = []; - // add founded IDs to array + // adding found IDs to array for (var obj of devices_id_list) only_id.push(+obj[1]); - // check: callback is set + // checks if callback is set if (callback) callback(only_id); - // exit from function if result is good + // exits from function if the result is good return; } else if (stderr) { console.log('xinput-mouse-key-logger error', stderr); } - // if error happened - return empty array + // return empty array if error has happens if (callback) callback([]); }); @@ -56,11 +56,11 @@ export interface xinput_events_list { export class xinput_listener { private devices: number[]; // devices id private callback: (xinput_events_list: xinput_events_list)=>any; // callback - private response_interval: number; // callback run interval, if set 0 == live mode! - private events: xinput_events_list; // event list buffer - private destroyed: boolean = false; // destroy class status + private response_interval: number; // if set 0 == live mode, callback run interval! + private events: xinput_events_list; // list of events buffer + private destroyed: boolean = false; // destroying class status private send_timeout: NodeJS.Timer; // variable for interval - private streams: ChildProcess[] = []; // created streams array + private streams: ChildProcess[] = []; // already created streams array constructor(good_devices_id_list: number[], callback: (xinput_events_list: xinput_events_list)=>any, response_interval: number = 3000) { // init class variables @@ -69,30 +69,30 @@ export class xinput_listener { this.response_interval = response_interval; this.clear_events(); - // create all streams + // creates all streams for (var id of this.devices) { this.create_stream(id); } - // if not live mode it init first timeout + // if the live mode is not set, it init first timeout if (this.response_interval !== 0) { this.send_timeout = setTimeout(()=> { this.check() }, this.response_interval); } - // when node destroyed it destroy all streams + // when node is destroyed, it destroys all streams process.on('exit', ()=> { this.destroy(); }); } - // clear all buffered events + // clears all buffered events public clear_events() { this.events = xinput_listener.get_clear_events(); } - // return clear events object + // return clear object of events static get_clear_events(): xinput_events_list { return { total_mouse_button_events: 0, @@ -103,62 +103,62 @@ export class xinput_listener { }; } - // create new stream + // creates new stream private create_stream(id: number) { - // run stream with device id + // runs stream with device id var stream: ChildProcess = spawn('xinput', ['--test', String(id)]); - // set event listener on data + // sets event listener on data stream.stdout.on('data', (data: string) => { - data = String(data); // convert bits to string - var keys: string[] = regexp_exec("^key press\\s+(\\d+?)\\s{0,}$", data); // searching keyboard press events - var mouse_keys: string[] = regexp_exec("^button press\\s+(\\d+?)\\s{0,}$", data); // searching mouse press events - var mouse_moves: string[] = regexp_exec("^motion\\s{1}.*$", data); // searching mouse move events + data = String(data); // converts bits to string + var keys: string[] = regexp_exec("^key press\\s+(\\d+?)\\s{0,}$", data); // searches keyboard press events + var mouse_keys: string[] = regexp_exec("^button press\\s+(\\d+?)\\s{0,}$", data); // searches mouse press events + var mouse_moves: string[] = regexp_exec("^motion\\s{1}.*$", data); // searches mouse move events - // if live mode enabled + // if live mode is enabled if (this.response_interval === 0) { - var new_events_list = xinput_listener.get_clear_events(); // create clear events list - // add keys events + var new_events_list = xinput_listener.get_clear_events(); // create clear list of events + // add events of keyboard keys for (var key of keys) { new_events_list.keys_code.push(+key[1]); new_events_list.total_keyboard_events++; } - // add mouse_keys events + // adds events of mouse keys for (var mouse_key of mouse_keys) { new_events_list.mouse_button_codes.push(+mouse_key[1]); new_events_list.total_mouse_button_events++; } - // add mouse moves events counter + // adds events of mouse keys new_events_list.total_mouse_move_events += mouse_moves.length; - // if it got new events run callback + // if new events are got, run callback if ((keys.length > 0 || mouse_keys.length > 0 || mouse_moves.length > 0) && this.callback) this.callback(new_events_list); } else { - // add keys events + // adds events of keys for (var key of keys) { this.events.keys_code.push(+key[1]); this.events.total_keyboard_events++; } - // add mouse_keys events + // adds events of mouse_keys for (var mouse_key of mouse_keys) { this.events.mouse_button_codes.push(+mouse_key[1]); this.events.total_mouse_button_events++; } - // add mouse moves events counter + // adds counter of mouse move events this.events.total_mouse_move_events += mouse_moves.length; } }); - // set event listener on ERROR data + // sets event listener on ERROR data // stream.stderr.on('data', (data: string) => { // console.log(`stderr: ${data}`); // }); - // push this stream to streams list + // pushed this stream to the list of streams this.streams.push(stream); } - // send events to callback + // sends events to callback private check() { if (!this.destroyed) { if (this.callback) @@ -170,21 +170,21 @@ export class xinput_listener { this.clear_events(); } - // destroy all streams and this class + // destroys all streams and this class public destroy() { - // trying kill streams + // trying to kill streams for (var stream of this.streams) { try { stream.kill(); } catch (e) {} } - // trying clear timeout + // trying to clear timeout try { clearTimeout(this.send_timeout); } catch (e) {} - // set new status + // sets new status this.destroyed = true; - // clear events array + // clears array of events this.clear_events(); } } \ No newline at end of file