コード例 #1
0
ファイル: MainViewModel.cs プロジェクト: RomanGL/VKSaver
        private async void OnPlayUserTracksCommand(Audio track)
        {
            if (track.Title == VKSAVER_SEE_ALSO_TEXT)
            {
                OnGoToUserContentCommand("audios");
                return;
            }

            List <IPlayerTrack> tracksToPlay = null;
            await Task.Run(() =>
            {
#if WINDOWS_UWP
                tracksToPlay = new List <IPlayerTrack>(UserTracks
                                                       .Where(a => a.Title != VKSAVER_SEE_ALSO_TEXT)
                                                       .Select(a => a.ToPlayerTrack()));
#else
                tracksToPlay = new List <IPlayerTrack>(UserTracks.Count + 1);
                tracksToPlay.Add(FirstTrack.VKTrack.ToPlayerTrack());
                tracksToPlay.AddRange(UserTracks.Select(a => a.ToPlayerTrack()));
#endif
            });

            if (tracksToPlay == null)
            {
                return;
            }

            IPlayerTrack plTrack = track.ToPlayerTrack();
            await _playerService.PlayNewTracks(tracksToPlay, tracksToPlay.IndexOf(plTrack));

#if !WINDOWS_UWP
            _navigationService.Navigate("PlayerView", null);
#endif
        }
コード例 #2
0
 /// <summary>
 /// Обновить системные кнопки управления проигрывателем при старте нового трека.
 /// </summary>
 /// <param name="newTrack">Новый трек.</param>
 private void UpdateControlsOnNewTrack(IPlayerTrack newTrack)
 {
     _controls.DisplayUpdater.Type = MediaPlaybackType.Music;
     _controls.DisplayUpdater.MusicProperties.Title  = newTrack.Title;
     _controls.DisplayUpdater.MusicProperties.Artist = newTrack.Artist;
     _controls.DisplayUpdater.Update();
 }
コード例 #3
0
        public bool Equals(IPlayerTrack other)
        {
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(this.Title == other.Title &&
                   this.Artist == other.Artist &&
                   this.Source == other.Source);
        }
コード例 #4
0
 public static VKSaverAudio ToVKSaverAudio(this IPlayerTrack track)
 {
     return(new VKSaverAudio
     {
         Track = new VKSaverAudioTrackInfo
         {
             Title = track.Title,
             Artist = track.Artist
         },
         VK = track.VKInfo
     });
 }
コード例 #5
0
        private async void UpdateTileOnNewTrack(IPlayerTrack track)
        {
            try
            {
                string artistImage = await _imagesCacheService.GetCachedArtistImage(track.Artist);

                var images = await _imagesCacheService.GetCachedAlbumsImages(3);

                if (images.Count == 1)
                {
                    images.Add("ms-appx:///Assets/Images/PlayerLogo2.png");
                }

                int count = 5 - images.Count;
                for (int i = 1; i <= count; i++)
                {
                    images.Add($"ms-appx:///Assets/Images/PlayerLogo{i}.png");
                }

                var wideTile = TileContentFactory.CreateTileWide310x150PeekImageCollection01();
                wideTile.TextBodyWrap.Text = track.Title;
                wideTile.TextHeading.Text  = track.Artist;

                wideTile.ImageMain.Src             = images[0];
                wideTile.ImageSmallColumn1Row1.Src = images[1];
                wideTile.ImageSmallColumn1Row2.Src = images[2];
                wideTile.ImageSmallColumn2Row1.Src = images[3];
                wideTile.ImageSmallColumn2Row2.Src = images[4];

                var squareTile = TileContentFactory.CreateTileSquare150x150PeekImageAndText02();
                squareTile.TextBodyWrap.Text = track.Title;
                squareTile.TextHeading.Text  = track.Artist;
                squareTile.Image.Src         = String.IsNullOrEmpty(artistImage) ? images[0] : artistImage;

                wideTile.RequireSquare150x150Content = true;
                wideTile.Square150x150Content        = squareTile;

                var tileNotification = wideTile.CreateNotification();

                if (_manager.CurrentTrack.Equals(track))
                {
                    TileUpdateManager.CreateTileUpdaterForApplication("App").Update(tileNotification);
                }
            }
            catch (Exception ex)
            {
                _logService.LogText($"Tile update exception: {ex.ToString()}");
            }
        }
コード例 #6
0
ファイル: PlayerViewModel.cs プロジェクト: RomanGL/VKSaver
        private async void LoadTrackImage(IPlayerTrack track)
        {
            string imagePath = await _imagesCacheService.GetCachedAlbumImage(track.Title);

            if (imagePath == null)
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                              () => TrackImage = null);

                imagePath = await _imagesCacheService.CacheAndGetAlbumImage(track.Title, track.Artist);
            }

            if (imagePath != null && ReferenceEquals(CurrentTrack.Track, track))
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                              () => TrackImage = new BitmapImage(new Uri(imagePath)));
            }
        }
コード例 #7
0
        private async void ScrobbleTrack(IPlayerTrack track)
        {
            try
            {
                if (!_isScrobbleMode || track == null || _scrobbler == null)
                {
                    return;
                }
                else if (_player.Position.TotalSeconds < _player.NaturalDuration.TotalSeconds / 1.5)
                {
                    return;
                }

                var response = await _scrobbler.ScrobbleAsync(
                    new Scrobble(track.Artist, null, track.Title, DateTimeOffset.Now));
            }
            catch (Exception ex)
            {
                _logService.LogException(ex);
            }
        }
コード例 #8
0
        public void ShuffleTracks(IList <IPlayerTrack> tracks, int currentID)
        {
            IPlayerTrack temp = null;

            temp              = tracks[0];
            tracks[0]         = tracks[currentID];
            tracks[currentID] = temp;

            for (int i = 1; i < tracks.Count; i++)
            {
                int id = _random.Next(1, tracks.Count);
                if (id == i)
                {
                    continue;
                }

                temp       = tracks[i];
                tracks[i]  = tracks[id];
                tracks[id] = temp;
            }
        }
コード例 #9
0
ファイル: PlayerViewModel.cs プロジェクト: RomanGL/VKSaver
        private async void LoadArtistImage(IPlayerTrack track)
        {
            string imagePath = await _imagesCacheService.GetCachedArtistImage(track.Artist);

            if (imagePath == null)
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                              () => ArtistImage = new BitmapImage(new Uri(AppConstants.DEFAULT_PLAYER_BACKGROUND_IMAGE)));

                _artistImageUrl = AppConstants.DEFAULT_PLAYER_BACKGROUND_IMAGE;

                imagePath = await _imagesCacheService.CacheAndGetArtistImage(track.Artist);
            }

            if (imagePath != null && ReferenceEquals(CurrentTrack.Track, track))
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                              () => ArtistImage = new BitmapImage(new Uri(imagePath)));

                _artistImageUrl = imagePath;
            }
        }
コード例 #10
0
 internal ManagerTrackChangedEventArgs(IPlayerTrack track, int id)
 {
     Track   = track;
     TrackID = id;
 }
コード例 #11
0
 public MediaStreamSourceWorker(IPlayerTrack track, IMusicCacheService musicCacheService, StorageFile file)
     : this(track, musicCacheService)
 {
     _file = file;
 }
コード例 #12
0
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="MediaStreamSourceWorker"/>
 /// для указанного аудио трека.
 /// </summary>
 /// <param name="track">Аудио трек.</param>
 public MediaStreamSourceWorker(IPlayerTrack track, IMusicCacheService musicCacheService)
 {
     Track = track;
     _musicCacheService = musicCacheService;
 }