From de79343b9aa9dc601e5633cef329e1a83452aa1a Mon Sep 17 00:00:00 2001 From: George Goldberg Date: Wed, 21 Sep 2016 19:17:48 +0100 Subject: Fix !channel linking in Slack import. (#4065) Original version of the patch didn't take into account that, like with @mentions, there's an "old" and a "new" format in the Slack export files for channel mentions. This version imports both correctly. --- api/slackimport.go | 13 +++++++++---- i18n/en.json | 4 ++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/api/slackimport.go b/api/slackimport.go index cb6877616..27b8e7f5d 100644 --- a/api/slackimport.go +++ b/api/slackimport.go @@ -286,15 +286,20 @@ func SlackConvertUserMentions(users []SlackUser, posts map[string][]SlackPost) m } func SlackConvertChannelMentions(channels []SlackChannel, posts map[string][]SlackPost) map[string][]SlackPost { - var channelPatterns = make(map[string]string, len(channels)) + var regexes = make(map[string]*regexp.Regexp, len(channels)) for _, channel := range channels { - channelPatterns["!"+channel.Name] = "<#" + channel.Id + ">" + r, err := regexp.Compile("<#" + channel.Id + `(\|` + channel.Name + ")?>") + if err != nil { + l4g.Warn(utils.T("api.slackimport.slack_convert_channel_mentions.compile_regexp_failed.warn"), channel.Id, channel.Name) + continue + } + regexes["!"+channel.Name] = r } for channelName, channelPosts := range posts { for postIdx, post := range channelPosts { - for channelReplace, channelMatch := range channelPatterns { - post.Text = strings.Replace(post.Text, channelMatch, channelReplace, -1) + for channelReplace, r := range regexes { + post.Text = r.ReplaceAllString(post.Text, channelReplace) posts[channelName][postIdx] = post } } diff --git a/i18n/en.json b/i18n/en.json index 15c2d773e..14d8f435d 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1511,6 +1511,10 @@ "id": "api.slackimport.slack_convert_user_mentions.compile_regexp_failed.warn", "translation": "Failed to compile the @mention matching regular expression for Slack user {{.UserID}} {{.Username}}" }, + { + "id": "api.slackimport.slack_convert_channel_mentions.compile_regexp_failed.warn", + "translation": "Failed to compile the !channel matching regular expression for Slack channel {{.ChannelID}} {{.ChannelName}}" + }, { "id": "api.slackimport.slack_import.log", "translation": "Mattermost Slack Import Log\r\n" -- cgit v1.2.3-1-g7c22