diff --git a/bridge/zulip/zulip.go b/bridge/zulip/zulip.go index 77bb7e7e..cdf433af 100644 --- a/bridge/zulip/zulip.go +++ b/bridge/zulip/zulip.go @@ -4,6 +4,7 @@ import ( "encoding/json" "io/ioutil" "strconv" + "strings" "sync" "time" @@ -18,12 +19,11 @@ type Bzulip struct { bot *gzb.Bot streams map[int]string *bridge.Config - channelToTopic map[string]string sync.RWMutex } func New(cfg *bridge.Config) bridge.Bridger { - return &Bzulip{Config: cfg, streams: make(map[int]string), channelToTopic: make(map[string]string)} + return &Bzulip{Config: cfg, streams: make(map[int]string)} } func (b *Bzulip) Connect() error { @@ -48,9 +48,6 @@ func (b *Bzulip) Disconnect() error { } func (b *Bzulip) JoinChannel(channel config.ChannelInfo) error { - b.Lock() - defer b.Unlock() - b.channelToTopic[channel.Name] = channel.Options.Topic return nil } @@ -138,7 +135,14 @@ func (b *Bzulip) handleQueue() error { if m.SenderEmail == b.GetString("login") { continue } - rmsg := config.Message{Username: m.SenderFullName, Text: m.Content, Channel: b.getChannel(m.StreamID), Account: b.Account, UserID: strconv.Itoa(m.SenderID), Avatar: m.AvatarURL} + rmsg := config.Message{ + Username: m.SenderFullName, + Text: m.Content, + Channel: b.getChannel(m.StreamID) + "/topic:" + m.Subject, + Account: b.Account, + UserID: strconv.Itoa(m.SenderID), + Avatar: m.AvatarURL, + } b.Log.Debugf("<= Sending message from %s on %s to gateway", rmsg.Username, b.Account) b.Log.Debugf("<= Message is %#v", rmsg) b.Remote <- rmsg @@ -149,12 +153,11 @@ func (b *Bzulip) handleQueue() error { } func (b *Bzulip) sendMessage(msg config.Message) (string, error) { - topic := "matterbridge" - if b.GetString("topic") != "" { - topic = b.GetString("topic") - } - if res := b.getTopic(msg.Channel); res != "" { - topic = res + topic := "" + if strings.Contains(msg.Channel, "/topic:") { + res := strings.Split(msg.Channel, "/topic:") + topic = res[1] + msg.Channel = res[0] } m := gzb.Message{ Stream: msg.Channel, @@ -202,9 +205,3 @@ func (b *Bzulip) handleUploadFile(msg *config.Message) (string, error) { } return "", nil } - -func (b *Bzulip) getTopic(channel string) string { - b.RLock() - defer b.RUnlock() - return b.channelToTopic[channel] -} diff --git a/gateway/gateway.go b/gateway/gateway.go index be45086b..82be2a98 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -159,6 +159,10 @@ func (gw *Gateway) mapChannelConfig(cfg []config.Bridge, direction string) { gw.logger.Errorf("Mattermost channels do not start with a #: remove the # in %s", br.Channel) os.Exit(1) } + if strings.HasPrefix(br.Account, "zulip.") && !strings.Contains(br.Channel, "/topic:") { + gw.logger.Errorf("Breaking change, since matterbridge 1.14.0 zulip channels need to specify the topic with channel/topic:mytopic in %s of %s", br.Channel, br.Account) + os.Exit(1) + } ID := br.Channel + br.Account if _, ok := gw.Channels[ID]; !ok { channel := &config.ChannelInfo{ diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 1c517a55..8fbbfe0d 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -1363,12 +1363,6 @@ Login="yourbot-bot@yourserver.zulipchat.com" #REQUIRED Server="https://yourserver.zulipchat.com" -#Topic of the messages matterbridge will use -#OPTIONAL (default "matterbridge") -#You can specify a specific topic for each channel using [gateway.inout.options] -#See more information below at the gateway configuration -Topic="matterbridge" - ## RELOADABLE SETTINGS ## Settings below can be reloaded by editing the file @@ -1608,7 +1602,7 @@ enable=true # if you specify an empty string bridge will list all the possibilities # - "Group Name" if you specify a group name the bridge will hint its JID to specify # as group names might change in time and contain weird emoticons - # zulip - stream (without the #) + # zulip - stream/topic:topicname (without the #) # # REQUIRED channel="#testing" @@ -1650,10 +1644,7 @@ enable=true [[gateway.inout]] account="zulip.streamchat" - channel="general" - #OPTIONAL - topic only works for zulip - [gateway.inout.options] - topic="topic1" + channel="general/topic:mytopic" #API example #[[gateway.inout]]