Ejemplo n.º 1
0
        public async Task SetPlaylist(DataForTrackSaving tracksInfo, string provider, int index)
        {
            _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi(provider);

            bool tracksToEnd = index == -1;

            using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork())
            {
                var playlistTrackRepository = unitOfWork.GetRepository<PlaylistTrack>();
                var trackRepository = unitOfWork.GetRepository<Track>();

                List<VkTrackResponse.Audio> trackDatas = null;
                //get checked tracks
                var socialNetworkData = GetSocialNetworkData(unitOfWork, provider);
                trackDatas = await _socialNetworkApi.GetSelectedTracks(tracksInfo, socialNetworkData.AccessToken);

                if (trackDatas.Any())
                {
                    var playlist = unitOfWork.PlaylistRepository.GetOne(pl => pl.Id == tracksInfo.PlaylistId);
                    playlist.PlaylistTracks =
                        playlistTrackRepository.Get(s => s.Identifier.Playlist.Id == tracksInfo.PlaylistId).ToList();

                    int i = 0;
                    //create Track objects
                    var artistRepo = unitOfWork.GetRepository<Artist>();

                    try
                    {
                        foreach (var trackData in trackDatas)
                        {
                            if (trackData.Artist.Length > 50)
                            {
                                trackData.Artist = trackData.Artist.Substring(0, 50);
                            }
                            if (trackData.Title.Length > 50)
                            {
                                trackData.Title = trackData.Title.Substring(0, 50);
                            }

                            var artist = new Artist
                            {
                                Name = trackData.Artist
                            };
                            var album = new Album
                            {
                                Name = "",
                                Artist = artist,
                            };

                            artist.Albums.Add(album);
                            artistRepo.AddItem(artist);

                            var track = new Track
                            {
                                Duration = trackData.Duration.ToString(CultureInfo.InvariantCulture),
                                //Lyrics =
                                //    await _socialNetworkApi.GetLyricsById(socialNetworkData.ThirdPartId, trackData.Id,
                                //            socialNetworkData.AccessToken),
                                Name = trackData.Title,
                                Album = album,
                                ThirdPartId = Convert.ToString(trackData.Id),
                                OwnerId = Convert.ToString(trackData.OwnerId),
                                Genre = trackData.GenreId.ToString(),
                            };

                            track.Playlists.Add(playlist);
                            album.Tracks.Add(track);
                            trackRepository.AddItem(track);

                            if (index == -1)
                            {
                                index = (playlist.Tracks.Any()) ? playlist.Tracks.Count() : 0;
                            }

                            var playlistTrack = new PlaylistTrack
                            {
                                Identifier = new PlaylistTracksIdentifier
                                {
                                    Playlist = playlist,
                                    Track = track
                                },
                                TrackPosition = index + i++
                            };

                            playlistTrackRepository.AddItem(playlistTrack);

                            playlist.PlaylistTracks.Add(playlistTrack);
                        }
                    }
                    catch (Exception exp)
                    {
                        var s = exp;
                    }


                    if (tracksToEnd == false)
                    {
                        playlist.PlaylistTracks.ForEach((item, n) =>
                        {
                            if (n < playlist.PlaylistTracks.Count - i && item.TrackPosition >= index)
                            {
                                item.TrackPosition += i;
                            }
                        });
                    }
                }

                unitOfWork.Commit();
            }
        }
Ejemplo n.º 2
0
 public async Task<HttpResponseMessage> Post(DataForTrackSaving tracksInfo, string provider, int index)
 {
     await _userTracksService.SetPlaylist(tracksInfo, provider, index);
     return Request.CreateResponse(HttpStatusCode.OK);
 }
Ejemplo n.º 3
0
        public async Task<List<VkTrackResponse.Audio>> GetSelectedTracks(DataForTrackSaving tracksInfo, string accessToken)
        {
            var result = new List<VkTrackResponse.Audio>();

            for (int offset = 0; offset < tracksInfo.TrackInfos.Count; offset += 100)
            {
                var url = BaseUri + "audio.getById?audios=";
                url = tracksInfo.TrackInfos.Skip(offset)
                    .Take(100)
                    .Aggregate(url, (current, track) => current + (track.OwnerId + "_" + track.ThirdPartId + ","));
                url = url.Remove(url.Length - 1);
                url += "&itunes=0&v=5.24&access_token=" + accessToken;

                var json = await _webClient.GetWebData(url);
                var tracks = JsonConvert.DeserializeObject<VkTrackResponse>(json);

                if (tracks.Response == null)
                {
                    var error = JsonConvert.DeserializeObject<ErrorData>(json);
                    if (error.Error == null && tracks.Response != null)
                    {
                        return tracks.Response;
                    }
                    int code = error.Error.ErrorCode;
                    string message = error.Error.ErrorMessage;
                    switch (code)
                    {
                        case 1:
                            throw new UnknownErrorException(message, code);
                        case 2:
                            throw new ApplicationDisabledException(message, code);
                        case 4:
                            throw new IncorrectSignatureException(message, code);
                        case 5:
                            throw new UserAuthorizationException(message, code);
                        case 6:
                            throw new ManyRequestException(message, code);
                        case 100:
                            throw new BadParametersException(message, code);
                        default:
                            throw new VkApiException(message, code);
                    }
                }

                result.AddRange(tracks.Response);
            }

            return result;
        }