Пример #1
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);
        }