From adce8e94046a160cb89365203142afaa0802bda3 Mon Sep 17 00:00:00 2001 From: Dimas Restu H Date: Fri, 29 Apr 2022 00:00:18 +0700 Subject: [PATCH] update improve send image for client backward compatibility webp format now converted as jpeg format --- go.mod | 9 +++++---- go.sum | 19 ++++++++++-------- internal/whatsapp/whatsapp.go | 36 ++++++++++++++++++++++++++++++----- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index ef1079f..89d146d 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,9 @@ require ( github.com/labstack/echo/v4 v4.7.2 github.com/sirupsen/logrus v1.8.1 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - go.mau.fi/whatsmeow v0.0.0-20220416192948-8b34d886d543 - google.golang.org/protobuf v1.27.1 + go.mau.fi/whatsmeow v0.0.0-20220427133828-d1efb884b304 + golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 + google.golang.org/protobuf v1.28.0 modernc.org/sqlite v1.17.0 ) @@ -28,8 +29,8 @@ require ( github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect - go.mau.fi/libsignal v0.0.0-20220315232917-871a40435d3b // indirect - golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect + go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0 // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect golang.org/x/mod v0.3.0 // indirect golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect golang.org/x/sys v0.0.0-20211103235746-7861aae1554b // indirect diff --git a/go.sum b/go.sum index e3f15b2..4308432 100644 --- a/go.sum +++ b/go.sum @@ -51,15 +51,17 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.mau.fi/libsignal v0.0.0-20220315232917-871a40435d3b h1:BGm0ceth6OtoXgBksEyeruiCL2ngZCwt86DUmUI6TmQ= -go.mau.fi/libsignal v0.0.0-20220315232917-871a40435d3b/go.mod h1:XYWsswZT1LfDmguWKYDuj+OugtdGX6CP3iwTtOcAGt4= -go.mau.fi/whatsmeow v0.0.0-20220416192948-8b34d886d543 h1:bSRqMKTczahOls67gsx/CxY0GiaGkqs0RQoyWhIb+Dg= -go.mau.fi/whatsmeow v0.0.0-20220416192948-8b34d886d543/go.mod h1:P7OA9XyJ/0dWHhUPKNESpC1wVOErnhY4pLEaMC1a8yg= +go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0 h1:3IQF2bgAyibdo77hTejwuJe4jlypj9QaE4xCQuxrThM= +go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0/go.mod h1:kBOXTvYyDG/q1Ihgvd4J6WenGPh7wtEGvPKF6vmf5ak= +go.mau.fi/whatsmeow v0.0.0-20220427133828-d1efb884b304 h1:P9HQ8ZDUYcFXA3+UPgYbSjmd0adzz2JnVHxB5/o3j/o= +go.mau.fi/whatsmeow v0.0.0-20220427133828-d1efb884b304/go.mod h1:iUBgOLNaqShLrR17u0kIiRptIGFH+nbT1tRhaWBEX/c= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 h1:LRtI4W37N+KFebI/qV0OFiLUv4GLOWeEW5hn/KEJvxE= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -84,6 +86,7 @@ golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= @@ -98,8 +101,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/whatsapp/whatsapp.go b/internal/whatsapp/whatsapp.go index 6360bbf..6d52ffd 100644 --- a/internal/whatsapp/whatsapp.go +++ b/internal/whatsapp/whatsapp.go @@ -2,6 +2,7 @@ package whatsapp import ( "bytes" + "image/jpeg" "io" "mime/multipart" "strconv" @@ -9,6 +10,7 @@ import ( "github.com/golang-jwt/jwt" "github.com/labstack/echo/v4" + "golang.org/x/image/webp" "github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/router" pkgWhatsApp "github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/whatsapp" @@ -82,11 +84,35 @@ func sendMedia(c echo.Context, mediaType string) error { return router.ResponseBadRequest(c, "Missing Form Value MSISDN") } - // Convert File Stream in to Bytes - // Since WhatsApp Proto for Media is only Accepting Bytes format - fileBytes, err := convertFileToBytes(fileStream) - if err != nil { - return router.ResponseInternalError(c, err.Error()) + // Issue #7 Old Version Client Cannot Render WebP Format + // If Media Type is "image" and MIME Type is "image/webp" + // Then Convert it as JPEG + var fileBytes []byte + if mediaType == "image" && fileType == "image/webp" { + // Decode WebP Image + fileWebP, err := webp.Decode(fileStream) + if err != nil { + return router.ResponseInternalError(c, err.Error()) + } + + // Encode to JPEG Image + fileJPEG := new(bytes.Buffer) + err = jpeg.Encode(fileJPEG, fileWebP, &jpeg.Options{Quality: 95}) + if err != nil { + return router.ResponseInternalError(c, err.Error()) + } + + // Set File Stream Bytes and File Type + // To New Encoded JPEG Image and File Type to "image/jpeg" + fileBytes = fileJPEG.Bytes() + fileType = "image/jpeg" + } else { + // Convert File Stream in to Bytes + // Since WhatsApp Proto for Media is only Accepting Bytes format + fileBytes, err = convertFileToBytes(fileStream) + if err != nil { + return router.ResponseInternalError(c, err.Error()) + } } // Send Media Message Based on Media Type