/// <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); })); }
/// <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))); }
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); }
/// <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); })); }
/// <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)); }
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)); }
public void Alice_ValidData_True() { YPlaylist response = Fixture.API.PlaylistAPI.Alice(Fixture.Storage); response.Should().NotBeNull(); }
/// <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()); }
public void Podcasts_ValidData_True() { YPlaylist response = Fixture.Client.GetPodcasts(); response.Should().NotBeNull(); }
public void OfTheDay_ValidData_True() { YPlaylist response = Fixture.API.PlaylistAPI.OfTheDay(Fixture.Storage); response.Should().NotBeNull(); }
/// <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()); }
public void Alice_ValidData_True() { YPlaylist response = Fixture.Client.GetAlice(); response.Should().NotBeNull(); }
/// <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)); }
/// <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()); }
/// <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> >()); }
/// <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); }
/// <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()); }
/// <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()); }
/// <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); }
/// <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); }
/// <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()); }
public void OfTheDay_ValidData_True() { YPlaylist response = Fixture.Client.GetOfTheDay(); response.Should().NotBeNull(); }
/// <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> >()); }
/// <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> >()); }