Changeset 787 in code for trunk


Ignore:
Timestamp:
Feb 25, 2022, 8:05:10 PM (3 years ago)
Author:
contact
Message:

msgstore_fs: fix direct message targets

When fetching messages via draft/chathistory from a conversation
with another user, soju would send the following:

:sender PRIVMSG sender :hey

instead of

:sender PRIVMSG recipient :hey

because the file-system message store format doesn't contain the
original PRIVMSG target.

Fix this by doing some guesswork.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/msgstore_fs.go

    r784 r787  
    8181type fsMessageStore struct {
    8282        root string
     83        user *User
    8384
    8485        // Write-only files used by Append
     
    8990var _ chatHistoryMessageStore = (*fsMessageStore)(nil)
    9091
    91 func newFSMessageStore(root, username string) *fsMessageStore {
     92func newFSMessageStore(root string, user *User) *fsMessageStore {
    9293        return &fsMessageStore{
    93                 root:  filepath.Join(root, escapeFilename(username)),
     94                root:  filepath.Join(root, escapeFilename(user.Username)),
     95                user:  user,
    9496                files: make(map[string]*fsMessageStoreFile),
    9597        }
     
    251253}
    252254
    253 func parseMessage(line, entity string, ref time.Time, events bool) (*irc.Message, time.Time, error) {
     255func (ms *fsMessageStore) parseMessage(line string, network *Network, entity string, ref time.Time, events bool) (*irc.Message, time.Time, error) {
    254256        var hour, minute, second int
    255257        _, err := fmt.Sscanf(line, "[%02d:%02d:%02d] ", &hour, &minute, &second)
     
    373375
    374376                prefix = &irc.Prefix{Name: sender}
     377                if entity == sender {
     378                        // This is a direct message from a user to us. We don't store own
     379                        // our nickname in the logs, so grab it from the network settings.
     380                        // Not very accurate since this may not match our nick at the time
     381                        // the message was received, but we can't do a lot better.
     382                        entity = GetNick(ms.user, network)
     383                }
    375384                params = []string{entity, text}
    376385        }
     
    414423
    415424        for sc.Scan() {
    416                 msg, t, err := parseMessage(sc.Text(), entity, ref, events)
     425                msg, t, err := ms.parseMessage(sc.Text(), network, entity, ref, events)
    417426                if err != nil {
    418427                        return nil, err
     
    460469        sc := bufio.NewScanner(f)
    461470        for sc.Scan() && len(history) < limit {
    462                 msg, t, err := parseMessage(sc.Text(), entity, ref, events)
     471                msg, t, err := ms.parseMessage(sc.Text(), network, entity, ref, events)
    463472                if err != nil {
    464473                        return nil, err
  • trunk/user.go

    r781 r787  
    452452        var msgStore messageStore
    453453        if logPath := srv.Config().LogPath; logPath != "" {
    454                 msgStore = newFSMessageStore(logPath, record.Username)
     454                msgStore = newFSMessageStore(logPath, record)
    455455        } else {
    456456                msgStore = newMemoryMessageStore()
Note: See TracChangeset for help on using the changeset viewer.