mirror of
https://github.com/Kyren223/eko.git
synced 2025-09-05 21:18:14 +00:00
Chat properly handles and displays the "new message separator"
This commit is contained in:
@@ -125,8 +125,7 @@ type Model struct {
|
||||
selectedMessage *data.Message
|
||||
editingMessage *data.Message
|
||||
|
||||
outdatedLastReadMsg *snowflake.ID
|
||||
keepPreviousLastRead bool
|
||||
outdatedLastReadMsg *snowflake.ID
|
||||
|
||||
messagesHeight int
|
||||
maxMessagesHeight int
|
||||
@@ -143,27 +142,26 @@ func New() Model {
|
||||
vi := viminput.New()
|
||||
|
||||
return Model{
|
||||
vi: vi,
|
||||
focus: false,
|
||||
locked: false,
|
||||
hasReadAccess: false,
|
||||
hasWriteAccess: false,
|
||||
networkIndex: -1,
|
||||
receiverIndex: -1,
|
||||
frequencyIndex: -1,
|
||||
base: SnapToBottom,
|
||||
index: Unselected,
|
||||
selectedMessage: nil,
|
||||
editingMessage: nil,
|
||||
outdatedLastReadMsg: nil,
|
||||
keepPreviousLastRead: false,
|
||||
messagesHeight: 0,
|
||||
maxMessagesHeight: -1,
|
||||
messagesCache: nil,
|
||||
prerender: "",
|
||||
width: -1,
|
||||
style: blurStyle(),
|
||||
borderStyle: ViBlurredBorder(),
|
||||
vi: vi,
|
||||
focus: false,
|
||||
locked: false,
|
||||
hasReadAccess: false,
|
||||
hasWriteAccess: false,
|
||||
networkIndex: -1,
|
||||
receiverIndex: -1,
|
||||
frequencyIndex: -1,
|
||||
base: SnapToBottom,
|
||||
index: Unselected,
|
||||
selectedMessage: nil,
|
||||
editingMessage: nil,
|
||||
outdatedLastReadMsg: nil,
|
||||
messagesHeight: 0,
|
||||
maxMessagesHeight: -1,
|
||||
messagesCache: nil,
|
||||
prerender: "",
|
||||
width: -1,
|
||||
style: blurStyle(),
|
||||
borderStyle: ViBlurredBorder(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,30 +214,11 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
||||
}
|
||||
|
||||
lastMsg := state.GetLastMessage(frequency.ID)
|
||||
if lastMsg != nil {
|
||||
if m.base == SnapToBottom && lastMsg != nil {
|
||||
// lastReadMsg := state.State.LastReadMessages[frequency.ID]
|
||||
// if m.keepPreviousLastRead && m.previousLastReadMsg != nil && lastReadMsg != nil &&
|
||||
// *lastReadMsg != *lastMsg && *lastReadMsg != *m.previousLastReadMsg {
|
||||
// m.keepPreviousLastRead = false
|
||||
// }
|
||||
|
||||
state.State.LastReadMessages[frequency.ID] = lastMsg
|
||||
delete(state.State.RemoteNotifications, frequency.ID)
|
||||
} else if m.base == SnapToBottom {
|
||||
assert.Never("lastMsg is nil")
|
||||
}
|
||||
if m.base != SnapToBottom {
|
||||
// FIXME:
|
||||
// assert.Assert(
|
||||
// m.keepPreviousLastRead, "debug reached m.keep",
|
||||
// "m.base", m.base,
|
||||
// "lastMsg", lastMsg,
|
||||
// "lastReadMessage", state.State.LastReadMessages[frequency.ID],
|
||||
// "m.previousLastReadMessage", m.previousLastReadMsg,
|
||||
// )
|
||||
m.keepPreviousLastRead = false
|
||||
}
|
||||
if lastMsg == nil {
|
||||
m.outdatedLastReadMsg = nil
|
||||
} else if m.base == SnapToBottom {
|
||||
state.State.LastReadMessages[frequency.ID] = lastMsg
|
||||
delete(state.State.RemoteNotifications, frequency.ID)
|
||||
}
|
||||
|
||||
m.hasReadAccess = frequency.Perms != packet.PermNoAccess || member.IsAdmin
|
||||
@@ -281,16 +260,11 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
||||
}
|
||||
|
||||
lastMsg := state.GetLastMessage(receiverId)
|
||||
if m.base != SnapToBottom {
|
||||
m.keepPreviousLastRead = false
|
||||
} else if lastMsg != nil {
|
||||
lastReadMsg := state.State.LastReadMessages[receiverId]
|
||||
if m.keepPreviousLastRead && m.outdatedLastReadMsg != nil && lastReadMsg != nil &&
|
||||
*lastReadMsg != *lastMsg && *lastReadMsg != *m.outdatedLastReadMsg {
|
||||
m.keepPreviousLastRead = false
|
||||
}
|
||||
|
||||
if lastMsg == nil {
|
||||
m.outdatedLastReadMsg = nil
|
||||
} else if m.base == SnapToBottom {
|
||||
state.State.LastReadMessages[receiverId] = lastMsg
|
||||
delete(state.State.RemoteNotifications, receiverId)
|
||||
}
|
||||
|
||||
m.hasReadAccess = true
|
||||
@@ -836,7 +810,6 @@ func (m *Model) ResetBeforeSwitch() {
|
||||
m.SetIndex(Unselected)
|
||||
m.maxMessagesHeight = -1
|
||||
m.outdatedLastReadMsg = nil
|
||||
m.keepPreviousLastRead = false
|
||||
}()
|
||||
|
||||
networkId := state.NetworkId(m.networkIndex)
|
||||
@@ -873,10 +846,6 @@ func (m *Model) RestoreAfterSwitch() tea.Cmd {
|
||||
log.Println("Restoring frequency:", frequency.ID)
|
||||
|
||||
m.outdatedLastReadMsg = state.State.LastReadMessages[frequency.ID]
|
||||
lastMsg := state.GetLastMessage(frequency.ID)
|
||||
if m.outdatedLastReadMsg != nil && lastMsg != nil && *m.outdatedLastReadMsg != *lastMsg {
|
||||
m.keepPreviousLastRead = true
|
||||
}
|
||||
|
||||
if val, ok := msgs[frequency.ID]; ok {
|
||||
m.vi.SetString(val.IncompleteMessage)
|
||||
@@ -898,10 +867,6 @@ func (m *Model) RestoreAfterSwitch() tea.Cmd {
|
||||
log.Println("Restoring signal:", receiverId)
|
||||
|
||||
m.outdatedLastReadMsg = state.State.LastReadMessages[receiverId]
|
||||
lastMsg := state.GetLastMessage(receiverId)
|
||||
if m.outdatedLastReadMsg != nil && lastMsg != nil && *m.outdatedLastReadMsg != *lastMsg {
|
||||
m.keepPreviousLastRead = true
|
||||
}
|
||||
|
||||
if val, ok := msgs[receiverId]; ok {
|
||||
m.vi.SetString(val.IncompleteMessage)
|
||||
@@ -1657,3 +1622,34 @@ func (m *Model) NewMsgSep(height, remainingHeight int) string {
|
||||
|
||||
return newMsgStyle.Render(line + NewText)
|
||||
}
|
||||
|
||||
func (m *Model) OnNewMessagesReceived(info *packet.MessagesInfo) {
|
||||
var chatId *snowflake.ID = nil
|
||||
if m.receiverIndex != -1 {
|
||||
chatId = &state.Data.Signals[m.receiverIndex]
|
||||
} else {
|
||||
networkId := state.NetworkId(m.networkIndex)
|
||||
if m.frequencyIndex != -1 && networkId != nil {
|
||||
frequencies := state.State.Frequencies[*networkId]
|
||||
chatId = &frequencies[m.frequencyIndex].ID
|
||||
}
|
||||
}
|
||||
if chatId == nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, msg := range info.Messages {
|
||||
if msg.SenderID == *state.UserID {
|
||||
m.outdatedLastReadMsg = &msg.ID
|
||||
return
|
||||
}
|
||||
|
||||
if m.base == SnapToBottom {
|
||||
lastMsg := state.GetLastMessage(*chatId)
|
||||
if lastMsg != nil && m.outdatedLastReadMsg != nil &&
|
||||
*lastMsg == *m.outdatedLastReadMsg {
|
||||
m.outdatedLastReadMsg = &msg.ID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -328,6 +328,7 @@ func (m *Model) updateConnected(message tea.Msg) tea.Cmd {
|
||||
}
|
||||
|
||||
case *packet.MessagesInfo:
|
||||
m.chat.OnNewMessagesReceived(msg) // MUST BE BEFORE STATE UPDATE
|
||||
state.UpdateMessages(msg)
|
||||
|
||||
case *packet.TrustInfo:
|
||||
|
Reference in New Issue
Block a user