chatty-import-sms-mms/to_sqlite
Gilles Filippini 6fc4adcec5 Initial import
2022-03-19 00:04:55 +01:00

66 lines
2.9 KiB
Bash
Executable file

#!/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);"