Sat, 11 Jul 2026 20:57:23 +0200
add jmap_mailbox_get_mails
|
927
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2026 Olaf Wintermann. All rights reserved. |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include "jmap_mail.h" |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include "jmap_methods.h" |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | void jmap_mailbox_free(JMAPMailBox *mailbox) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | const CxAllocator *a = mailbox->session->mp->allocator; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | cxFree(a, mailbox->id); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | cxFree(a, mailbox->parent_id); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | cxFree(a, mailbox->name); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | cxFree(a, mailbox->role); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | cxFree(a, mailbox); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | CxList* jmap_mailbox_get_list(JMAPSession *sn) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | if(!sn->primary_accounts.mail) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | return NULL; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | const CxAllocator *a = sn->mp->allocator; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | CxBuffer *request = jm_mailbox_get_request(cx_str(sn->primary_accounts.mail)); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | //printf("%.*s\n", (int)request->size, request->space); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | CxJsonValue *response = jm_do_api_request(sn, request); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | cxBufferFree(request); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | if(!response) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | return NULL; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | CxJsonValue *mailbox_list = NULL; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | // check response and get mailbox response value |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | if(cxJsonIsObject(response)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | CxJsonValue *method_responses = cxJsonObjGet(response, "methodResponses"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | if(cxJsonIsArray(method_responses) && method_responses->array.size > 0) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | CxJsonValue *method_response0 = method_responses->array.data[0]; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | if(cxJsonIsArray(method_response0) && method_response0->array.size > 1) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | CxJsonValue *method = method_response0->array.data[0]; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | if(cxJsonIsString(method) && !cx_strcmp(method->string, "Mailbox/get")) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | CxJsonValue *mailbox_response_obj = method_response0->array.data[1]; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | if(cxJsonIsObject(mailbox_response_obj)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | mailbox_list = cxJsonObjGet(mailbox_response_obj, "list"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | if(!mailbox_list) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | cxJsonValueFree(response); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | return NULL; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | CxList *list = cxArrayListCreate(a, CX_STORE_POINTERS, 16); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | list->collection.simple_destructor = (cx_destructor_func)jmap_mailbox_free; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | int error = 0; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | for(size_t i=0;i<mailbox_list->array.size;i++) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | CxJsonValue *mailbox = mailbox_list->array.data[i]; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | if(!cxJsonIsObject(mailbox)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | error = 1; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | break; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | CxJsonValue *id = cxJsonObjGet(mailbox, "id"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | CxJsonValue *name = cxJsonObjGet(mailbox, "name"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | CxJsonValue *parent_id = cxJsonObjGet(mailbox, "parentId"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | CxJsonValue *role = cxJsonObjGet(mailbox, "role"); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | if(!cxJsonIsString(id)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | error = 1; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | break; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | JMAPMailBox *mbox = cxZalloc(a, sizeof(JMAPMailBox)); |
|
928
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
100 | mbox->session = sn; |
|
927
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | mbox->id = cx_strdup_a(a, id->string).ptr; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | if(cxJsonIsString(name)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | mbox->name = cx_strdup_a(a, name->string).ptr; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | if(cxJsonIsString(parent_id)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | mbox->parent_id = cx_strdup_a(a, parent_id->string).ptr; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | if(cxJsonIsString(role)) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | mbox->role = cx_strdup_a(a, role->string).ptr; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
112 | cxListAdd(list, mbox); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | cxJsonValueFree(response); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | if(error) { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | cxListFree(list); |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | return NULL; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | } else { |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | return list; |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
121 | } |
|
0bcf3d69b37a
add jmap_mailbox_get_list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
122 | } |
|
928
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
123 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
124 | CxList* jmap_mailbox_get_mails(JMAPMailBox *mailbox) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
125 | JMAPSession *sn = mailbox->session; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
126 | const CxAllocator *a = sn->mp->allocator; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
127 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
128 | CxBuffer *request = jm_email_get_request(cx_str(mailbox->id)); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
129 | //printf("%.*s\n", (int)request->size, request->space); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
130 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
131 | CxJsonValue *response = jm_do_api_request(sn, request); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
132 | cxBufferFree(request); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
133 | if(!response) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
134 | return NULL; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
135 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
136 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
137 | CxJsonValue *mail_list = NULL; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
138 | if(cxJsonIsObject(response)) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
139 | CxJsonValue *method_responses = cxJsonObjGet(response, "methodResponses"); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
140 | if(cxJsonIsArray(method_responses) && method_responses->array.size > 1) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
141 | CxJsonValue *method_response1 = method_responses->array.data[1]; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
142 | if(cxJsonIsArray(method_response1) && method_response1->array.size > 1) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
143 | CxJsonValue *method = method_response1->array.data[0]; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
144 | if(cxJsonIsString(method) && !cx_strcmp(method->string, "Email/get")) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
145 | CxJsonValue *mail_get_response_obj = method_response1->array.data[1]; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
146 | if(cxJsonIsObject(mail_get_response_obj)) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
147 | mail_list = cxJsonObjGet(mail_get_response_obj, "list"); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
148 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
149 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
150 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
151 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
152 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
153 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
154 | if(!mail_list) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
155 | cxJsonValueFree(response); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
156 | return NULL; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
157 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
158 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
159 | CxList *list = cxArrayListCreate(a, CX_STORE_POINTERS, 16); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
160 | list->collection.simple_destructor = (cx_destructor_func)jmap_mailbox_free; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
161 | int error = 0; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
162 | for(size_t i=0;i<mail_list->array.size;i++) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
163 | CxJsonValue *mail = mail_list->array.data[i]; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
164 | if(!cxJsonIsObject(mail)) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
165 | error = 1; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
166 | break; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
167 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
168 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
169 | CxJsonValue *id = cxJsonObjGet(mail, "id"); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
170 | CxJsonValue *subject = cxJsonObjGet(mail, "subject"); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
171 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
172 | if(!cxJsonIsString(id)) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
173 | error = 1; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
174 | break; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
175 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
176 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
177 | JMAPMail *email = cxZalloc(a, sizeof(JMAPMail)); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
178 | email->session = sn; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
179 | email->id = cx_strdup_a(a, id->string).ptr; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
180 | if(cxJsonIsString(subject)) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
181 | email->subject = cx_strdup_a(a, subject->string).ptr; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
182 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
183 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
184 | cxListAdd(list, email); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
185 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
186 | |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
187 | cxJsonValueFree(response); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
188 | if(error) { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
189 | cxListFree(list); |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
190 | return NULL; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
191 | } else { |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
192 | return list; |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
193 | } |
|
57167625bfdd
add jmap_mailbox_get_mails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
927
diff
changeset
|
194 | } |