From dfd46680879954fed29f18863354139d3d2ff34b Mon Sep 17 00:00:00 2001 From: Andrea Maria Piana Date: Tue, 25 May 2021 11:40:02 +0200 Subject: [PATCH] Add mentioned field This commit adds a Mentioned field to Message, which indicates whether the receiving user is mentioned in the message. --- VERSION | 2 +- appdatabase/migrations/bindata.go | 2 +- protocol/chat_test.go | 2 +- protocol/common/message.go | 38 ++++++++++++++----- protocol/common/message_test.go | 13 ++++--- protocol/group_chat_system_messages.go | 3 +- protocol/local_notifications.go | 14 ++----- protocol/message_handler.go | 4 +- protocol/message_persistence.go | 6 ++- protocol/messenger.go | 18 ++++----- protocol/migrations/migrations.go | 34 ++++++++++++++--- .../sqlite/1621933219_add_mentioned.up.sql | 1 + protocol/transport/migrations/migrations.go | 6 +-- 13 files changed, 93 insertions(+), 50 deletions(-) create mode 100644 protocol/migrations/sqlite/1621933219_add_mentioned.up.sql diff --git a/VERSION b/VERSION index f0c36dcc8..1cc77c63e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.79.4 +0.79.5 diff --git a/appdatabase/migrations/bindata.go b/appdatabase/migrations/bindata.go index 13eac75f2..a402a0284 100644 --- a/appdatabase/migrations/bindata.go +++ b/appdatabase/migrations/bindata.go @@ -822,7 +822,7 @@ func _0022_pending_transfersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(0644), modTime: time.Unix(1621335496, 0)} + info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0x9, 0xe6, 0x6, 0xae, 0x60, 0xdd, 0xbb, 0x76, 0xac, 0xe0, 0x57, 0x30, 0x67, 0x37, 0x93, 0x40, 0x13, 0xec, 0xf2, 0x6e, 0x61, 0xa, 0x14, 0xb2, 0xb1, 0xbd, 0x91, 0xf8, 0x89, 0xb3, 0xe3}} return a, nil } diff --git a/protocol/chat_test.go b/protocol/chat_test.go index 8cf390d4a..d49223778 100644 --- a/protocol/chat_test.go +++ b/protocol/chat_test.go @@ -129,7 +129,7 @@ func (s *ChatTestSuite) TestSerializeJSON() { message.Clock = 1 message.Text = "`some markdown text`" - s.Require().NoError(message.PrepareContent()) + s.Require().NoError(message.PrepareContent("")) message.ParsedTextAst = nil chat.LastMessage = message diff --git a/protocol/common/message.go b/protocol/common/message.go index 898898747..7462af15a 100644 --- a/protocol/common/message.go +++ b/protocol/common/message.go @@ -145,6 +145,9 @@ type Message struct { // Mentions is an array of mentions for a given message Mentions []string + // Mentioned is whether the user is mentioned in the message + Mentioned bool `json:"mentioned"` + // Links is an array of links within given message Links []string } @@ -185,6 +188,7 @@ func (m *Message) MarshalJSON() ([]byte, error) { ContentType protobuf.ChatMessage_ContentType `json:"contentType"` MessageType protobuf.MessageType `json:"messageType"` Mentions []string `json:"mentions,omitempty"` + Mentioned bool `json:"mentioned,omitempty"` Links []string `json:"links,omitempty"` }{ ID: m.ID, @@ -212,6 +216,7 @@ func (m *Message) MarshalJSON() ([]byte, error) { Timestamp: m.Timestamp, ContentType: m.ContentType, Mentions: m.Mentions, + Mentioned: m.Mentioned, Links: m.Links, MessageType: m.MessageType, CommandParameters: m.CommandParameters, @@ -377,8 +382,10 @@ func (v *SimplifiedTextVisitor) Visit(node ast.Node, entering bool) ast.WalkStat // implement interface of https://github.com/status-im/markdown/blob/b9fe921681227b1dace4b56364e15edb3b698308/ast/node.go#L701 type MentionsAndLinksVisitor struct { - mentions []string - links []string + identity string + mentioned bool + mentions []string + links []string } func (v *MentionsAndLinksVisitor) Visit(node ast.Node, entering bool) ast.WalkStatus { @@ -388,7 +395,11 @@ func (v *MentionsAndLinksVisitor) Visit(node ast.Node, entering bool) ast.WalkSt } switch n := node.(type) { case *ast.Mention: - v.mentions = append(v.mentions, string(n.Literal)) + mention := string(n.Literal) + if mention == v.identity { + v.mentioned = true + } + v.mentions = append(v.mentions, mention) case *ast.Link: v.links = append(v.links, string(n.Destination)) } @@ -396,17 +407,24 @@ func (v *MentionsAndLinksVisitor) Visit(node ast.Node, entering bool) ast.WalkSt return ast.GoToNext } -func extractMentionsAndLinks(parsedText ast.Node) ([]string, []string) { - visitor := &MentionsAndLinksVisitor{} +func runMentionsAndLinksVisitor(parsedText ast.Node, identity string) *MentionsAndLinksVisitor { + visitor := &MentionsAndLinksVisitor{identity: identity} ast.Walk(parsedText, visitor) - return visitor.mentions, visitor.links + return visitor } // PrepareContent return the parsed content of the message, the line-count and whether // is a right-to-left message -func (m *Message) PrepareContent() error { +func (m *Message) PrepareContent(identity string) error { parsedText := markdown.Parse([]byte(m.Text), nil) - m.Mentions, m.Links = extractMentionsAndLinks(parsedText) + visitor := runMentionsAndLinksVisitor(parsedText, identity) + m.Mentions = visitor.mentions + m.Links = visitor.links + // Leave it set if already set, as sometimes we might run this without + // an identity + if !m.Mentioned { + m.Mentioned = visitor.mentioned + } jsonParsedText, err := json.Marshal(parsedText) if err != nil { return err @@ -423,7 +441,7 @@ func (m *Message) PrepareContent() error { // GetSimplifiedText returns a the text stripped of all the markdown and with mentions // replaced by canonical names -func (m *Message) GetSimplifiedText(canonicalNames map[string]string) (string, error) { +func (m *Message) GetSimplifiedText(identity string, canonicalNames map[string]string) (string, error) { if m.ContentType == protobuf.ChatMessage_AUDIO { return "Audio", nil @@ -439,7 +457,7 @@ func (m *Message) GetSimplifiedText(canonicalNames map[string]string) (string, e } if m.ParsedTextAst == nil { - err := m.PrepareContent() + err := m.PrepareContent(identity) if err != nil { return "", err } diff --git a/protocol/common/message_test.go b/protocol/common/message_test.go index ae1020bb5..cdf26e631 100644 --- a/protocol/common/message_test.go +++ b/protocol/common/message_test.go @@ -31,7 +31,7 @@ func TestPrepareContentImage(t *testing.T) { } message.Payload = &protobuf.ChatMessage_Image{Image: &image} - require.NoError(t, message.PrepareContent()) + require.NoError(t, message.PrepareContent("")) require.Equal(t, expectedJPEG, message.Base64Image) } @@ -51,7 +51,7 @@ func TestPrepareContentAudio(t *testing.T) { } message.Payload = &protobuf.ChatMessage_Audio{Audio: &audio} - require.NoError(t, message.PrepareContent()) + require.NoError(t, message.PrepareContent("")) require.Equal(t, expectedAAC, message.Base64Audio) } @@ -79,10 +79,11 @@ func TestPrepareContentMentions(t *testing.T) { message.Text = "hey @" + pk1String + " @" + pk2String - require.NoError(t, message.PrepareContent()) + require.NoError(t, message.PrepareContent(pk2String)) require.Len(t, message.Mentions, 2) require.Equal(t, message.Mentions[0], pk1String) require.Equal(t, message.Mentions[1], pk2String) + require.True(t, message.Mentioned) } func TestPrepareContentLinks(t *testing.T) { @@ -93,7 +94,7 @@ func TestPrepareContentLinks(t *testing.T) { message.Text = "Just look at that repo " + link1 + " . And watch this video - " + link2 - require.NoError(t, message.PrepareContent()) + require.NoError(t, message.PrepareContent("")) require.Len(t, message.Links, 2) require.Equal(t, message.Links[0], link1) require.Equal(t, message.Links[1], link2) @@ -114,7 +115,7 @@ func TestPrepareSimplifiedText(t *testing.T) { message.Text = "hey @" + pk1String + " @" + pk2String - require.NoError(t, message.PrepareContent()) + require.NoError(t, message.PrepareContent("")) require.Len(t, message.Mentions, 2) require.Equal(t, message.Mentions[0], pk1String) require.Equal(t, message.Mentions[1], pk2String) @@ -123,7 +124,7 @@ func TestPrepareSimplifiedText(t *testing.T) { canonicalNames[pk1String] = canonicalName1 canonicalNames[pk2String] = canonicalName2 - simplifiedText, err := message.GetSimplifiedText(canonicalNames) + simplifiedText, err := message.GetSimplifiedText("", canonicalNames) require.NoError(t, err) require.Equal(t, "hey "+canonicalName1+" "+canonicalName2, simplifiedText) } diff --git a/protocol/group_chat_system_messages.go b/protocol/group_chat_system_messages.go index eb940d134..49827e3d4 100644 --- a/protocol/group_chat_system_messages.go +++ b/protocol/group_chat_system_messages.go @@ -84,7 +84,8 @@ func eventToSystemMessage(e v1protocol.MembershipUpdateEvent, translations *syst Seen: true, ID: types.EncodeHex(crypto.Keccak256(e.Signature)), } - _ = message.PrepareContent() + // We don't pass an identity here as system messages don't need the mentioned flag + _ = message.PrepareContent("") return message } diff --git a/protocol/local_notifications.go b/protocol/local_notifications.go index 1faaa3ce6..8fe7cc695 100644 --- a/protocol/local_notifications.go +++ b/protocol/local_notifications.go @@ -26,19 +26,12 @@ func showMessageNotification(publicKey ecdsa.PublicKey, message *common.Message, return true } - publicKeyString := common.PubkeyToHex(&publicKey) - mentioned := false - for _, mention := range message.Mentions { - if publicKeyString == mention { - mentioned = true - } - } - - if mentioned { + if message.Mentioned { return true } if responseTo != nil { + publicKeyString := common.PubkeyToHex(&publicKey) return responseTo.From == publicKeyString } @@ -92,7 +85,8 @@ func (n NotificationBody) toMessageNotification(id string, contacts *contactMap) canonicalNames[mentionID] = contact.CanonicalName() } - simplifiedText, err := n.Message.GetSimplifiedText(canonicalNames) + // We don't pass idenity as only interested in the simplified text + simplifiedText, err := n.Message.GetSimplifiedText("", canonicalNames) if err != nil { return nil, err } diff --git a/protocol/message_handler.go b/protocol/message_handler.go index 0ea033980..dbed3d52a 100644 --- a/protocol/message_handler.go +++ b/protocol/message_handler.go @@ -198,7 +198,7 @@ func (m *MessageHandler) handleCommandMessage(state *ReceivedMessageState, messa message.Identicon = state.CurrentMessageState.Contact.Identicon message.WhisperTimestamp = state.CurrentMessageState.WhisperTimestamp - if err := message.PrepareContent(); err != nil { + if err := message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)); err != nil { return fmt.Errorf("failed to prepare content: %v", err) } chat, err := m.matchChatEntity(message, state.AllChats, state.AllContacts, state.Timesource) @@ -579,7 +579,7 @@ func (m *MessageHandler) HandleChatMessage(state *ReceivedMessageState) error { WhisperTimestamp: state.CurrentMessageState.WhisperTimestamp, } - err := receivedMessage.PrepareContent() + err := receivedMessage.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return fmt.Errorf("failed to prepare message content: %v", err) } diff --git a/protocol/message_persistence.go b/protocol/message_persistence.go index 968edf5f5..2355cc755 100644 --- a/protocol/message_persistence.go +++ b/protocol/message_persistence.go @@ -51,7 +51,8 @@ func (db sqlitePersistence) tableUserMessagesAllFields() string { line_count, response_to, gap_from, - gap_to` + gap_to, + mentioned` } func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string { @@ -91,6 +92,7 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string { m1.response_to, m1.gap_from, m1.gap_to, + m1.mentioned, m2.source, m2.text, m2.parsed_text, @@ -167,6 +169,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message &message.ResponseTo, &gapFrom, &gapTo, + &message.Mentioned, "edFrom, "edText, "edParsedText, @@ -320,6 +323,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message) message.ResponseTo, gapFrom, gapTo, + message.Mentioned, }, nil } diff --git a/protocol/messenger.go b/protocol/messenger.go index 116189dfb..f3b3af331 100644 --- a/protocol/messenger.go +++ b/protocol/messenger.go @@ -2091,7 +2091,7 @@ func (m *Messenger) sendChatMessage(ctx context.Context, message *common.Message message.OutgoingStatus = common.OutgoingStatusSent } message.ID = rawMessage.ID - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3181,7 +3181,7 @@ func (m *Messenger) RequestTransaction(ctx context.Context, chatID, value, contr message.ID = messageID message.CommandParameters.ID = messageID - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3255,7 +3255,7 @@ func (m *Messenger) RequestAddressForTransaction(ctx context.Context, chatID, fr message.ID = messageID message.CommandParameters.ID = messageID - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3348,7 +3348,7 @@ func (m *Messenger) AcceptRequestAddressForTransaction(ctx context.Context, mess message.CommandParameters.Address = address message.CommandParameters.CommandState = common.CommandStateRequestAddressForTransactionAccepted - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3428,7 +3428,7 @@ func (m *Messenger) DeclineRequestTransaction(ctx context.Context, messageID str message.ID = rawMessage.ID message.CommandParameters.CommandState = common.CommandStateRequestTransactionDeclined - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3508,7 +3508,7 @@ func (m *Messenger) DeclineRequestAddressForTransaction(ctx context.Context, mes message.ID = rawMessage.ID message.CommandParameters.CommandState = common.CommandStateRequestAddressForTransactionDeclined - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3605,7 +3605,7 @@ func (m *Messenger) AcceptRequestTransaction(ctx context.Context, transactionHas message.CommandParameters.Signature = signature message.CommandParameters.CommandState = common.CommandStateTransactionSent - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3684,7 +3684,7 @@ func (m *Messenger) SendTransaction(ctx context.Context, chatID, value, contract CommandState: common.CommandStateTransactionSent, } - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } @@ -3766,7 +3766,7 @@ func (m *Messenger) ValidateTransactions(ctx context.Context, addresses []types. message.CommandParameters.CommandState = common.CommandStateTransactionSent message.CommandParameters.TransactionHash = validationResult.Transaction.TransactionHash - err = message.PrepareContent() + err = message.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) if err != nil { return nil, err } diff --git a/protocol/migrations/migrations.go b/protocol/migrations/migrations.go index 9bc712b68..17ce2ade6 100644 --- a/protocol/migrations/migrations.go +++ b/protocol/migrations/migrations.go @@ -30,6 +30,7 @@ // 1618923660_create_pin_messages.up.sql (265B) // 1619094007_add_joined_chat_field.up.sql (101B) // 1619099821_add_last_synced_field.up.sql (226B) +// 1621933219_add_mentioned.up.sql (70B) // README.md (554B) // doc.go (850B) @@ -655,7 +656,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1621335496, 0)} + info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}} return a, nil } @@ -675,7 +676,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1621335574, 0)} + info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}} return a, nil } @@ -695,11 +696,31 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1621335717, 0)} + info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}} return a, nil } +var __1621933219_add_mentionedUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0a\x80\x30\x0c\x05\xd0\xdd\x53\xfc\x7b\x38\xa5\x36\x9d\x62\x0b\x9a\xce\x22\x18\xc4\xa1\x15\x8c\xde\xdf\x47\xa2\xbc\x40\x29\x08\xe3\x73\x7b\xb6\x66\xee\xfb\x69\x0e\x8a\x11\x53\x91\x3a\x67\x34\xeb\xef\x75\x77\x3b\x10\x4a\x11\xa6\x8c\xc8\x89\xaa\x28\x12\xc9\xca\xe3\xf0\x07\x00\x00\xff\xff\x76\x1d\xdd\xab\x46\x00\x00\x00") + +func _1621933219_add_mentionedUpSqlBytes() ([]byte, error) { + return bindataRead( + __1621933219_add_mentionedUpSql, + "1621933219_add_mentioned.up.sql", + ) +} + +func _1621933219_add_mentionedUpSql() (*asset, error) { + bytes, err := _1621933219_add_mentionedUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1621933243, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}} + return a, nil +} + var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") func readmeMdBytes() ([]byte, error) { @@ -891,6 +912,8 @@ var _bindata = map[string]func() (*asset, error){ "1619099821_add_last_synced_field.up.sql": _1619099821_add_last_synced_fieldUpSql, + "1621933219_add_mentioned.up.sql": _1621933219_add_mentionedUpSql, + "README.md": readmeMd, "doc.go": docGo, @@ -967,8 +990,9 @@ var _bintree = &bintree{nil, map[string]*bintree{ "1618923660_create_pin_messages.up.sql": &bintree{_1618923660_create_pin_messagesUpSql, map[string]*bintree{}}, "1619094007_add_joined_chat_field.up.sql": &bintree{_1619094007_add_joined_chat_fieldUpSql, map[string]*bintree{}}, "1619099821_add_last_synced_field.up.sql": &bintree{_1619099821_add_last_synced_fieldUpSql, map[string]*bintree{}}, - "README.md": &bintree{readmeMd, map[string]*bintree{}}, - "doc.go": &bintree{docGo, map[string]*bintree{}}, + "1621933219_add_mentioned.up.sql": &bintree{_1621933219_add_mentionedUpSql, map[string]*bintree{}}, + "README.md": &bintree{readmeMd, map[string]*bintree{}}, + "doc.go": &bintree{docGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/protocol/migrations/sqlite/1621933219_add_mentioned.up.sql b/protocol/migrations/sqlite/1621933219_add_mentioned.up.sql new file mode 100644 index 000000000..49262420b --- /dev/null +++ b/protocol/migrations/sqlite/1621933219_add_mentioned.up.sql @@ -0,0 +1 @@ +ALTER TABLE user_messages ADD COLUMN mentioned BOOLEAN DEFAULT FALSE; diff --git a/protocol/transport/migrations/migrations.go b/protocol/transport/migrations/migrations.go index 277b265ef..cc84b4434 100644 --- a/protocol/transport/migrations/migrations.go +++ b/protocol/transport/migrations/migrations.go @@ -86,7 +86,7 @@ func _1561059284_add_waku_keysDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1621335496, 0)} + info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0x2a, 0x7e, 0x9, 0xa3, 0xdd, 0xc6, 0x3, 0xfa, 0xaa, 0x98, 0xa0, 0x26, 0x5e, 0x67, 0x43, 0xe6, 0x20, 0xfd, 0x10, 0xfd, 0x60, 0x89, 0x17, 0x13, 0x87, 0x1b, 0x44, 0x36, 0x79, 0xb6, 0x60}} return a, nil } @@ -106,7 +106,7 @@ func _1561059284_add_waku_keysUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1621335496, 0)} + info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x5c, 0x8, 0x32, 0xef, 0x12, 0x88, 0x21, 0xd, 0x7a, 0x42, 0x4d, 0xe7, 0x2d, 0x6c, 0x99, 0xb6, 0x1, 0xf1, 0xba, 0x2c, 0x40, 0x8d, 0xa9, 0x4b, 0xe6, 0xc4, 0x21, 0xec, 0x47, 0x6b, 0xf7}} return a, nil } @@ -126,7 +126,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1621335496, 0)} + info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1621583900, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x6a, 0xc1, 0xce, 0x94, 0xf6, 0xef, 0xf1, 0x97, 0x95, 0xb, 0x35, 0xaf, 0x5f, 0xe7, 0x5f, 0xac, 0x6e, 0xb8, 0xab, 0xba, 0xb5, 0x35, 0x97, 0x22, 0x36, 0x11, 0xce, 0x44, 0xfc, 0xfa, 0xac}} return a, nil }