threema refactory

This commit is contained in:
Martin/Geno 2019-08-30 17:28:21 +02:00
parent 56534a8598
commit c0978c434c
No known key found for this signature in database
GPG Key ID: 9D7D3C6BFF600C6A
3 changed files with 73 additions and 61 deletions

View File

@ -19,13 +19,14 @@ func (a *Account) receiver(out chan<- stanza.Packet) {
out <- xMSG
continue
}
sender := receivedMessage.Msg.Sender().String()
header := receivedMessage.Msg.Header()
sender := header.Sender.String()
if string(a.TID) == sender {
continue
}
if p, err := a.receiving(receivedMessage.Msg); err != nil {
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()})
xMSG.Body = fmt.Sprintf("error on decoding message: %s\n%v", err, receivedMessage.Msg.Serialize())
xMSG.Body = fmt.Sprintf("error on decoding message: %s\n%v", err, receivedMessage.Msg)
out <- xMSG
} else if p != nil {
out <- p
@ -40,77 +41,77 @@ func requestExtensions(xMSG *stanza.Message) {
}
func (a *Account) receiving(receivedMessage o3.Message) (stanza.Packet, error) {
header := receivedMessage.Header()
sender := header.Sender.String()
logger := log.WithFields(map[string]interface{}{
"from": receivedMessage.Sender().String(),
"from": header.Sender.String(),
"to": a.XMPP.String(),
})
switch msg := receivedMessage.(type) {
case o3.TextMessage:
sender := msg.Sender().String()
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(msg.ID(), 10)})
xMSG.Body = msg.Text()
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
xMSG.Body = msg.Body
requestExtensions(&xMSG)
logger.WithField("text", xMSG.Body).Debug("send text")
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("send audio")
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(msg.Sender().String(), msg.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("send audio")
return xMSG, nil
case o3.ImageMessage:
if a.threema.httpUploadPath == "" {
return nil, errors.New("no place to store files at transport configurated")
}
data, err := msg.GetImageData(a.Session)
if err != nil {
logger.Warnf("unable to read data from message: %s", err)
return nil, err
}
xMSG, err := a.FileToXMPP(msg.Sender().String(), msg.ID(), "jpg", 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("send image")
return xMSG, nil
case o3.ImageMessage:
if a.threema.httpUploadPath == "" {
return nil, errors.New("no place to store files at transport configurated")
}
data, err := msg.GetImageData(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, "jpg", 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("send image")
return xMSG, nil
*/
case o3.DeliveryReceiptMessage:
msgID := msg.MsgID()
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: msg.Sender().String(), To: a.XMPP.String()})
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()})
state := ""
if msg.Status() == o3.MSGDELIVERED {
if msg.Status == o3.MSGDELIVERED {
state = "delivered"
if id, ok := a.deliveredMSG[msgID]; ok {
if id, ok := a.deliveredMSG[msg.MessageID]; ok {
xMSG.Extensions = append(xMSG.Extensions, stanza.ReceiptReceived{ID: id})
xMSG.Extensions = append(xMSG.Extensions, stanza.MarkReceived{ID: id})
delete(a.deliveredMSG, msgID)
delete(a.deliveredMSG, msg.MessageID)
} else {
logger.Warnf("found not id in cache to announce received on xmpp side")
}
}
if msg.Status() == o3.MSGREAD {
if msg.Status == o3.MSGREAD {
state = "displayed"
if id, ok := a.readedMSG[msgID]; ok {
if id, ok := a.readedMSG[msg.MessageID]; ok {
xMSG.Extensions = append(xMSG.Extensions, stanza.MarkDisplayed{ID: id})
delete(a.readedMSG, msgID)
delete(a.readedMSG, msg.MessageID)
} else {
logger.Warnf("found not id in cache to announce readed on xmpp side")
}
@ -122,7 +123,7 @@ func (a *Account) receiving(receivedMessage o3.Message) (stanza.Packet, error) {
}
return nil, nil
case o3.TypingNotificationMessage:
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: msg.Sender().String(), To: a.XMPP.String(), Id: strconv.FormatUint(msg.ID(), 10)})
xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)})
if msg.OnOff != 0 {
logger.Debug("composing")
xMSG.Extensions = append(xMSG.Extensions, stanza.StateComposing{})

View File

@ -23,6 +23,7 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
"from": a.XMPP.String(),
"to": to,
})
msg3To := o3.NewIDString(to)
chatState := false
chatStateComposing := false
@ -65,7 +66,13 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
if msgStateRead {
msgType = o3.MSGREAD
}
drm, err := o3.NewDeliveryReceiptMessage(&a.Session, to, id, msgType)
drm := o3.DeliveryReceiptMessage{
MessageHeader: &o3.MessageHeader{
ID: id,
Recipient: msg3To,
},
Status: msgType,
}
if err != nil {
return nil, err
}
@ -86,17 +93,21 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
return nil, nil
}
}
msg3ID := o3.NewMsgID()
// send text message
msg3, err := o3.NewTextMessage(&a.Session, to, msg.Body)
if err != nil {
return nil, err
msg3 := o3.TextMessage{
MessageHeader: &o3.MessageHeader{
ID: msg3ID,
Recipient: msg3To,
},
Body: msg.Body,
}
a.deliveredMSG[msg3.ID()] = msg.Id
a.readedMSG[msg3.ID()] = msg.Id
a.deliveredMSG[msg3ID] = msg.Id
a.readedMSG[msg3ID] = msg.Id
logger.WithFields(map[string]interface{}{
"x_id": msg.Id,
"t_id": msg3.ID(),
"t_id": msg3ID,
"text": msg.Body,
}).Debug("send text")
return msg3, nil

2
vendor/github.com/o3ma/o3 generated vendored

@ -1 +1 @@
Subproject commit 16684c5acfd9abe4d27d52478c7a6c6d5113d29c
Subproject commit 0c0e14982ac6e2886901faef423ed731911b3b39