Browse Source

Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser

Eric Reed 12 years ago
parent
commit
e5a78ba5bf

+ 3 - 4
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);
         }
 
         /// <summary>

+ 2 - 0
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);

+ 2 - 2
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);

+ 37 - 9
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);
         }
 
         /// <summary>
         /// Adds the log target.
         /// </summary>
         /// <param name="target">The target.</param>
-        /// <param name="name">The name.</param>
         /// <param name="level">The level.</param>
-        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;
         }
 
+        /// <summary>
+        /// Removes the target.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        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;
+            }
+        }
+
         /// <summary>
         /// Gets the logger.
         /// </summary>

+ 0 - 84
MediaBrowser.Common/Kernel/ResourcePool.cs

@@ -1,84 +0,0 @@
-using System;
-using System.Threading;
-
-namespace MediaBrowser.Common.Kernel
-{
-    /// <summary>
-    /// This is just a collection of semaphores to control the number of concurrent executions of various resources
-    /// </summary>
-    public class ResourcePool : IDisposable
-    {
-        /// <summary>
-        /// You tube
-        /// </summary>
-        public readonly SemaphoreSlim YouTube = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The trakt
-        /// </summary>
-        public readonly SemaphoreSlim Trakt = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The tv db
-        /// </summary>
-        public readonly SemaphoreSlim TvDb = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The movie db
-        /// </summary>
-        public readonly SemaphoreSlim MovieDb = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The fan art
-        /// </summary>
-        public readonly SemaphoreSlim FanArt = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The mb
-        /// </summary>
-        public readonly SemaphoreSlim Mb = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// The mb
-        /// </summary>
-        public readonly SemaphoreSlim Lastfm = new SemaphoreSlim(5, 5);
-
-        /// <summary>
-        /// Apple doesn't seem to like too many simulataneous requests.
-        /// </summary>
-        public readonly SemaphoreSlim AppleTrailerVideos = new SemaphoreSlim(1, 1);
-
-        /// <summary>
-        /// The apple trailer images
-        /// </summary>
-        public readonly SemaphoreSlim AppleTrailerImages = new SemaphoreSlim(1, 1);
-        
-        /// <summary>
-        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Releases unmanaged and - optionally - managed resources.
-        /// </summary>
-        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
-        protected virtual void Dispose(bool dispose)
-        {
-            if (dispose)
-            {
-                YouTube.Dispose();
-                Trakt.Dispose();
-                TvDb.Dispose();
-                MovieDb.Dispose();
-                FanArt.Dispose();
-                Mb.Dispose();
-                AppleTrailerVideos.Dispose();
-                AppleTrailerImages.Dispose();
-            }
-        }
-    }
-}

+ 7 - 0
MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs

@@ -65,6 +65,13 @@ namespace MediaBrowser.Model.Configuration
         /// <value>The legacy web socket port number.</value>
         [ProtoMember(59)]
         public int LegacyWebSocketPortNumber { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether this instance is first run.
+        /// </summary>
+        /// <value><c>true</c> if this instance is first run; otherwise, <c>false</c>.</value>
+        [ProtoMember(4)]
+        public bool IsStartupWizardCompleted { get; set; }
         
         /// <summary>
         /// Initializes a new instance of the <see cref="BaseApplicationConfiguration" /> class.

+ 9 - 18
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
         /// </summary>
         private readonly TaskScheduler _uiThread;
 
+        private readonly ILogManager _logManager;
+
         /// <summary>
         /// Initializes a new instance of the <see cref="LogWindow" /> class.
         /// </summary>
         /// <param name="kernel">The kernel.</param>
-        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");
         }
 
         /// <summary>
@@ -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;
         }
-
-        /// <summary>
-        /// Removes the log target.
-        /// </summary>
-        /// <param name="name">The name.</param>
-        private void RemoveLogTarget(string name)
-        {
-            var config = NLog.LogManager.Configuration;
-
-            config.RemoveTarget(name);
-
-            NLog.LogManager.Configuration = config;
-        }
         
         /// <summary>
         /// Shuts down.

+ 1 - 1
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
                 {

+ 1 - 0
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",

+ 16 - 0
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');
+            });
+        });
+
+    }
+
+};

+ 1 - 1
MediaBrowser.WebDashboard/Html/wizardFinish.html

@@ -16,7 +16,7 @@
 
                 <div class="wizardNavigation">
                     <button type="button" data-iconpos="left" data-icon="arrow-left" data-inline="true" onclick="history.back();">Previous</button>
-                    <button type="button" data-iconpos="right" data-icon="wrench" data-inline="true" onclick="Dashboard.navigate('dashboard.html');" data-theme="b">Go to the Dashboard</button>
+                    <button type="button" data-iconpos="right" data-icon="wrench" data-inline="true" onclick="WizardFinishPage.onFinish();" data-theme="b">Go to the Dashboard</button>
                 </div>
             </div>
 

+ 1 - 0
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -384,6 +384,7 @@
     <EmbeddedResource Include="Html\scripts\ItemDetailPage.js" />
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="Html\scripts\WizardFinishPage.js" />
     <EmbeddedResource Include="Html\Readme.txt" />
     <EmbeddedResource Include="Html\css\images\media\playCircle.png" />
     <EmbeddedResource Include="Html\css\images\media\nextTrack.png" />