summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-08-08 20:34:22 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-08-08 20:34:22 +0200
commit21496e32695744d4679fc11105352c61522ce601 (patch)
treea4bda5abe657f25f5d9054a055d5cdfe93ca64f1 /src/administration.cpp
parent550b3bf614d8eeb116cceadf3e180ca7a4490976 (diff)
contact crud
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp65
1 files changed, 58 insertions, 7 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index 94b1910..052f007 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -1,18 +1,19 @@
#include "administration.hpp"
-#include <stdio.h>
+
administration g_administration;
-void init_administration_obj()
+void administration_create()
{
list_init(&g_administration.contacts);
+ strncpy(g_administration.path, "[unsaved project]", sizeof(g_administration.path)); // @localize
}
-void destroy_administration_obj()
+void administration_destroy()
{
list_destroy(&g_administration.contacts);
}
-bool create_contact(contact data)
+bool administration_create_contact(contact data)
{
contact* new_contact = (contact*)malloc(sizeof(contact));
memcpy((void*)new_contact, (void*)&data, sizeof(contact));
@@ -23,7 +24,7 @@ bool create_contact(contact data)
return true;
}
-bool update_contact(contact data)
+bool administration_update_contact(contact data)
{
list_iterator_start(&g_administration.contacts);
while (list_iterator_hasnext(&g_administration.contacts)) {
@@ -31,6 +32,24 @@ bool update_contact(contact data)
if (strcmp(c->id, data.id) == 0) {
memcpy(c, &data, sizeof(data));
+ list_iterator_stop(&g_administration.contacts);
+ return true;
+ }
+ }
+ list_iterator_stop(&g_administration.contacts);
+
+ return false;
+}
+
+bool administration_remove_contact(contact data)
+{
+ list_iterator_start(&g_administration.contacts);
+ while (list_iterator_hasnext(&g_administration.contacts)) {
+ contact* c = (contact *)list_iterator_next(&g_administration.contacts);
+
+ if (strcmp(c->id, data.id) == 0) {
+ list_iterator_stop(&g_administration.contacts);
+ list_delete(&g_administration.contacts, c);
return true;
}
}
@@ -39,7 +58,39 @@ bool update_contact(contact data)
return false;
}
-void remove_contact(int index)
+s32 administration_create_id()
+{
+ return g_administration.next_id;
+}
+
+u32 administration_get_contact_count()
+{
+ return list_size(&g_administration.contacts);
+}
+
+u32 administration_get_contacts(u32 page_index, u32 page_size, contact* buffer)
+{
+ assert(buffer);
+
+ u32 write_cursor = 0;
+
+ u32 read_start = page_index * page_size;
+
+ list_iterator_start(&g_administration.contacts);
+ while (list_iterator_hasnext(&g_administration.contacts)) {
+ contact c = *(contact *)list_iterator_next(&g_administration.contacts);
+
+ if (g_administration.contacts.iter_pos <= read_start) continue;
+
+ buffer[write_cursor++] = c;
+ if (write_cursor >= page_size) break;
+ }
+ list_iterator_stop(&g_administration.contacts);
+
+ return write_cursor;
+}
+
+char* administration_get_file_path()
{
- list_delete_at(&g_administration.contacts, index);
+ return g_administration.path;
} \ No newline at end of file