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));
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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");
        }
示例#5
0
        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));
        }
示例#6
0
        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");
        }
示例#7
0
        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));
            }
        }
示例#8
0
        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);
        }