working on VCARD parsing
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user