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;
 }
Пример #3
0
        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);
        }
Пример #4
0
 public SonosMusicApiDevice GetMusicApiDevice(MusicServiceContainer serviceContainer)
 {
     return(Apis.FirstOrDefault(x => x.MusicApiService.ControlUrl == serviceContainer.Uri));
 }