Changeset 452 in code


Ignore:
Timestamp:
Feb 10, 2021, 12:48:41 PM (4 years ago)
Author:
contact
Message:

Introduce downstreamConn.sendTargetBacklog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r451 r452  
    980980
    981981func (dc *downstreamConn) sendNetworkBacklog(net *network) {
     982        for target := range net.delivered {
     983                dc.sendTargetBacklog(net, target)
     984        }
     985}
     986
     987func (dc *downstreamConn) sendTargetBacklog(net *network, target string) {
    982988        if dc.caps["draft/chathistory"] || dc.user.msgStore == nil {
    983989                return
    984990        }
    985         for target, delivered := range net.delivered {
    986                 if ch, ok := net.channels[target]; ok && ch.Detached {
     991        if ch, ok := net.channels[target]; ok && ch.Detached {
     992                return
     993        }
     994        delivered, ok := net.delivered[target]
     995        if !ok {
     996                return
     997        }
     998        lastDelivered, ok := delivered[dc.clientName]
     999        if !ok {
     1000                return
     1001        }
     1002
     1003        limit := 4000
     1004        history, err := dc.user.msgStore.LoadLatestID(net, target, lastDelivered, limit)
     1005        if err != nil {
     1006                dc.logger.Printf("failed to send implicit history for %q: %v", target, err)
     1007                return
     1008        }
     1009
     1010        batchRef := "history"
     1011        if dc.caps["batch"] {
     1012                dc.SendMessage(&irc.Message{
     1013                        Prefix:  dc.srv.prefix(),
     1014                        Command: "BATCH",
     1015                        Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)},
     1016                })
     1017        }
     1018
     1019        for _, msg := range history {
     1020                if !dc.messageSupportsHistory(msg) {
    9871021                        continue
    9881022                }
    9891023
    990                 lastDelivered, ok := delivered[dc.clientName]
    991                 if !ok {
    992                         continue
    993                 }
    994 
    995                 limit := 4000
    996                 history, err := dc.user.msgStore.LoadLatestID(net, target, lastDelivered, limit)
    997                 if err != nil {
    998                         dc.logger.Printf("failed to send implicit history for %q: %v", target, err)
    999                         continue
    1000                 }
    1001 
    1002                 batchRef := "history"
    10031024                if dc.caps["batch"] {
    1004                         dc.SendMessage(&irc.Message{
    1005                                 Prefix:  dc.srv.prefix(),
    1006                                 Command: "BATCH",
    1007                                 Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)},
    1008                         })
    1009                 }
    1010 
    1011                 for _, msg := range history {
    1012                         if !dc.messageSupportsHistory(msg) {
    1013                                 continue
    1014                         }
    1015 
    1016                         if dc.caps["batch"] {
    1017                                 msg.Tags["batch"] = irc.TagValue(batchRef)
    1018                         }
    1019                         dc.SendMessage(dc.marshalMessage(msg, net))
    1020                 }
    1021 
    1022                 if dc.caps["batch"] {
    1023                         dc.SendMessage(&irc.Message{
    1024                                 Prefix:  dc.srv.prefix(),
    1025                                 Command: "BATCH",
    1026                                 Params:  []string{"-" + batchRef},
    1027                         })
    1028                 }
     1025                        msg.Tags["batch"] = irc.TagValue(batchRef)
     1026                }
     1027                dc.SendMessage(dc.marshalMessage(msg, net))
     1028        }
     1029
     1030        if dc.caps["batch"] {
     1031                dc.SendMessage(&irc.Message{
     1032                        Prefix:  dc.srv.prefix(),
     1033                        Command: "BATCH",
     1034                        Params:  []string{"-" + batchRef},
     1035                })
    10291036        }
    10301037}
Note: See TracChangeset for help on using the changeset viewer.