summaryrefslogtreecommitdiff
path: root/src/administration_writer.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-09-13 08:54:05 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-09-13 08:54:05 +0200
commitfb1ae39f1abe0dd0335489451e09a24e2336e606 (patch)
tree8bd482a824c11b67581679e6a445a39e11b607e7 /src/administration_writer.cpp
parent5159a53e58cd4b3652ce6255856d50e15c275f80 (diff)
handle file saving through administration callbacks
Diffstat (limited to 'src/administration_writer.cpp')
-rw-r--r--src/administration_writer.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index 3dd6e3f..70a18bc 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -9,12 +9,62 @@
#include "ui.hpp"
#include "strops.hpp"
#include "administration_writer.hpp"
+#include "tinyfiledialogs.h"
#include "file_templates.hpp"
mtx_t _save_file_mutex;
+bool administration_writer_save_project_blocking(project project);
+bool administration_writer_save_cost_center_blocking(cost_center cost);
+bool administration_writer_save_tax_bracket_blocking(country_tax_bracket bracket);
+bool administration_writer_save_contact_blocking(contact c);
+bool administration_writer_save_invoice_blocking(invoice inv);
+
+static void on_administration_data_changed()
+{
+ administration_writer_save_all_administration_info_blocking();
+}
+
+static void on_administration_data_deleted(char id[MAX_LEN_ID])
+{
+ administration_writer_delete_entry(id);
+}
+
+static void on_invoice_changed(invoice* invoice)
+{
+ administration_writer_save_invoice_blocking(*invoice);
+}
+
+static void on_contact_changed_changed(contact* contact)
+{
+ administration_writer_save_contact_blocking(*contact);
+}
+
+static void on_taxbracket_changed_changed(country_tax_bracket* bracket)
+{
+ administration_writer_save_tax_bracket_blocking(*bracket);
+}
+
+static void on_costcenter_changed_changed(cost_center* cost_center)
+{
+ administration_writer_save_cost_center_blocking(*cost_center);
+}
+
+static void on_project_changed_changed(project* project)
+{
+ administration_writer_save_project_blocking(*project);
+}
+
bool administration_writer_create()
{
+ administration_set_data_changed_event_callback(on_administration_data_changed);
+ administration_set_data_deleted_event_callback(on_administration_data_deleted);
+ administration_set_invoice_changed_event_callback(on_invoice_changed);
+ administration_set_contact_changed_event_callback(on_contact_changed_changed);
+ administration_set_taxbracket_changed_event_callback(on_taxbracket_changed_changed);
+ administration_set_costcenter_changed_event_callback(on_costcenter_changed_changed);
+ administration_set_project_changed_event_callback(on_project_changed_changed);
+
return mtx_init(&_save_file_mutex, mtx_plain) == thrd_success;
}
@@ -54,6 +104,8 @@ static bool administration_writer_entry_exists(char* entry)
bool administration_writer_delete_entry(char* id)
{
+ STOPWATCH_START;
+
bool result = 1;
struct zip_t *zip_write = zip_open(administration_file_path_get(), 0, 'a');
if (!zip_write) zip_write = zip_open(administration_file_path_get(), 0, 'w');
@@ -64,6 +116,9 @@ bool administration_writer_delete_entry(char* id)
char* indices[1] = {final_path};
if (zip_entries_delete(zip_write, indices, 1) < 0) result = 0;
zip_close(zip_write);
+
+ log_add("Deleted entry '%s' in %.3fms.", id, STOPWATCH_TIME);
+
return result;
}