Я немного растерялся из-за того, как установить атрибут результата или вызвать поиск области (обновить) внутри метода 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_));
}
Вы не можете изменить сам Результат, он получен для чтения только, необходимо применить любые обновления данных бэкенда и затем повторно выполнить поиск. Чтобы сделать это, перереализация активирует () метод Вашего ActivationQueryBase в Вашем классе ActivationQuery; сделайте то, в чем необходимо обновить данные бэкенда, активируются () и затем возвращают экземпляр ActivationResponse, созданный с этим ctor:
ActivationResponse (CannedQuery const& запрос);
аргумент запроса должен указать на Вас на объем.
альтернативный подход для перевыполнения поиска, когда кнопка в предварительном просмотре касается, должен установить атрибут uri кнопки со значением CannedQuery:: to_uri (), но в этом случае Ваш обработчик активаций не выполняется.
Примечание, с первым подходом Вы, вероятно, испытаете https://bugs.launchpad.net/ubuntu / + source/unity8 / + ошибка/1335761
, я надеюсь, что это помогает.