From 573c74ba5b76ae4ebdb0a32ae072f45da6046654 Mon Sep 17 00:00:00 2001 From: snxraven Date: Thu, 23 Sep 2021 19:39:48 -0400 Subject: [PATCH] first commit --- main.js | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 main.js diff --git a/main.js b/main.js new file mode 100644 index 0000000..046e260 --- /dev/null +++ b/main.js @@ -0,0 +1,150 @@ +// Required Modules +var lb = require("lemonbar"); +var wifi = require('node-wifi'); +const monitor = require('node-active-window'); +const jsonfile = require('jsonfile') +const battery = require("battery"); +const fs = require('fs'); +const os = require('os'); + +const isNotDefined = require("is-not-defined"); + + +function cpuUsage(cb, core, sampleMs) { + var deltaUsed; + var deltaIdle; + var timesKeys = ["user", "nice", "sys", "irq"]; + + var allCores = null === core || !(core > -1); + + var byCore = (cpu, i) => allCores || core === i; + + var bySampleKey = (sample, key) => sample.filter(byCore).reduce((sum, cpu) => sum + cpu.times[key], 0); + + var sample0 = os.cpus(); + + setTimeout(function() { + var sample1 = os.cpus(); + + deltaUsed = timesKeys.reduce( + (diff, key) => diff + bySampleKey(sample1, key) - bySampleKey(sample0, key), 0); + + deltaIdle = bySampleKey(sample1, "idle") - bySampleKey(sample0, "idle"); + + if ("function" === typeof cb) { + cb(100 * (deltaUsed / (deltaUsed + deltaIdle))); + } + }, sampleMs || 1000); + } + +process.on('uncaughtException', err => { + console.error('There was an uncaught error', err) + process.exit(1) //mandatory (as per the Node.js docs) +}) + + + +// The cache file +const file = '/home/raven/Documents/cache.json' + +// Launching Main PID for LemonBar +lb.launch({ + lemonbar: "/usr/bin/lemonbar", // Lemonbar binary + shell: "/bin/sh", // Shell to use for actions + shelloutput: true, // Print shell STDOUT + + background: "#000", // Background color (#rgb, #rrggbb, #aarrggbb) + foreground: "#000", // Foreground color + lineWidth: 1, lineColor: "#666", // Underline/Overline config + geometry: { // Window geometry + x: 0, y: 0, + width: null, height: 25 + }, + + bottom: false, // Dock bar at bottom instead of top + forceDocking: false, // Force docking without asking the window manager + name: null, // Set the WM_NAME atom value for the bar + areas: 10 // Number of clickable areas + +}) + +// This must be async for battery level and charging detection +async function update() { + + const { level, charging } = await battery(); + + // Lets check our cache files mtime to see if we need to check the current SSID yet + fs.stat(file, function (err, stats) { + let seconds = (new Date().getTime() - stats.mtime) / 1000; + // If the mtime for the cache is over 1 hour, lets poll for a new SSID + if (seconds > 3600) { + + // Init the card + wifi.init({ + iface: null // network interface, choose a random wifi interface if set to null + }); + + // Grab the current Wifi SSID and details + wifi.getCurrentConnections((error, currentConnections) => { + if (error) { + console.log(error); + } else { + // If no error, write the result to the cache + const obj = { ssid: currentConnections[0].ssid } + + jsonfile.writeFile(file, obj, function (err) { + if (err) console.error(err) + console.log("WifiCache Is Written") + }) + } + }) + } + // Start main program printing & Check CPU + // cpu.usage() + // .then(cpuPercentage => { + // lb.append(lb.left + "RavenScott | CPU: ".lbFg("#fff") + cpuPercentage.toString().lbFg("#fff")) + // }) + + cpuUsage(perc => lb.append(lb.left + "RavenScott | CPU: ".lbFg("#fff") + (Math.round(perc * 100) / 100).toFixed(2).lbFg("#fff"))); + + + // Check the cache SSID + jsonfile.readFile(file, function (err, obj) { + if (err) console.error(err) + // Set a new var containing the ID + let wifiSSID = obj.ssid + + // If charging show its status, else, show nothing for charging + if (charging) { + lb.append(lb.right + (" " + new Date().toDateString().lbFg("#fff") + " | BAT: ".lbFg("#fff") + level.toString().lbFg("#fff") + " (Charging)".lbFg("#fff") + " " + "| WIFI: ".lbFg("#fff") + wifiSSID.ssid.lbFg("#fff")).lbSwap) + } else { + + lb.append(lb.right + (" " + new Date().toDateString().lbFg("#fff") + " | BAT: ".lbFg("#fff") + level.toString().lbFg("#fff") + " " + "| WIFI: ".lbFg("#fff") + wifiSSID.toString().lbFg("#fff")).lbSwap) + } + + + monitor.getActiveWindow((err, window) => { + if (!err) { + lb.append((lb.center + window.app.lbFg("#fff"))) + + } else + console.log(err) + }); // Grab the active window and and page name + + // Write the data to lemonbar + lb.write() + + }) + + + }) + +} + +update() + +// Update current time every second +setTimeout(function () { + update() + setInterval(update, 1500) +}, 1500 - new Date().getMilliseconds())