diff --git a/.timer.toml b/.timer.toml new file mode 100644 index 0000000..d4d0e55 --- /dev/null +++ b/.timer.toml @@ -0,0 +1,3 @@ +## dates and their corresponding seconds been here :) +[24-10-07] +u80864958_at_u80864958 = 432 diff --git a/lua/timer.lua b/lua/timer.lua index a360263..294c1f3 100644 --- a/lua/timer.lua +++ b/lua/timer.lua @@ -1,13 +1,16 @@ local TOML = require("toml") - -local augroup = vim.api.nvim_create_augroup("Timer", { clear = true }) -local focus_events = {} -local clean_to = 1 - function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end +local augroup = vim.api.nvim_create_augroup("Timer", { clear = true }) +local filename = ".timer.toml" +local username = trim(os.getenv("USER")) .. "_at_" .. trim(io.popen("hostname -s"):read("*a")) +local focus_events = {} +local clean_to = 1 + + + local function clean_from(from, events) local to = 1 local clean_events = {} @@ -45,7 +48,7 @@ local function clean_from(from, events) return clean_events end -local function time() +local function summ_time() focus_events = clean_from(clean_to + 1, focus_events) clean_to = #focus_events @@ -65,37 +68,72 @@ local function time() return t end -local function log_time() - print(time()) +local function fmt_time(time) + local str = "" + + local days = math.floor(time / (60 * 60 * 24)) + if days ~= 0 then + str = str .. days .. "d" + end + + time = time % (60 * 60 * 24) + + local hours = math.floor(time / (60 * 60)) + if hours ~= 0 then + str = str .. hours .. "h" + end + + time = time % (60 * 60) + + local minutes = math.floor(time / 60) + if minutes ~= 0 then + str = str .. minutes .. "m" + end + + local seconds = time % (60) + if seconds ~= 0 then + str = str .. seconds .. "s" + end + + return str end +local function log_total_time() + local times = {} + times[username] = summ_time() + + local file = io.open(filename, "r") + + -- if file exists read + if file ~= nil then + local history = TOML.parse(file:read("*a")) + file:close() + + + for _, day in pairs(history) do + for user, time in pairs(day) do + if times[user] == nil then + times[user] = 0 + end + times[user] = times[user] + time + end + end + end + + for user, time in pairs(times) do + print(user, fmt_time(time)) + end +end + + local function log_time_table() for i, e in pairs(focus_events) do print(i, e.event, os.date("%H:%M:%S", e.time)) end end -local function focus_gained() - print("Huiii Fokus") - - table.insert(focus_events, { - time = os.time(), - event = "gain", - }) -end - -local function focus_lost() - print("Hokus pokus fort ist der fokus") - - table.insert(focus_events, { - time = os.time(), - event = "lose", - }) -end local function persist() - local filename = ".timer.toml" - local username = trim(os.getenv("USER")) .. "_at_" .. trim(io.popen("hostname -s"):read("*a")) local today = os.date("%y-%m-%d", os.time()) local table = {} @@ -109,12 +147,12 @@ local function persist() -- write time to table if table[today] ~= nil and table[today][username] ~= nil then - table[today][username] = table[today][username] + time() + table[today][username] = table[today][username] + summ_time() else if table[today] == nil then table[today] = {} end - table[today][username] = time() + table[today][username] = summ_time() end -- write table to file @@ -132,6 +170,19 @@ local function persist() focus_events = {} focus_gained() end +local function focus_gained() + table.insert(focus_events, { + time = os.time(), + event = "gain", + }) +end + +local function focus_lost() + table.insert(focus_events, { + time = os.time(), + event = "lose", + }) +end local function setup() vim.api.nvim_create_autocmd("VimEnter", @@ -143,7 +194,7 @@ local function setup() vim.api.nvim_create_user_command( 'Timer', -- The name of the command (accessible via :TimerStart) - log_time, + log_total_time, { nargs = 0 } -- No arguments for this command (you can configure this later) ) vim.api.nvim_create_user_command(