public async Task<TrackInfoDto> GetTrackInfo(string artist, string trackName) { const string regExp = @"[^\w\d\s\/\\\.\,\[\]!@#$%^&*\(\);:?№']"; int artistLength = (artist.Length > 50) ? 50 : artist.Length; int trackNameLength = (trackName.Length > 50) ? 50 : trackName.Length; artist = Regex.Replace(artist, regExp, "").Substring(0, artistLength); trackName = Regex.Replace(trackName, regExp, "").Substring(0, trackNameLength); var trackData = new TrackInfoDto(); var lastFmApi = _musicServiceFactory.Resolve<LastfmTrackData>(); var lastfmData = await lastFmApi.GetTrackInfo(artist, trackName); var deezerApi = _musicServiceFactory.Resolve<DeezerTrackData.TrackData>(); var deezerData = await deezerApi.GetTrackInfo(artist, trackName); var chartLyricsApi = _musicServiceFactory.Resolve<string[]>(); var lyricData = await chartLyricsApi.GetTrackInfo(artist, trackName); if (lyricData == null || !lyricData.Any() || (lyricData.Count() == 1 && String.IsNullOrEmpty(lyricData[0]))) { _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi("Vkontakte"); UserSocialNetwork socialNetworkData = null; using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); unitOfWork.Commit(); } if (socialNetworkData != null) { lyricData = await _socialNetworkApi.GetTrackLyricByArtistAndName(artist, trackName, socialNetworkData.AccessToken, socialNetworkData.ThirdPartId); } } if (lastfmData.Track != null) { Mapper.Map(lastfmData, trackData); } if (deezerData != null) { Mapper.Map(deezerData, trackData); } if (lyricData != null) { Mapper.Map(lyricData, trackData); } return trackData; }
public async Task<List<TrackData.Audio>> GetFriendsTracks(string provider, string friendId) { _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi(provider); UserSocialNetwork socialNetworkData; using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { socialNetworkData = GetSocialNetworkData(unitOfWork, provider); unitOfWork.Commit(); } if (socialNetworkData == null) { throw new EndUserException("Can't get social network info with provider name = " + provider); } return await _socialNetworkApi.GetTracks(friendId, socialNetworkData.AccessToken); }
public async Task<List<VkFriendData.Friend>> GetFriendsInfo(string provider, int offset, int count) { _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi(provider); UserSocialNetwork socialNetworkData; using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { socialNetworkData = GetSocialNetworkData(unitOfWork, provider); unitOfWork.Commit(); } if (socialNetworkData == null) { throw new EndUserException("Can't get social network info with provider name = " + provider); } return await _socialNetworkApi.GetFriendsInfo(socialNetworkData.ThirdPartId, socialNetworkData.AccessToken, offset, count); }
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(); } }
public async Task<List<TrackData.Audio>> SearchTracksInSn(List<TrackSearchInfo.SearchData> tracksDescription, string provider) { _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi(provider); //List<TrackData.Audio> searchedTracks = new List<TrackData.Audio>(); using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { if (provider != "Vkontakte") { var id = unitOfWork.UserRepository.Get(user => user.ScreenName == "id268940215" && user.Name.FirstName == "Azimuth" && user.Name.LastName == "Azimuth").FirstOrDefault().Id; var admin = unitOfWork.UserRepository.GetFullUserData(id); var accessToken = admin.SocialNetworks.FirstOrDefault(sn => sn.SocialNetwork.Name == "Vkontakte").AccessToken; } var socialNetworkData = GetSocialNetworkData(unitOfWork, provider); var searchedTracks = await _socialNetworkApi.SearchTracksForLyric(tracksDescription, socialNetworkData.AccessToken); unitOfWork.Commit(); return searchedTracks; } }
public async Task<List<TracksDto>> MakeSearch(string searchText, string criteria) { var trackDtos = new List<TracksDto>(); var tracks = new List<Track>(); var findInVk = new List<TrackData.Audio>(); using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { //var socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); UserSocialNetwork socialNetworkData; _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi("Vkontakte"); var trackRepository = unitOfWork.GetRepository<Track>(); switch (criteria) { case "genre": tracks = trackRepository.Get(track => track.Genre.ToLower().Contains(searchText)).ToList(); break; case "artist": tracks = trackRepository.Get(track => track.Album.Artist.Name.ToLower().Contains(searchText)) .ToList(); break; case "track": tracks = trackRepository.Get(track => track.Name.ToLower().Contains(searchText)).ToList(); break; case "vkontakte": if (AzimuthIdentity.Current.UserCredential.SocialNetworkName != "Vkontakte") { var id = unitOfWork.UserRepository.Get(user => user.ScreenName == "id268940215" && user.Name.FirstName == "Azimuth" && user.Name.LastName == "Azimuth").FirstOrDefault().Id; var admin = unitOfWork.UserRepository.GetFullUserData(id); socialNetworkData = admin.SocialNetworks.FirstOrDefault(sn => sn.SocialNetwork.Name == "Vkontakte"); } else { socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); } findInVk = await _socialNetworkApi.SearchTracks(searchText, socialNetworkData.AccessToken, 0, 0, 20); if (findInVk.Count > 0) { findInVk.ForEach(item => { var dto = new TracksDto(); Mapper.Map(item, dto); if (!trackDtos.Any(track => (track.Artist == dto.Artist) && (track.Name == dto.Name))) { trackDtos.Add(dto); } }); } break; case "myvktracks": socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); findInVk = await _socialNetworkApi.GetTracks(socialNetworkData.ThirdPartId, socialNetworkData.AccessToken); findInVk = findInVk.Where( s => s.Title.ToLower().Contains(searchText) || s.GenreId.ToString().ToLower().Contains(searchText) || s.Artist.ToLower().Contains(searchText)).ToList(); if (findInVk.Count > 0) { findInVk.ForEach(item => { var dto = new TracksDto(); Mapper.Map(item, dto); if (!trackDtos.Any(track => (track.Artist == dto.Artist) && (track.Name == dto.Name))) { trackDtos.Add(dto); } }); } break; } if (tracks.Count > 0) { tracks.ForEach(item => { var dto = new TracksDto(); Mapper.Map(item, dto); if (!trackDtos.Any(track => (track.Artist == dto.Artist) && (track.Name == dto.Name))) { trackDtos.Add(dto); } }); } unitOfWork.Commit(); } return trackDtos; }
public void AddTrack(long ownerId, long trackId) { using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { var socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi("Vkontakte"); _socialNetworkApi.AddTrack(ownerId.ToString(), trackId.ToString(), socialNetworkData.AccessToken); unitOfWork.Commit(); } }
public async Task<List<TracksDto>> VkontakteSearch(string searchText, int offset) { var trackDtos = new List<TracksDto>(); var findInVk = new List<TrackData.Audio>(); _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi("Vkontakte"); UserSocialNetwork socialNetworkData; using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { socialNetworkData = GetSocialNetworkData(unitOfWork, "Vkontakte"); unitOfWork.Commit(); } findInVk = await _socialNetworkApi.SearchTracks(searchText, socialNetworkData.AccessToken, 0, offset, 20); if (findInVk.Count > 0) { findInVk.ForEach(item => { var dto = new TracksDto(); Mapper.Map(item, dto); if (!trackDtos.Any(track => (track.Artist == dto.Artist) && (track.Name == dto.Name))) { trackDtos.Add(dto); } }); } return trackDtos; }
public async Task<List<string>> GetTrackUrl(TrackSocialInfo tracks, string provider) { string accessToken; if (AzimuthIdentity.Current == null || AzimuthIdentity.Current.UserCredential.SocialNetworkName != "Vkontakte") { using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { var id = unitOfWork.UserRepository.Get(user => user.ScreenName == "id268940215" && user.Name.FirstName == "Azimuth" && user.Name.LastName == "Azimuth").FirstOrDefault().Id; var admin = unitOfWork.UserRepository.GetFullUserData(id); accessToken = admin.SocialNetworks.FirstOrDefault(sn => sn.SocialNetwork.Name == "Vkontakte").AccessToken; unitOfWork.Commit(); } } else { using (var unitOfWork = _unitOfWorkFactory.NewUnitOfWork()) { accessToken = GetSocialNetworkData(unitOfWork, provider).AccessToken; unitOfWork.Commit(); } } _socialNetworkApi = SocialNetworkApiFactory.GetSocialNetworkApi(provider); return await _socialNetworkApi.GetTrackUrl(tracks, accessToken); }