diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-12 14:13:32 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-12 14:13:32 +0200 |
| commit | 035bf5c318515406912678716e059b8e8546ce02 (patch) | |
| tree | 0e70f7b1bbdf7aa149cd856306806565950667e1 /src/administration.cpp | |
| parent | b6990df3d783da0a09e8b6a825d9ebeb7314466a (diff) | |
contact search filter
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 6e6cfb4..a6f7187 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -882,9 +882,20 @@ a_err administration::contact_remove(contact data) return A_ERR_NOT_FOUND; } -u32 administration::contact_count() +u32 administration::contact_count(contact_filter* filter) { - return list_size(&g_administration.contacts); + if (!filter) return list_size(&g_administration.contacts); + + u32 count = 0; + list_iterator_start(&g_administration.contacts); + while (list_iterator_hasnext(&g_administration.contacts)) { + contact c = *(contact *)list_iterator_next(&g_administration.contacts); + + if (!strops::contains(c.name, filter->name_filter)) continue; + count++; + } + list_iterator_stop(&g_administration.contacts); + return count; } u32 administration::contact_get_all(contact* buffer) @@ -901,19 +912,22 @@ u32 administration::contact_get_all(contact* buffer) return write_cursor; } -u32 administration::contact_get_partial_list(u32 page_index, u32 page_size, contact* buffer) +u32 administration::contact_get_partial_list(u32 page_index, u32 page_size, contact* buffer, contact_filter* filter) { assert(buffer); u32 write_cursor = 0; u32 read_start = page_index * page_size; + u32 read_cursor = 0; 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; + if (!strops::contains(c.name, filter->name_filter)) continue; + + if (++read_cursor <= read_start) continue; buffer[write_cursor++] = c; if (write_cursor >= page_size) break; |
