diff --git a/frontend/src/routes/contact/Index.svelte b/frontend/src/routes/contact/Index.svelte index 9dcd1ad..44512d6 100644 --- a/frontend/src/routes/contact/Index.svelte +++ b/frontend/src/routes/contact/Index.svelte @@ -4,7 +4,55 @@ import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte'; - let contacts = $state({}) + let contacts = $state(null) + + function parseAdr(key,val){ + var parts = val.split(';'); + var adr = { + postbox : parts[0], + ext : parts[1], + street : parts[2], + locality : parts[3], + region : parts[4], + code : parts[5], + country : parts[6] + } + parts = key.split(';'); + for (let part of parts){ + let inner = part.split('='); + if (inner.length<2) continue; + const k = inner[0]; + const v = inner.slice(1).join('='); + adr[k] = v; + } + return adr; + } + + function parse(data){ + var code = data.vcard; + const lines = code.split("\n"); + let unprocessed = null; + var o = {}; + for (var line of lines){ + if (unprocessed = null) unprocessed = line; + if (line.startsWith(' ')) { // extend line + unprocessed += line.substring(1); + } else { + // process complete line + const parts = line.split(':'); + var prefix = parts[0]; + var val = parts.slice(1).join(':'); + var key = prefix.split(';')[0].toUpperCase(); + switch (key) { + case "ADR": o[key] = parseAdr(prefix,val); break; + default: + if (key) o[prefix]=val; + } + unprocessed = line; + } + } + console.log(o); + } async function load(){ const url = api('contact/list'); @@ -12,7 +60,8 @@ if (res.ok){ yikes(); var data = await res.json(); - console.log(data); + contacts = Object.values(data).map(parse).sort((a,b) => a.FN.localeCompare(b.FN)); + console.log(contacts); } else { error(res); }