示例#1
0
 /// <summary>
 /// Получение персональных плейлистов
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="type">Тип</param>
 /// <returns>Плейлист</returns>
 private async Task <YPlaylist> GetPersonalPlaylist(YAuthStorage storage, YGeneratedPlaylistType type)
 {
     return(await MainPagePersonalAsync(storage)
            .ContinueWith(list => {
         YPlaylist playlist = list.Result.FirstOrDefault(p => p.GeneratedPlaylistType == type);
         return playlist == null
                 ? null
                 : Get(storage, playlist);
     }));
 }
示例#2
0
 /// <summary>
 /// Добавление трека
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для добавления</param>
 /// <returns></returns>
 public async Task <YPlaylist> InsertTracksAsync(YAuthStorage storage, YPlaylist playlist, List <YTrack> tracks)
 {
     return(await ChangePlaylist(storage, playlist, new List <YPlaylistChange> {
         new YPlaylistChange {
             Operation = YPlaylistChangeType.Insert,
             At = 0,
             Tracks = tracks.Select(t => t.GetKey()).ToList()
         }
     })
            .ContinueWith(p => Get(storage, p.Result)));
 }
示例#3
0
        public YRequest Create(YPlaylist playlist, List <YPlaylistChange> changes)
        {
            Dictionary <string, string> query = new Dictionary <string, string> {
                { "kind", playlist.Kind },
                { "revision", playlist.Revision.ToString() },
                { "diff", JsonConvert.SerializeObject(changes, settings) }
            };

            var headers = new List <KeyValuePair <string, string> > {
                YRequestHeaders.Get(YHeader.ContentType, "application/x-www-form-urlencoded")
            };

            FormRequest($"{YEndpoints.API}/users/{storage.User.Uid}/playlists/{playlist.Kind}/change",
                        body: GetQueryString(query), headers: headers, method: WebRequestMethods.Http.Post);

            return(this);
        }
示例#4
0
        /// <summary>
        /// Получение персональных плейлистов
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="type">Тип</param>
        /// <returns>Плейлист</returns>
        private async Task <YResponse <YPlaylist> > GetPersonalPlaylist(AuthStorage storage, YGeneratedPlaylistType type)
        {
            return(await LandingAsync(storage)
                   .ContinueWith(list =>
            {
                YPlaylist playlist = list.GetAwaiter().GetResult().Result.Blocks
                                     .FirstOrDefault(b => b.Type == "personal-playlists")
                                     ?.Entities
                                     .FirstOrDefault(e => e.Data.Type == type)
                                     ?.Data
                                     .Data;

                return playlist == null
                        ? null
                        : Get(storage, playlist);
            }));
        }
示例#5
0
        /// <summary>
        /// Удаление треков
        /// </summary>
        /// <param name="storage">Хранилище</param>
        /// <param name="playlist">Плейлист</param>
        /// <param name="tracks">Треки для удаления</param>
        /// <returns></returns>
        public async Task <YPlaylist> DeleteTrackAsync(YAuthStorage storage, YPlaylist playlist, List <YTrack> tracks)
        {
            List <YPlaylistChange> changes = RemoveIdentical(tracks)
                                             .Select(t => playlist.Tracks.Select(c => c.Track).ToList().IndexOf(t))
                                             .Where(i => i != -1)
                                             .Select(i => {
                YTrackContainer t = playlist.Tracks[i];
                return(new YPlaylistChange {
                    Operation = YPlaylistChangeType.Delete,
                    From = i,
                    To = i + 1,
                    Tracks = new List <YTrackAlbumPair> {
                        t.Track.GetKey()
                    }
                });
            })
                                             .ToList();

            return(await ChangePlaylist(storage, playlist, changes));
        }
示例#6
0
        public override Playlist GetPlaylist(string id)
        {
            string[] keys = id.Split(':');

            YPlaylist playlist = client.GetPlaylist(keys[0], keys[1]);

            return(new Playlist {
                Type = ProviderType.Yandex,
                ID = playlist.GetKey().ToString(),
                Title = playlist.Title,
                Cover = GetCover(playlist.OgImage, 100),
                Tracks = playlist.Tracks.Select(t => new Track {
                    Type = ProviderType.Yandex,
                    ID = t.Track.GetKey().ToString(),
                    Artist = t.Track.Artists.Count > 0 ? t.Track.Artists.First().Name : string.Empty,
                    Title = t.Track.Title,
                    Cover = GetCover(t.Track.CoverUri, 100),
                    Gain = t.Track.Normalization.Gain
                })
                         .ToArray()
            });
        }
 public static bool Delete(this YPlaylist playlist)
 {
     return(CheckUser(playlist) && playlist.Context.API.Playlist.Delete(playlist.Context.Storage, playlist));
 }
示例#8
0
        public void Alice_ValidData_True()
        {
            YPlaylist response = Fixture.API.PlaylistAPI.Alice(Fixture.Storage);

            response.Should().NotBeNull();
        }
示例#9
0
 /// <summary>
 /// Получение плейлиста
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Описание плейлиста, для которого будут запрошены треки</param>
 /// <returns></returns>
 public YPlaylist Get(YAuthStorage storage, YPlaylist playlist)
 {
     return(GetAsync(storage, playlist).GetAwaiter().GetResult());
 }
示例#10
0
        public void Podcasts_ValidData_True()
        {
            YPlaylist response = Fixture.Client.GetPodcasts();

            response.Should().NotBeNull();
        }
示例#11
0
        public void OfTheDay_ValidData_True()
        {
            YPlaylist response = Fixture.API.PlaylistAPI.OfTheDay(Fixture.Storage);

            response.Should().NotBeNull();
        }
示例#12
0
 /// <summary>
 /// Удалить плейлист из списка лайкнутых
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public YResponse <string> RemovePlaylistLike(AuthStorage storage, YPlaylist playlist)
 {
     return(RemovePlaylistLikeAsync(storage, playlist).GetAwaiter().GetResult());
 }
示例#13
0
        public void Alice_ValidData_True()
        {
            YPlaylist response = Fixture.Client.GetAlice();

            response.Should().NotBeNull();
        }
示例#14
0
 /// <summary>
 /// Удаление
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public Task <bool> DeleteAsync(AuthStorage storage, YPlaylist playlist)
 {
     return(DeleteAsync(storage, playlist.Kind));
 }
示例#15
0
 /// <summary>
 /// Удаление треков
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для удаления</param>
 /// <returns></returns>
 public YResponse <YPlaylist> DeleteTracks(AuthStorage storage, YPlaylist playlist, params YTrack[] tracks)
 {
     return(DeleteTracksAsync(storage, playlist, tracks).GetAwaiter().GetResult());
 }
示例#16
0
 /// <summary>
 /// Получение плейлиста
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Описание плейлиста, для которого будут запрошены треки</param>
 /// <returns></returns>
 public async Task <YResponse <YPlaylist> > GetAsync(AuthStorage storage, YPlaylist playlist)
 {
     return(await new YGetPlaylistRequest(api, storage)
            .Create(playlist)
            .GetResponseAsync <YResponse <YPlaylist> >());
 }
示例#17
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public Task <YResponse <YPlaylist> > RenameAsync(AuthStorage storage, YPlaylist playlist, string name)
 {
     return(RenameAsync(storage, playlist.Kind, name));
 }
 public static YPlaylist Rename(this YPlaylist playlist, string newName)
 {
     return(CheckUser(playlist)
         ? playlist.Context.API.Playlist.Rename(playlist.Context.Storage, playlist, newName).Result
         : playlist);
 }
 public static string RemoveLike(this YPlaylist playlist)
 {
     return(playlist.Context.API.Library.RemovePlaylistLike(playlist.Context.Storage, playlist).Result);
 }
 private static bool CheckUser(YPlaylist playlist)
 {
     return(playlist.Owner.Uid == playlist.Context.Storage.User.Uid);
 }
示例#21
0
 /// <summary>
 /// Удаление треков
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для удаления</param>
 /// <returns></returns>
 public YPlaylist DeleteTrack(YAuthStorage storage, YPlaylist playlist, List <YTrack> tracks)
 {
     return(DeleteTrackAsync(storage, playlist, tracks).GetAwaiter().GetResult());
 }
示例#22
0
 /// <summary>
 /// Добавление трека
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="tracks">Треки для добавления</param>
 /// <returns></returns>
 public YPlaylist InsertTracks(YAuthStorage storage, YPlaylist playlist, List <YTrack> tracks)
 {
     return(InsertTracksAsync(storage, playlist, tracks).GetAwaiter().GetResult());
 }
示例#23
0
 /// <summary>
 /// Получение плейлиста
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Описание плейлиста, для которого будут запрошены треки</param>
 /// <returns></returns>
 public YResponse <YPlaylist> Get(AuthStorage storage, YPlaylist playlist)
 {
     return(GetAsync(storage, playlist).GetAwaiter().GetResult());
 }
 public static YPlaylist RemoveTracks(this YPlaylist playlist, params YTrack[] tracks)
 {
     return(CheckUser(playlist)
         ? playlist.Context.API.Playlist.DeleteTracks(playlist.Context.Storage, playlist, tracks).Result
         : playlist);
 }
示例#25
0
 /// <summary>
 /// Переименование
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="name">Заголовок</param>
 /// <returns></returns>
 public YResponse <YPlaylist> Rename(AuthStorage storage, YPlaylist playlist, string name)
 {
     return(RenameAsync(storage, playlist.Kind, name).GetAwaiter().GetResult());
 }
        public YRequest Create(YPlaylist playlist)
        {
            FormRequest($"{YEndpoints.API}/users/{playlist.Owner.Uid}/playlists/{playlist.Kind}");

            return(this);
        }
示例#27
0
 /// <summary>
 /// Удаление
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public bool Delete(AuthStorage storage, YPlaylist playlist)
 {
     return(DeleteAsync(storage, playlist.Kind).GetAwaiter().GetResult());
 }
示例#28
0
        public void OfTheDay_ValidData_True()
        {
            YPlaylist response = Fixture.Client.GetOfTheDay();

            response.Should().NotBeNull();
        }
示例#29
0
 /// <summary>
 /// Изменение плейлиста
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <param name="changes">Список изменений</param>
 /// <returns>Плейлист после изменений</returns>
 private async Task <YResponse <YPlaylist> > ChangePlaylist(AuthStorage storage, YPlaylist playlist, List <YPlaylistChange> changes)
 {
     return(await new YPlaylistChangeRequest(api, storage)
            .Create(playlist, changes)
            .GetResponseAsync <YResponse <YPlaylist> >());
 }
示例#30
0
 /// <summary>
 /// Удалить плейлист из списка лайкнутых
 /// </summary>
 /// <param name="storage">Хранилище</param>
 /// <param name="playlist">Плейлист</param>
 /// <returns></returns>
 public async Task <YResponse <string> > RemovePlaylistLikeAsync(AuthStorage storage, YPlaylist playlist)
 {
     return(await new YLibraryRemoveRequest(api, storage)
            .Create(playlist.GetKey().ToString(), YLibrarySection.Playlists)
            .GetResponseAsync <YResponse <string> >());
 }