mirror of
https://github.com/Manoj-HV30/keystats.git
synced 2026-05-16 19:35:23 +00:00
updated makefile
This commit is contained in:
@@ -4,7 +4,7 @@ BINARY_STATS = keystroke-stats
|
||||
SERVICE = keystats.service
|
||||
SYSTEMD_USER = /usr/lib/systemd/user
|
||||
|
||||
.PHONY: all build install uninstall status logs clean
|
||||
.PHONY: all build install uninstall status logs clean setup
|
||||
|
||||
all: build
|
||||
|
||||
@@ -12,7 +12,10 @@ build:
|
||||
cmake -S . -B build
|
||||
cmake --build build
|
||||
|
||||
install: build
|
||||
setup:
|
||||
sudo usermod -aG input $(USER)
|
||||
|
||||
install: build setup
|
||||
sudo cp build/$(BINARY_DAEMON) $(PREFIX)/bin/$(BINARY_DAEMON)
|
||||
sudo cp build/$(BINARY_STATS) $(PREFIX)/bin/$(BINARY_STATS)
|
||||
sudo cp $(SERVICE) $(SYSTEMD_USER)/$(SERVICE)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <unistd.h>
|
||||
#include <sqlite3.h>
|
||||
|
||||
// ─── Key name map ─────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
std::unordered_map<int, std::string> keyNames = {
|
||||
{KEY_ESC, "Esc"}, {KEY_F1, "F1"}, {KEY_F2, "F2"}, {KEY_F3, "F3"},
|
||||
@@ -49,13 +49,11 @@ std::unordered_map<int, std::string> keyNames = {
|
||||
{KEY_KPDOT, "KP."}, {KEY_KPENTER, "KPEnter"},
|
||||
};
|
||||
|
||||
// ─── Globals ──────────────────────────────────────────────────────────────────
|
||||
|
||||
std::unordered_map<int, long long> keyCounts;
|
||||
sqlite3* db = nullptr;
|
||||
int fd = -1;
|
||||
|
||||
// ─── DB ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
void initDB() {
|
||||
struct passwd* pw = getpwuid(getuid());
|
||||
@@ -150,7 +148,7 @@ void flushDailyToDB(int code, long long count) {
|
||||
sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
}
|
||||
// ─── Device ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
std::string findKeyboard() {
|
||||
DIR* dir = opendir("/dev/input");
|
||||
@@ -192,7 +190,7 @@ std::string findKeyboard() {
|
||||
return found;
|
||||
}
|
||||
|
||||
// ─── Signal handler ───────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
void onExit(int) {
|
||||
flushToDB();
|
||||
@@ -201,7 +199,7 @@ void onExit(int) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// ─── Main ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
int main() {
|
||||
signal(SIGINT, onExit);
|
||||
|
||||
@@ -124,7 +124,6 @@ Element renderStats(const std::vector<KeyStat>& stats, const std::vector<KeyStat
|
||||
long long maxCount = stats[0].count;
|
||||
long long total = totalCount(stats);
|
||||
|
||||
// ── Heatmap ──────────────────────────────────────────────────────────────
|
||||
std::vector<Element> rows;
|
||||
for (auto& row : keyboardLayout) {
|
||||
std::vector<Element> keys;
|
||||
@@ -136,7 +135,7 @@ Element renderStats(const std::vector<KeyStat>& stats, const std::vector<KeyStat
|
||||
rows.push_back(hbox(keys));
|
||||
}
|
||||
|
||||
// ── Lifetime top 10 ──────────────────────────────────────────────────────
|
||||
|
||||
std::vector<Element> topList;
|
||||
int limit = std::min((int)stats.size(), 10);
|
||||
for (int i = 0; i < limit; i++) {
|
||||
@@ -152,7 +151,6 @@ Element renderStats(const std::vector<KeyStat>& stats, const std::vector<KeyStat
|
||||
);
|
||||
}
|
||||
|
||||
// ── Today top 5 ──────────────────────────────────────────────────────────
|
||||
long long todayTotal = totalCount(todayStats);
|
||||
std::vector<Element> todayList;
|
||||
int todayLimit = std::min((int)todayStats.size(), 5);
|
||||
@@ -172,7 +170,7 @@ Element renderStats(const std::vector<KeyStat>& stats, const std::vector<KeyStat
|
||||
todayList.push_back(text("No keys pressed today yet.") | color(Color::GrayDark));
|
||||
}
|
||||
|
||||
// ── Legend ───────────────────────────────────────────────────────────────
|
||||
|
||||
auto legend = hbox({
|
||||
text(" cold ") | color(Color::GrayDark),
|
||||
text("▓") | color(Color::Blue),
|
||||
|
||||
Reference in New Issue
Block a user