/// <summary> /// Hides the progress bar if everyone is done searching. /// </summary> /// <param name="type"></param> public void HideProgressBar(SearchResultTypes type) { lock (ui_progressBar) { // Update the state switch (type) { case SearchResultTypes.Post: _mArePostsSearching = false; break; case SearchResultTypes.Subreddit: _mAreSubredditsSearching = false; break; case SearchResultTypes.User: _mAreUsersSearching = false; break; } if (!_mArePostsSearching && !_mAreSubredditsSearching && !_mAreUsersSearching) { ui_progressBar.Visibility = Visibility.Collapsed; ui_progressBar.IsIndeterminate = false; } } }
/// <summary> /// Asynchronously search the Spotify catalog using a keyword string. /// </summary> /// <param name="query"> /// A <see cref="string"/> representing the keywords to search with. /// This can contain optional field filters and operators. Information about how to use these can be found in /// the <see href="https://spotify.dev/documentation/web-api/reference/search/search/">Spotify Developer documentation</see>. /// </param> /// <param name="types">The <see cref="SearchResultTypes"/> to include in the search.</param> /// <param name="market"> /// An optional <see cref="CountryCode"/> to limit returned content to a certain market. /// Playlists are not affected by this parameter. /// <see cref="CountryCode.FromToken"/> can be used if the access token used is a valid user access token. /// </param> /// <param name="limit"> /// The maximum number of results to return. /// This limit is applied within each type, not on the total response. /// </param> /// <param name="offset">The index of the first result to return.</param> /// <param name="includeExternal">Whether or not to include any relevant audio content that is hosted externally.</param> /// <param name="accessTokenProvider">An optional <see cref="IAccessTokenProvider"/> to use instead of the default.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests.</param> /// <returns>A <see cref="Task{TResult}"/> representing the asynchronous operation.</returns> public Task <SearchResult> SearchAsync( string query, SearchResultTypes types, CountryCode?market = null, int?limit = null, int?offset = null, bool?includeExternal = null, IAccessTokenProvider?accessTokenProvider = null, CancellationToken cancellationToken = default) { var uriBuilder = new SpotifyUriBuilder($"{BaseUrl}/search") .AppendToQuery("query", query.Replace(" ", "%20")) .AppendJoinToQuery("type", ',', types.GetFlags().Select(value => value.GetName().ToLower())) .AppendToQueryIfNotNull("market", market?.ToSpotifyString()) .AppendToQueryIfNotNull("limit", limit) .AppendToQueryIfNotNull("offset", offset) .AppendToQueryIfNotNull("include_external", includeExternal); return(SendAsync <SearchResult>( uriBuilder.Build(), HttpMethod.Get, content: null, accessTokenProvider, cancellationToken)); }
/// <summary> /// Shows the progress bar and keeps track of who said so. /// </summary> /// <param name="type"></param> public void ShowProgressBar(SearchResultTypes type) { lock (ui_progressBar) { // Figure out if one is already true, thus the bar would be shown. var showBar = !_mArePostsSearching && !_mAreSubredditsSearching && !_mAreUsersSearching; switch (type) { case SearchResultTypes.Post: _mArePostsSearching = true; break; case SearchResultTypes.Subreddit: _mAreSubredditsSearching = true; break; case SearchResultTypes.User: _mAreUsersSearching = true; break; } if (showBar) { ui_progressBar.Visibility = Visibility.Visible; ui_progressBar.IsIndeterminate = true; } } }
Task <SearchResult> ISpotifySearchApi.SearchAsync( string query, SearchResultTypes types, CountryCode?market, int?limit, int?offset, bool?includeExternal, CancellationToken cancellationToken) { return(SearchAsync(query, types, market, limit, offset, includeExternal, null, cancellationToken)); }
public static SearchResultModel MapToModel(this Value bingResult, SearchResultTypes resultType) { if (bingResult == null) { return(null); } return(new SearchResultModel { FullPath = bingResult.Url, Name = bingResult.Name, ResultType = resultType }); }
/// <summary> /// Hides the progress bar if everyone is done searching. /// </summary> /// <param name="type"></param> public void HideProgressBar(SearchResultTypes type) { lock (ui_progressBar) { // Update the state switch (type) { case SearchResultTypes.Post: m_arePostsSearching = false; break; case SearchResultTypes.Subreddit: m_areSubredditsSearching = false; break; case SearchResultTypes.User: m_areUsersSearching = false; break; } if (!m_arePostsSearching && !m_areSubredditsSearching && !m_areUsersSearching) { ui_progressBar.Visibility = Visibility.Collapsed; ui_progressBar.IsIndeterminate = false; } } }
/// <summary> /// Shows the progress bar and keeps track of who said so. /// </summary> /// <param name="type"></param> public void ShowProgressBar(SearchResultTypes type) { lock(ui_progressBar) { // Figure out if one is already true, thus the bar would be shown. bool showBar = !m_arePostsSearching && !m_areSubredditsSearching && !m_areUsersSearching; switch (type) { case SearchResultTypes.Post: m_arePostsSearching = true; break; case SearchResultTypes.Subreddit: m_areSubredditsSearching = true; break; case SearchResultTypes.User: m_areUsersSearching = true; break; } if (showBar) { ui_progressBar.Visibility = Visibility.Visible; ui_progressBar.IsIndeterminate = true; } } }
/// <summary> /// Called when we should change the filter and search again /// </summary> /// <param name="type"></param> public void DoFilteredSearch(SearchResultTypes? type) { // Set the UI list type if (!type.HasValue) { ui_searchForCombo.SelectedIndex = 0; } else { switch (type.Value) { case SearchResultTypes.Post: ui_searchForCombo.SelectedIndex = 3; break; case SearchResultTypes.Subreddit: ui_searchForCombo.SelectedIndex = 1; break; case SearchResultTypes.User: ui_searchForCombo.SelectedIndex = 2; break; } } // The search will kick off automatically when the selection is changed. }