Beispiel #1
0
        public static async Task <bool> AddAudio(VkAudio audio, string captchaSid = null, string captchaKey = null)
        {
            if (string.IsNullOrEmpty(audio.Source))
            {
                var vkAudio = await GetAudioByArtistAndTitle(audio.Artist, audio.Title);

                if (vkAudio != null)
                {
                    audio.Id       = vkAudio.Id;
                    audio.Artist   = vkAudio.Artist;
                    audio.Title    = vkAudio.Title;
                    audio.Source   = vkAudio.Source;
                    audio.OwnerId  = vkAudio.OwnerId;
                    audio.AlbumId  = vkAudio.AlbumId;
                    audio.LyricsId = vkAudio.LyricsId;
                }
            }

            var newId = await _vkontakte.Audio.Add(long.Parse(audio.Id), audio.OwnerId, captchaSid : captchaSid, captchaKey : captchaKey);

            if (newId > 0)
            {
                audio.Id      = newId.ToString();
                audio.OwnerId = _vkontakte.AccessToken.UserId;
                audio.IsAddedByCurrentUser = true;
                return(true);
            }
            return(false);
        }
Beispiel #2
0
        private async Task <List <VkAudio> > GetAudioList(IProgress <int> progress)
        {
            if (Tracks == null)
            {
                return(null);
            }

            var result        = new List <VkAudio>();
            int requestsCount = 0;
            int progressStep  = (int)(100.0f / Tracks.Count);

            foreach (var audio in Tracks)
            {
                //if (token.IsCancellationRequested)
                //    return null;


                VkAudio vkAudio = null;
                try
                {
                    vkAudio = await DataService.GetAudioByArtistAndTitle(audio.Artist, audio.Title);
                }
                catch (Exception ex)
                {
                    LoggingService.Log(ex);
                }

                if (vkAudio == null)
                {
                    LoggingService.Log("Failed to find audio " + audio.Artist + " - " + audio.Title);
                }
                else
                {
                    result.Add(new VkAudio()
                    {
                        Id       = vkAudio.Id,
                        OwnerId  = vkAudio.OwnerId,
                        Title    = vkAudio.Title,
                        Artist   = vkAudio.Artist,
                        Duration = vkAudio.Duration
                    });
                }

                requestsCount++;

                if (requestsCount >= 2) //не больше 2-х запросов в секунду
                {
                    requestsCount = 0;
                    await Task.Delay(1000);
                }

                //if (token.IsCancellationRequested)
                //    return null;

                progress.Report(progressStep);
            }

            return(result);
        }
        public DownloadAudioView(VkAudio audio)
        {
            InitializeComponent();

            _viewModel = new DownloadAudioViewModel();
            this.DataContext = _viewModel;
            _viewModel.Track = audio;
        }
Beispiel #4
0
        public LyricsView(VkAudio audio)
        {
            InitializeComponent();

            _viewModel = new LyricsViewModel();
            this.DataContext = _viewModel;
            _viewModel.Track = audio;
        }
Beispiel #5
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;
        }
Beispiel #6
0
        public static async Task <bool> SetMusicStatus(VkAudio audio, List <long> targetIds = null)
        {
            if (audio == null)
            {
                return(false);
            }

            var result = await _vkontakte.Audio.SetBroadcast(long.Parse(audio.Id), audio.OwnerId, targetIds);

            return(result != null);
        }
Beispiel #7
0
        public static async Task <bool> RemoveAudio(VkAudio audio)
        {
            var result = await _vkontakte.Audio.Delete(long.Parse(audio.Id), audio.OwnerId);

            if (result)
            {
                audio.IsAddedByCurrentUser = false;
            }

            return(result);
        }
Beispiel #8
0
 public AudioVk(VkAudio audio)
 {
     Id         = audio.Id.ToString();
     OwnerId    = audio.OwnerId.ToString();
     Title      = audio.Title;
     Artist     = audio.Artist;
     Duration   = audio.Duration;
     PlaylistId = audio.AlbumId;
     LyricsId   = audio.LyricsId;
     if (!string.IsNullOrEmpty(audio.Url))
     {
         Source = new Uri(audio.Url);
     }
 }
Beispiel #9
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;

            return result;
        }
        public override Audio Clone()
        {
            var audio = new VkAudio();

            audio.Id                   = this.Id;
            audio.OwnerId              = this.OwnerId;
            audio.AlbumId              = this.AlbumId;
            audio.Title                = this.Title;
            audio.Artist               = this.Artist;
            audio.Duration             = this.Duration;
            audio.GenreId              = this.GenreId;
            audio.Lyrics               = this.Lyrics;
            audio.LyricsId             = this.LyricsId;
            audio.IsAddedByCurrentUser = this.IsAddedByCurrentUser;

            return(audio);
        }
Beispiel #11
0
 public AudioVk(VkAudio audio)
 {
     Id         = audio.Id.ToString();
     OwnerId    = audio.OwnerId.ToString();
     Title      = audio.Title;
     Artist     = audio.Artist;
     Duration   = audio.Duration;
     PlaylistId = audio.AlbumId;
     LyricsId   = audio.LyricsId;
     if (!string.IsNullOrEmpty(audio.Url))
     {
         Source = new Uri(audio.Url);
     }
     if (audio.Album != null && audio.Album.Thumb != null && !string.IsNullOrWhiteSpace(audio.Album.Thumb.Photo300))
     {
         AlbumCover = new Uri(audio.Album.Thumb.Photo300);
     }
 }
Beispiel #12
0
        public override Audio Clone()
        {
            var audio = new VkAudio();
            audio.Id = this.Id;
            audio.OwnerId = this.OwnerId;
            audio.AlbumId = this.AlbumId;
            audio.Title = this.Title;
            audio.Artist = this.Artist;
            audio.Duration = this.Duration;
            audio.GenreId = this.GenreId;
            audio.Lyrics = this.Lyrics;
            audio.LyricsId = this.LyricsId;
            audio.IsAddedByCurrentUser = this.IsAddedByCurrentUser;

            return audio;
        }
Beispiel #13
0
        public static async Task<bool> SetMusicStatus(VkAudio audio, List<long> targetIds = null)
        {
            if (audio == null)
                return false;

            var result = await _vkontakte.Audio.SetBroadcast(long.Parse(audio.Id), audio.OwnerId, targetIds);

            return result != null;
        }
Beispiel #14
0
        public static async Task<bool> AddAudio(VkAudio audio, string captchaSid = null, string captchaKey = null)
        {
            if (string.IsNullOrEmpty(audio.Source))
            {
                var vkAudio = await GetAudioByArtistAndTitle(audio.Artist, audio.Title);
                if (vkAudio != null)
                {
                    audio.Id = vkAudio.Id;
                    audio.Artist = vkAudio.Artist;
                    audio.Title = vkAudio.Title;
                    audio.Source = vkAudio.Source;
                    audio.OwnerId = vkAudio.OwnerId;
                    audio.AlbumId = vkAudio.AlbumId;
                    audio.LyricsId = vkAudio.LyricsId;
                }
            }

            var newId = await _vkontakte.Audio.Add(long.Parse(audio.Id), audio.OwnerId, captchaSid: captchaSid, captchaKey: captchaKey);
            if (newId > 0)
            {
                audio.Id = newId.ToString();
                audio.OwnerId = _vkontakte.AccessToken.UserId;
                audio.IsAddedByCurrentUser = true;
                return true;
            }
            return false;
        }
Beispiel #15
0
        public static async Task<bool> RemoveAudio(VkAudio audio)
        {
            var result = await _vkontakte.Audio.Delete(long.Parse(audio.Id), audio.OwnerId);
            if (result)
            {
                audio.IsAddedByCurrentUser = false;
            }

            return result;
        }
        public AddToAlbumView(VkAudio track)
        {
            _track = track;

            InitializeComponent();
        }
Beispiel #17
0
        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;
        }
        public AddToAlbumView(VkAudio track)
        {
            _track = track;

            InitializeComponent();
        }
Beispiel #19
0
        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);
        }