예제 #1
0
        public AccountsViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMusicProviderService musicProviderService,
                                 IAuthenticationService authenticationService, IMvxMessenger mvxMessenger) : base(logProvider, navigationService)
        {
            _musicProviderService  = musicProviderService;
            _authenticationService = authenticationService;
            _mvxMessenger          = mvxMessenger;

            CloseCommand  = new MvxAsyncCommand(async() => await NavigationService.Close(this));
            InvokeCommand = new MvxAsyncCommand <MusicProviderAccount>(OnAccountMusicProviderInvoke);
        }
예제 #2
0
        public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService, IHistoryService historyService, IActivityService activityService)
        {
            // Setup services
            _musicProviderService = musicProviderService;
            _telemetryService     = telemetryService;
            _historyService       = historyService;
            _activityService      = activityService;

            // Setup the random class
            _random = new Random();

            // Only keep 3 items open and do not auto repeat
            // as we will be loading more items once we reach the
            // end of a list (or starting over if in playlist)
            _mediaPlaybackList = new MediaPlaybackList
            {
                MaxPlayedItemsToKeepOpen = 3,
                AutoRepeatEnabled        = true,
            };

            // Create the media player and disable auto play
            // as we are going to use a playback list. Set the
            // source to the media playback list. Auto play is true so if
            // we reach the end of a playlist (or source) start from the beginning.
            _mediaPlayer = new MediaPlayer
            {
                AutoPlay = false,
                Source   = _mediaPlaybackList
            };

            // Set the last playback volume TODO
            // SetTrackVolume(SettingsService.Instance.PlaybackVolume / 100);

            // Assign event handlers
            _mediaPlaybackList.CurrentItemChanged += MediaPlaybackListOnCurrentItemChanged;
            _mediaPlayer.CurrentStateChanged      += MediaPlayerOnCurrentStateChanged;

            // Setup the pinger to run for app lifetime.
            // This is used to make sure session information is correctly
            // kept as long playing tracks may cause telemetry services to think
            // the app is closed.
            var pingTimer = new Timer {
                Interval = 180000
            };

            pingTimer.Elapsed += (sender, args) => _telemetryService.TrackEvent("Ping");
            pingTimer.Start();
        }
예제 #3
0
        public InstalledMusicProvidersViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMusicProviderService musicProviderService, IDialogService dialogService) : base(logProvider, navigationService)
        {
            MusicProviders = musicProviderService.MusicProviders;

            CloseCommand     = new MvxAsyncCommand(() => NavigationService.Close(this));
            UninstallCommand = new MvxAsyncCommand <MusicProvider>(async e =>
            {
                try
                {
                    await musicProviderService.UninstallAsync(e.Identifier);
                }
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                    await dialogService.ShowErrorMessageAsync("Partial error uninstalling music provider", ex.Message);
                }
            });
        }
예제 #4
0
 public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService,
                        IDialogService dialogService)
 {
 }
예제 #5
0
        public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService, IDialogService dialogService)
        {
            // Setup background audio
            AVAudioSession session = AVAudioSession.SharedInstance();

            session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.AllowAirPlay | AVAudioSessionCategoryOptions.MixWithOthers
                                | AVAudioSessionCategoryOptions.AllowBluetooth | AVAudioSessionCategoryOptions.AllowBluetoothA2DP);
            session.SetActive(true);

            // Setup services
            _musicProviderService = musicProviderService;
            _telemetryService     = telemetryService;
            _dialogService        = dialogService;

            // Setup player
            _player = new AVPlayer();

            // This should handle times a bit better
            _player.AddPeriodicTimeObserver(CMTime.FromSeconds(1, 1), null, time =>
            {
                MainThread.BeginInvokeOnMainThread(() =>
                {
                    UpdateInfoCenter();
                });
            });

            // Create the queue
            _queue = new List <Track>();

            // Setup the random class
            _random = new Random();

            // Setup Command Center
            var commandCenter = MPRemoteCommandCenter.Shared;

            commandCenter.PreviousTrackCommand.Enabled = true;
            commandCenter.PreviousTrackCommand.AddTarget(PrevCommand);

            commandCenter.NextTrackCommand.Enabled = true;
            commandCenter.NextTrackCommand.AddTarget(NextCommand);

            commandCenter.TogglePlayPauseCommand.Enabled = true;
            commandCenter.TogglePlayPauseCommand.AddTarget(ToggleCommand);

            commandCenter.PlayCommand.Enabled = true;
            commandCenter.PlayCommand.AddTarget(PlayCommand);

            commandCenter.PauseCommand.Enabled = true;
            commandCenter.PauseCommand.AddTarget(PauseCommand);

            commandCenter.ChangeRepeatModeCommand.Enabled = true;
            commandCenter.ChangeRepeatModeCommand.AddTarget(ChangeRepeatModeCommand);

            commandCenter.ChangePlaybackPositionCommand.Enabled = true;
            commandCenter.ChangePlaybackPositionCommand.AddTarget((c) =>
            {
                var e = (MPChangePlaybackPositionCommandEvent)c;

                var time = e.PositionTime;
                _player.SeekAsync(CMTime.FromSeconds(time, 1));
                return(MPRemoteCommandHandlerStatus.Success);
            });

            // Setup the pinger to run for app lifetime.
            // This is used to make sure session information is correctly
            // kept as long playing tracks may cause telemetry services to think
            // the app is closed.
            var pingTimer = new Timer {
                Interval = 180000
            };

            pingTimer.Elapsed += (sender, args) => _telemetryService.TrackEvent("Ping");
            pingTimer.Start();
        }
예제 #6
0
 public AppStart(IMvxApplication application, IMvxNavigationService navigationService, IMusicProviderService musicProviderService, IStoreService storeService) : base(application, navigationService)
 {
     _musicProviderService = musicProviderService;
     _storeService         = storeService;
 }