private YtFile GetYtFileFromSearchResult(SearchResult result) { switch (result.Id.Kind) { case "youtube#video": Song videoInfo = new Song(System.Net.WebUtility.HtmlDecode(result.Snippet.Title), result.Snippet.ChannelTitle, result.Snippet.Thumbnails.High.Url, result.Id.VideoId, -1, -1, null, true, false) { ChannelID = result.Snippet.ChannelId }; if (result.Snippet.LiveBroadcastContent == "live") { videoInfo.IsLiveStream = true; } return(new YtFile(videoInfo, YtKind.Video)); case "youtube#playlist": PlaylistItem playlistInfo = new PlaylistItem(result.Snippet.Title, -1, result.Id.PlaylistId) { HasWritePermission = false, ImageURL = result.Snippet.Thumbnails.High.Url, Owner = result.Snippet.ChannelTitle }; return(new YtFile(playlistInfo, YtKind.Playlist)); case "youtube#channel": Channel channelInfo = new Channel(result.Snippet.Title, result.Id.ChannelId, result.Snippet.Thumbnails.High.Url); return(new YtFile(channelInfo, YtKind.Channel)); default: Console.WriteLine("&Kind = " + result.Id.Kind); return(null); } }
public async Task Search(string search, string querryType, bool loadingBar) { if (search == null || search == "") { return; } searching = true; Query = search; if (loadingBar) { adapter = null; ListView.SetAdapter(null); EmptyView.Visibility = ViewStates.Gone; LoadingView.Visibility = ViewStates.Visible; } if (!await MainActivity.instance.WaitForYoutube()) { ListView.SetAdapter(null); EmptyView.Text = MainActivity.instance.GetString(Resource.String.youtube_loading_error); EmptyView.SetTextColor(Color.Red); EmptyView.Visibility = ViewStates.Visible; return; } try { SearchResource.ListRequest searchResult = YoutubeManager.YoutubeService.Search.List("snippet"); searchResult.Q = search; searchResult.TopicId = "/m/04rlf"; switch (querryType) { case "All": searchResult.Type = "video,channel,playlist"; searchResult.EventType = null; break; case "Tracks": searchResult.Type = "video"; searchResult.EventType = null; break; case "Playlists": searchResult.Type = "playlist"; searchResult.EventType = null; break; case "Lives": searchResult.Type = "video"; searchResult.EventType = SearchResource.ListRequest.EventTypeEnum.Live; break; case "Channels": searchResult.Type = "channel"; searchResult.EventType = null; break; default: searchResult.Type = "video"; searchResult.EventType = null; break; } searchResult.MaxResults = 50; var searchReponse = await searchResult.ExecuteAsync(); nextPageToken = searchReponse.NextPageToken; result = new List <YtFile>(); foreach (var video in searchReponse.Items) { result.Add(GetYtFileFromSearchResult(video)); } LoadingView.Visibility = ViewStates.Gone; if (nextPageToken != null) { result.Add(new YtFile(new Song(), YtKind.Loading)); } if (result.Count > 0 && result[0].Kind == YtKind.Channel && result.Count(x => x.Kind == YtKind.Video && x.song.Artist == result[0].channel.Name) > 1) { YtFile channelPreview = new YtFile(result[0].channel, YtKind.ChannelPreview); result.Insert(0, channelPreview); } else if (result.Count > 0 && querryType == "All" || querryType == "Channels") { IEnumerable <string> artist = result.GetRange(0, result.Count > 20 ? 20 : result.Count).GroupBy(x => x.song?.Artist).Where(x => x.Count() > 5).Select(x => x.Key); if (artist.Count() == 1) { Channel channel = result.Find(x => x.Kind == YtKind.Channel && x.channel.Name == artist.First())?.channel; if (channel != null) { YtFile channelPreview = new YtFile(channel, YtKind.ChannelPreview); result.Insert(0, channelPreview); } } } adapter = new YtAdapter(result); adapter.ItemClick += ListView_ItemClick; adapter.ItemLongCLick += ListView_ItemLongClick; ListView.SetAdapter(adapter); searching = false; if (result.Count == 0) { EmptyView.Visibility = ViewStates.Visible; switch (querryType) { case "All": EmptyView.Text = GetString(Resource.String.no_result) + " " + search; break; case "Tracks": EmptyView.Text = GetString(Resource.String.no_track) + " " + search; break; case "Playlists": EmptyView.Text = GetString(Resource.String.no_playlist) + " " + search; break; case "Lives": EmptyView.Text = GetString(Resource.String.no_lives) + " " + search; break; case "Channels": EmptyView.Text = GetString(Resource.String.no_channel) + " " + search; break; default: break; } } else { EmptyView.Visibility = ViewStates.Gone; } } catch (Exception ex) { Console.WriteLine("&Exception catched in the youtube search: " + ex.Source + " - " + ex.Message + " Inner: " + ex.InnerException.Message); EmptyView.Text = GetString(Resource.String.timout); EmptyView.Visibility = ViewStates.Visible; EmptyView.Visibility = ViewStates.Visible; LoadingView.Visibility = ViewStates.Gone; } }