Канал уведомлений после плоского канала не показывает действия - PullRequest
1 голос
/ 27 апреля 2020

У меня есть фид уведомлений типа NOTIFICATIONS:userID, а у меня плоский фид GLOBAL:domain.

Фид уведомлений настроен так, чтобы следовать плоскому каналу, но когда я выполняю действия sh для плоского канала, они не поступают в канал уведомлений. Я не могу заставить их проходить через реагирующие компоненты или делать вызовы API напрямую. Любые элементы в ленте уведомлений проходят нормально, но не через плоский канал.

Есть ли что-то, что я бы пропустил при настройке каналов, чтобы сделать это возможным? Я не уверен, почему это не работает.

Вот код, используемый для вызова 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, который позволяет вам указать то, что мы назвали «потоками», это просто типы, представляющие слагов.

В этом случае я использую фид GLOBAL:domain, которой настроен канал NOTIFICATION:userID пользователя для отслеживания.

1 Ответ

1 голос
/ 27 апреля 2020

С пакетное добавление документов :

Действия, добавленные с помощью этого метода, не распространяются среди подписчиков. То есть любые другие фиды, следующие за фидами, указанными в вызове API, не получат новую активность.

Если вы используете пакетную обработку, вам нужно указать все фиды, которые вы хотите добавить активность для. Другой способ заключается в том, что вы можете добавлять в фиды одного за другим pu sh для подписчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...