Разработка контекста / как изменить результат контекста внутри execute_action

Я стал немного потерян с тем, как установить атрибут результата или вызвать поиск области (обновить) внутри Scope::perform_action метод или в методах ActivationQuery объект. Идея состоит в том, чтобы изменить данные в источнике, а затем либо обновить ответ новым запросом, либо просто изменить предыдущий результат так же, как изменился источник. Типичным примером может быть статус "был прочитан".

Не могли бы вы немного помочь с приведенным ниже примером?

sc::ActivationQueryBase::UPtr Scope::perform_action(const sc::Result &result,
                                      sc::ActionMetadata const &metadata,
                                      std::string const &widget_id, std::string const &action_id) {

    //update current Result/reply or trigger new search by scope

    return sc::ActivationQueryBase::UPtr(new ActivationQuery(result, metadata, widget_id, action_id, config_));

}

1 ответ

Вы не можете изменить сам Результат, он получен только для чтения, вам нужно применить любые обновления к вашим внутренним данным, а затем повторно выполнить поиск. Для этого переопределите метод activ () вашего ActivationQueryBase в вашем классе ActivationQuery; сделайте все, что вам нужно, чтобы обновить данные бэкэнда в activ (), а затем верните экземпляр ActivationResponse, созданный с этим ctor:

ActivationResponse (CannedQuery const & query);

Аргумент запроса должен указывать на вашу область действия.

Альтернативный подход для повторного выполнения поиска при нажатии кнопки в предварительном просмотре состоит в том, чтобы установить атрибут uri кнопки со значением CannedQuery::to_uri(), но в этом случае ваш обработчик активации не выполняется.

Обратите внимание, что при первом подходе вы, вероятно, испытаете https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1335761

Надеюсь, это поможет.

Другие вопросы по тегам