From 383d8e9963ac3f0a52ab06b6efec2113cec780c1 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Mon, 4 Mar 2013 10:50:56 -0500 Subject: [PATCH 1/4] fixed IsAdministrator defaulting to true --- MediaBrowser.Api/UserService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index d4442ff448..d43eded296 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -314,6 +314,8 @@ namespace MediaBrowser.Api var newUser = _userManager.CreateUser(dtoUser.Name).Result; + newUser.UpdateConfiguration(dtoUser.Configuration, _xmlSerializer); + var result = new DtoBuilder(Logger).GetDtoUser(newUser); return ToOptimizedResult(result); From 16b36d4d89abde2026eea57d60109bb3a50772fc Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Mon, 4 Mar 2013 11:31:33 -0500 Subject: [PATCH 2/4] fixed multiple log files --- .../Logging/NlogManager.cs | 46 ++++++++-- MediaBrowser.Common/Kernel/ResourcePool.cs | 84 ------------------- .../Logging/LogWindow.xaml.cs | 27 ++---- .../MainWindow.xaml.cs | 2 +- 4 files changed, 47 insertions(+), 112 deletions(-) delete mode 100644 MediaBrowser.Common/Kernel/ResourcePool.cs diff --git a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs b/MediaBrowser.Common.Implementations/Logging/NlogManager.cs index 1e525137cf..c5296dcfb2 100644 --- a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs +++ b/MediaBrowser.Common.Implementations/Logging/NlogManager.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Model.Logging; +using System.Linq; +using MediaBrowser.Model.Logging; using NLog; using NLog.Config; using NLog.Targets; @@ -56,23 +57,21 @@ namespace MediaBrowser.Common.Implementations.Logging logFile.FileName = path; logFile.Layout = "${longdate}, ${level}, ${logger}, ${message}"; - AddLogTarget(logFile, "ApplicationLogFile", level); + RemoveTarget("ApplicationLogFile"); + logFile.Name = "ApplicationLogFile"; + + AddLogTarget(logFile, level); } /// /// Adds the log target. /// /// The target. - /// The name. /// The level. - private void AddLogTarget(Target target, string name, LogSeverity level) + private void AddLogTarget(Target target, LogSeverity level) { var config = LogManager.Configuration; - - config.RemoveTarget(name); - - target.Name = name; - config.AddTarget(name, target); + config.AddTarget(target.Name, target); var rule = new LoggingRule("*", GetLogLevel(level), target); config.LoggingRules.Add(rule); @@ -80,6 +79,35 @@ namespace MediaBrowser.Common.Implementations.Logging LogManager.Configuration = config; } + /// + /// Removes the target. + /// + /// The name. + public void RemoveTarget(string name) + { + var config = LogManager.Configuration; + + var target = config.FindTargetByName(name); + + if (target != null) + { + foreach (var rule in config.LoggingRules.ToList()) + { + var contains = rule.Targets.Contains(target); + + rule.Targets.Remove(target); + + if (contains) + { + config.LoggingRules.Remove(rule); + } + } + + config.RemoveTarget(name); + LogManager.Configuration = config; + } + } + /// /// Gets the logger. /// diff --git a/MediaBrowser.Common/Kernel/ResourcePool.cs b/MediaBrowser.Common/Kernel/ResourcePool.cs deleted file mode 100644 index 7a74c60a78..0000000000 --- a/MediaBrowser.Common/Kernel/ResourcePool.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Threading; - -namespace MediaBrowser.Common.Kernel -{ - /// - /// This is just a collection of semaphores to control the number of concurrent executions of various resources - /// - public class ResourcePool : IDisposable - { - /// - /// You tube - /// - public readonly SemaphoreSlim YouTube = new SemaphoreSlim(5, 5); - - /// - /// The trakt - /// - public readonly SemaphoreSlim Trakt = new SemaphoreSlim(5, 5); - - /// - /// The tv db - /// - public readonly SemaphoreSlim TvDb = new SemaphoreSlim(5, 5); - - /// - /// The movie db - /// - public readonly SemaphoreSlim MovieDb = new SemaphoreSlim(5, 5); - - /// - /// The fan art - /// - public readonly SemaphoreSlim FanArt = new SemaphoreSlim(5, 5); - - /// - /// The mb - /// - public readonly SemaphoreSlim Mb = new SemaphoreSlim(5, 5); - - /// - /// The mb - /// - public readonly SemaphoreSlim Lastfm = new SemaphoreSlim(5, 5); - - /// - /// Apple doesn't seem to like too many simulataneous requests. - /// - public readonly SemaphoreSlim AppleTrailerVideos = new SemaphoreSlim(1, 1); - - /// - /// The apple trailer images - /// - public readonly SemaphoreSlim AppleTrailerImages = new SemaphoreSlim(1, 1); - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Releases unmanaged and - optionally - managed resources. - /// - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected virtual void Dispose(bool dispose) - { - if (dispose) - { - YouTube.Dispose(); - Trakt.Dispose(); - TvDb.Dispose(); - MovieDb.Dispose(); - FanArt.Dispose(); - Mb.Dispose(); - AppleTrailerVideos.Dispose(); - AppleTrailerImages.Dispose(); - } - } - } -} diff --git a/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs index 75ef69924b..226cd8e87b 100644 --- a/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs @@ -1,4 +1,6 @@ -using NLog; +using MediaBrowser.Common.Implementations.Logging; +using MediaBrowser.Model.Logging; +using NLog; using NLog.Config; using NLog.Targets; using System.ComponentModel; @@ -18,14 +20,17 @@ namespace MediaBrowser.ServerApplication.Logging /// private readonly TaskScheduler _uiThread; + private readonly ILogManager _logManager; + /// /// Initializes a new instance of the class. /// /// The kernel. - public LogWindow() + public LogWindow(ILogManager logManager) { InitializeComponent(); _uiThread = TaskScheduler.FromCurrentSynchronizationContext(); + _logManager = logManager; Loaded += LogWindow_Loaded; } @@ -42,6 +47,7 @@ namespace MediaBrowser.ServerApplication.Logging Layout = "${longdate}, ${level}, ${logger}, ${message}" }; + ((NlogManager)_logManager).RemoveTarget("LogWindowTraceTarget"); AddLogTarget(target, "LogWindowTraceTarget"); } @@ -53,7 +59,7 @@ namespace MediaBrowser.ServerApplication.Logging { base.OnClosing(e); - RemoveLogTarget("LogWindowTraceTarget"); + ((NlogManager) _logManager).RemoveTarget("LogWindowTraceTarget"); } /// @@ -83,8 +89,6 @@ namespace MediaBrowser.ServerApplication.Logging { var config = NLog.LogManager.Configuration; - config.RemoveTarget(name); - target.Name = name; config.AddTarget(name, target); @@ -95,19 +99,6 @@ namespace MediaBrowser.ServerApplication.Logging NLog.LogManager.Configuration = config; } - - /// - /// Removes the log target. - /// - /// The name. - private void RemoveLogTarget(string name) - { - var config = NLog.LogManager.Configuration; - - config.RemoveTarget(name); - - NLog.LogManager.Configuration = config; - } /// /// Shuts down. diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index 9043e007f2..22695602c5 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -125,7 +125,7 @@ namespace MediaBrowser.ServerApplication // Add our log window if specified if (_configurationManager.Configuration.ShowLogWindow) { - Trace.Listeners.Add(new WindowTraceListener(new LogWindow())); + Trace.Listeners.Add(new WindowTraceListener(new LogWindow(_logManager))); } else { From 05b95001754bb72d67e3f8289b53a14348dc6577 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Mon, 4 Mar 2013 11:42:19 -0500 Subject: [PATCH 3/4] fixed remove path validation --- MediaBrowser.Api/Library/LibraryHelpers.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/MediaBrowser.Api/Library/LibraryHelpers.cs b/MediaBrowser.Api/Library/LibraryHelpers.cs index 2a3a04537e..e956e214db 100644 --- a/MediaBrowser.Api/Library/LibraryHelpers.cs +++ b/MediaBrowser.Api/Library/LibraryHelpers.cs @@ -98,16 +98,15 @@ namespace MediaBrowser.Api.Library if (!Directory.Exists(path)) { - throw new DirectoryNotFoundException("The media folder does not exist"); + throw new DirectoryNotFoundException(string.Format("The media collection {0} does not exist", virtualFolderName)); } var shortcut = Directory.EnumerateFiles(path, "*.lnk", SearchOption.AllDirectories).FirstOrDefault(f => FileSystem.ResolveShortcut(f).Equals(mediaPath, StringComparison.OrdinalIgnoreCase)); - if (string.IsNullOrEmpty(shortcut)) + if (!string.IsNullOrEmpty(shortcut)) { - throw new DirectoryNotFoundException("The media folder does not exist"); + File.Delete(shortcut); } - File.Delete(shortcut); } /// From da535db6554e1ca6610f247b02b3a0391e8f1f02 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Mon, 4 Mar 2013 11:56:29 -0500 Subject: [PATCH 4/4] Added a config setting to denote completion of the startup wizard --- .../BaseApplicationHost.cs | 4 ++-- .../BaseApplicationConfiguration.cs | 7 +++++++ .../Api/DashboardService.cs | 1 + .../Html/scripts/WizardFinishPage.js | 16 ++++++++++++++++ MediaBrowser.WebDashboard/Html/wizardFinish.html | 2 +- .../MediaBrowser.WebDashboard.csproj | 1 + 6 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 MediaBrowser.WebDashboard/Html/scripts/WizardFinishPage.js diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index b25c1808d0..0a60b703f3 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -158,10 +158,10 @@ namespace MediaBrowser.Common.Implementations { return Task.Run(() => { + IsFirstRun = !ConfigurationManager.CommonConfiguration.IsStartupWizardCompleted; + Logger = LogManager.GetLogger("App"); - IsFirstRun = !File.Exists(ApplicationPaths.SystemConfigurationFilePath); - DiscoverTypes(); LogManager.ReloadLogger(ConfigurationManager.CommonConfiguration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info); diff --git a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs index 474d985f2f..74241ac021 100644 --- a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs +++ b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs @@ -65,6 +65,13 @@ namespace MediaBrowser.Model.Configuration /// The legacy web socket port number. [ProtoMember(59)] public int LegacyWebSocketPortNumber { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is first run. + /// + /// true if this instance is first run; otherwise, false. + [ProtoMember(4)] + public bool IsStartupWizardCompleted { get; set; } /// /// Initializes a new instance of the class. diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 7cf6b28738..1603fc9eb1 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -430,6 +430,7 @@ namespace MediaBrowser.WebDashboard.Api "UpdatePasswordPage.js", "UserImagePage.js", "UserProfilesPage.js", + "WizardFinishPage.js", "WizardStartPage.js", "WizardUserPage.js", "SupporterKeyPage.js", diff --git a/MediaBrowser.WebDashboard/Html/scripts/WizardFinishPage.js b/MediaBrowser.WebDashboard/Html/scripts/WizardFinishPage.js new file mode 100644 index 0000000000..1633bf140e --- /dev/null +++ b/MediaBrowser.WebDashboard/Html/scripts/WizardFinishPage.js @@ -0,0 +1,16 @@ +var WizardFinishPage = { + + onFinish: function() { + + ApiClient.getServerConfiguration().done(function (config) { + + config.IsStartupWizardCompleted = true; + + ApiClient.updateServerConfiguration(config).done(function() { + Dashboard.navigate('dashboard.html'); + }); + }); + + } + +}; \ No newline at end of file diff --git a/MediaBrowser.WebDashboard/Html/wizardFinish.html b/MediaBrowser.WebDashboard/Html/wizardFinish.html index 06650c4f8a..3d51aa0bf9 100644 --- a/MediaBrowser.WebDashboard/Html/wizardFinish.html +++ b/MediaBrowser.WebDashboard/Html/wizardFinish.html @@ -16,7 +16,7 @@
- +
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index a2a1269ee8..7d48950206 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -384,6 +384,7 @@ +