using Microsoft.Teams.Api.Activities; using Microsoft.Teams.Api.Activities.Invokes; using Microsoft.Teams.Api.Search; using Microsoft.Teams.Apps.Routing; namespace Microsoft.Teams.Apps.Activities.Invokes; [AttributeUsage(AttributeTargets.Method, Inherited = true)] public class SearchAttribute() : InvokeAttribute(Api.Activities.Invokes.Name.Search, typeof(SearchActivity)) { public override object Coerce(IContext context) => context.ToActivityType(); } public static partial class AppInvokeActivityExtensions { [Obsolete("Use the handler with the cancellation token")] public static App OnSearch(this App app, Func, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => { await handler(context.ToActivityType()).ConfigureAwait(false); return null; }, Selector = activity => activity is SearchActivity }); return app; } [Obsolete("Use the handler with the cancellation token")] public static App OnSearch(this App app, Func, Task>> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => await handler(context.ToActivityType()).ConfigureAwait(false), Selector = activity => activity is SearchActivity }); return app; } [Obsolete("Use the handler with the cancellation token")] public static App OnSearch(this App app, Func, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => await handler(context.ToActivityType()).ConfigureAwait(false), Selector = activity => activity is SearchActivity }); return app; } public static App OnSearch(this App app, Func, CancellationToken, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => { await handler(context.ToActivityType(), context.CancellationToken).ConfigureAwait(false); return null; }, Selector = activity => activity is SearchActivity }); return app; } public static App OnSearch(this App app, Func, CancellationToken, Task>> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => await handler(context.ToActivityType(), context.CancellationToken).ConfigureAwait(false), Selector = activity => activity is SearchActivity }); return app; } public static App OnSearch(this App app, Func, CancellationToken, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.Invoke, Name.Search]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => await handler(context.ToActivityType(), context.CancellationToken).ConfigureAwait(false), Selector = activity => activity is SearchActivity }); return app; } }