Exemplo n.º 1
0
        private MediaSessionCallback CreateMediaSessionCallback()
        {
            var mediaCallback = new MediaSessionCallback();

            mediaCallback.OnPlayImpl = () => {
                Logger.Debug("OnPlayImpl");

                if (_playingQueue == null || _playingQueue.Count == 0)
                {
                    _playingQueue = new List <MediaSession.QueueItem>(_musicProvider.GetRandomQueue());
                    _session.SetQueue(_playingQueue);
                    _session.SetQueueTitle("Random music");
                    _currentIndexQueue = 0;
                }

                if (_playingQueue != null && _playingQueue.Count != 0)
                {
                    HandlePlayRequest();
                }
            };
            mediaCallback.OnSkipToQueueItemImpl = (id) => {
                Logger.Debug("OnSkipToQueueItem");

                if (_playingQueue != null && _playingQueue.Count != 0)
                {
                    _currentIndexQueue = -1;
                    int index = 0;
                    foreach (var item in _playingQueue)
                    {
                        if (id == item.QueueId)
                        {
                            _currentIndexQueue = index;
                        }
                        index++;
                    }
                    HandlePlayRequest();
                }
            };
            mediaCallback.OnSeekToImpl = (pos) => {
                Logger.Debug("OnSeekToImpl:");
                _musicPlayer.SeekTo((int)pos);
            };
            mediaCallback.OnPlayFromMediaIdImpl = (mediaId, extras) => {
                Logger.Debug($"OnPlayFromMediaIdImpl mediaId: {mediaId}");

                _playingQueue = _musicProvider.GetPlayingQueue(mediaId);
                _session.SetQueue(_playingQueue);

                string[] hierarchies = HierarchyHelper.GetHierarchy(mediaId);
                string   month       = hierarchies != null && hierarchies.Length == 2 ? hierarchies[1] : string.Empty;
                var      queueTitle  = $"{month} Podcasts";

                _session.SetQueueTitle(queueTitle);

                if (_playingQueue != null && _playingQueue.Count != 0)
                {
                    _currentIndexQueue = -1;
                    int index = 0;
                    foreach (var item in _playingQueue)
                    {
                        if (mediaId == item.Description.MediaId)
                        {
                            _currentIndexQueue = index;
                        }
                        index++;
                    }

                    if (_currentIndexQueue < 0)
                    {
                        Logger.Error($"OnPlayFromMediaIdImpl: media ID {mediaId} not be found.");
                    }
                    else
                    {
                        HandlePlayRequest();
                    }
                }
            };
            mediaCallback.OnPauseImpl = () => {
                OnPause();
            };
            mediaCallback.OnStopImpl = () => {
                OnStop(null);
            };
            mediaCallback.OnSkipToNextImpl = () => {
                Logger.Debug("OnSkipToNextImpl");
                _currentIndexQueue++;
                if (_playingQueue != null && _currentIndexQueue >= _playingQueue.Count)
                {
                    _currentIndexQueue = 0;
                }
                if (this.isIndexPlayable(_currentIndexQueue, _playingQueue))
                {
                    HandlePlayRequest();
                }
                else
                {
                    OnStop("Cannot skip");
                }
            };
            mediaCallback.OnSkipToPreviousImpl = () => {
                Logger.Debug("OnSkipToPreviousImpl");
                _currentIndexQueue--;
                if (_playingQueue != null && _currentIndexQueue < 0)
                {
                    _currentIndexQueue = 0;
                }
                if (this.isIndexPlayable(_currentIndexQueue, _playingQueue))
                {
                    HandlePlayRequest();
                }
                else
                {
                    OnStop("Cannot skip");
                }
            };
            mediaCallback.OnCustomActionImpl = (action, extras) => {
                if (CustomActionFavorite == action)
                {
                    Logger.Info("OnCustomActionImpl");
                    var track = GetCurrentPlayingMusic();
                    if (track != null)
                    {
                        var musicId = track.GetString(MediaMetadata.MetadataKeyMediaId);
                        _musicProvider.SetFavorite(musicId, !_musicProvider.IsFavorite(musicId));
                    }
                    UpdatePlaybackState(null);
                }
                else
                {
                    Logger.Error($"Unsupported action: {action}");
                }
            };
            mediaCallback.OnPlayFromSearchImpl = (query, extras) => {
                Logger.Debug($"OnPlayFromSearchImpl  query={query}");

                if (string.IsNullOrEmpty(query))
                {
                    _playingQueue = new List <MediaSession.QueueItem>(_musicProvider.GetRandomQueue());
                }
                else
                {
                    _playingQueue = new List <MediaSession.QueueItem>(_musicProvider.GetPlayingQueueFromSearch(query));
                }

                _session.SetQueue(_playingQueue);

                if (_playingQueue != null && _playingQueue.Count != 0)
                {
                    _currentIndexQueue = 0;

                    HandlePlayRequest();
                }
                else
                {
                    OnStop("0 Found.");
                }
            };
            return(mediaCallback);
        }