From ac806e5c62ac0252e559e9ffc69f41c66b996a5e Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 28 May 2021 18:07:54 -0400 Subject: [PATCH] fix znc.in/playback for individual DM targets This is a regression introduced in 0d05ab4ff4249f; playback for an individual DM target would play all DMs. --- irc/client.go | 2 +- irc/znc.go | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/irc/client.go b/irc/client.go index 68d83933..cff4669a 100644 --- a/irc/client.go +++ b/irc/client.go @@ -747,7 +747,7 @@ func (client *Client) playReattachMessages(session *Session) { } if !session.autoreplayMissedSince.IsZero() && !hasHistoryCaps { rb := NewResponseBuffer(session) - zncPlayPrivmsgs(client, rb, "", time.Now().UTC(), session.autoreplayMissedSince) + zncPlayPrivmsgsFromAll(client, rb, time.Now().UTC(), session.autoreplayMissedSince) rb.Send(true) } session.autoreplayMissedSince = time.Time{} diff --git a/irc/znc.go b/irc/znc.go index 48e066f7..5b64d285 100644 --- a/irc/znc.go +++ b/irc/znc.go @@ -165,7 +165,7 @@ func zncPlaybackPlayHandler(client *Client, command string, params []string, rb } if playPrivmsgs { - zncPlayPrivmsgs(client, rb, "", start, end) + zncPlayPrivmsgsFromAll(client, rb, start, end) } rb.session.zncPlaybackTimes = &zncPlaybackTimes{ @@ -183,16 +183,24 @@ func zncPlaybackPlayHandler(client *Client, command string, params []string, rb } for _, cfNick := range nickTargets { - zncPlayPrivmsgs(client, rb, cfNick, start, end) + zncPlayPrivmsgsFrom(client, rb, cfNick, start, end) rb.Flush(true) } } -func zncPlayPrivmsgs(client *Client, rb *ResponseBuffer, target string, start, end time.Time) { - _, sequence, _ := client.server.GetHistorySequence(nil, client, target) - if sequence == nil { +func zncPlayPrivmsgsFrom(client *Client, rb *ResponseBuffer, target string, start, end time.Time) { + _, sequence, err := client.server.GetHistorySequence(nil, client, target) + if sequence == nil || err != nil { return } + zncMax := client.server.Config().History.ZNCMax + items, err := sequence.Between(history.Selector{Time: start}, history.Selector{Time: end}, zncMax) + if err == nil && len(items) != 0 { + client.replayPrivmsgHistory(rb, items, target) + } +} + +func zncPlayPrivmsgsFromAll(client *Client, rb *ResponseBuffer, start, end time.Time) { zncMax := client.server.Config().History.ZNCMax items, err := client.privmsgsBetween(start, end, maxDMTargetsForAutoplay, zncMax) if err == nil && len(items) != 0 {