summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-09-12 16:35:40 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-09-12 16:35:40 +0200
commitabf01f657d068aa6b22ab962cbe01b88f3b5f7ea (patch)
tree2a354a6112ef0b9ef6975613f12865831f5d4a69 /src
parentd174d803de2296061731c3698980a6a51e6fc3ef (diff)
event logging
Diffstat (limited to 'src')
-rw-r--r--src/administration.cpp11
-rw-r--r--src/administration_writer.cpp24
-rw-r--r--src/log.cpp33
-rw-r--r--src/main.cpp4
-rw-r--r--src/ui/ui_expenses.cpp10
-rw-r--r--src/ui/ui_invoices.cpp9
-rw-r--r--src/ui/ui_log.cpp20
-rw-r--r--src/ui/ui_main.cpp11
8 files changed, 110 insertions, 12 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index bbc9a65..ab72647 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -6,6 +6,7 @@
#include <time.h>
#include <stdio.h>
+#include "log.hpp"
#include "strops.hpp"
#include "administration.hpp"
#include "administration_writer.hpp"
@@ -395,6 +396,8 @@ static s32 administration_create_sequence_number()
// =======================
void administration_create()
{
+ STOPWATCH_START;
+
g_administration.next_id = 1;
g_administration.next_sequence_number = 1;
@@ -412,8 +415,8 @@ void administration_create()
administration_create_debug_data();
//administration_writer_save_all_async();
- income_statement* statement = (income_statement*)malloc(sizeof(income_statement));
- administration_create_income_statement(statement);
+
+ log_add("Setup took %.3fms.", STOPWATCH_TIME);
}
static void administration_destroy_list(list_t *list)
@@ -520,6 +523,8 @@ static void administration_debug_print_income_statement(income_statement* statem
void administration_create_income_statement(income_statement* statement)
{
+ STOPWATCH_START;
+
assert(statement);
statement->quarter_count = 0;
@@ -702,6 +707,8 @@ void administration_create_income_statement(income_statement* statement)
//administration_debug_print_income_statement(statement);
free(invoice_buffer);
+
+ log_add("Created income statement in %.3fms.", STOPWATCH_TIME);
}
char* administration_file_path_get()
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index c97a828..6a0aba3 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -170,6 +170,8 @@ static char* administration_writer_get_eas_scheme_for_address(address addr)
bool administration_writer_save_invoice_blocking(invoice inv)
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 150000; // Ballpark file content size.
char* file_content = (char*)malloc(buf_length);
@@ -312,8 +314,7 @@ bool administration_writer_save_invoice_blocking(invoice inv)
free(file_content);
- log_add(ImGui::GetTime(), "Saved file.");
-
+ log_add("Saved invoice '%s' in %.3fms.", inv.sequential_number, STOPWATCH_TIME);
return result;
}
@@ -339,6 +340,8 @@ static bool administration_writer_save_all_invoices_blocking()
/////////////////////////////
bool administration_writer_save_project_blocking(project project)
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 0;
char* file_content = administration_writer_copy_template(project_save_template, &buf_length);
@@ -358,6 +361,8 @@ bool administration_writer_save_project_blocking(project project)
else if (!administration_writer_write_to_zip(final_path, file_content, final_length)) result = 0;
free(file_content);
+
+ log_add("Saved project '%s' in %.3fms.", project.description, STOPWATCH_TIME);
return result;
}
@@ -383,6 +388,8 @@ static bool administration_writer_save_all_projects_blocking()
/////////////////////////////
bool administration_writer_save_cost_center_blocking(cost_center cost)
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 0;
char* file_content = administration_writer_copy_template(costcenter_save_template, &buf_length);
@@ -400,6 +407,8 @@ bool administration_writer_save_cost_center_blocking(cost_center cost)
else if (!administration_writer_write_to_zip(final_path, file_content, final_length)) result = 0;
free(file_content);
+
+ log_add("Saved cost center '%s' in %.3fms.", cost.code, STOPWATCH_TIME);
return result;
}
@@ -425,6 +434,8 @@ static bool administration_writer_save_all_cost_centers_blocking()
/////////////////////////////
bool administration_writer_save_tax_bracket_blocking(country_tax_bracket bracket)
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 0;
char* file_content = administration_writer_copy_template(taxbracket_save_template, &buf_length);
@@ -443,6 +454,8 @@ bool administration_writer_save_tax_bracket_blocking(country_tax_bracket bracket
else if (!administration_writer_write_to_zip(final_path, file_content, final_length)) result = 0;
free(file_content);
+
+ log_add("Saved tax bracket '%s/%.1f' in %.3fms.", bracket.country_code, bracket.rate, STOPWATCH_TIME);
return result;
}
@@ -470,6 +483,8 @@ static bool administration_writer_save_all_tax_brackets_blocking()
/////////////////////////////
bool administration_writer_save_contact_blocking(contact c)
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 0;
char* file_content = administration_writer_copy_template(contact_save_template, &buf_length);
@@ -497,6 +512,8 @@ bool administration_writer_save_contact_blocking(contact c)
else if (!administration_writer_write_to_zip(final_path, file_content, final_length)) result = 0;
free(file_content);
+
+ log_add("Saved contact '%s' in %.3fms.", c.name, STOPWATCH_TIME);
return result;
}
@@ -528,6 +545,8 @@ static bool administration_writer_save_all_contacts_blocking()
/////////////////////////////
bool administration_writer_save_all_administration_info_blocking()
{
+ STOPWATCH_START;
+
bool result = 1;
int buf_length = 0;
char* file_content = administration_writer_copy_template(administration_save_template, &buf_length);
@@ -543,6 +562,7 @@ bool administration_writer_save_all_administration_info_blocking()
free(file_content);
+ log_add("Saved administration info in %.3fms.", STOPWATCH_TIME);
return result;
}
diff --git a/src/log.cpp b/src/log.cpp
index 960ee85..058b594 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -1,24 +1,47 @@
#include <stdio.h>
#include <stdarg.h>
-
+#include <time.h>
+#include "timer.h"
#include "log.hpp"
log g_log = {0};
-void log_add(double timestamp, const char* fmt, ...)
+log* get_log()
+{
+ return &g_log;
+}
+
+void log_add(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
vsnprintf(g_log.history[g_log.write_cursor], MAX_LEN_LOG_TXT, fmt, args);
va_end(args);
+ tick_t ms_since_epoch = timer_system();
+ char time_buf[50];
+ time_t seconds = (time_t)(ms_since_epoch / 1000);
+ int milliseconds = (int)(ms_since_epoch % 1000);
+
+ // Convert to local time
+ struct tm tm_time;
+ #if defined(_WIN32)
+ localtime_s(&tm_time, &seconds);
+ #else
+ localtime_r(&seconds, &tm_time);
+ #endif
+
+ snprintf(time_buf, 50, "%02d:%02d %02d.%03d",
+ tm_time.tm_hour,
+ tm_time.tm_min,
+ tm_time.tm_sec,
+ milliseconds);
+
char tmp[MAX_LEN_LOG_TXT];
- snprintf(tmp, MAX_LEN_LOG_TXT, "[%.3f] %s", timestamp, g_log.history[g_log.write_cursor]);
+ snprintf(tmp, MAX_LEN_LOG_TXT, "[%s] %s", time_buf, g_log.history[g_log.write_cursor]);
tmp[MAX_LEN_LOG_TXT-1] = 0;
memcpy(g_log.history[g_log.write_cursor], tmp, MAX_LEN_LOG_TXT);
- printf(g_log.history[g_log.write_cursor]);
-
g_log.write_cursor++;
if (g_log.write_cursor >= MAX_LEN_LOG_HISTORY) g_log.write_cursor = 0;
diff --git a/src/main.cpp b/src/main.cpp
index 289ca57..d579a19 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3,7 +3,7 @@
#include "imgui_impl_dx11.h"
#include <d3d11.h>
#include <tchar.h>
-
+#include "timer.h"
#include "ui.hpp"
#include "administration.hpp"
#include "administration_writer.hpp"
@@ -89,6 +89,7 @@ int main()
ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
+ timer_lib_initialize();
administration_writer_create();
administration_create();
@@ -148,6 +149,7 @@ int main()
administration_destroy();
administration_writer_destroy();
+ timer_lib_shutdown();
// Cleanup
ImGui_ImplDX11_Shutdown();
diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp
index eb8d8c1..bb23ba9 100644
--- a/src/ui/ui_expenses.cpp
+++ b/src/ui/ui_expenses.cpp
@@ -438,7 +438,15 @@ static void ui_draw_expenses_list()
ImGui::Separator();
if (ImGui::Button(localize("form.yes"), ImVec2(120, 0))) {
- administration_invoice_remove(&selected_for_removal);
+ if (administration_invoice_remove(&selected_for_removal)) {
+ if (administration_writer_delete_entry(selected_for_removal.id)) {
+ ui_set_status(localize("status.saved"));
+ }
+ else {
+ ui_set_status_error(localize("status.saveFailed"));
+ }
+ }
+
ImGui::CloseCurrentPopup();
}
ImGui::SameLine();
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index fd748c8..d64147f 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -471,7 +471,14 @@ static void ui_draw_invoices_list()
ImGui::Separator();
if (ImGui::Button(localize("form.yes"), ImVec2(120, 0))) {
- administration_invoice_remove(&selected_for_removal);
+ if (administration_invoice_remove(&selected_for_removal)) {
+ if (administration_writer_delete_entry(selected_for_removal.id)) {
+ ui_set_status(localize("status.saved"));
+ }
+ else {
+ ui_set_status_error(localize("status.saveFailed"));
+ }
+ }
ImGui::CloseCurrentPopup();
}
ImGui::SameLine();
diff --git a/src/ui/ui_log.cpp b/src/ui/ui_log.cpp
new file mode 100644
index 0000000..08a0a72
--- /dev/null
+++ b/src/ui/ui_log.cpp
@@ -0,0 +1,20 @@
+#include <stdio.h>
+
+#include "ui.hpp"
+#include "imgui.h"
+#include "log.hpp"
+#include "locales.hpp"
+
+void ui_draw_log()
+{
+ log* l = get_log();
+
+ for (int i = (int)l->history_length-1; i >= 0; i--)
+ {
+ u32 cursor = l->write_cursor - l->history_length + i;
+ if (cursor < 0) {
+ cursor = (l->write_cursor + i) % MAX_LEN_LOG_HISTORY;
+ }
+ ImGui::Text(l->history[cursor]);
+ }
+} \ No newline at end of file
diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp
index 9ff965d..61c4784 100644
--- a/src/ui/ui_main.cpp
+++ b/src/ui/ui_main.cpp
@@ -12,6 +12,7 @@ typedef enum
REPORT_TAX = 4,
PROJECTS = 5,
SETTINGS = 6,
+ LOG = 7,
END
} dashboard_view_state;
@@ -25,6 +26,7 @@ void (*drawcalls[dashboard_view_state::END])(void) = {
0,
ui_draw_projects,
ui_draw_settings,
+ ui_draw_log,
};
void (*setupcalls[dashboard_view_state::END])(void) = {
@@ -35,6 +37,7 @@ void (*setupcalls[dashboard_view_state::END])(void) = {
0,
ui_setup_projects,
ui_setup_settings,
+ 0,
};
void (*destroycalls[dashboard_view_state::END])(void) = {
@@ -45,6 +48,7 @@ void (*destroycalls[dashboard_view_state::END])(void) = {
0,
0,
ui_destroy_settings,
+ 0,
};
static void set_dashboard_state(dashboard_view_state state)
@@ -68,6 +72,13 @@ void ui_draw_main()
ImGui::EndMenu();
}
+
+ if (ImGui::BeginMenu("Help"))
+ {
+ if (ImGui::MenuItem("Event Log")) { set_dashboard_state(dashboard_view_state::LOG); }
+
+ ImGui::EndMenu();
+ }
ImGui::EndMainMenuBar();
}