X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=pages%2Fcards.sh;h=538146d83749fdc2b1c24d403c1a69e51487b090;hp=a90981c6a16d02ec265bc80653aed9b29b90eca4;hb=90288ab07bb1ec83a91581fadc674a87a250a853;hpb=d40eb749c3b9766eb85d843e712f1b86543232d2 diff --git a/pages/cards.sh b/pages/cards.sh index a90981c..538146d 100755 --- a/pages/cards.sh +++ b/pages/cards.sh @@ -64,7 +64,26 @@ list_categories() { | sed -r '/^[\t ]*$/d' } -listcards() { +listcards_order(){ + while read file; do + case "${_GET[order]}" in + firstname) + printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")" "$file" + ;; + lastname) + printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$file")" "$file" + ;; + bdate) + printf '%s\t%s\n' "$(sed -rn 's:^BDAY(;.+)*\:(.*)$:\2:p' "$file")" "$file" + ;; + *) printf 'x\t%s\n' "$file" + ;; + esac + done \ + | sort -u |sed -r 's;^.*\t;;' +} + +listcards_filter(){ filterex='s;^([^\n]+)\n.*$;\1;p' printf '%s\n' "${_GET[filter]}" |tr '^' '\n' \ | sed -r 's;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\\\&;g' \ @@ -80,27 +99,24 @@ listcards() { filterex='/(^|\n)'"${expr}"'/I{'"${filterex}"'}' done - for file in "${_DATA}/vcard/"*.vcf; do - case "${_GET[order]}" in - firstname) - printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")" "$file" - ;; - lastname) - printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$file")" "$file" - ;; - bdate) - printf '%s\t%s\n' "$(sed -rn 's:^BDAY(;.+)*\:(.*)$:\2:p' "$file")" "$file" - ;; - *) printf 'x\t%s\n' "$file" - ;; - esac - done \ - | sort -u |sed -r 's;^.*\t;;' \ - | while read n; do + while read n; do { printf '%s\n' "$n"; cat "$n"; } \ - | sed -rn ':X;N;$!bX; {'"$filterex"'}' - done \ - | sed -r 's;^(.*/)*;;;' + | sed -En ':X;N;$!bX; {'"$filterex"'}' + done + +} + +listcards() { + printf %s\\n "${_DATA}/vcard/"*.vcf \ + | listcards_filter \ + | listcards_order \ + | sed -E 's;^(.*/)*;;;' +} + +listcards_mail() { + printf %s\\n "${_DATA}/vcard/"*.vcf \ + | listcards_filter \ + | xargs -r -d\\n sed -En 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p' } vcf_parse() {