Flat Feed 之后的通知 Feed 不显示活动
Notification feed following Flat feed isn't showing activities
我有一个像 NOTIFICATIONS:userID
这样的通知提要,我有一个固定提要 GLOBAL:domain
。
通知提要设置为跟随固定提要,但是当我将活动推送到固定提要时,它们不会进入通知提要。我无法让它们通过反应组件或直接进行 API 调用。通知提要中的任何项目都可以正常通过,但固定提要不行。
在设置 Feed 以实现此目的时,我是否会遗漏任何内容?我不确定为什么它不起作用。
下面是调用 getstream 的代码:
// AddNotification writes a feed notification to the provided feed.
func (c *Client) AddNotification(feedID, actor string, n *feed.Notification) error {
keys := map[string]bool{}
feeds := make([]stream.Feed, 0)
for _, s := range n.Streams {
if s == feed.STREAM_NONE {
continue
}
if _, ok := keys[s.String()]; ok {
continue
}
f, err := c.getstream.FlatFeed(s.String(), feedID)
if err != nil {
return errors.Wrapf(err, "failed to get feed %s", feedID)
}
keys[s.String()] = true
feeds = append(feeds, f)
}
extra, err := getExtraFromString(n.Content)
if err != nil {
return errors.Wrap(err, "failed to marshal extra content")
}
appliesAt, err := time.FromProtoTS(n.GetAppliesAt())
if err != nil {
return errors.Wrap(err, "failed to cast applies at time")
}
activity := stream.Activity{
Actor: actor,
Verb: n.GetVerb(),
Object: n.GetObject(),
Extra: extra,
ForeignID: n.GetIdempotentKey(),
Time: stream.Time{Time: appliesAt},
}
log.WithFields(log.Fields{
"activity": activity,
"feeds": keys,
}).Debug("sending request to stream.io")
if err = c.getstream.AddToMany(activity, feeds...); err != nil {
return errors.Wrap(err, "error while feeding to stream.io")
}
return nil
}
稍微解释一下代码。我们有一个 feed.Notification
类型,允许您指定我们所谓的 "streams",这些只是代表 slug 的类型。
在本例中,我使用的是 GLOBAL:domain
供稿,用户的 NOTIFICATION:userID
供稿设置为遵循该供稿。
Activities added using this method are not propagated to followers. That is, any other Feeds that follow the Feed(s) listed in the API call will not receive the new Activity.
如果您使用批处理,则需要指定要为其添加 activity 的所有供稿。另一种方法是,您可以一个一个地添加到提要以推送给关注者。
我有一个像 NOTIFICATIONS:userID
这样的通知提要,我有一个固定提要 GLOBAL:domain
。
通知提要设置为跟随固定提要,但是当我将活动推送到固定提要时,它们不会进入通知提要。我无法让它们通过反应组件或直接进行 API 调用。通知提要中的任何项目都可以正常通过,但固定提要不行。
在设置 Feed 以实现此目的时,我是否会遗漏任何内容?我不确定为什么它不起作用。
下面是调用 getstream 的代码:
// AddNotification writes a feed notification to the provided feed.
func (c *Client) AddNotification(feedID, actor string, n *feed.Notification) error {
keys := map[string]bool{}
feeds := make([]stream.Feed, 0)
for _, s := range n.Streams {
if s == feed.STREAM_NONE {
continue
}
if _, ok := keys[s.String()]; ok {
continue
}
f, err := c.getstream.FlatFeed(s.String(), feedID)
if err != nil {
return errors.Wrapf(err, "failed to get feed %s", feedID)
}
keys[s.String()] = true
feeds = append(feeds, f)
}
extra, err := getExtraFromString(n.Content)
if err != nil {
return errors.Wrap(err, "failed to marshal extra content")
}
appliesAt, err := time.FromProtoTS(n.GetAppliesAt())
if err != nil {
return errors.Wrap(err, "failed to cast applies at time")
}
activity := stream.Activity{
Actor: actor,
Verb: n.GetVerb(),
Object: n.GetObject(),
Extra: extra,
ForeignID: n.GetIdempotentKey(),
Time: stream.Time{Time: appliesAt},
}
log.WithFields(log.Fields{
"activity": activity,
"feeds": keys,
}).Debug("sending request to stream.io")
if err = c.getstream.AddToMany(activity, feeds...); err != nil {
return errors.Wrap(err, "error while feeding to stream.io")
}
return nil
}
稍微解释一下代码。我们有一个 feed.Notification
类型,允许您指定我们所谓的 "streams",这些只是代表 slug 的类型。
在本例中,我使用的是 GLOBAL:domain
供稿,用户的 NOTIFICATION:userID
供稿设置为遵循该供稿。
Activities added using this method are not propagated to followers. That is, any other Feeds that follow the Feed(s) listed in the API call will not receive the new Activity.
如果您使用批处理,则需要指定要为其添加 activity 的所有供稿。另一种方法是,您可以一个一个地添加到提要以推送给关注者。