コード例 #1
0
        /// <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;
                }
            }
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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;
                }
            }
        }
コード例 #4
0
 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));
 }
コード例 #5
0
 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
     });
 }
コード例 #6
0
ファイル: Search.xaml.cs プロジェクト: EricYan1/Baconit
        /// <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;
                }
            }
        }
コード例 #7
0
ファイル: Search.xaml.cs プロジェクト: EricYan1/Baconit
        /// <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;
                }
            }
        }
コード例 #8
0
ファイル: Search.xaml.cs プロジェクト: EricYan1/Baconit
        /// <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.
        }