Changeset 360 in code for trunk/downstream.go


Ignore:
Timestamp:
Jul 15, 2020, 3:47:57 PM (5 years ago)
Author:
contact
Message:

Implement CHATHISTORY AFTER

References: https://todo.sr.ht/~emersion/soju/12

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r354 r360  
    15991599                }
    16001600
     1601                batchRef := "history"
     1602                maxTries := 100
    16011603                switch subcommand {
    16021604                case "BEFORE":
    1603                         batchRef := "history"
    16041605                        dc.SendMessage(&irc.Message{
    16051606                                Prefix:  dc.srv.prefix(),
     
    16121613
    16131614                        tries := 0
    1614                         for remaining > 0 {
     1615                        for remaining > 0 && tries < maxTries {
    16151616                                buf, err := parseMessagesBefore(uc.network, entity, timestamp, remaining)
    16161617                                if err != nil {
     
    16201621                                if len(buf) == 0 {
    16211622                                        tries++
    1622                                         if tries >= 100 {
    1623                                                 break
    1624                                         }
    16251623                                } else {
    16261624                                        tries = 0
     
    16321630                        }
    16331631
    1634                         for _, m := range history[remaining:] {
    1635                                 m.Tags["batch"] = irc.TagValue(batchRef)
    1636                                 dc.SendMessage(dc.marshalMessage(m, uc.network))
     1632                        for _, msg := range history[remaining:] {
     1633                                msg.Tags["batch"] = irc.TagValue(batchRef)
     1634                                dc.SendMessage(dc.marshalMessage(msg, uc.network))
    16371635                        }
    16381636
     
    16421640                                Params:  []string{"-" + batchRef},
    16431641                        })
     1642                case "AFTER":
     1643                        dc.SendMessage(&irc.Message{
     1644                                Prefix:  dc.srv.prefix(),
     1645                                Command: "BATCH",
     1646                                Params:  []string{"+" + batchRef, "chathistory", target},
     1647                        })
     1648
     1649                        remaining := limit
     1650                        tries := 0
     1651                        now := time.Now()
     1652                        for remaining > 0 && tries < maxTries && timestamp.Before(now) {
     1653                                buf, err := parseMessagesAfter(uc.network, entity, timestamp, remaining)
     1654                                if err != nil {
     1655                                        dc.logger.Printf("failed parsing log messages for chathistory: %v", err)
     1656                                        return newChatHistoryError(subcommand, target)
     1657                                }
     1658                                if len(buf) == 0 {
     1659                                        tries++
     1660                                } else {
     1661                                        tries = 0
     1662                                }
     1663                                for _, msg := range buf {
     1664                                        msg.Tags["batch"] = irc.TagValue(batchRef)
     1665                                        dc.SendMessage(dc.marshalMessage(msg, uc.network))
     1666                                }
     1667                                remaining -= len(buf)
     1668                                year, month, day := timestamp.Date()
     1669                                timestamp = time.Date(year, month, day + 1, 0, 0, 0, 0, timestamp.Location())
     1670                        }
     1671
     1672                        dc.SendMessage(&irc.Message{
     1673                                Prefix:  dc.srv.prefix(),
     1674                                Command: "BATCH",
     1675                                Params:  []string{"-" + batchRef},
     1676                        })
    16441677                default:
    1645                         // TODO: support AFTER, LATEST, BETWEEN
     1678                        // TODO: support LATEST, BETWEEN
    16461679                        return ircError{&irc.Message{
    16471680                                Command: "FAIL",
Note: See TracChangeset for help on using the changeset viewer.