message storage and from removed from packedusermessage (weakness)
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:
@ -2,10 +2,38 @@ package client
|
||||
|
||||
import "forge.redroom.link/yves/meowlib"
|
||||
|
||||
const (
|
||||
Inbound = 0
|
||||
Outbound = 1
|
||||
)
|
||||
|
||||
type InternalUserMessage struct {
|
||||
Message *meowlib.UserMessage
|
||||
Dbfile string
|
||||
Dbid int64
|
||||
Direction int // 0 = inbound, 1 = outbound
|
||||
Messagetype string
|
||||
Message string
|
||||
ConversationStatus *meowlib.ConversationStatus
|
||||
Contact *meowlib.ContactCard
|
||||
//Group group
|
||||
FilePaths []string
|
||||
CurrentLocation meowlib.Location
|
||||
appdata []byte
|
||||
Dbfile string
|
||||
Dbid int64
|
||||
}
|
||||
|
||||
// InternalUserMessageFromUserMessage creates an InternalUserMessage from a UserMessage
|
||||
func InternalUserMessageFromUserMessage(peer *Peer, msg *meowlib.UserMessage) *InternalUserMessage {
|
||||
iu := new(InternalUserMessage)
|
||||
if peer.ContactPublicKey == msg.From {
|
||||
iu.Direction = Inbound
|
||||
} else {
|
||||
iu.Direction = Outbound
|
||||
}
|
||||
iu.Messagetype = msg.Type
|
||||
iu.Message = string(msg.Data)
|
||||
iu.ConversationStatus = msg.Status
|
||||
iu.Contact = msg.Contact
|
||||
return iu
|
||||
}
|
||||
|
||||
func ProcessOutboundTextMessage(peer *Peer, text string, srv *Server) ([]byte, error) {
|
||||
|
@ -74,8 +74,8 @@ func StoreMessage(peer *Peer, usermessage *meowlib.UserMessage, password string)
|
||||
}
|
||||
|
||||
// Get new messages from a peer
|
||||
func GetNewMessages(peer *Peer, lastDbId int, password string) ([]InternalUserMessage, error) {
|
||||
var messages []InternalUserMessage
|
||||
func GetNewMessages(peer *Peer, lastDbId int, password string) ([]*InternalUserMessage, error) {
|
||||
var messages []*InternalUserMessage
|
||||
fileidx := len(peer.DbIds) - 1
|
||||
// There fileidx should provide the db that we need (unless wantMore overlaps the next DB)
|
||||
db, _ := sql.Open("sqlite3", filepath.Join(GetConfig().StoragePath, peer.DbIds[fileidx]+GetConfig().DbSuffix)) // Open the created SQLite File
|
||||
@ -96,7 +96,7 @@ func GetNewMessages(peer *Peer, lastDbId int, password string) ([]InternalUserMe
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var ium InternalUserMessage
|
||||
var ium *InternalUserMessage
|
||||
var um meowlib.UserMessage
|
||||
var id int64
|
||||
var m []byte
|
||||
@ -112,9 +112,10 @@ func GetNewMessages(peer *Peer, lastDbId int, password string) ([]InternalUserMe
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ium = InternalUserMessageFromUserMessage(peer, &um)
|
||||
ium.Dbid = id
|
||||
ium.Dbfile = peer.DbIds[fileidx]
|
||||
ium.Message = &um
|
||||
messages = append(messages, ium)
|
||||
}
|
||||
// TODO DB overlap
|
||||
@ -122,8 +123,8 @@ func GetNewMessages(peer *Peer, lastDbId int, password string) ([]InternalUserMe
|
||||
}
|
||||
|
||||
// Get old messages from a peer
|
||||
func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore int, password string) ([]InternalUserMessage, error) {
|
||||
var messages []InternalUserMessage
|
||||
func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore int, password string) ([]*InternalUserMessage, error) {
|
||||
var messages []*InternalUserMessage
|
||||
fileidx := len(peer.DbIds) - 1
|
||||
// initialize count with last db message count
|
||||
countStack, err := getMessageCount(peer.DbIds[fileidx])
|
||||
@ -177,9 +178,10 @@ func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore in
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ium = InternalUserMessageFromUserMessage(peer, &um)
|
||||
ium.Dbid = id
|
||||
ium.Dbfile = peer.DbIds[fileidx]
|
||||
ium.Message = &um
|
||||
messages = append(messages, ium)
|
||||
}
|
||||
// TODO DB overlap
|
||||
|
@ -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.Data, um.Data, "not 1 message")
|
||||
assert.Equal(t, messages[0].Message, um.Data, "not 1 message")
|
||||
// Cleanup
|
||||
if exists("test.id") {
|
||||
os.Remove("test.id")
|
||||
|
@ -35,17 +35,19 @@ type Peer struct {
|
||||
InvitationUrl string `json:"invitation_url,omitempty"`
|
||||
InvitationMessage string `json:"invitation_message,omitempty"`
|
||||
InvitationExpiry time.Time `json:"invitation_expiry,omitempty"`
|
||||
LastMessage string `json:"last_message,omitempty"`
|
||||
LastMessageDate int64 `json:"last_message_date,omitempty"`
|
||||
LastMessageStatus string `json:"last_message_status,omitempty"`
|
||||
// Internal management attributes
|
||||
Visible bool `json:"visible,omitempty"`
|
||||
VisiblePassword string `json:"visible_password,omitempty"`
|
||||
PasswordType string `json:"password_type,omitempty"`
|
||||
Blocked bool `json:"blocked,omitempty"`
|
||||
MessageNotification string `json:"message_notification,omitempty"`
|
||||
MatriochkaMode bool `json:"matriochka_mode,omitempty"`
|
||||
DirectMode bool `json:"direct_mode,omitempty"`
|
||||
LastMessage time.Time `json:"last_message,omitempty"`
|
||||
DbIds []string `json:"db_ids,omitempty"`
|
||||
IsDevice bool `json:"is_device,omitempty"`
|
||||
Visible bool `json:"visible,omitempty"`
|
||||
VisiblePassword string `json:"visible_password,omitempty"`
|
||||
PasswordType string `json:"password_type,omitempty"`
|
||||
Blocked bool `json:"blocked,omitempty"`
|
||||
MessageNotification string `json:"message_notification,omitempty"`
|
||||
MatriochkaMode bool `json:"matriochka_mode,omitempty"`
|
||||
DirectMode bool `json:"direct_mode,omitempty"`
|
||||
DbIds []string `json:"db_ids,omitempty"`
|
||||
IsDevice bool `json:"is_device,omitempty"`
|
||||
dbPassword string
|
||||
}
|
||||
|
||||
@ -213,7 +215,6 @@ func (p *Peer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMe
|
||||
// PackUserMessage will package the previously encrypted message
|
||||
func (p *Peer) PackUserMessage(message []byte, signature []byte) *meowlib.PackedUserMessage {
|
||||
var msg meowlib.PackedUserMessage
|
||||
msg.From = p.MyIdentity.Public
|
||||
msg.Destination = p.ContactLookupKey
|
||||
msg.Payload = message
|
||||
msg.Signature = signature
|
||||
@ -287,12 +288,12 @@ func (p *Peer) UpdateMessage(msg InternalUserMessage) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Peer) LoadLastMessages(alreadyLoadedCount int, oldestMessageId int, qty int) ([]InternalUserMessage, error) {
|
||||
func (p *Peer) LoadLastMessages(alreadyLoadedCount int, oldestMessageId int, qty int) ([]*InternalUserMessage, error) {
|
||||
return GetMessagesHistory(p, alreadyLoadedCount, oldestMessageId, 1, p.GetDbPassword())
|
||||
|
||||
}
|
||||
|
||||
func (p *Peer) LoadNewMessages(lastMessageId int) ([]InternalUserMessage, error) {
|
||||
func (p *Peer) LoadNewMessages(lastMessageId int) ([]*InternalUserMessage, error) {
|
||||
return GetNewMessages(p, lastMessageId, p.GetDbPassword())
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user