public async Task StartLoading(string blockId, string titleBlock) { try { Title = titleBlock; Changed("Title"); IsLoading = true; Changed("IsLoading"); var block = await MusicX.Core.VKontakte.Music.Block.GetById(blockId); Title = block.Title; Changed("Title"); var tracksVk = block.Audios.ToIAudioFileList(); var tracks = await MusicService.ConvertToAudioFile(tracksVk); Tracks = new ObservableCollection <AudioFile>(tracks); Changed("Tracks"); IsLoading = false; Changed("IsLoading"); }catch (Exception e) { IsLoading = false; Changed("IsLoading"); await ContentDialogService.Show(new ExceptionDialog("Ошибка при загрузке треков", "Возможно, ВКонтакте не вернул необходимую информацию", e)); } }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { RecommendationsViewHolder v = holder as RecommendationsViewHolder; v.ShowMoreButton.Click += (sender, e) => { if (Blocks[position].Playlists?.Count > 0) { //TODO: GOTO PLAYLISTS FRAGMENT (//TODO CREATE PLAYLISTS GRID FRAGMENT) var frag = new RecommendationPlaylistsFragment(); frag.playlists = PlaylistsService.CovertToPlaylistFiles(this.Blocks[position].Playlists); Parent.Activity.FindViewById <TextView>(Resource.Id.titlebar_title).Text = Blocks[position].Title; Parent.FragmentManager.BeginTransaction().Replace(Resource.Id.content_frame, frag).Commit(); } else { var frag = new RecommendationTracksFragment(); frag.tracks = MusicService.ConvertToAudioFile(this.Blocks[position].Tracks); Parent.Activity.FindViewById <TextView>(Resource.Id.titlebar_title).Text = Blocks[position].Title; Parent.FragmentManager.BeginTransaction().Replace(Resource.Id.content_frame, frag).Commit(); } Toast.MakeText(Application.Context, $"Произошел кликинг по {this.Blocks[position].Title}", ToastLength.Long).Show(); }; //Установка заголовка согласно нужной рекомендации v.Caption.Text = this.Blocks[position].Title; v.SetItemClickListener(this); //вот прям тут да между этими комментами int counter = 0; if (this.Blocks[position].Playlists?.Count > 0) { var plistsInBlock = PlaylistsService.CovertToPlaylistFiles(this.Blocks[position].Playlists.Take(2).ToList()); var adapter = new PlaylistAdapter(plistsInBlock); adapter.ItemClick += AdapterOnPlaylistClick; v.List.SetAdapter(adapter); v.List.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Horizontal, false)); v.List.Clickable = true; } else { List <AudioFile> tracksInBlock = new List <AudioFile>(); var tracks_nonvk = MusicService.ConvertToAudioFile(this.Blocks[position].Tracks); foreach (var track in tracks_nonvk) { if (counter > 1) { break; } tracksInBlock.Add(track); counter++; } var adapter = new TrackAdapter(tracksInBlock, this.Blocks[position].Title); adapter.ItemInBlockClick += AdapterOnItemClick; v.List.SetAdapter(adapter); v.List.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); v.List.Clickable = true; } this.ViewHolds.Add(v); }
public async Task <List <AudioFile> > GetMoreAudio(CancellationToken token, uint offset) { if (InternetService.Connected) { try { if (firstLoading) { IsLoading = true; Changed("IsLoading"); } IList <IAudioFile> tracks = new List <IAudioFile>(); List <AudioFile> music = new List <AudioFile>(); try { tracks = await Popular.Tracks(20, Tracks.Count); music = await MusicService.ConvertToAudioFile(tracks); } catch (Flurl.Http.FlurlHttpException) { music = new List <AudioFile>(); hasMoreLoading = false; await ContentDialogService.Show(new ErrorConnectContentDialog()); InternetService.GoToOfflineMode(); } if (music.Count < 20) { hasMoreLoading = false; } firstLoading = false; IsLoading = false; Changed("IsLoading"); return(music); }catch (Exception e) { await ContentDialogService.Show(new ExceptionDialog("Неизвестная ошибка при получении списка популярного", "Мы не смогли получить нужную нам информацию о треках", e)); return(new List <AudioFile>()); } } else { hasMoreLoading = false; InternetService.GoToOfflineMode(); return(new List <AudioFile>()); } }
public async Task StartLoading(string blockId) { IsLoading = true; Changed("IsLoading"); var tracksVk = await MusicX.Core.VKontakte.Music.Artists.GetPopularTracks(blockId); var tracks = await MusicService.ConvertToAudioFile(tracksVk); Tracks = new ObservableCollection <AudioFile>(tracks); Changed("Tracks"); IsLoading = false; Changed("IsLoading"); }
private void AdapterOnItemClick(object sender, AudioInBlock args) { Toast.MakeText(Application.Context, $"{args.track.Title} в блоке {args.blockID}", ToastLength.Long).Show(); var tracks = this.Blocks.First(b => b.Title == args.blockID).Tracks; var tracksfiles = MusicService.ConvertToAudioFile(tracks); var playlist = new PlaylistFile(); playlist.Artist = "Music X"; playlist.Cover = "playlist_placeholder"; playlist.Genre = ""; playlist.Id = 1000; playlist.IsAlbum = false; playlist.TracksFiles = tracksfiles; var player = PlayerService.Instanse; player.Play(playlist, playlist.TracksFiles.First(t => t.SourceString == args.track.SourceString)); }
public async Task StartLoading() { IsLoading = true; Changed("IsLoading"); var recc = await Fooxboy.MusicX.Core.VKontakte.Music.Recommendations.New(); var blocks = recc.Blocks; var listBlocks = new List <Block>(); foreach (var blockA in blocks) { var block = BlockService.ConvertToBlock(blockA); if (block.Tracks != null) { var tracks = await MusicService.ConvertToAudioFile(block.Tracks); block.TrackFiles = tracks; } if (block.Playlists != null) { var playlists = new List <PlaylistFile>(); foreach (var blockPlaylist in block.Playlists) { var plist = await PlaylistsService.ConvertToPlaylistFile(blockPlaylist); playlists.Add(plist); } block.PlaylistsFiles = playlists; } listBlocks.Add(block); } Blocks = listBlocks; Changed("Blocks"); IsLoading = false; Changed("IsLoading"); }
public async Task StartLoading(long artistId, string artistName) { try { IsLoading = true; Changed("IsLoading"); NameArtist = artistName; Changed("NameArtist"); var artist = await Fooxboy.MusicX.Core.VKontakte.Music.Artists.GetById(artistId); Artist = artist; NameArtist = artist.Name; Changed("NameArtist"); var tracks = new List <IAudioFile>(); for (int i = 0; i < 6; i++) { tracks.Add(artist.PopularTracks[i]); } PopularTracks = await MusicService.ConvertToAudioFile(tracks); PopularTracksVisibility = Visibility.Visible; Changed("PopularTracksVisibility"); Changed("PopularTracks"); var albums = new List <PlaylistFile>(); foreach (var plist in artist.Albums) { albums.Add(await PlaylistsService.ConvertToPlaylistFile(plist)); } Albums = albums; AlbumsVisibility = Visibility.Visible; Changed("AlbumsVisibility"); Changed("Albums"); if (artist.Banner != "no") { Banner = await ImagesService.BannerArtist(artist.Banner); Changed("Banner"); } else { //Assets/Images/placeholder-artist.jpg } if (artist.LastRelease != null) { LastRelease = await PlaylistsService.ConvertToPlaylistFile(artist.LastRelease); LastAlbumVisibility = Visibility.Visible; Changed("LastAlbumVisibility"); Changed("LastRelease"); } if (await LikedArtistsService.IsLikedArtist(artist.Id)) { EnableAddToLikedArtists = false; Changed("EnableAddToLikedArtists"); } else { EnableAddToLikedArtists = true; Changed("EnableAddToLikedArtists"); } IsLoading = false; Changed("IsLoading"); } catch (Exception e) { await ContentDialogService.Show(new ExceptionDialog("Ошибка при загрузке карточки исполнителя", "Возможно, исполнитель недоступен в Вашей стране или ВКонтакте не вернул необходимую информацию", e)); } }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { var view = inflater.Inflate(Resource.Layout.activity_playlist, container, false); //var tracks_in_playlist_i_know_im_really_bad_at_naming = Core.VKontakte.Music.Playlist.GetById(playlist.Id); Activity.FindViewById <TextView>(Resource.Id.titlebar_title).Text = "Плейлист"; Handler handler = new Handler(Looper.MainLooper); var tracks = new List <AudioFile>(); adapter = new TrackAdapter(tracks, "false"); var plists_recycler = view.FindViewById <RecyclerView>(Resource.Id.tracksPlaylistView); var trackscount = view.FindViewById <TextView>(Resource.Id.countTracksPlaylistView); var title = view.FindViewById <TextView>(Resource.Id.namePlaylistView); var genre = view.FindViewById <TextView>(Resource.Id.genrePlaylistView); var author = view.FindViewById <TextView>(Resource.Id.artistPlaylistView); var year = view.FindViewById <TextView>(Resource.Id.yearPlaylistView); var cover = view.FindViewById <RoundedImageView>(Resource.Id.coverPlaylistView); adapter.ItemClick += AdapterOnItemClick; if (playlist.Cover != "playlist_placeholder") { cover.SetImageString(playlist.Cover, 50, 50); } if (playlist.Cover == "playlist_placeholder") { cover.SetImageResource(Resource.Drawable.playlist_placeholder); } title.Text = playlist.Name; genre.Text = playlist.Genre; author.Text = playlist.Artist; year.Text = playlist.Year; plists_recycler.SetAdapter(adapter); plists_recycler.Clickable = true; plists_recycler.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); var actualtracks = Task.Run(async() => { return(await Core.VKontakte.Music.Playlist.GetTracks(playlist.Id, playlist.OwnerId, playlist.AccessKey)); }); try { tracks = MusicService.ConvertToAudioFile(actualtracks.Result); this.playlist.TracksFiles = tracks; adapter.AddItems(tracks); adapter.ItemClick += AdapterOnItemClick; if (playlist.Cover != "playlist_placeholder") { cover.SetImageString(playlist.Cover, 50, 50); } if (playlist.Cover == "playlist_placeholder") { cover.SetImageResource(Resource.Drawable.playlist_placeholder); } trackscount.Text = $"{actualtracks.Result.Count} треков"; title.Text = playlist.Name; genre.Text = playlist.Genre; author.Text = playlist.Artist; year.Text = playlist.Year; plists_recycler.SetAdapter(adapter); plists_recycler.Clickable = true; plists_recycler.SetLayoutManager(new LinearLayoutManager(Application.Context, LinearLayoutManager.Vertical, false)); } catch (System.Exception e) { Toast.MakeText(Application.Context, $"Произошла ошибка. Видимо, ВКонтакте не дает нам доступ к этому плейлисту.", ToastLength.Long).Show(); view = inflater.Inflate(Resource.Layout.errorActivity, container, false); } return(view); }