Store messages with DbMessage Type
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
34
client/dbmessage.go
Normal file
34
client/dbmessage.go
Normal 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
|
||||
|
||||
}
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user