Skip to content

Instantly share code, notes, and snippets.

@jemyzhang
Last active March 18, 2018 11:35
Show Gist options
  • Save jemyzhang/c56fbbda0b9c5707ecb254f398bf3bf5 to your computer and use it in GitHub Desktop.
Save jemyzhang/c56fbbda0b9c5707ecb254f398bf3bf5 to your computer and use it in GitHub Desktop.
Update database of EFB for chat association.
#!/bin/bash
SQLITE3=sqlite3
OLD_CHAT_LIST=$1
NEW_CHAT_LIST=$2
TGDATA_DB=$3
usage() {
echo
echo "Usage:"
echo "$0 <old chat list> <new chat list> <tgdata.db>"
echo
echo -e "\033[40;32mNOTICE:\033[40;31m Backup your tgdata.db before you run this scripts!!!\033[0m"
exit 1
}
if [ -z "$OLD_CHAT_LIST" -o -z "$NEW_CHAT_LIST" -o -z "$TGDATA_DB" ]; then
usage
fi
old_chat_uid_list=$(cat -- $OLD_CHAT_LIST | awk -F"[: ]" '{print $1}' | tail -n+6)
old_chat_name_array=($(cat -- $OLD_CHAT_LIST | awk -F"[: ]" '{print $4}' | tail -n+6))
new_chat_uid_list=$(cat -- $NEW_CHAT_LIST | awk -F"[: ]" '{print $1}' | tail -n+6)
new_chat_name_array=($(cat -- $NEW_CHAT_LIST | awk -F"[: ]" '{print $4}' | tail -n+6))
TEMP_DB=$(mktemp -u)
SQLITE_CMD=$(echo "begin transaction;")
SQLITE_CMD=$SQLITE_CMD"$(echo "create table 'chatlist' ('old_uid' text not null, 'new_uid' text not null, 'name' text not null);")"
cnt=0
for uid in $old_chat_uid_list; do
SQLITE_CMD=$SQLITE_CMD"$(echo "insert into "chatlist" values ('$uid', 'null', '${old_chat_name_array[$cnt]}');")"
let cnt+=1
done
SQLITE_CMD=$SQLITE_CMD"commit;"
echo $SQLITE_CMD | $SQLITE3 $TEMP_DB
SQLITE_CMD=$(echo "begin transaction;")
cnt=0
for uid in $new_chat_uid_list; do
SQLITE_CMD=$SQLITE_CMD"$(echo "update chatlist set new_uid='$uid' where name='${new_chat_name_array[$cnt]}';")"
let cnt+=1
done
SQLITE_CMD=$SQLITE_CMD"commit;"
echo $SQLITE_CMD | $SQLITE3 $TEMP_DB
chat_assoc_list=$(echo "select old_uid,new_uid from chatlist;" | $SQLITE3 $TEMP_DB)
SQLITE_CMD=$(echo "begin transaction;")
for assoc in $chat_assoc_list; do
old_uid=$(echo $assoc | awk -F"|" '{print $1}')
new_uid=$(echo $assoc | awk -F"|" '{print $2}')
if [ "$new_uid" = "null" ]; then
continue;
fi
SQLITE_CMD=$SQLITE_CMD"$(echo "update chatassoc set slave_uid='blueset.wechat $new_uid' where slave_uid='blueset.wechat $old_uid';")"
done
SQLITE_CMD=$SQLITE_CMD"commit;"
echo $SQLITE_CMD | $SQLITE3 $TGDATA_DB
rm -f $TEMP_DB
echo "Done!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment