mirror of
https://github.com/xaionaro-go/streamctl.git
synced 2025-09-27 03:45:52 +08:00
38 lines
973 B
Go
38 lines
973 B
Go
package chatmessagesstorage
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/facebookincubator/go-belt/tool/logger"
|
|
"github.com/xaionaro-go/streamctl/pkg/streamcontrol"
|
|
"github.com/xaionaro-go/xsync"
|
|
)
|
|
|
|
func (s *ChatMessagesStorage) RemoveMessage(
|
|
ctx context.Context,
|
|
msgID streamcontrol.ChatMessageID,
|
|
) error {
|
|
return xsync.DoA2R1(ctx, &s.Mutex, s.removeMessageLocked, ctx, msgID)
|
|
}
|
|
|
|
func (s *ChatMessagesStorage) removeMessageLocked(
|
|
ctx context.Context,
|
|
msgID streamcontrol.ChatMessageID,
|
|
) (_err error) {
|
|
logger.Tracef(ctx, "removeMessageLocked(ctx, '%v')", msgID)
|
|
defer func() { logger.Tracef(ctx, "/removeMessageLocked(ctx, '%v'): %v", msgID, _err) }()
|
|
|
|
for idx := range s.Messages {
|
|
if s.Messages[idx].MessageID != msgID {
|
|
continue
|
|
}
|
|
s.Messages[idx] = s.Messages[len(s.Messages)-1]
|
|
s.Messages = s.Messages[:len(s.Messages)-1]
|
|
s.IsSorted = false
|
|
s.IsChanged = true
|
|
return nil
|
|
}
|
|
return fmt.Errorf("message with ID '%s' was not found", msgID)
|
|
}
|