diff -r 8470d5aac30e -r 0bcf3d69b37a libidav/jmapsession.c --- a/libidav/jmapsession.c Thu Jul 09 22:07:33 2026 +0200 +++ b/libidav/jmapsession.c Fri Jul 10 17:56:21 2026 +0200 @@ -78,16 +78,33 @@ CxJsonValue *uploadUrl = cxJsonObjGet(sessionValue, "uploadUrl"); if(cxJsonIsString(username)) { - sn->username = cx_strdup_a(mp->allocator, username->string.ptr).ptr; + sn->username = cx_strdup_a(mp->allocator, username->string).ptr; } if(cxJsonIsString(apiUrl)) { - sn->apiUrl = cx_strdup_a(mp->allocator, apiUrl->string.ptr).ptr; + sn->apiUrl = cx_strdup_a(mp->allocator, apiUrl->string).ptr; } if(cxJsonIsString(downloadUrl)) { - sn->downloadUrl = cx_strdup_a(mp->allocator, downloadUrl->string.ptr).ptr; + sn->downloadUrl = cx_strdup_a(mp->allocator, downloadUrl->string).ptr; } if(cxJsonIsString(uploadUrl)) { - sn->uploadUrl = cx_strdup_a(mp->allocator, uploadUrl->string.ptr).ptr; + sn->uploadUrl = cx_strdup_a(mp->allocator, uploadUrl->string).ptr; + } + + // primary accounts + CxJsonValue *primary_accounts = cxJsonObjGet(sessionValue, "primaryAccounts"); + if(cxJsonIsObject(primary_accounts)) { + CxJsonValue *pm_mail = cxJsonObjGet(primary_accounts, "urn:ietf:params:jmap:mail"); + CxJsonValue *pm_contacts = cxJsonObjGet(primary_accounts, "urn:ietf:params:jmap:contacts"); + CxJsonValue *pm_calendars = cxJsonObjGet(primary_accounts, "urn:ietf:params:jmap:calendars"); + if(cxJsonIsString(pm_mail)) { + sn->primary_accounts.mail = cx_strdup_a(mp->allocator, pm_mail->string).ptr; + } + if(cxJsonIsString(pm_contacts)) { + sn->primary_accounts.contacts = cx_strdup_a(mp->allocator, pm_contacts->string).ptr; + } + if(cxJsonIsString(pm_calendars)) { + sn->primary_accounts.calendars = cx_strdup_a(mp->allocator, pm_calendars->string).ptr; + } } return sn;