public ChromecastService(IDeviceLocator deviceLocator, ISender sender) { DeviceLocator = deviceLocator; Sender = sender; sender.GetChannel <IMediaChannel>().StatusChanged += MediaChannelStatusChanged; sender.GetChannel <IReceiverChannel>().StatusChanged += ReceiverChannelStatusChanged; }
/// <summary> /// Initializes a new instance of MainViewModel class /// </summary> /// <param name="deviceLocator">GoogleCast device locator</param> /// <param name="sender">GoogleCast sender</param> public MainViewModel(IDeviceLocator deviceLocator, ISender sender) { DeviceLocator = deviceLocator; Sender = sender; sender.GetChannel <IMediaChannel>().StatusChanged += MediaChannelStatusChanged; sender.GetChannel <IReceiverChannel>().StatusChanged += ReceiverChannelStatusChanged; PlayCommand = new RelayCommand(async() => await Try(PlayAsync), () => AreButtonsEnabled); PauseCommand = new RelayCommand(async() => await Try(PauseAsync), () => AreButtonsEnabled); StopCommand = new RelayCommand(async() => await Try(StopAsync), () => AreButtonsEnabled); RefreshCommand = new RelayCommand(async() => await Try(RefreshAsync), () => IsLoaded); if (!IsInDesignMode) { Task.Run(RefreshAsync); } }
public async Task PlayAsync() { try { await SendChannelCommandAsync <IMediaChannel>(!IsInitialized || IsStopped, async c => { if (insertingItems.Count > 0 && await ConnectAsync()) { ISender sender = MediaSender; IMediaChannel mediaChannel = sender.GetChannel <IMediaChannel>(); await sender.LaunchAsync(mediaChannel); Queue <QueueItem> itemsQueue = new Queue <QueueItem>(insertingItems); await mediaChannel.QueueLoadAsync(RepeatMode.RepeatOff, itemsQueue.DequeueChunk(20).ToArray()); await RefreshQueueAsync(); while (itemsQueue.Count > 0) { await mediaChannel.QueueInsertAsync(itemsQueue.DequeueChunk(20).ToArray()); } insertingItems.Clear(); IsInitialized = true; } }, async c => { if (insertingItems.Count > 0) { Queue <QueueItem> itemsQueue = new Queue <QueueItem>(insertingItems); while (itemsQueue.Count > 0) { await MediaSender.GetChannel <IMediaChannel>().QueueInsertAsync(itemsQueue.DequeueChunk(20).ToArray()); } insertingItems.Clear(); } await c.PlayAsync(); }); } catch { } }
public async Task <bool> TryRefreshAsync() { try { await ConnectAsync(); ISender sender = MediaSender; IMediaChannel mediaChannel = sender.GetChannel <IMediaChannel>(); await mediaChannel.GetStatusAsync(); await RefreshQueueAsync(); return(true); } catch { } return(false); }