Пример #1
0
        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;
        }
Пример #3
0
 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;
 }
Пример #4
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #10
0
        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;
        }