From e270df412c292c5cf3c1117d40f587e710693e22 Mon Sep 17 00:00:00 2001
From: Elliu <elliu@hashi.re>
Date: Fri, 1 Jul 2022 21:29:06 +0200
Subject: [PATCH] Add env STPKG_TRUST_SOURCE to not convert given files

Conversion is still done to png if given file is not png of gif
---
 stpkg | 57 ++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 38 insertions(+), 19 deletions(-)

diff --git a/stpkg b/stpkg
index bdbf62e..289f7e2 100755
--- a/stpkg
+++ b/stpkg
@@ -161,17 +161,21 @@ validate_homeserv() {
 
 file_get_width() {
     local WIDTH=$(identify -format "%w" "$1[0]") >/dev/null
-    local WIDTH=$(( $WIDTH  > 256 ? 256 : $WIDTH ))
+    if [ "x$STPKG_TRUST_SOURCE" = "x" ]; then
+        local WIDTH=$(( $WIDTH  > 256 ? 256 : $WIDTH ))
+    fi
     echo "$WIDTH"
 }
 
 file_get_height() {
     local HEIGHT=$(identify -format "%h" "$1[0]") >/dev/null
-    local HEIGHT=$(( $HEIGHT > 256 ? 256 : $HEIGHT ))
+    if [ "x$STPKG_TRUST_SOURCE" = "x" ]; then
+        local WIDTH=$(( $WIDTH  > 256 ? 256 : $WIDTH ))
+    fi
     echo "$HEIGHT"
 }
 
-file_get_type() { [[ "$1" == *.gif ]] && echo 'gif' || echo 'png'; }
+file_get_type() { xdg-mime query filetype "$1" | sed 's+^.*/++'; }
 file_get_name() { echo "$1" | cut -f1 -d'.'; }
 
 upload_file() {
@@ -187,13 +191,18 @@ upload_file() {
 
 picture_process_sticker() {
     # NOTE: This command will display some progress dots...
-
-    local FILE=$1   # The source file
-    local DEST=$2   # The destination file
-    local NAME=$3   # The pretty name of the sticker
-    local WIDTH=$4  # The WIDTH!
-    local HEIGHT=$5 # The HEIGHT!
-    local TYPE=$6   # The type of the file (png/gif)
+    local FILE=$1    # The source file
+    local DEST=$2    # The destination file
+    local NAME=$3    # The pretty name of the sticker
+    local WIDTH=$4   # The WIDTH!
+    local HEIGHT=$5  # The HEIGHT!
+    local TYPE=$6    # The type of the file (png/gif/webp)
+    local DSTTYPE=$7 # The type of the destination file (png/gif)
+
+    if [ "x$STPKG_TRUST_SOURCE" != "x" ] && [ "$TYPE" == "$DSTTYPE" ]; then
+        cp "$FILE" "$DEST"
+        return
+    fi
 
     local repage=`[ "x${TYPE}" != "xgif" ] && echo '+repage' || echo ''`
     local resize=`[ "x${TYPE}" != "xgif" ] && echo "-resize ${WIDTH}x${HEIGHT}" || echo ''`
@@ -598,13 +607,18 @@ __edit() {
             local HEIGHT=$(file_get_height "$FILE")
             local TYPE=$(file_get_type "$FILE")
             local NAME=$(file_get_name "$FILE")
-            local DEST=$(mktemp --suffix=".$TYPE")
+            if [ "x$TYPE" == "xwebp" ]; then
+              local DSTTYPE="png"
+            else
+              local DSTTYPE="$TYPE"
+            fi
+            local DEST=$(mktemp --suffix=".$DSTTYPE")
 
-            picture_process_sticker "$FILE" "$DEST" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE"  # Transform sticker picture (see __pack)
-            local MXC=$(upload_file "$TYPE" "$DEST" "$NAME")                            # Upload transformed file (see __pack)
+            picture_process_sticker "$FILE" "$DEST" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE" "$DSTTYPE" # Transform sticker picture (see __pack)
+            local MXC=$(upload_file "$DSTTYPE" "$DEST" "$NAME")                            # Upload transformed file (see __pack)
 
             jq "del(.stickers[] | select(.body == \"$STICKER_NAME\"))" < "$TEMP" | sponge "$TEMP"
-            local ST_JSON=$(create_sticker_json "$PACK_NAME" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE" "$MXC")
+            local ST_JSON=$(create_sticker_json "$PACK_NAME" "$NAME" "$WIDTH" "$HEIGHT" "$DSTTYPE" "$MXC")
             jq ".stickers += [$ST_JSON]" < $TEMP | sponge $TEMP
             ;;
 
@@ -718,20 +732,25 @@ __pack() {
         # Get the names and extentions
         local TYPE=$(file_get_type "$FILE")
         local NAME=$(file_get_name "$FILE")
-        local DEST="$DEST_FOLDER/$NAME.$TYPE"
+        if [ "x$TYPE" != "xgif" ] && [ "x$TYPE" != "xpng" ]; then
+          local DSTTYPE="png"
+        else
+          local DSTTYPE="$TYPE"
+        fi
+        local DEST="$DEST_FOLDER/$NAME.$DSTTYPE"
 
         # For the progress
         progress "($CURRENT_FILE/$TOTAL_FILES) $NAME "
         local CURRENT_FILE=$[ $CURRENT_FILE + 1 ]
 
         # Transform sticker source picture
-        picture_process_sticker "$FILE" "$DEST" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE"
+        picture_process_sticker "$FILE" "$DEST" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE" "$DSTTYPE"
 
         # Add a ',' only if it's not the first in the array
         echo -n "$FIRST_IN_ARRAY" >> $DEST_INDEX
 
         # Upload the transformed file
-        local MXC=$(upload_file "$TYPE" "$DEST" "$NAME")
+        local MXC=$(upload_file "$DSTTYPE" "$DEST" "$NAME")
         progress_dot
 
         # Calculate the 128x128 format
@@ -742,12 +761,12 @@ __pack() {
         local HEIGHT=$(identify -format "%h" "$DEST[0]") >/dev/null
 
         # Add the sticker to the index file
-        create_sticker_json "$PACK_NAME" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE" "$MXC" >> $DEST_INDEX
+        create_sticker_json "$PACK_NAME" "$NAME" "$WIDTH" "$HEIGHT" "$DSTTYPE" "$MXC" >> $DEST_INDEX
 
         # For the report
         [ "x$FIRST_IN_ARRAY" = "x" ] && echo -e "StickerName MXC Type Width Height"
         local FIRST_IN_ARRAY=","
-        echo -e "$NAME ($MXC) $TYPE $INIT_WIDTH $INIT_HEIGHT"
+        echo -e "$NAME ($MXC) $DSTTYPE $INIT_WIDTH $INIT_HEIGHT"
 
         progress_reset
     done | column -t
-- 
GitLab