|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|