Skip to content
Extraits de code Groupes Projets

Add a migration script

Tous les fils de conversation ont été résolus !
Fusionnées
salixorrequested to merge
migrate-stickers-homeserver into master
Tous les fils de conversation ont été résolus !
1 file
+ 62
2
Comparer les modifications
  • Côte à côte
  • En ligne
+ 62
2
@@ -34,6 +34,7 @@ if [ "x$STPKG_COLORS" = "x" ]; then
__red() { echo -ne '\e[31m'$*'\e[0m'; }
__green() { echo -ne '\e[32m'$*'\e[0m'; }
__yellow() { echo -ne '\e[33m'$*'\e[0m'; }
__magenta() { echo -ne '\e[35m'$*'\e[0m'; }
__bold() { echo -ne '\033[1m'$*'\e[0m'; }
__italic() { echo -ne '\033[3m'$*'\e[0m'; }
@@ -110,6 +111,7 @@ cat << EOF
$BASE_NAME pack [`__yellow "-t token"`] [`__yellow "name"`] <`__yellow "pack_folder"`>
$BASE_NAME edit [`__yellow "-t token"`] <`__yellow "pack_name"`> add|del <`__yellow "sticker"`> [`__yellow "file"`]
$BASE_NAME display [`__yellow "-dl folder"`] <`__yellow "pack_name"`> [`__yellow "sticker_regex"`]
$BASE_NAME migrate <`__yellow "pack_name"`>
`__bold Flags:`
`__yellow "-e"` / `__yellow "-ne"` The pack is enabled / disabled
@@ -857,7 +859,11 @@ __pack() {
ST_JSON="`jq --arg STICKER_NAME "$STICKER_NAME" '.stickers[] | select(.body == $STICKER_NAME)' < "$DEST_INDEX"`"
else
if [[ "x${updatedFiles[$FILE]}" != "x" ]]; then
STICKER_STATUS="`__yellow Updated`"
if [ "x$UNDER_MIGRATION" = "xyes" ]; then
STICKER_STATUS="`__magenta Migrated`"
else
STICKER_STATUS="`__yellow Updated`"
fi
sed -i "/[0-9a-f]\{32\} $FILE/d" $SUM_FILE
else
STICKER_STATUS="`__green New`"
@@ -901,9 +907,62 @@ __pack() {
info "Pack created, you can now commit it and create a MR to share it with other users"
}
download_image_from_server() {
local mxc_url="$1"
local name="$2"
local extension="$3"
[ -z "$mxc_url" ] && die "Missing MXC URL before downloading."
[ -z "$2" ] && die "Missing name before downloading."
[ -z "$3" ] && die "Missing extension before downloading."
local filename="$name.$extension"
local folder_destination="${4:-/tmp}"
[ ! -d "$folder_destination" ] && mkdir -p "$folder_destination"
local destination=$(printf "%s/%s\n" "${folder_destination%/}" "${filename#/}")
echo $destination
# Ideally, we'd check if the MXC is valid. Too lazy for a one-shot script.
local hostname="${mxc_url#*://}"
hostname="${hostname%%/*}"
local id="${mxc_url##*/}"
curl "https://$STPKG_HOMESERV/_matrix/client/v1/media/download/$hostname/$id/" -H "Authorization: Bearer $STPKG_TOKEN" -o $destination
}
# Allows to migrate stickers from a pack to the current homeserver
# Re-downloads the sticker images from their current server, and re-uploads to the new one
__migrate() {
local pack_name="$1"
[ "x$pack_name" = "x" ] && die "You must specify a pack for the 'migrate' command"
local FILE="${STPKG_INSTALL}/web/packs/$pack_name.json"
[ ! -r "$FILE" ] && die "Pack '$pack_name' is not available (check with 'pack list'). The corresponding file should be '$FILE'"
echo "Migrate the sticker pack $(__green `jq '.title' < "$FILE"`):"
if [ "x$STPKG_TOKEN" = "x" ]; then
read -sp "`__yellow 'Enter your access token:'`" STPKG_TOKEN
validate_token # Validate token, will exit if invalid
fi
local temporary_destination="/tmp/$pack_name"
jq '.stickers[] | "\(.body) \(.url) \(.info.mimetype)"' < "$FILE" | while IFS= read LINE; do
local NAME=`echo "$LINE" | awk -F '"| ' '{print $2}'`
local URL=` echo "$LINE" | awk -F '"| ' '{print $3}'`
local TYPE=`echo "$LINE" | awk -F '"| ' '{print $4}' | awk -F '/' '{print $2}'`
download_image_from_server $URL $NAME $TYPE $temporary_destination
done
UNDER_MIGRATION="yes"
STPKG_REUPLOAD_SAME_FILE="yes"
__pack $pack_name $temporary_destination
}
__do_command() {
case "$1" in
show|update|list|add|del|default|pack|display|edit)
show|update|list|add|del|default|pack|display|edit|migrate)
# Source conf file, may have the sshfs hook
if [ -f $STPKG_CONF_FILE ]; then
source $STPKG_CONF_FILE
@@ -1032,5 +1091,6 @@ case "$1" in
pack) shift; __do_command pack $* ;;
display) shift; __do_command display $*;;
edit) shift; __do_command edit $* ;;
migrate) shift; __do_command migrate $*;;
*) __do_command usage ;;
esac
Chargement en cours