aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/IServerApplicationHost.cs
blob: 8a55437c5d6abe53823b42a4362919778971e090 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#pragma warning disable CS1591

using System;
using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.System;

namespace MediaBrowser.Controller
{
    /// <summary>
    /// Interface IServerApplicationHost.
    /// </summary>
    public interface IServerApplicationHost : IApplicationHost
    {
        event EventHandler HasUpdateAvailableChanged;

        IServiceProvider ServiceProvider { get; }

        bool CoreStartupHasCompleted { get; }

        bool CanLaunchWebBrowser { get; }

        /// <summary>
        /// Gets the HTTP server port.
        /// </summary>
        /// <value>The HTTP server port.</value>
        int HttpPort { get; }

        /// <summary>
        /// Gets the HTTPS port.
        /// </summary>
        /// <value>The HTTPS port.</value>
        int HttpsPort { get; }

        /// <summary>
        /// Gets a value indicating whether the server should listen on an HTTPS port.
        /// </summary>
        bool ListenWithHttps { get; }

        /// <summary>
        /// Gets a value indicating whether this instance has update available.
        /// </summary>
        /// <value><c>true</c> if this instance has update available; otherwise, <c>false</c>.</value>
        bool HasUpdateAvailable { get; }

        /// <summary>
        /// Gets the name of the friendly.
        /// </summary>
        /// <value>The name of the friendly.</value>
        string FriendlyName { get; }

        /// <summary>
        /// Gets the system info.
        /// </summary>
        /// <returns>SystemInfo.</returns>
        Task<SystemInfo> GetSystemInfo(CancellationToken cancellationToken);

        Task<PublicSystemInfo> GetPublicSystemInfo(CancellationToken cancellationToken);

        /// <summary>
        /// Gets all the local IP addresses of this API instance. Each address is validated by sending a 'ping' request
        /// to the API that should exist at the address.
        /// </summary>
        /// <param name="cancellationToken">A cancellation token that can be used to cancel the task.</param>
        /// <returns>A list containing all the local IP addresses of the server.</returns>
        Task<List<IPAddress>> GetLocalIpAddresses(CancellationToken cancellationToken);

        /// <summary>
        /// Gets a local (LAN) URL that can be used to access the API. The hostname used is the first valid configured
        /// IP address that can be found via <see cref="GetLocalIpAddresses"/>. HTTPS will be preferred when available.
        /// </summary>
        /// <param name="cancellationToken">A cancellation token that can be used to cancel the task.</param>
        /// <returns>The server URL.</returns>
        Task<string> GetLocalApiUrl(CancellationToken cancellationToken);

        /// <summary>
        /// Gets a localhost URL that can be used to access the API using the loop-back IP address (127.0.0.1)
        /// over HTTP (not HTTPS).
        /// </summary>
        /// <returns>The API URL.</returns>
        string GetLoopbackHttpApiUrl();

        /// <summary>
        /// Gets a local (LAN) URL that can be used to access the API. HTTPS will be preferred when available.
        /// </summary>
        /// <param name="address">The IP address to use as the hostname in the URL.</param>
        /// <returns>The API URL.</returns>
        string GetLocalApiUrl(IPAddress address);

        /// <summary>
        /// Gets a local (LAN) URL that can be used to access the API.
        /// Note: if passing non-null scheme or port it is up to the caller to ensure they form the correct pair.
        /// </summary>
        /// <param name="hostname">The hostname to use in the URL.</param>
        /// <param name="scheme">
        /// The scheme to use for the URL. If null, the scheme will be selected automatically,
        /// preferring HTTPS, if available.
        /// </param>
        /// <param name="port">
        /// The port to use for the URL. If null, the port will be selected automatically,
        /// preferring the HTTPS port, if available.
        /// </param>
        /// <returns>The API URL.</returns>
        string GetLocalApiUrl(ReadOnlySpan<char> hostname, string scheme = null, int? port = null);

        /// <summary>
        /// Open a URL in an external browser window.
        /// </summary>
        /// <param name="url">The URL to open.</param>
        /// <exception cref="NotSupportedException"><see cref="CanLaunchWebBrowser"/> is false.</exception>
        void LaunchUrl(string url);

        IEnumerable<WakeOnLanInfo> GetWakeOnLanInfo();

        string ExpandVirtualPath(string path);

        string ReverseVirtualPath(string path);

        /// <summary>
        /// Gets the list of local plugins.
        /// </summary>
        /// <param name="path">Plugin base directory.</param>
        /// <param name="cleanup">Cleanup old plugins.</param>
        /// <returns>Enumerable of local plugins.</returns>
        IEnumerable<LocalPlugin> GetLocalPlugins(string path, bool cleanup = true);
    }
}