Browse Source

working on VCARD parsing

module/contact
Stephan Richter 4 weeks ago
parent
commit
e39ae982f4
  1. 53
      frontend/src/routes/contact/Index.svelte

53
frontend/src/routes/contact/Index.svelte

@ -4,7 +4,55 @@
import { error, yikes } from '../../warn.svelte'; import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.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(){ async function load(){
const url = api('contact/list'); const url = api('contact/list');
@ -12,7 +60,8 @@
if (res.ok){ if (res.ok){
yikes(); yikes();
var data = await res.json(); 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 { } else {
error(res); error(res);
} }

Loading…
Cancel
Save