public DownloadAudioView(VkAudio audio) { InitializeComponent(); _viewModel = new DownloadAudioViewModel(); this.DataContext = _viewModel; _viewModel.Track = audio; }
public LyricsView(VkAudio audio) { InitializeComponent(); _viewModel = new LyricsViewModel(); this.DataContext = _viewModel; _viewModel.Track = audio; }
public VkAudioAttachment(VkAudio audio) { this.Id = audio.Id; this.OwnerId = audio.OwnerId; this.Artist = audio.Artist; this.Title = audio.Title; this.Duration = audio.Duration; this.Url = audio.Url; }
public static VkAudio ToAudio(this LastFmTrack audio) { var result = new VkAudio(); result.Title = audio.Title; result.Artist = audio.Artist; result.Duration = TimeSpan.FromSeconds(audio.Duration); return(result); }
private static void PlaySong(EchoSong song) { var audio = new VkAudio() { Title = song.Title, Artist = song.ArtistName }; _currentSong = song; AudioService.Play(audio); AudioService.Playlist.Insert(0, audio); //AudioService.SetCurrentPlaylist(new[] { audio }, true); }
public static VkAudio ToAudio(this VkLib.Core.Audio.VkAudio audio) { var result = new VkAudio(); result.Id = audio.Id.ToString(); result.Title = audio.Title; result.Artist = audio.Artist; result.AlbumId = audio.AlbumId; result.Duration = audio.Duration; result.LyricsId = audio.LyricsId; result.OwnerId = audio.OwnerId; result.Source = audio.Url; result.GenreId = audio.GenreId; result.IsAddedByCurrentUser = audio.OwnerId == ViewModelLocator.Vkontakte.AccessToken.UserId; return(result); }
public static VkAudio ToAudio(this VkLib.Core.Audio.VkAudio audio) { var result = new VkAudio(); result.Id = audio.Id.ToString(); result.Title = audio.Title; result.Artist = audio.Artist; result.AlbumId = audio.AlbumId; result.Duration = audio.Duration; result.LyricsId = audio.LyricsId; result.OwnerId = audio.OwnerId; result.Source = audio.Url; result.GenreId = audio.GenreId; result.IsAddedByCurrentUser = audio.OwnerId == ViewModelLocator.Vkontakte.AccessToken.UserId; if (audio.Album?.Thumb != null && !string.IsNullOrWhiteSpace(audio.Album.Thumb.Photo300)) { result.AlbumCover = new Uri(audio.Album.Thumb.Photo300); } return(result); }
private Audio ConvertAudio(VkAudio a) { Audio audio = new Audio(); Int64 id = a.Id; audio.Id = id.ToString(CultureInfo.InvariantCulture); Int64 albumId = a.AlbumId; audio.PlaylistId = albumId.ToString(); Int64 ownerId = a.OwnerId; audio.OwnerId = ownerId.ToString(); audio.Title = a.Title; audio.Uri = new Uri(a.Url); audio.Artist = a.Artist; audio.Duration = a.Duration; Int64 num = a.OwnerId; audio.IsAddedByCurrentUser = num.ToString() == this._vkontakte.AccessToken.UserId; audio.LyricsId = a.LyricsId; return(audio); }
private async Task <List <VkAudioAttachment> > GetAudioList(IProgress <int> progress, CancellationToken token) { if (Tracks == null) { return(null); } var result = new List <VkAudioAttachment>(); int requestsCount = 0; foreach (var audio in Tracks) { if (token.IsCancellationRequested) { return(null); } if (audio.Source == null) { VkAudio vkAudio = null; try { vkAudio = await DataService.GetAudioByArtistAndTitle(audio.Artist, audio.Title); } catch (Exception ex) { LoggingService.Log(ex); } if (vkAudio != null) { var audioAttachment = new VkAudioAttachment(); audioAttachment.Id = long.Parse(vkAudio.Id); audioAttachment.OwnerId = vkAudio.OwnerId; result.Add(audioAttachment); } else { LoggingService.Log("Failed to find audio " + audio.Artist + " - " + audio.Title); } requestsCount++; if (requestsCount >= 2) //не больше 2-х запросов в секунду { requestsCount = 0; await Task.Delay(1000); } } else { var audioAttachment = new VkAudioAttachment(); audioAttachment.Id = long.Parse(audio.Id); audioAttachment.OwnerId = audio.OwnerId; result.Add(audioAttachment); } if (token.IsCancellationRequested) { return(null); } progress.Report(1); } return(result); }
private async static void PlayInternal(Audio track, CancellationToken token) { if (CurrentAudio != null) { CurrentAudio.IsPlaying = false; Stop(); } track.IsPlaying = true; CurrentAudio = track; if (track.Source == null) { VkAudio vkAudio = null; try { vkAudio = await DataService.GetAudioByArtistAndTitle(track.Artist, track.Title); } catch (Exception ex) { LoggingService.Log(ex); } if (vkAudio != null) { vkAudio.IsPlaying = true; if (_playlist != null) { var playlistTrackIndex = _playlist.IndexOf(track); if (playlistTrackIndex >= 0) { var playlistTrack = (VkAudio)_playlist[_playlist.IndexOf(track)]; playlistTrack.Id = vkAudio.Id; playlistTrack.Source = vkAudio.Source; playlistTrack.OwnerId = vkAudio.OwnerId; playlistTrack.IsAddedByCurrentUser = vkAudio.IsAddedByCurrentUser; playlistTrack.AlbumId = vkAudio.AlbumId; playlistTrack.Title = vkAudio.Title; playlistTrack.Artist = vkAudio.Artist; playlistTrack.Duration = vkAudio.Duration; playlistTrack.GenreId = vkAudio.GenreId; playlistTrack.LyricsId = vkAudio.LyricsId; //_playlist[_playlist.IndexOf(track)] = vkAudio; //to fix radio vk scrobbling } } track = vkAudio; //_currentAudio = track; _playFailsCount = 0; } else { LoggingService.Log("Failed to find audio " + track.Artist + " - " + track.Title); _playFailsCount++; if (_playFailsCount > 5) { return; } Next(); return; } } #if DEBUG LoggingService.Log(string.Format("Playing: {0} {1} {2} {3}", track.Id, track.Artist, track.Title, track.Source)); #endif if (token.IsCancellationRequested) { return; } track.IsPlaying = true; //look like MediaElement doen't work with https, temporary hack var url = track.Source; if (!string.IsNullOrEmpty(url)) { if (!Settings.Instance.UseHttps) { url = url.Replace("https://", "http://"); } MediaPlayer.Source = new Uri(url); MediaPlayer.Play(); State = PlayerPlayState.Playing; } }
private async Task LikeDislikeAudio(VkAudio audio, bool captchaNeeded = false, string captchaSid = null, string captchaImg = null) { if (audio == null) { return; } IsWorking = true; string captchaKey = null; if (captchaNeeded) { var flyout = new FlyoutControl(); flyout.FlyoutContent = new CaptchaRequestView(captchaSid, captchaImg); var result = await flyout.ShowAsync(); if (string.IsNullOrEmpty((string)result)) { IsWorking = false; return; } else { captchaKey = (string)result; } } try { bool result; if (!audio.IsAddedByCurrentUser) { result = await DataService.RemoveAudio(audio); } else { result = await DataService.AddAudio(audio, captchaSid, captchaKey); } if (result) { //нужно, чтобы обновить список треков пользователя, если он открыт в данный момент MessengerInstance.Send(new UserTracksChangedMessage()); } else { audio.IsAddedByCurrentUser = !audio.IsAddedByCurrentUser; LoggingService.Log("Can't add/remove audio " + audio.Id + " owner: " + audio.OwnerId + "."); } } catch (VkCaptchaNeededException ex) { LikeDislikeAudio(audio, true, ex.CaptchaSid, ex.CaptchaImg); } catch (Exception ex) { audio.IsAddedByCurrentUser = !audio.IsAddedByCurrentUser; LoggingService.Log(ex); } IsWorking = false; }