diff --git a/app/controllers/feed.go b/app/controllers/feed.go index 98b9513..f977c19 100644 --- a/app/controllers/feed.go +++ b/app/controllers/feed.go @@ -83,13 +83,15 @@ func (f *FeedController) postReceive(c *gin.Context) { } break case constants.PhidTypeTask: - channelName, err := f.Tasks.Resolve(res.PHID) + channelNames, err := f.Tasks.Resolve(res.PHID) if err != nil { f.Logger.Error(err) } - - if channelName != "" { + f.Logger.Debug(channelNames) + for _,channelName := range channelNames { + f.Logger.Debug(channelName) f.Connector.Post(channelName, storyText, icon, false) + f.Logger.Debug("posted") } break case constants.PhidTypeDifferentialRevision: diff --git a/app/resolvers/maniphest.go b/app/resolvers/maniphest.go index fb02724..6f285d4 100644 --- a/app/resolvers/maniphest.go +++ b/app/resolvers/maniphest.go @@ -13,11 +13,11 @@ type TaskResolver struct { } // Resolve resolves the channel the message about a task should be posted on. -func (c *TaskResolver) Resolve(phid string) (string, error) { +func (c *TaskResolver) Resolve(phid string) ([]string, error) { conduit, err := c.Factory.Make() - + var retVal []string if err != nil { - return "", err + return retVal, err } tasks, err := conduit.ManiphestQuery( @@ -27,29 +27,31 @@ func (c *TaskResolver) Resolve(phid string) (string, error) { ) if err != nil { - return "", err + return retVal, err } task := tasks.Get(phid) if len(task.ProjectPHIDs) < 1 { - return "", nil - } - - projectsPtr, err := conduit.ProjectQuery(requests.ProjectQueryRequest{ - PHIDs: []string{task.ProjectPHIDs[0]}, - }) - - if err != nil { - return "", err + return retVal, nil } - - projects := *projectsPtr channelMap := c.Config.GetStringMapString("channels.projects") - - if channelName, ok := channelMap[projects.Data[task.ProjectPHIDs[0]].ID]; ok == true { - return channelName, nil - } - - return "", nil + defaultChannel := c.Config.GetString("channels.feed") + matches := 0 + for _, projectPHID := range task.ProjectPHIDs { + projects, err := conduit.ProjectQuery(requests.ProjectQueryRequest{ + PHIDs: []string{projectPHID}, + }) + if err != nil { + return retVal, err + } + if channelName, ok := channelMap[projects.Data[projectPHID].ID]; ok == true { + retVal = append(retVal, channelName) + matches += 1 + } + } + if (matches == 0) { + retVal = append(retVal, defaultChannel) + } + return retVal, nil }