StartupWizardService.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using MediaBrowser.Controller;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Connect;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Controller.Net;
  6. using MediaBrowser.Model.Configuration;
  7. using System;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using MediaBrowser.Controller.MediaEncoding;
  11. using MediaBrowser.Model.Services;
  12. using MediaBrowser.Common.Net;
  13. using System.Threading;
  14. namespace MediaBrowser.Api
  15. {
  16. [Route("/Startup/Complete", "POST", Summary = "Reports that the startup wizard has been completed")]
  17. public class ReportStartupWizardComplete : IReturnVoid
  18. {
  19. }
  20. [Route("/Startup/Info", "GET", Summary = "Gets initial server info")]
  21. public class GetStartupInfo : IReturn<StartupInfo>
  22. {
  23. }
  24. [Route("/Startup/Configuration", "GET", Summary = "Gets initial server configuration")]
  25. public class GetStartupConfiguration : IReturn<StartupConfiguration>
  26. {
  27. }
  28. [Route("/Startup/Configuration", "POST", Summary = "Updates initial server configuration")]
  29. public class UpdateStartupConfiguration : StartupConfiguration, IReturnVoid
  30. {
  31. }
  32. [Route("/Startup/User", "GET", Summary = "Gets initial user info")]
  33. public class GetStartupUser : IReturn<StartupUser>
  34. {
  35. }
  36. [Route("/Startup/User", "POST", Summary = "Updates initial user info")]
  37. public class UpdateStartupUser : StartupUser, IReturn<UpdateStartupUserResult>
  38. {
  39. }
  40. [Authenticated(AllowBeforeStartupWizard = true, Roles = "Admin")]
  41. public class StartupWizardService : BaseApiService
  42. {
  43. private readonly IServerConfigurationManager _config;
  44. private readonly IServerApplicationHost _appHost;
  45. private readonly IUserManager _userManager;
  46. private readonly IConnectManager _connectManager;
  47. private readonly IMediaEncoder _mediaEncoder;
  48. private readonly IHttpClient _httpClient;
  49. public StartupWizardService(IServerConfigurationManager config, IHttpClient httpClient, IServerApplicationHost appHost, IUserManager userManager, IConnectManager connectManager, IMediaEncoder mediaEncoder)
  50. {
  51. _config = config;
  52. _appHost = appHost;
  53. _userManager = userManager;
  54. _connectManager = connectManager;
  55. _mediaEncoder = mediaEncoder;
  56. _httpClient = httpClient;
  57. }
  58. public void Post(ReportStartupWizardComplete request)
  59. {
  60. _config.Configuration.IsStartupWizardCompleted = true;
  61. _config.SetOptimalValues();
  62. _config.SaveConfiguration();
  63. Task.Run(UpdateStats);
  64. }
  65. private async Task UpdateStats()
  66. {
  67. try
  68. {
  69. var url = string.Format("http://www.mb3admin.com/admin/service/package/installed?mac={0}&product=MBServer&operation=Install&version={1}",
  70. _appHost.SystemId,
  71. _appHost.ApplicationVersion.ToString());
  72. using (var response = await _httpClient.SendAsync(new HttpRequestOptions
  73. {
  74. Url = url,
  75. CancellationToken = CancellationToken.None,
  76. LogErrors = false,
  77. LogRequest = false
  78. }, "GET").ConfigureAwait(false))
  79. {
  80. }
  81. }
  82. catch
  83. {
  84. }
  85. }
  86. public object Get(GetStartupInfo request)
  87. {
  88. return new StartupInfo
  89. {
  90. HasMediaEncoder = !string.IsNullOrWhiteSpace(_mediaEncoder.EncoderPath)
  91. };
  92. }
  93. public object Get(GetStartupConfiguration request)
  94. {
  95. var result = new StartupConfiguration
  96. {
  97. UICulture = _config.Configuration.UICulture,
  98. MetadataCountryCode = _config.Configuration.MetadataCountryCode,
  99. PreferredMetadataLanguage = _config.Configuration.PreferredMetadataLanguage
  100. };
  101. return result;
  102. }
  103. public void Post(UpdateStartupConfiguration request)
  104. {
  105. _config.Configuration.UICulture = request.UICulture;
  106. _config.Configuration.MetadataCountryCode = request.MetadataCountryCode;
  107. _config.Configuration.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
  108. _config.SaveConfiguration();
  109. }
  110. public object Get(GetStartupUser request)
  111. {
  112. var user = _userManager.Users.First();
  113. return new StartupUser
  114. {
  115. Name = user.Name,
  116. ConnectUserName = user.ConnectUserName
  117. };
  118. }
  119. public async Task<object> Post(UpdateStartupUser request)
  120. {
  121. var user = _userManager.Users.First();
  122. user.Name = request.Name;
  123. _userManager.UpdateUser(user);
  124. var result = new UpdateStartupUserResult();
  125. if (!string.IsNullOrWhiteSpace(user.ConnectUserName) &&
  126. string.IsNullOrWhiteSpace(request.ConnectUserName))
  127. {
  128. await _connectManager.RemoveConnect(user.Id.ToString("N")).ConfigureAwait(false);
  129. }
  130. else if (!string.Equals(user.ConnectUserName, request.ConnectUserName, StringComparison.OrdinalIgnoreCase))
  131. {
  132. result.UserLinkResult = await _connectManager.LinkUser(user.Id.ToString("N"), request.ConnectUserName).ConfigureAwait(false);
  133. }
  134. return result;
  135. }
  136. }
  137. public class StartupConfiguration
  138. {
  139. public string UICulture { get; set; }
  140. public string MetadataCountryCode { get; set; }
  141. public string PreferredMetadataLanguage { get; set; }
  142. }
  143. public class StartupInfo
  144. {
  145. public bool HasMediaEncoder { get; set; }
  146. }
  147. public class StartupUser
  148. {
  149. public string Name { get; set; }
  150. public string ConnectUserName { get; set; }
  151. }
  152. public class UpdateStartupUserResult
  153. {
  154. public UserLinkResult UserLinkResult { get; set; }
  155. }
  156. }