From bac26868d8e96ed36eb7234733c48e930c6f0185 Mon Sep 17 00:00:00 2001 From: u80864958 Date: Fri, 11 Oct 2024 16:47:37 +0200 Subject: [PATCH] better persistace --- .timer.toml | 6 ++- lua/timer.lua | 103 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 70 insertions(+), 39 deletions(-) diff --git a/.timer.toml b/.timer.toml index 167e55b..37fcbfa 100644 --- a/.timer.toml +++ b/.timer.toml @@ -1,5 +1,7 @@ ## dates and their corresponding seconds been here :) +[24-10-08] +u80864958_at_u80864958 = 425 [24-10-07] u80864958_at_u80864958 = 432 -[24-10-08] -u80864958_at_u80864958 = 372 +[24-10-11] +u80864958_at_u80864958 = 5497 diff --git a/lua/timer.lua b/lua/timer.lua index 54b5443..f53dcb9 100644 --- a/lua/timer.lua +++ b/lua/timer.lua @@ -1,4 +1,4 @@ -function trim(s) +local function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end @@ -107,6 +107,7 @@ local function log_total_time() local history = require("toml").parse(file:read("*a")) file:close() + print("Time for:", filename) for _, day in pairs(history) do for user, time in pairs(day) do @@ -144,53 +145,81 @@ local function focus_lost() }) end +local function next_lowest_time_file() + local file_path = filename -local function persist() - local TOML = require("toml") - local today = os.date("%y-%m-%d", os.time()) - local table = {} + for _ = 1, 10, 1 do + local f = io.open(file_path) - local file = io.open(filename, "r") - -- if file exists read - if file ~= nil then - table = TOML.parse(file:read("*a")) - file:close() - end - - -- write time to table - if table[today] ~= nil and table[today][username] ~= nil then - table[today][username] = table[today][username] + summ_time() - else - if table[today] == nil then - table[today] = {} + if f ~= nil then + return file_path end - table[today][username] = summ_time() + + file_path = "../" .. file_path end - -- write table to file - file = io.open(filename, "w") - if file == nil then - error("can't write to .timer file") - return + return "" +end + +local function persist(force) + return function() + local TOML = require("toml") + local today = os.date("%y-%m-%d", os.time()) + local table = {} + local file_path = filename + + local file = io.open(file_path, "r") + -- if file exists read + if file ~= nil then + table = TOML.parse(file:read("*a")) + file:close() + else + if not force then + file_path = next_lowest_time_file() + if file_path == "" then + print("No save file found. To create a new save file run :TimerSave") + return + end + print("Save file found:", file_path) + end + end + + -- write time to table + if table[today] ~= nil and table[today][username] ~= nil then + table[today][username] = table[today][username] + summ_time() + else + if table[today] == nil then + table[today] = {} + end + table[today][username] = summ_time() + end + + -- write table to file + file = io.open(file_path, "w") + if file == nil then + error("can't write to .timer file") + return + end + + local tml = TOML.encode(table) + + file:write("## dates and their corresponding seconds been here :)\n", tml, "\n") + file:close() + + print("Timer saved successfully :-)") + + --reset timer + clean_to = 1 + focus_events = {} + focus_gained() end - - local tml = TOML.encode(table) - print(tml) - - file:write("## dates and their corresponding seconds been here :)\n", tml, "\n") - file:close() - - --reset timer - clean_to = 1 - focus_events = {} - focus_gained() end local function setup() vim.api.nvim_create_autocmd("VimEnter", { group = augroup, desc = "Start Timer", once = true, callback = focus_gained }) vim.api.nvim_create_autocmd("ExitPre", - { group = augroup, desc = "Persist timer", once = true, callback = persist }) + { group = augroup, desc = "Persist timer", once = true, callback = persist(false) }) vim.api.nvim_create_autocmd("FocusGained", { group = augroup, callback = focus_gained }) vim.api.nvim_create_autocmd("FocusLost", { group = augroup, callback = focus_lost }) @@ -206,7 +235,7 @@ local function setup() ) vim.api.nvim_create_user_command( 'TimerSave', - persist, + persist(true), { nargs = 0 } -- No arguments for this command (you can configure this later) ) end