mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
hicli/init: send room account data in initial payload
This commit is contained in:
parent
1cef899e5c
commit
b3cd8cc57e
2 changed files with 20 additions and 4 deletions
|
@ -30,6 +30,9 @@ const (
|
||||||
getGlobalAccountDataQuery = `
|
getGlobalAccountDataQuery = `
|
||||||
SELECT user_id, '', type, content FROM account_data WHERE user_id = $1
|
SELECT user_id, '', type, content FROM account_data WHERE user_id = $1
|
||||||
`
|
`
|
||||||
|
getRoomAccountDataQuery = `
|
||||||
|
SELECT user_id, room_id, type, content FROM room_account_data WHERE user_id = $1 AND room_id = $2
|
||||||
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
type AccountDataQuery struct {
|
type AccountDataQuery struct {
|
||||||
|
@ -67,6 +70,10 @@ func (adq *AccountDataQuery) GetAllGlobal(ctx context.Context, userID id.UserID)
|
||||||
return adq.QueryMany(ctx, getGlobalAccountDataQuery, userID)
|
return adq.QueryMany(ctx, getGlobalAccountDataQuery, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (adq *AccountDataQuery) GetAllRoom(ctx context.Context, userID id.UserID, roomID id.RoomID) ([]*AccountData, error) {
|
||||||
|
return adq.QueryMany(ctx, getRoomAccountDataQuery, userID, roomID)
|
||||||
|
}
|
||||||
|
|
||||||
type AccountData struct {
|
type AccountData struct {
|
||||||
UserID id.UserID `json:"user_id"`
|
UserID id.UserID `json:"user_id"`
|
||||||
RoomID id.RoomID `json:"room_id,omitempty"`
|
RoomID id.RoomID `json:"room_id,omitempty"`
|
||||||
|
|
|
@ -19,17 +19,26 @@ func (h *HiClient) getInitialSyncRoom(ctx context.Context, room *database.Room)
|
||||||
Timeline: make([]database.TimelineRowTuple, 0),
|
Timeline: make([]database.TimelineRowTuple, 0),
|
||||||
State: map[event.Type]map[string]database.EventRowID{},
|
State: map[event.Type]map[string]database.EventRowID{},
|
||||||
Notifications: make([]SyncNotification, 0),
|
Notifications: make([]SyncNotification, 0),
|
||||||
AccountData: make(map[event.Type]*database.AccountData),
|
}
|
||||||
|
ad, err := h.DB.AccountData.GetAllRoom(ctx, h.Account.UserID, room.ID)
|
||||||
|
if err != nil {
|
||||||
|
zerolog.Ctx(ctx).Err(err).Stringer("room_id", room.ID).Msg("Failed to get room account data")
|
||||||
|
syncRoom.AccountData = make(map[event.Type]*database.AccountData)
|
||||||
|
} else {
|
||||||
|
syncRoom.AccountData = make(map[event.Type]*database.AccountData, len(ad))
|
||||||
|
for _, data := range ad {
|
||||||
|
syncRoom.AccountData[event.Type{Type: data.Type, Class: event.AccountDataEventType}] = data
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if room.PreviewEventRowID != 0 {
|
if room.PreviewEventRowID != 0 {
|
||||||
previewEvent, err := h.DB.Event.GetByRowID(ctx, room.PreviewEventRowID)
|
previewEvent, err := h.DB.Event.GetByRowID(ctx, room.PreviewEventRowID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(ctx).Err(err).Msg("Failed to get preview event for room")
|
zerolog.Ctx(ctx).Err(err).Stringer("room_id", room.ID).Msg("Failed to get preview event for room")
|
||||||
} else if previewEvent != nil {
|
} else if previewEvent != nil {
|
||||||
h.ReprocessExistingEvent(ctx, previewEvent)
|
h.ReprocessExistingEvent(ctx, previewEvent)
|
||||||
previewMember, err := h.DB.CurrentState.Get(ctx, room.ID, event.StateMember, previewEvent.Sender.String())
|
previewMember, err := h.DB.CurrentState.Get(ctx, room.ID, event.StateMember, previewEvent.Sender.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(ctx).Err(err).Msg("Failed to get preview member event for room")
|
zerolog.Ctx(ctx).Err(err).Stringer("room_id", room.ID).Msg("Failed to get preview member event for room")
|
||||||
} else if previewMember != nil {
|
} else if previewMember != nil {
|
||||||
syncRoom.Events = append(syncRoom.Events, previewMember)
|
syncRoom.Events = append(syncRoom.Events, previewMember)
|
||||||
syncRoom.State[event.StateMember] = map[string]database.EventRowID{
|
syncRoom.State[event.StateMember] = map[string]database.EventRowID{
|
||||||
|
@ -39,7 +48,7 @@ func (h *HiClient) getInitialSyncRoom(ctx context.Context, room *database.Room)
|
||||||
if previewEvent.LastEditRowID != nil {
|
if previewEvent.LastEditRowID != nil {
|
||||||
lastEdit, err := h.DB.Event.GetByRowID(ctx, *previewEvent.LastEditRowID)
|
lastEdit, err := h.DB.Event.GetByRowID(ctx, *previewEvent.LastEditRowID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(ctx).Err(err).Msg("Failed to get last edit for preview event")
|
zerolog.Ctx(ctx).Err(err).Stringer("room_id", room.ID).Msg("Failed to get last edit for preview event")
|
||||||
} else if lastEdit != nil {
|
} else if lastEdit != nil {
|
||||||
h.ReprocessExistingEvent(ctx, lastEdit)
|
h.ReprocessExistingEvent(ctx, lastEdit)
|
||||||
syncRoom.Events = append(syncRoom.Events, lastEdit)
|
syncRoom.Events = append(syncRoom.Events, lastEdit)
|
||||||
|
|
Loading…
Add table
Reference in a new issue