Resize chat message images
This commit is contained in:
parent
869942c05e
commit
d25c0fa1b8
|
@ -38,7 +38,7 @@ import (
|
||||||
type testTimeSource struct{}
|
type testTimeSource struct{}
|
||||||
|
|
||||||
func (t *testTimeSource) GetCurrentTime() uint64 {
|
func (t *testTimeSource) GetCurrentTime() uint64 {
|
||||||
return uint64(time.Now().Unix())
|
return uint64(time.Now().Unix()) * 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -379,7 +379,7 @@ func defaultNodeConfig(installationID string) (*params.NodeConfig, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeConfig.Name = "StatusIM"
|
nodeConfig.Name = "StatusIM"
|
||||||
nodeConfig.Rendezvous = true
|
nodeConfig.Rendezvous = false
|
||||||
clusterConfig, err := params.LoadClusterConfigFromFleet("eth.prod")
|
clusterConfig, err := params.LoadClusterConfigFromFleet("eth.prod")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -496,6 +496,7 @@ func buildMessage(chat *protocol.Chat, count int) *common.Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
clock, timestamp := chat.NextClockAndTimestamp(&testTimeSource{})
|
clock, timestamp := chat.NextClockAndTimestamp(&testTimeSource{})
|
||||||
|
clock += uint64(count)
|
||||||
message := &common.Message{}
|
message := &common.Message{}
|
||||||
message.Text = fmt.Sprintf("test message %d", count)
|
message.Text = fmt.Sprintf("test message %d", count)
|
||||||
message.ChatId = chat.ID
|
message.ChatId = chat.ID
|
||||||
|
|
|
@ -72,6 +72,10 @@ const (
|
||||||
|
|
||||||
publicChat chatContext = "public-chat"
|
publicChat chatContext = "public-chat"
|
||||||
privateChat chatContext = "private-chat"
|
privateChat chatContext = "private-chat"
|
||||||
|
|
||||||
|
maxChatMessageImageSize = 400000
|
||||||
|
resizeTargetImageSize = 350000
|
||||||
|
idealTargetImageSize = 50000
|
||||||
)
|
)
|
||||||
|
|
||||||
const messageResendMinDelay = 30
|
const messageResendMinDelay = 30
|
||||||
|
@ -2403,6 +2407,7 @@ func (m *Messenger) sendChatMessage(ctx context.Context, message *common.Message
|
||||||
|
|
||||||
message.DisplayName = displayName
|
message.DisplayName = displayName
|
||||||
if len(message.ImagePath) != 0 {
|
if len(message.ImagePath) != 0 {
|
||||||
|
|
||||||
file, err := os.Open(message.ImagePath)
|
file, err := os.Open(message.ImagePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -2412,8 +2417,29 @@ func (m *Messenger) sendChatMessage(ctx context.Context, message *common.Message
|
||||||
payload, err := ioutil.ReadAll(file)
|
payload, err := ioutil.ReadAll(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
img, err := userimage.Decode(message.ImagePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
bb := bytes.NewBuffer([]byte{})
|
||||||
|
err = userimage.EncodeToLimits(bb, img, userimage.DimensionLimits{Ideal: idealTargetImageSize, Max: resizeTargetImageSize})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// We keep the smallest one
|
||||||
|
if len(payload) > len(bb.Bytes()) {
|
||||||
|
payload = bb.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(payload) > maxChatMessageImageSize {
|
||||||
|
return nil, errors.New("image too large")
|
||||||
|
}
|
||||||
|
|
||||||
image := protobuf.ImageMessage{
|
image := protobuf.ImageMessage{
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
Type: images.ImageType(payload),
|
Type: images.ImageType(payload),
|
||||||
|
|
Loading…
Reference in New Issue