Changeset 145 in code


Ignore:
Timestamp:
Mar 25, 2020, 10:32:44 AM (5 years ago)
Author:
contact
Message:

Handle downstream JOIN/PART with multiple channel names

Closes: https://todo.sr.ht/~emersion/soju/19

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r144 r145  
    834834                })
    835835        case "JOIN", "PART":
    836                 var name string
    837                 if err := parseMessageParams(msg, &name); err != nil {
    838                         return err
    839                 }
    840 
    841                 uc, upstreamName, err := dc.unmarshalEntity(name)
    842                 if err != nil {
    843                         return ircError{&irc.Message{
    844                                 Command: irc.ERR_NOSUCHCHANNEL,
    845                                 Params:  []string{name, err.Error()},
    846                         }}
    847                 }
    848 
    849                 uc.SendMessage(&irc.Message{
    850                         Command: msg.Command,
    851                         Params:  []string{upstreamName},
    852                 })
    853 
    854                 switch msg.Command {
    855                 case "JOIN":
    856                         err := dc.srv.db.StoreChannel(uc.network.ID, &Channel{
    857                                 Name: upstreamName,
    858                         })
     836                var names string
     837                if err := parseMessageParams(msg, &names); err != nil {
     838                        return err
     839                }
     840
     841                for _, name := range strings.Split(names, ",") {
     842                        uc, upstreamName, err := dc.unmarshalEntity(name)
    859843                        if err != nil {
    860                                 dc.logger.Printf("failed to create channel %q in DB: %v", upstreamName, err)
    861                         }
    862                 case "PART":
    863                         if err := dc.srv.db.DeleteChannel(uc.network.ID, upstreamName); err != nil {
    864                                 dc.logger.Printf("failed to delete channel %q in DB: %v", upstreamName, err)
     844                                return ircError{&irc.Message{
     845                                        Command: irc.ERR_NOSUCHCHANNEL,
     846                                        Params:  []string{name, err.Error()},
     847                                }}
     848                        }
     849
     850                        uc.SendMessage(&irc.Message{
     851                                Command: msg.Command,
     852                                Params:  []string{upstreamName},
     853                        })
     854
     855                        switch msg.Command {
     856                        case "JOIN":
     857                                err := dc.srv.db.StoreChannel(uc.network.ID, &Channel{
     858                                        Name: upstreamName,
     859                                })
     860                                if err != nil {
     861                                        dc.logger.Printf("failed to create channel %q in DB: %v", upstreamName, err)
     862                                }
     863                        case "PART":
     864                                if err := dc.srv.db.DeleteChannel(uc.network.ID, upstreamName); err != nil {
     865                                        dc.logger.Printf("failed to delete channel %q in DB: %v", upstreamName, err)
     866                                }
    865867                        }
    866868                }
Note: See TracChangeset for help on using the changeset viewer.