diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-13 08:54:05 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-13 08:54:05 +0200 |
| commit | fb1ae39f1abe0dd0335489451e09a24e2336e606 (patch) | |
| tree | 8bd482a824c11b67581679e6a445a39e11b607e7 /src/administration_writer.cpp | |
| parent | 5159a53e58cd4b3652ce6255856d50e15c275f80 (diff) | |
handle file saving through administration callbacks
Diffstat (limited to 'src/administration_writer.cpp')
| -rw-r--r-- | src/administration_writer.cpp | 55 |
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; } |
