add image+audio support + refactory group
This commit is contained in:
		
							parent
							
								
									836efe59a4
								
							
						
					
					
						commit
						eef58dcfba
					
				| 
						 | 
					@ -58,65 +58,57 @@ func (a *Account) receiving(receivedMessage o3.Message) (stanza.Packet, error) {
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	sender = strings.ToLower(sender)
 | 
						sender = strings.ToLower(sender)
 | 
				
			||||||
	switch msg := receivedMessage.(type) {
 | 
						switch msg := receivedMessage.(type) {
 | 
				
			||||||
	case *o3.GroupTextMessage:
 | 
					 | 
				
			||||||
		xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeGroupchat, From: jidFromThreemaGroup(sender, msg.GroupMessageHeader), To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
 | 
					 | 
				
			||||||
		xMSG.Body = msg.Body
 | 
					 | 
				
			||||||
		requestExtensions(&xMSG)
 | 
					 | 
				
			||||||
		logger.WithFields(map[string]interface{}{
 | 
					 | 
				
			||||||
			"from_x": xMSG.From,
 | 
					 | 
				
			||||||
			"id":     xMSG.Id,
 | 
					 | 
				
			||||||
			"text":   xMSG.Body,
 | 
					 | 
				
			||||||
		}).Debug("recv grouptext")
 | 
					 | 
				
			||||||
		return xMSG, nil
 | 
					 | 
				
			||||||
	case *o3.TextMessage:
 | 
						case *o3.TextMessage:
 | 
				
			||||||
 | 
							dbText := "recv text"
 | 
				
			||||||
		xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
 | 
							xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
 | 
				
			||||||
 | 
							if msg.GroupMessageHeader != nil {
 | 
				
			||||||
 | 
								xMSG = stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeGroupchat, From: jidFromThreemaGroup(sender, msg.GroupMessageHeader), To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
 | 
				
			||||||
 | 
								dbText = "recv grouptext"
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								requestExtensions(&xMSG)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		xMSG.Body = msg.Body
 | 
							xMSG.Body = msg.Body
 | 
				
			||||||
		requestExtensions(&xMSG)
 | 
					 | 
				
			||||||
		logger.WithFields(map[string]interface{}{
 | 
							logger.WithFields(map[string]interface{}{
 | 
				
			||||||
			"from_x": xMSG.From,
 | 
								"from_x": xMSG.From,
 | 
				
			||||||
			"id":     xMSG.Id,
 | 
								"id":     xMSG.Id,
 | 
				
			||||||
			"text":   xMSG.Body,
 | 
								"text":   xMSG.Body,
 | 
				
			||||||
		}).Debug("recv text")
 | 
							}).Debug(dbText)
 | 
				
			||||||
 | 
							return xMSG, nil
 | 
				
			||||||
 | 
						case *o3.AudioMessage:
 | 
				
			||||||
 | 
							if a.threema.httpUploadPath == "" {
 | 
				
			||||||
 | 
								return nil, errors.New("no place to store files at transport configurated")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							data, err := msg.GetData()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								logger.Warnf("unable to read data from message: %s", err)
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							xMSG, err := a.FileToXMPP(sender, header.ID, "mp3", data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								logger.Warnf("unable to create data from message: %s", err)
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							requestExtensions(&xMSG)
 | 
				
			||||||
 | 
							logger.WithField("url", xMSG.Body).Debug("recv audio")
 | 
				
			||||||
		return xMSG, nil
 | 
							return xMSG, nil
 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
		case o3.AudioMessage:
 | 
					 | 
				
			||||||
			if a.threema.httpUploadPath == "" {
 | 
					 | 
				
			||||||
				return nil, errors.New("no place to store files at transport configurated")
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			data, err := msg.GetAudioData(a.Session)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				logger.Warnf("unable to read data from message: %s", err)
 | 
					 | 
				
			||||||
				return nil, err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			xMSG, err := a.FileToXMPP(sender.String(), header.ID, "mp3", data)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				logger.Warnf("unable to create data from message: %s", err)
 | 
					 | 
				
			||||||
				return nil, err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			xMSG.Type = "chat"
 | 
					 | 
				
			||||||
			requestExtensions(&xMSG)
 | 
					 | 
				
			||||||
			logger.WithField("url", xMSG.Body).Debug("recv audio")
 | 
					 | 
				
			||||||
			return xMSG, nil
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case o3.ImageMessage:
 | 
						case *o3.ImageMessage:
 | 
				
			||||||
			if a.threema.httpUploadPath == "" {
 | 
							if a.threema.httpUploadPath == "" {
 | 
				
			||||||
				return nil, errors.New("no place to store files at transport configurated")
 | 
								return nil, errors.New("no place to store files at transport configurated")
 | 
				
			||||||
			}
 | 
							}
 | 
				
			||||||
			data, err := msg.GetImageData(a.Session)
 | 
							data, err := msg.GetData(a.ThreemaID)
 | 
				
			||||||
			if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
				logger.Warnf("unable to read data from message: %s", err)
 | 
								logger.Warnf("unable to read data from message: %s", err)
 | 
				
			||||||
				return nil, err
 | 
								return nil, err
 | 
				
			||||||
			}
 | 
							}
 | 
				
			||||||
			xMSG, err := a.FileToXMPP(sender.String(), header.ID, "jpg", data)
 | 
							xMSG, err := a.FileToXMPP(sender, header.ID, "jpg", data)
 | 
				
			||||||
			if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
				logger.Warnf("unable to create data from message: %s", err)
 | 
								logger.Warnf("unable to create data from message: %s", err)
 | 
				
			||||||
				return nil, err
 | 
								return nil, err
 | 
				
			||||||
			}
 | 
							}
 | 
				
			||||||
			xMSG.Type = "chat"
 | 
							requestExtensions(&xMSG)
 | 
				
			||||||
			requestExtensions(&xMSG)
 | 
							logger.WithField("url", xMSG.Body).Debug("recv image")
 | 
				
			||||||
			logger.WithField("url", xMSG.Body).Debug("recv image")
 | 
							return xMSG, nil
 | 
				
			||||||
			return xMSG, nil
 | 
					 | 
				
			||||||
	*/
 | 
					 | 
				
			||||||
	case *o3.DeliveryReceiptMessage:
 | 
						case *o3.DeliveryReceiptMessage:
 | 
				
			||||||
		xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()})
 | 
							xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()})
 | 
				
			||||||
		state := ""
 | 
							state := ""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,14 +60,13 @@ func TestReceiveText(t *testing.T) {
 | 
				
			||||||
	assert.Equal("Oojoh0Ah", xMSG.Body)
 | 
						assert.Equal("Oojoh0Ah", xMSG.Body)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
func TestReceiveAudio(t *testing.T) {
 | 
					func TestReceiveAudio(t *testing.T) {
 | 
				
			||||||
	assert := assert.New(t)
 | 
						assert := assert.New(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	a := createDummyAccount()
 | 
						a := createDummyAccount()
 | 
				
			||||||
	a.threema = &Threema{}
 | 
						a.threema = &Threema{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dataMsg := o3.ImageMessage{
 | 
						dataMsg := o3.AudioMessage{
 | 
				
			||||||
		MessageHeader: &o3.MessageHeader{
 | 
							MessageHeader: &o3.MessageHeader{
 | 
				
			||||||
			Sender: threemaFromIDByte,
 | 
								Sender: threemaFromIDByte,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					@ -76,7 +75,11 @@ func TestReceiveAudio(t *testing.T) {
 | 
				
			||||||
	assert.Error(err)
 | 
						assert.Error(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	a.threema.httpUploadPath = "/tmp"
 | 
						a.threema.httpUploadPath = "/tmp"
 | 
				
			||||||
	dataMsg = o3.AudioMessage{}
 | 
						dataMsg = o3.AudioMessage{
 | 
				
			||||||
 | 
							MessageHeader: &o3.MessageHeader{
 | 
				
			||||||
 | 
								Sender: threemaFromIDByte,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	_, err = a.receiving(dataMsg)
 | 
						_, err = a.receiving(dataMsg)
 | 
				
			||||||
	assert.Error(err)
 | 
						assert.Error(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -96,16 +99,19 @@ func TestReceiveImage(t *testing.T) {
 | 
				
			||||||
	assert.Error(err)
 | 
						assert.Error(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	a.threema.httpUploadPath = "/tmp"
 | 
						a.threema.httpUploadPath = "/tmp"
 | 
				
			||||||
	dataMsg := o3.ImageMessage{
 | 
						dataMsg = o3.ImageMessage{
 | 
				
			||||||
 | 
							MessageHeader: &o3.MessageHeader{
 | 
				
			||||||
 | 
								Sender: threemaFromIDByte,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						dataMsg = o3.ImageMessage{
 | 
				
			||||||
		MessageHeader: &o3.MessageHeader{
 | 
							MessageHeader: &o3.MessageHeader{
 | 
				
			||||||
			Sender: threemaFromIDByte,
 | 
								Sender: threemaFromIDByte,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dataMsg = o3.ImageMessage{}
 | 
					 | 
				
			||||||
	_, err = a.receiving(dataMsg)
 | 
						_, err = a.receiving(dataMsg)
 | 
				
			||||||
	assert.Error(err)
 | 
						assert.Error(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestReceiveDeliveryReceipt(t *testing.T) {
 | 
					func TestReceiveDeliveryReceipt(t *testing.T) {
 | 
				
			||||||
	assert := assert.New(t)
 | 
						assert := assert.New(t)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,8 +113,9 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// send text message
 | 
						// send text message
 | 
				
			||||||
	msg3 := &o3.TextMessage{
 | 
						msg3 := &o3.TextMessage{
 | 
				
			||||||
		MessageHeader: header,
 | 
							GroupMessageHeader: groupHeader,
 | 
				
			||||||
		Body:          msg.Body,
 | 
							MessageHeader:      header,
 | 
				
			||||||
 | 
							Body:               msg.Body,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	logger = logger.WithFields(map[string]interface{}{
 | 
						logger = logger.WithFields(map[string]interface{}{
 | 
				
			||||||
		"x_id": msg.Id,
 | 
							"x_id": msg.Id,
 | 
				
			||||||
| 
						 | 
					@ -124,10 +125,7 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
 | 
				
			||||||
	if groupHeader != nil {
 | 
						if groupHeader != nil {
 | 
				
			||||||
		logger.Debug("send grouptext")
 | 
							logger.Debug("send grouptext")
 | 
				
			||||||
		// TODO iterate of all occupants
 | 
							// TODO iterate of all occupants
 | 
				
			||||||
		return &o3.GroupTextMessage{
 | 
							return msg3, nil
 | 
				
			||||||
			GroupMessageHeader: groupHeader,
 | 
					 | 
				
			||||||
			TextMessage:        msg3,
 | 
					 | 
				
			||||||
		}, nil
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	a.deliveredMSG[msg3ID] = msg.Id
 | 
						a.deliveredMSG[msg3ID] = msg.Id
 | 
				
			||||||
	a.readedMSG[msg3ID] = msg.Id
 | 
						a.readedMSG[msg3ID] = msg.Id
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in New Issue