4 Commits

Author SHA1 Message Date
312689b005 fix persist 2024-10-08 10:57:57 +02:00
e9eab52653 fix 2024-10-07 22:19:02 +02:00
d367d166a9 update readme 2024-10-07 22:11:05 +02:00
50bcdedb9b log time 2024-10-07 22:07:55 +02:00
5 changed files with 88 additions and 29 deletions

0
.asdf
View File

3
.timer.toml Normal file
View File

@ -0,0 +1,3 @@
## dates and their corresponding seconds been here :)
[24-10-07]
u80864958_at_u80864958 = 432

View File

@ -0,0 +1,7 @@
# Timer
Timer times the time it took you to realize your project
Counts the time in your editor inside on directory.
Not beeing inside the editor for less than 5 minutes gets counted as beeing
inside the editor.

View File

@ -1,15 +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) function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1")) return (s:gsub("^%s*(.-)%s*$", "%1"))
end 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 function clean_from(from, events)
local to = 1
local clean_events = {} local clean_events = {}
-- coppy until from -- coppy until from
@ -45,7 +46,7 @@ local function clean_from(from, events)
return clean_events return clean_events
end end
local function time() local function summ_time()
focus_events = clean_from(clean_to + 1, focus_events) focus_events = clean_from(clean_to + 1, focus_events)
clean_to = #focus_events clean_to = #focus_events
@ -65,10 +66,64 @@ local function time()
return t return t
end end
local function log_time() local function fmt_time(time)
print(time()) local str = ""
local days = math.floor(time / (60 * 60 * 24))
if days ~= 0 then
str = str .. days .. "d"
end 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 = require("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() local function log_time_table()
for i, e in pairs(focus_events) do for i, e in pairs(focus_events) do
print(i, e.event, os.date("%H:%M:%S", e.time)) print(i, e.event, os.date("%H:%M:%S", e.time))
@ -76,8 +131,6 @@ local function log_time_table()
end end
local function focus_gained() local function focus_gained()
print("Huiii Fokus")
table.insert(focus_events, { table.insert(focus_events, {
time = os.time(), time = os.time(),
event = "gain", event = "gain",
@ -85,22 +138,19 @@ local function focus_gained()
end end
local function focus_lost() local function focus_lost()
print("Hokus pokus fort ist der fokus")
table.insert(focus_events, { table.insert(focus_events, {
time = os.time(), time = os.time(),
event = "lose", event = "lose",
}) })
end end
local function persist() local function persist()
local filename = ".timer.toml" local TOML = require("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 today = os.date("%y-%m-%d", os.time())
local table = {} local table = {}
local file = io.open(filename, "r") local file = io.open(filename, "r")
-- if file exists read -- if file exists read
if file ~= nil then if file ~= nil then
table = TOML.parse(file:read("*a")) table = TOML.parse(file:read("*a"))
@ -109,12 +159,12 @@ local function persist()
-- write time to table -- write time to table
if table[today] ~= nil and table[today][username] ~= nil then 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 else
if table[today] == nil then if table[today] == nil then
table[today] = {} table[today] = {}
end end
table[today][username] = time() table[today][username] = summ_time()
end end
-- write table to file -- write table to file
@ -124,8 +174,11 @@ local function persist()
return return
end end
file:write("## dates and their corresponding seconds been here :)\n", TOML.encode(table), "\n") local tml = TOML.encode(table)
file.close() print(tml)
file:write("## dates and their corresponding seconds been here :)\n", tml, "\n")
file:close()
--reset timer --reset timer
clean_to = 1 clean_to = 1
@ -142,17 +195,17 @@ local function setup()
vim.api.nvim_create_autocmd("FocusLost", { group = augroup, callback = focus_lost }) vim.api.nvim_create_autocmd("FocusLost", { group = augroup, callback = focus_lost })
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
'Timer', -- The name of the command (accessible via :TimerStart) 'Timer',
log_time, log_total_time,
{ nargs = 0 } -- No arguments for this command (you can configure this later) { nargs = 0 } -- No arguments for this command (you can configure this later)
) )
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
'TimerLog', -- The name of the command (accessible via :TimerStart) 'TimerLog',
log_time_table, log_time_table,
{ nargs = 0 } -- No arguments for this command (you can configure this later) { nargs = 0 } -- No arguments for this command (you can configure this later)
) )
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
'TimerSave', -- The name of the command (accessible via :TimerStart) 'TimerSave',
persist, persist,
{ nargs = 0 } -- No arguments for this command (you can configure this later) { nargs = 0 } -- No arguments for this command (you can configure this later)
) )

View File

@ -1,4 +0,0 @@
local username = os.getenv("USER")
local hostname = io.popen("hostname -s"):read("*a")
print(username)
print(hostname)