#!/bin/bash set -euo pipefail wkdir= debug= function cleanup () { [ -z "$wkdir" -a -z "$debug" ] || rm -fr "$wkdir" } trap 'cleanup' EXIT if [ "$1" = "-d" ]; then debug=1 shift fi input_file=$(readlink -f "$1") wkdir=$(mktemp -d) cd "$wkdir" # Generate one JSON file per table into the temporary directory jq '[map(select(has("recipient_addresses")|not))[]]' "$input_file" >sms.json jq '[map(select(has("recipient_addresses")))[] | del(.parts, .recipient_addresses, .sender_address)]' "$input_file" >mms.json jq '[map(select(has("recipient_addresses")))[].sender_address]' "$input_file" >sender.json jq '[map(select(has("recipient_addresses")))[].recipient_addresses[]]' "$input_file" >recipient.json jq '[map(select(has("parts")))[].parts[]]' "$input_file" >part.json # Tables creation sms_keys=$(jq -r '[.[] | keys[]] | unique[]' sms.json) mms_keys=$(jq -r '[.[] | keys[]] | unique[]' mms.json) address_keys=$(jq -r '[.[] | keys[]] | unique[]' recipient.json) part_keys=$(jq -r '[.[] | keys[]] | unique[]' part.json) function create_table () { name="$1" shift echo -n "CREATE TABLE $name(" echo -n $(echo "$@" | sed 's/ / TEXT,/g;s/$/ TEXT/') echo ");" } create_table sms $sms_keys create_table mms $mms_keys create_table sender $address_keys create_table recipient $address_keys create_table part $part_keys savepath # Populate jq -r '.[] | to_entries | "INSERT INTO sms (\([.[].key] | join(", "))) VALUES (\"\([.[].value | gsub("\""; "\"\"")] | join("\", \""))\");"' sms.json jq -r '.[] | to_entries | "INSERT INTO mms (\([.[].key] | join(", "))) VALUES (\"\([.[].value | gsub("\""; "\"\"")] | join("\", \""))\");"' mms.json jq -r '.[] | to_entries | "INSERT INTO sender (\([.[].key] | join(", "))) VALUES (\"\([.[].value | gsub("\""; "\"\"")] | join("\", \""))\");"' sender.json jq -r '.[] | to_entries | "INSERT INTO recipient (\([.[].key] | join(", "))) VALUES (\"\([.[].value | gsub("\""; "\"\"")] | join("\", \""))\");"' recipient.json jq -r '.[] | to_entries | "INSERT INTO part (\([.[].key] | join(", "))) VALUES (\"\([.[].value | gsub("\""; "\"\"")] | join("\", \""))\");"' part.json # Fix MMS out sender echo "UPDATE sender set address=null where address in ('insert-address-token', 'Unknown address');" # Delete MMS with no part echo "DELETE FROM mms where not exists (SELECT 1 from part where part.mid=mms._id);" # Build savepath for each part # Part: # date = mms.date # address = sender.address || moi # uid = cl ? cl : (cid sans les '<>') # tag = date+address+uid # savepath = $user_data_dir/chatty/mms/tag user_data_dir="${XDG_DATA_HOME:-$HOME/.local/share}/chatty/mms" echo "UPDATE part set savepath=(select '$user_data_dir/' || mms.date || (CASE WHEN sender.address IS NOT null THEN sender.address ELSE '' END) || mms.m_id || '/' || replace(replace(replace((CASE WHEN part.cl IS NOT null THEN part.cl ELSE trim(part.cid,'<>') END),'(','_'),')','_'),' ','_') from mms, sender where mms._id=part.mid and sender.msg_id=part.mid);"