Store messages with DbMessage Type
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
ycc
2024-02-29 21:03:15 +01:00
parent 4b3d7548bd
commit f20681adab
7 changed files with 244 additions and 38 deletions

34
client/dbmessage.go Normal file
View File

@ -0,0 +1,34 @@
package client
import (
"forge.redroom.link/yves/meowlib"
)
func DbMessageToInternalUserMessage(id int64, dbFile string, dbm *meowlib.DbMessage) *InternalUserMessage {
var ium InternalUserMessage
ium.Dbid = id
ium.Dbfile = dbFile
ium.Outbound = dbm.Outbound
ium.Message = string(dbm.Data)
ium.ConversationStatus = dbm.Status
ium.Contact = dbm.Contact
ium.CurrentLocation = dbm.CurrentLocation
ium.Messagetype = dbm.Type
ium.Appdata = dbm.Appdata
ium.FilePaths = dbm.FilePaths
return &ium
}
func UserMessageToDbMessage(outbound bool, um *meowlib.UserMessage, filepaths []string) *meowlib.DbMessage {
var dbm meowlib.DbMessage
dbm.Outbound = outbound
dbm.Type = um.Type
dbm.Data = um.Data
dbm.Appdata = um.Appdata
dbm.Contact = um.Contact
dbm.CurrentLocation = um.CurrentLocation
dbm.Status = um.Status
dbm.FilePaths = filepaths
return &dbm
}

View File

@ -8,15 +8,15 @@ const (
)
type InternalUserMessage struct {
Direction int // 0 = inbound, 1 = outbound
Outbound bool // 0 = inbound, 1 = outbound
Messagetype string
Message string
ConversationStatus *meowlib.ConversationStatus
Contact *meowlib.ContactCard
//Group group
FilePaths []string
CurrentLocation meowlib.Location
appdata []byte
CurrentLocation *meowlib.Location
Appdata []byte
Dbfile string
Dbid int64
}
@ -25,9 +25,9 @@ type InternalUserMessage struct {
func InternalUserMessageFromUserMessage(peer *Peer, msg *meowlib.UserMessage) *InternalUserMessage {
iu := new(InternalUserMessage)
if peer.ContactPublicKey == msg.From {
iu.Direction = Inbound
iu.Outbound = false
} else {
iu.Direction = Outbound
iu.Outbound = true
}
iu.Messagetype = msg.Type
iu.Message = string(msg.Data)

View File

@ -12,7 +12,7 @@ import (
"google.golang.org/protobuf/proto"
)
func StoreMessage(peer *Peer, usermessage *meowlib.UserMessage, password string) error {
func StoreMessage(peer *Peer, usermessage *meowlib.UserMessage, filenames []string, password string) error {
var dbid string
// If no db/no ID create DB + Tablz
// TODO : if file size > X new db
@ -52,8 +52,14 @@ func StoreMessage(peer *Peer, usermessage *meowlib.UserMessage, password string)
f.Data = []byte(hiddenFilename)
}
}
outbound := true
if usermessage.From == peer.ContactPublicKey {
outbound = false
}
// Convert UserMessage to DbMessage
dbm := UserMessageToDbMessage(outbound, usermessage, filenames)
// Encrypt message
out, err := proto.Marshal(usermessage)
out, err := proto.Marshal(dbm)
if err != nil {
return err
}
@ -98,7 +104,7 @@ func GetNewMessages(peer *Peer, lastDbId int, password string) ([]*InternalUserM
for rows.Next() {
var ium *InternalUserMessage
var um meowlib.UserMessage
var dbm meowlib.DbMessage
var id int64
var m []byte
err = rows.Scan(&id, &m)
@ -109,12 +115,12 @@ func GetNewMessages(peer *Peer, lastDbId int, password string) ([]*InternalUserM
if err != nil {
return nil, err
}
err = proto.Unmarshal(decdata, &um)
err = proto.Unmarshal(decdata, &dbm)
if err != nil {
return nil, err
}
ium = InternalUserMessageFromUserMessage(peer, &um)
ium = DbMessageToInternalUserMessage(id, peer.DbIds[fileidx], &dbm)
ium.Dbid = id
ium.Dbfile = peer.DbIds[fileidx]
messages = append(messages, ium)
@ -164,7 +170,7 @@ func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore in
for rows.Next() {
var ium *InternalUserMessage
var um meowlib.UserMessage
var dbm meowlib.DbMessage
var id int64
var m []byte
err = rows.Scan(&id, &m)
@ -175,12 +181,12 @@ func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore in
if err != nil {
return nil, err
}
err = proto.Unmarshal(decdata, &um)
err = proto.Unmarshal(decdata, &dbm)
if err != nil {
return nil, err
}
ium = InternalUserMessageFromUserMessage(peer, &um)
ium = DbMessageToInternalUserMessage(id, peer.DbIds[fileidx], &dbm)
ium.Dbid = id
ium.Dbfile = peer.DbIds[fileidx]
messages = append(messages, *ium)

View File

@ -14,7 +14,7 @@ func TestStoreMessage(t *testing.T) {
id := createId()
var um meowlib.UserMessage
um.Data = []byte("blabla")
err := StoreMessage(&id.Peers[0], &um, GetConfig().memoryPassword)
err := StoreMessage(&id.Peers[0], &um, []string{}, GetConfig().memoryPassword)
if err != nil {
log.Fatal(err)
}
@ -24,7 +24,7 @@ func TestStoreMessage(t *testing.T) {
}
// Checks
assert.Equal(t, len(messages), 1, "not 1 message")
assert.Equal(t, messages[0].Message, um.Data, "not 1 message")
assert.Equal(t, messages[0].Message, string(um.Data), "not 1 message")
// Cleanup
if exists("test.id") {
os.Remove("test.id")
@ -45,7 +45,7 @@ func TestManyStoreMessage(t *testing.T) {
for i := 1; i < 100; i++ {
var um meowlib.UserMessage
um.Data = []byte(randomLenString(20, 200))
err := StoreMessage(&id.Peers[0], &um, GetConfig().memoryPassword)
err := StoreMessage(&id.Peers[0], &um, []string{}, GetConfig().memoryPassword)
if err != nil {
log.Fatal(err)
}

View File

@ -287,8 +287,8 @@ func (p *Peer) GetDbPassword() string {
return p.dbPassword
}
func (p *Peer) StoreMessage(msg *meowlib.UserMessage) error {
return StoreMessage(p, msg, p.GetDbPassword())
func (p *Peer) StoreMessage(msg *meowlib.UserMessage, filenames []string) error {
return StoreMessage(p, msg, filenames, p.GetDbPassword())
}
func (p *Peer) UpdateMessage(msg InternalUserMessage) error {