Support embedded/attached files and images
This commit is contained in:
parent
eabc6e8ade
commit
5cccd6c777
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
|
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
|
||||||
# Name: dino-chat-exporter
|
# Name: dino-chat-exporter
|
||||||
# Desc: Export all conversations from Dino (XMPP client)'s database into
|
# Desc: Export all conversations from Dino (XMPP client)'s database into
|
||||||
|
@ -165,6 +165,15 @@ archive_files_with_partner() {
|
||||||
|
|
||||||
THEIR_AVATAR="$(archive_avatars "$account_id" "$partner_id" "$output_dir/avatar" | head -1)"
|
THEIR_AVATAR="$(archive_avatars "$account_id" "$partner_id" "$output_dir/avatar" | head -1)"
|
||||||
YOUR_AVATAR="$(archive_avatars "$account_id" "$(account_jid_id "$account_id")" "$output_dir/your_avatar" | head -1)"
|
YOUR_AVATAR="$(archive_avatars "$account_id" "$(account_jid_id "$account_id")" "$output_dir/your_avatar" | head -1)"
|
||||||
|
|
||||||
|
local files="$(sqlite "$DB_FILE" \
|
||||||
|
"SELECT path
|
||||||
|
FROM file_transfer
|
||||||
|
WHERE counterpart_id == $partner_id AND account_id == $account_id;")"
|
||||||
|
|
||||||
|
for file in $files; do
|
||||||
|
cp "$DINO_HOME/files/$file" "$output_dir/$file"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -185,6 +194,13 @@ archive_avatars() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
archive_file_tranfers() {
|
||||||
|
local account_id="$1"
|
||||||
|
local counterpart_id="$2"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# For flexibility in formatting, we let the user define the selection order in a simplified manner
|
# For flexibility in formatting, we let the user define the selection order in a simplified manner
|
||||||
message_slots_to_selection() {
|
message_slots_to_selection() {
|
||||||
local slots="$1"
|
local slots="$1"
|
||||||
|
@ -201,11 +217,31 @@ message_slots_to_selection() {
|
||||||
ELSE 'files/$(basename "$YOUR_AVATAR")'
|
ELSE 'files/$(basename "$YOUR_AVATAR")'
|
||||||
END"
|
END"
|
||||||
|
|
||||||
|
# If this message has a file attached, print the file's relative path
|
||||||
|
# Uses two seperate output formats for files and for images
|
||||||
|
local body_query_part="
|
||||||
|
CASE
|
||||||
|
WHEN message.id == (
|
||||||
|
SELECT file_transfer.info
|
||||||
|
FROM file_transfer
|
||||||
|
WHERE file_transfer.info == message.id )
|
||||||
|
THEN ( SELECT
|
||||||
|
CASE
|
||||||
|
WHEN (file_transfer.path LIKE '%.jpg') OR (file_transfer.path LIKE '%.jpeg') OR (file_transfer.path LIKE '%.jpeg')
|
||||||
|
OR (file_transfer.path LIKE '%.png') OR (file_transfer.path LIKE '%.webm') OR (file_transfer.path LIKE '%.svg')
|
||||||
|
THEN PRINTF('$IMAGE_FORMAT', 'files/' || path)
|
||||||
|
ELSE PRINTF('$FILE_FORMAT', 'files/' || path)
|
||||||
|
END
|
||||||
|
FROM file_transfer
|
||||||
|
WHERE file_transfer.info == message.id )
|
||||||
|
ELSE message.body
|
||||||
|
END"
|
||||||
|
|
||||||
echo "$slots" \
|
echo "$slots" \
|
||||||
| sed "s^DATE^DATETIME(message.local_time, 'unixepoch', 'localtime')^g" \
|
| sed "s^DATE^DATETIME(message.local_time, 'unixepoch', 'localtime')^g" \
|
||||||
| sed "s^JID^$(echo "$jid_query_part" | tr '\n' ' ' | tr -d '\t')^g" \
|
| sed "s^JID^$(echo "$jid_query_part" | tr '\n' ' ' | tr -d '\t')^g" \
|
||||||
| sed "s^AVATAR^$(echo "$avatar_query_part" | tr '\n' ' ' | tr -d '\t')^g" \
|
| sed "s^AVATAR^$(echo "$avatar_query_part" | tr '\n' ' ' | tr -d '\t')^g" \
|
||||||
| sed 's^BODY^message.body^g'
|
| sed "s^BODY^$(echo "$body_query_part" | tr '\n' ' ' | tr -d '\t')^g"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -301,6 +337,10 @@ MESSAGE_HEADER='<!DOCTYPE html>\n<html>\n<head>\n<title>Conversation with THEIR_
|
||||||
MESSAGE_FOOTER='</body></html>'
|
MESSAGE_FOOTER='</body></html>'
|
||||||
|
|
||||||
|
|
||||||
|
IMAGE_FORMAT='<img style="max-width: 50%%;" src="%s" />'
|
||||||
|
FILE_FORMAT='<a href="%s" />%s</a>'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# STATE
|
# STATE
|
||||||
# ———————————————————————————————————————————————————————————————————————————————
|
# ———————————————————————————————————————————————————————————————————————————————
|
||||||
|
@ -315,7 +355,7 @@ YOUR_AVATAR=""
|
||||||
|
|
||||||
# INVOCATION
|
# INVOCATION
|
||||||
# ———————————————————————————————————————————————————————————————————————————————
|
# ———————————————————————————————————————————————————————————————————————————————
|
||||||
OUTPUT="/tmp/export/"
|
OUTPUT="/tmp/export"
|
||||||
|
|
||||||
for account in $(account_list); do
|
for account in $(account_list); do
|
||||||
# Reset state (repopulated by account_jid_and_nick; account_jid_id; archive_files…)
|
# Reset state (repopulated by account_jid_and_nick; account_jid_id; archive_files…)
|
||||||
|
@ -329,8 +369,6 @@ for account in $(account_list); do
|
||||||
account_output="$OUTPUT/$nick ($jid)/"
|
account_output="$OUTPUT/$nick ($jid)/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$account"
|
|
||||||
|
|
||||||
for partner in $(conversation_partners "$account"); do
|
for partner in $(conversation_partners "$account"); do
|
||||||
# Reset state (repopulated by id_jid_and_nick; archive_files_with…)
|
# Reset state (repopulated by id_jid_and_nick; archive_files_with…)
|
||||||
THEIR_INFO=""; THEIR_AVATAR=""
|
THEIR_INFO=""; THEIR_AVATAR=""
|
||||||
|
@ -343,6 +381,7 @@ for account in $(account_list); do
|
||||||
partner_output="$account_output/$nick ($jid)/"
|
partner_output="$account_output/$nick ($jid)/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Archiving $jid…"
|
||||||
archive_conversation_with_partner "$account" "$partner" "$partner_output"
|
archive_conversation_with_partner "$account" "$partner" "$partner_output"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
Ŝarĝante…
Reference in New Issue