Пример #1
0
        /// <summary>
        ///     Creates an instance of concrete <see cref="UPnPService"/> which manages concrete service on a device.
        /// </summary>
        /// <param name="serviceType">
        ///     A type of the service.
        /// </param>
        /// <param name="controlUri">
        ///     An URL for sending commands to the service.
        /// </param>
        /// <param name="eventsUri">
        ///     An URL for subscribing to service's events.
        /// </param>
        /// <returns>
        ///     A concrete instance of the <see cref="UPnPService"/>.
        /// </returns>
        protected override UPnPService CreateServiceInstance(string serviceType, Uri controlUri, Uri eventsUri)
        {
            UPnPService service = null;

            if (serviceType.StartsWith("urn:schemas-upnp-org:service:ContentDirectory", StringComparison.OrdinalIgnoreCase))
            {
                service = new ContentDirectoryService(serviceType, controlUri, eventsUri, this.logManager);
            }

            return(service);
        }
Пример #2
0
        public void SetUp()
        {
            _renderingControlService = new RenderingControlService(TestSpeaker.IpAddress);
            _contentDirectoryService = new ContentDirectoryService(TestSpeaker.IpAddress);

            _sonosController = new SonosController(new AvTransportService(TestSpeaker.IpAddress),
                                                   _renderingControlService,
                                                   _contentDirectoryService);

            _sut = new AvTransportService(TestSpeaker.IpAddress);
        }
        public async void LoadDirectory()
        {
            if (!IsBusy)
            {
                IsBusy = true;

                // await Task.Delay(3000);
                var loadDirectory = ContentDirectoryService.LoadContentDirectory();

                foreach (var content in loadDirectory.ContentList)
                {
                    this.ContentList.Add(content);
                }

                IsBusy = false;
            }
        }
Пример #4
0
 public void SetUp()
 {
     _sut = new ContentDirectoryService(TestSpeaker.IpAddress);
 }
Пример #5
0
        } // ActionInfoControl()

        #endregion // CONSTRUCTION

        //// ---------------------------------------------------------------------

        #region UI METHODS
        /// <summary>
        /// Handles the Click event of the <c>btnInvokeAction</c> control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private async void BtnInvokeActionClick(object sender, EventArgs e)
        {
            this.rtfStatus.Clear();
#if true
            if (this.Action.Service.Type.Contains("ContentDirectory:2"))
            {
                var svc2 = new ContentDirectoryService(this.Action.Service);
                svc2.StatusDisplay = this;
                var x = await svc2.GetSearchCapabilities();

                ////var x2 = await svc2.BrowseMetaData("0");
                ////var x3 = await svc2.BrowseDirectChildren("0");
                ////var x3 = await svc2.BrowseDirectChildren("AV_ALL");
                var x4 = await svc2.GetFeatureList();
            }
#endif
            var soap = new SOAP();

            try
            {
                var input = new List <object>();
                for (var i = 0; i < this.Action.ArgumentsIn.Count; i++)
                {
                    var value        = this.dataGridInputs.Rows[i].Cells["colValue"].Value;
                    var variableInfo = this.Action.Service.GetVariableInfo(this.Action.ArgumentsIn[i]);
                    if ((value == null) && (variableInfo.Type == "i4"))
                    {
                        value = "0";
                    } // if

                    input.Add(value);
                } // foreach

                var result = await soap.Invoke(this.Action.Service.ControlUrl,
                                               this.Action.Service.Type, this.Action, input.ToArray());

                if (result?.Output != null)
                {
                    Log.Debug("Result:");
                    foreach (var obj in result.Output)
                    {
                        Log.Debug($"  {obj}");
                    } // foreach

                    for (var i = 0; i < this.Action.ArgumentsOut.Count; i++)
                    {
                        if (result.Output.Length < i)
                        {
                            continue;
                        } // if

                        this.dataGridOutputs.Rows[i].Cells[2].Value = result.Output[i];
                    } // foreach

                    this.DisplayStatusText("Action successfully executed.");
                } // if

                if ((result != null) && (!result.Success))
                {
                    this.DisplayStatusText($"Error executing action: {result.ErrorMessage} (code {result.ErrorCode})",
                                           Color.Red);
                } // if
            }
            catch (Exception ex)
            {
                Log.Error("Error executing action", ex);
                this.DisplayStatusText($"Error executing action: {ex.Message}", Color.Red);
            } // catch
        }     // BtnInvokeActionClick()
Пример #6
0
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. : ServerString is auto set by property.
        public DlnaServerManager(
            ILoggerFactory loggerFactory,
            IServerApplicationHost appHost,
            IHttpClientFactory httpClientFactory,
            ILibraryManager libraryManager,
            IUserManager userManager,
            IDlnaProfileManager dlnaProfileManager,
            IImageProcessor imageProcessor,
            IUserDataManager userDataManager,
            ILocalizationManager localizationManager,
            IMediaSourceManager mediaSourceManager,
            IMediaEncoder mediaEncoder,
            INetworkManager networkManager,
            IUserViewManager userViewManager,
            ITVSeriesManager tvSeriesManager,
            IConfigurationManager configuration,
            IApplicationPaths applicationPaths,
            IXmlSerializer xmlSerializer)
            : base(applicationPaths, xmlSerializer)
        {
            _networkManager       = networkManager;
            _appHost              = appHost;
            _logger               = loggerFactory.CreateLogger <DlnaServerManager>();
            _netConfig            = (NetworkConfiguration)configuration.GetConfiguration("network");
            _configurationManager = configuration;
            // Link into the streaming API, so that headers etc can be performed.
            StreamingHelpers.StreamEvent ??= DlnaStreamHelper.StreamEventProcessor;

            _logger.LogDebug("DLNA Server : Starting Content Directory service.");
            ContentDirectory = new ContentDirectoryService(
                this,
                dlnaProfileManager,
                userDataManager,
                imageProcessor,
                libraryManager,
                userManager,
                _logger,
                httpClientFactory,
                localizationManager,
                mediaSourceManager,
                userViewManager,
                mediaEncoder,
                tvSeriesManager);

            ServerId = Guid.NewGuid();
            _logger.LogDebug("DLNA Server : Starting Connection Manager service.");
            ConnectionManager = new ConnectionManagerService(this, dlnaProfileManager, _logger, httpClientFactory);

            if (Configuration.EnableMsMediaReceiverRegistrar)
            {
                _logger.LogDebug("DLNA Server : Starting Media Receiver Registrar service.");
                MediaReceiverRegistrar = new MediaReceiverRegistrarService(this, _logger, httpClientFactory);
            }

            _logger.LogDebug("DLNA Server : Starting DLNA advertisements.");
            _publisher = new SsdpServerPublisher(this, configuration, _logger, loggerFactory, _networkManager);

            // Update from ssdp.xml
            Configuration.CopyProperties(SsdpServer.Instance.Configuration);
            SaveConfiguration();

            _configurationManager.NamedConfigurationUpdating += SyncWithSsdp;
            ConfigurationChanged += SyncWithSsdp;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="DlnaServerManager"/> class.
        /// </summary>
        /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> instance.</param>
        /// <param name="appHost">The <see cref="IServerApplicationHost"/> instance.</param>
        /// <param name="libraryManager">The <see cref="ILibraryManager"/> instance.</param>
        /// <param name="userManager">The <see cref="IUserManager"/> instance.</param>
        /// <param name="profileManager">The <see cref="IProfileManager"/> instance.</param>
        /// <param name="imageProcessor">The <see cref="IImageProcessor"/> instance.</param>
        /// <param name="userDataManager">The <see cref="IUserDataManager"/> instance.</param>
        /// <param name="localizationManager">The <see cref="ILocalizationManager"/> instance.</param>
        /// <param name="mediaSourceManager">The <see cref="IMediaSourceManager"/> instance.</param>
        /// <param name="mediaEncoder">The <see cref="IMediaEncoder"/> instance.</param>
        /// <param name="networkManager">The <see cref="INetworkManager"/> instance.</param>
        /// <param name="userViewManager">The <see cref="IUserViewManager"/> instance.</param>
        /// <param name="tvSeriesManager">The <see cref="ITVSeriesManager"/> instance.</param>
        /// <param name="configurationManager">The <see cref="IConfigurationManager"/> instance.</param>
        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/> instance.</param>
        /// <param name="xmlSerializer">The <see cref="IXmlSerializer"/> instance.</param>
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. :-> ServerString
#pragma warning disable CA1062 // Validate arguments of public methods. -> Created by DI.

        public DlnaServerManager(
            ILoggerFactory loggerFactory,
            IServerApplicationHost appHost,
            ILibraryManager libraryManager,
            IUserManager userManager,
            IDeviceProfileManager profileManager,
            IImageProcessor imageProcessor,
            IUserDataManager userDataManager,
            ILocalizationManager localizationManager,
            IMediaSourceManager mediaSourceManager,
            IMediaEncoder mediaEncoder,
            INetworkManager networkManager,
            IUserViewManager userViewManager,
            ITVSeriesManager tvSeriesManager,
            IConfigurationManager configurationManager,
            IHttpClientFactory httpClientFactory,
            IXmlSerializer xmlSerializer)
        {
            SsdpConfiguration.JellyfinVersion = appHost.ApplicationVersionString;

            // Changing serverId will cause dlna url links to become invalid between restarts.
            ServerId              = DlnaServerPlugin.Instance !.Configuration.ChangeIdOnStartup ? Guid.NewGuid() : Guid.Parse(appHost.SystemId);
            _networkManager       = networkManager;
            _appHost              = appHost;
            _logger               = loggerFactory.CreateLogger <DlnaServerManager>();
            _configurationManager = configurationManager;
            _profileManager       = profileManager;

            EventManager = new DlnaEventManager(_logger, httpClientFactory);

            // Link into the streaming API, so that headers etc can be performed.
            StreamingHelpers.StreamEvent ??= DlnaStreamHelper.StreamEventProcessor;

            _logger.LogDebug("DLNA Server : Starting Content Directory service.");
            ContentDirectory = new ContentDirectoryService(
                profileManager,
                userDataManager,
                imageProcessor,
                libraryManager,
                userManager,
                _logger,
                localizationManager,
                mediaSourceManager,
                userViewManager,
                mediaEncoder,
                tvSeriesManager);

            _logger.LogDebug("DLNA Server : Starting Connection Manager service.");
            ConnectionManager = new ConnectionManagerService(profileManager, _logger);

            var config = DlnaServerPlugin.Instance !.Configuration;
            // Get bind addresses or interfaces if not specified.
            var interfaces = config.BindAddresses;

            var bindInterfaces = _networkManager.GetInternalBindAddresses();

            if (interfaces.Length > 0)
            {
                // Select only the internal interfaces that are LAN and bound.
                var addresses = _networkManager.CreateIPCollection(interfaces, false, false);
                _bindAddresses = bindInterfaces.Where(i => addresses.Contains(i) &&
                                                      (i.AddressFamily == AddressFamily.InterNetwork || (i.AddressFamily == AddressFamily.InterNetworkV6 && i.Address.ScopeId != 0)))
                                 .ToArray();
            }
            else
            {
                _bindAddresses = bindInterfaces.Where(i => !i.IsLoopback() &&
                                                      (i.AddressFamily == AddressFamily.InterNetwork || (i.AddressFamily == AddressFamily.InterNetworkV6 && i.Address.ScopeId != 0)))
                                 .ToArray();
            }

            if (_bindAddresses.Length == 0)
            {
                // only use loop-backs if no other address available.
                _bindAddresses = bindInterfaces;
            }

            _publisher = new SsdpServerPublisher(
                configurationManager,
                _logger,
                loggerFactory,
                _networkManager,
                _bindAddresses,
                config.AliveMessageIntervalSeconds,
                config.EnableWindowsExplorerSupport);

            // Load system profiles into memory.
            ProfileHelper.ExtractSystemTemplates(_logger, _profileManager, xmlSerializer).GetAwaiter().GetResult();

            // Solves a race condition can occur when API receives input before DI initialization is complete.
            Instance = this;
        }