public SonosMusicApiDevice(ISonosMusicApi sonosMusicApi, string deviceId, MusicServiceContainer musicServiceContainer, Uri uri, ZoneService zoneService) : base(uri, CreateSmapiDevice(deviceId, musicServiceContainer.Title, musicServiceContainer.ImageUri, musicServiceContainer.ServiceId, uri.LocalPath)) { _deviceId = deviceId; _zoneService = zoneService; _sonosMusicApi = sonosMusicApi; MusicServiceContainer = musicServiceContainer; }
public MusicApiService(ISonosMusicApi sonosMusicApi, string deviceId, Service service, MusicServiceContainer myServiceContainer, ZoneService zoneService) : base(service) { _sonosMusicApi = sonosMusicApi; _deviceId = deviceId; _zoneService = zoneService; MusicServiceContainer = myServiceContainer; }
public async Task <List <MusicServiceContainer> > GetAvailableMusicServices() { if (_musicServices != null) { return(_musicServices); } var activeAccounts = await GetActiveServiceAccounts(); var logos = await GetServiceLogos(); var actionResult = await _zoneService.GetAvailableServices(); var availableServiceDescriptorList = actionResult.Result.Element(XName.Get("AvailableServiceDescriptorList")); if (availableServiceDescriptorList != null) { _serviceList = XElement.Parse(availableServiceDescriptorList.Value); } var query = (from service in _serviceList.Elements() from logo in logos let serviceName = service.GetName() where string.Compare(logo.Name, serviceName, StringComparison.CurrentCultureIgnoreCase) == 0 select new MusicServiceContainer(service, logo.ImageUri, logo.Id, "root")).ToList(); var radio = _serviceList.Elements().FirstOrDefault(x => x.GetName() == "TuneIn"); if (radio != null) { var tuneIn = new MusicServiceContainer(radio, "/Assets/tunein-logo.jpg", radio.TryGetAttributeValue("Id"), "root"); tuneIn.SetTitle("Radio"); tuneIn.SetClassId("Radio"); query.Add(tuneIn); } _musicServices = activeAccounts .Select(musicServiceAccount => query.FirstOrDefault(x => x.ServiceId == musicServiceAccount.ServiceId)) .Where(service => service != null) .OrderBy(x => x.Title) .ToList(); var deviceId = _zoneService.CoordinatorDeviceId; foreach (var serviceModel in _musicServices) { var device = new SonosMusicApiDevice(this, deviceId, serviceModel, new Uri(serviceModel.Uri), _zoneService); Apis.Add(device); } return(_musicServices); }
public SonosMusicApiDevice GetMusicApiDevice(MusicServiceContainer serviceContainer) { return(Apis.FirstOrDefault(x => x.MusicApiService.ControlUrl == serviceContainer.Uri)); }