diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-21 20:26:35 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-21 20:26:35 -0500 |
| commit | fdafa596832eae13cebcf5bbe5fa867f7ba068f0 (patch) | |
| tree | eee891c8f11564d4b14868d11f4758f243c112ce | |
| parent | 931c0ea455161b8ee00005a0ffd1f8afab41f7bb (diff) | |
Removed System.Windows.Forms dependancy from Common. Almost done removing NLog dependancy.
88 files changed, 1024 insertions, 766 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs index b608d831b..7e0d27e49 100644 --- a/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PlaybackCheckInHandler.cs @@ -66,10 +66,10 @@ namespace MediaBrowser.Api.HttpHandlers await Kernel.UserDataManager.OnPlaybackStopped(user, item, positionTicks, clientType, device).ConfigureAwait(false); } } - + var data = item.GetUserData(user, true); - return DtoBuilder.GetDtoUserItemData(data); + return new DtoBuilder(null).GetDtoUserItemData(data); } /// <summary> diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index ee484b85d..585bfd45d 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -128,7 +128,7 @@ namespace MediaBrowser.Api // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var result = DtoBuilder.GetDtoBaseItem(item, fields.ToList()).Result; + var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList()).Result; return ToOptimizedResult(result); } @@ -147,7 +147,7 @@ namespace MediaBrowser.Api // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var result = DtoBuilder.GetDtoBaseItem(item, fields.ToList()).Result; + var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList()).Result; return ToOptimizedResult(result); } @@ -166,7 +166,7 @@ namespace MediaBrowser.Api // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var result = DtoBuilder.GetDtoBaseItem(item, fields.ToList()).Result; + var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList()).Result; return ToOptimizedResult(result); } @@ -185,7 +185,7 @@ namespace MediaBrowser.Api // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var result = DtoBuilder.GetDtoBaseItem(item, fields.ToList()).Result; + var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList()).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/Streaming/BaseHlsPlaylistHandler.cs b/MediaBrowser.Api/Streaming/BaseHlsPlaylistHandler.cs index 94a8f7926..5cb8b7e07 100644 --- a/MediaBrowser.Api/Streaming/BaseHlsPlaylistHandler.cs +++ b/MediaBrowser.Api/Streaming/BaseHlsPlaylistHandler.cs @@ -208,12 +208,12 @@ namespace MediaBrowser.Api.Streaming { try { - Logger.Info("Deleting HLS file {0}", file); + //Logger.Info("Deleting HLS file {0}", file); File.Delete(file); } catch (IOException ex) { - Logger.ErrorException("Error deleting HLS file {0}", ex, file); + //Logger.ErrorException("Error deleting HLS file {0}", ex, file); } } } diff --git a/MediaBrowser.Api/Streaming/BaseProgressiveStreamingHandler.cs b/MediaBrowser.Api/Streaming/BaseProgressiveStreamingHandler.cs index bce48e47b..91dab31d9 100644 --- a/MediaBrowser.Api/Streaming/BaseProgressiveStreamingHandler.cs +++ b/MediaBrowser.Api/Streaming/BaseProgressiveStreamingHandler.cs @@ -94,7 +94,7 @@ namespace MediaBrowser.Api.Streaming } catch (Exception ex) { - Logger.ErrorException("Error streaming media", ex); + //Logger.ErrorException("Error streaming media", ex); } finally { diff --git a/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs b/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs index 44a1ba10c..d800a40fe 100644 --- a/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs +++ b/MediaBrowser.Api/Streaming/BaseStreamingHandler.cs @@ -889,7 +889,7 @@ namespace MediaBrowser.Api.Streaming Plugin.Instance.OnTranscodeBeginning(outputPath, TranscodingJobType, process); - Logger.Info(process.StartInfo.FileName + " " + process.StartInfo.Arguments); + //Logger.Info(process.StartInfo.FileName + " " + process.StartInfo.Arguments); var logFilePath = Path.Combine(Kernel.ApplicationPaths.LogDirectoryPath, "ffmpeg-" + Guid.NewGuid() + ".txt"); @@ -904,7 +904,7 @@ namespace MediaBrowser.Api.Streaming } catch (Win32Exception ex) { - Logger.ErrorException("Error starting ffmpeg", ex); + //Logger.ErrorException("Error starting ffmpeg", ex); Plugin.Instance.OnTranscodeFailedToStart(outputPath, TranscodingJobType); @@ -953,11 +953,11 @@ namespace MediaBrowser.Api.Streaming try { exitCode = process.ExitCode; - Logger.Info("FFMpeg exited with code {0} for {1}", exitCode.Value, outputFilePath); + //Logger.Info("FFMpeg exited with code {0} for {1}", exitCode.Value, outputFilePath); } catch { - Logger.Info("FFMpeg exited with an error for {0}", outputFilePath); + //Logger.Info("FFMpeg exited with an error for {0}", outputFilePath); } process.Dispose(); @@ -966,7 +966,7 @@ namespace MediaBrowser.Api.Streaming if (!exitCode.HasValue || exitCode.Value != 0) { - Logger.Info("Deleting partial stream file(s) {0}", outputFilePath); + //Logger.Info("Deleting partial stream file(s) {0}", outputFilePath); try { @@ -974,12 +974,12 @@ namespace MediaBrowser.Api.Streaming } catch (IOException ex) { - Logger.ErrorException("Error deleting partial stream file(s) {0}", ex, outputFilePath); + //Logger.ErrorException("Error deleting partial stream file(s) {0}", ex, outputFilePath); } } else { - Logger.Info("FFMpeg completed and exited normally for {0}", outputFilePath); + //Logger.Info("FFMpeg completed and exited normally for {0}", outputFilePath); } } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 795bcda69..0c99b921a 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; @@ -114,7 +115,7 @@ namespace MediaBrowser.Api.UserLibrary return null; } - var dto = await DtoBuilder.GetDtoBaseItem(item, user, fields).ConfigureAwait(false); + var dto = await new DtoBuilder(Logger).GetDtoBaseItem(item, user, fields).ConfigureAwait(false); dto.ChildCount = stub.Item2(); diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 166b2639a..3cc503184 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -191,7 +191,9 @@ namespace MediaBrowser.Api.UserLibrary var fields = GetItemFields(request).ToList(); - var returnItems = await Task.WhenAll(pagedItems.Select(i => DtoBuilder.GetDtoBaseItem(i, user, fields))).ConfigureAwait(false); + var dtoBuilder = new DtoBuilder(Logger); + + var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetDtoBaseItem(i, user, fields))).ConfigureAwait(false); return new ItemsResult { diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index c5d7e471d..016b294ae 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -268,7 +268,9 @@ namespace MediaBrowser.Api.UserLibrary var movie = (Movie)item; - var items = movie.SpecialFeatures.Select(i => DtoBuilder.GetDtoBaseItem(item, user, fields)).AsParallel().Select(t => t.Result).ToList(); + var dtoBuilder = new DtoBuilder(Logger); + + var items = movie.SpecialFeatures.Select(i => dtoBuilder.GetDtoBaseItem(item, user, fields)).AsParallel().Select(t => t.Result).ToList(); return ToOptimizedResult(items); } @@ -284,7 +286,9 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var items = item.LocalTrailers.Select(i => DtoBuilder.GetDtoBaseItem(item, user, fields)).AsParallel().Select(t => t.Result).ToList(); + var dtoBuilder = new DtoBuilder(Logger); + + var items = item.LocalTrailers.Select(i => dtoBuilder.GetDtoBaseItem(item, user, fields)).AsParallel().Select(t => t.Result).ToList(); return ToOptimizedResult(items); } @@ -305,7 +309,9 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var result = DtoBuilder.GetDtoBaseItem(item, user, fields).Result; + var dtoBuilder = new DtoBuilder(Logger); + + var result = dtoBuilder.GetDtoBaseItem(item, user, fields).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 79f703e84..c4703a7a0 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -146,7 +146,9 @@ namespace MediaBrowser.Api { var kernel = (Kernel)Kernel; - var result = kernel.Users.OrderBy(u => u.Name).Select(DtoBuilder.GetDtoUser).ToList(); + var dtoBuilder = new DtoBuilder(Logger); + + var result = kernel.Users.OrderBy(u => u.Name).Select(dtoBuilder.GetDtoUser).ToList(); return ToOptimizedResult(result); } @@ -167,7 +169,7 @@ namespace MediaBrowser.Api throw new ResourceNotFoundException("User not found"); } - var result = DtoBuilder.GetDtoUser(user); + var result = new DtoBuilder(Logger).GetDtoUser(user); return ToOptimizedResult(result); } @@ -289,7 +291,7 @@ namespace MediaBrowser.Api var newUser = kernel.UserManager.CreateUser(dtoUser.Name).Result; - var result = DtoBuilder.GetDtoUser(newUser); + var result = new DtoBuilder(Logger).GetDtoUser(newUser); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Common/IO/FileSystem.cs b/MediaBrowser.Common/IO/FileSystem.cs index fde46dd5b..3d65167bd 100644 --- a/MediaBrowser.Common/IO/FileSystem.cs +++ b/MediaBrowser.Common/IO/FileSystem.cs @@ -1,8 +1,7 @@ -using System.Collections.Specialized; -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.Win32; +using MediaBrowser.Common.Win32; using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; using System.Runtime.InteropServices; using System.Text; diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 2b2063b55..a4ac70749 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -9,9 +9,6 @@ using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; -using NLog; -using NLog.Config; -using NLog.Targets; using System; using System.Collections.Generic; using System.ComponentModel.Composition; @@ -40,11 +37,6 @@ namespace MediaBrowser.Common.Kernel /// </summary> public event EventHandler HasPendingRestartChanged; - /// <summary> - /// Notifiies the containing application that a restart has been requested - /// </summary> - public event EventHandler ApplicationRestartRequested; - #region ConfigurationUpdated Event /// <summary> /// Occurs when [configuration updated]. @@ -342,6 +334,12 @@ namespace MediaBrowser.Common.Kernel protected ILogger Logger { get; private set; } /// <summary> + /// Gets or sets the application host. + /// </summary> + /// <value>The application host.</value> + protected IApplicationHost ApplicationHost { get; private set; } + + /// <summary> /// Gets the assemblies. /// </summary> /// <value>The assemblies.</value> @@ -350,10 +348,17 @@ namespace MediaBrowser.Common.Kernel /// <summary> /// Initializes a new instance of the <see cref="BaseKernel{TApplicationPathsType}" /> class. /// </summary> + /// <param name="appHost">The app host.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="logger">The logger.</param> - protected BaseKernel(IIsoManager isoManager, ILogger logger) + /// <exception cref="System.ArgumentNullException">isoManager</exception> + protected BaseKernel(IApplicationHost appHost, IIsoManager isoManager, ILogger logger) { + if (appHost == null) + { + throw new ArgumentNullException("appHost"); + } + if (isoManager == null) { throw new ArgumentNullException("isoManager"); @@ -363,7 +368,8 @@ namespace MediaBrowser.Common.Kernel { throw new ArgumentNullException("logger"); } - + + ApplicationHost = appHost; IsoManager = isoManager; Logger = logger; } @@ -440,43 +446,12 @@ namespace MediaBrowser.Common.Kernel /// </summary> public void ReloadLogger() { - DisposeLogger(); - - LogFilePath = Path.Combine(ApplicationPaths.LogDirectoryPath, KernelContext + "-" + DateTime.Now.Ticks + ".log"); - - var logFile = new FileTarget(); - - logFile.FileName = LogFilePath; - logFile.Layout = "${longdate}, ${level}, ${logger}, ${message}"; - - AddLogTarget(logFile, "ApplicationLogFile"); - + ApplicationHost.ReloadLogger(); + OnLoggerLoaded(); } /// <summary> - /// Adds the log target. - /// </summary> - /// <param name="target">The target.</param> - /// <param name="name">The name.</param> - private void AddLogTarget(Target target, string name) - { - var config = LogManager.Configuration; - - config.RemoveTarget(name); - - target.Name = name; - config.AddTarget(name, target); - - var level = Configuration.EnableDebugLevelLogging ? LogLevel.Debug : LogLevel.Info; - - var rule = new LoggingRule("*", level, target); - config.LoggingRules.Add(rule); - - LogManager.Configuration = config; - } - - /// <summary> /// Uses MEF to locate plugins /// Subclasses can use this to locate types within plugins /// </summary> @@ -588,7 +563,7 @@ namespace MediaBrowser.Common.Kernel foreach (var task in ScheduledTasks) { - task.Initialize(this); + task.Initialize(this, Logger); } // Start-up each plugin @@ -708,23 +683,6 @@ namespace MediaBrowser.Common.Kernel } /// <summary> - /// Disposes all logger resources - /// </summary> - private void DisposeLogger() - { - // Dispose all current loggers - var listeners = Trace.Listeners.OfType<TraceListener>().ToList(); - - Trace.Listeners.Clear(); - - foreach (var listener in listeners) - { - listener.Dispose(); - } - - } - - /// <summary> /// Gets the current application version /// </summary> /// <value>The application version.</value> @@ -759,7 +717,7 @@ namespace MediaBrowser.Common.Kernel { Logger.Info("Restarting the application"); - EventHelper.QueueEventIfNotNull(ApplicationRestartRequested, this, EventArgs.Empty, Logger); + ApplicationHost.Restart(); } /// <summary> diff --git a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs index f431c5463..11ffa8d6c 100644 --- a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs @@ -1,12 +1,11 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Common.Kernel { diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs new file mode 100644 index 000000000..c1b63c261 --- /dev/null +++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs @@ -0,0 +1,19 @@ + +namespace MediaBrowser.Common.Kernel +{ + /// <summary> + /// An interface to be implemented by the applications hosting a kernel + /// </summary> + public interface IApplicationHost + { + /// <summary> + /// Restarts this instance. + /// </summary> + void Restart(); + + /// <summary> + /// Reloads the logger. + /// </summary> + void ReloadLogger(); + } +} diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs index 5358f3ab0..c0e650fc7 100644 --- a/MediaBrowser.Common/Kernel/IKernel.cs +++ b/MediaBrowser.Common/Kernel/IKernel.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Net.Handlers; +using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.Serialization; @@ -19,11 +17,6 @@ namespace MediaBrowser.Common.Kernel public interface IKernel { /// <summary> - /// Occurs when [application restart requested]. - /// </summary> - event EventHandler ApplicationRestartRequested; - - /// <summary> /// Gets the application paths. /// </summary> /// <value>The application paths.</value> diff --git a/MediaBrowser.Common/Logging/LogManager.cs b/MediaBrowser.Common/Logging/LogManager.cs deleted file mode 100644 index 825f04440..000000000 --- a/MediaBrowser.Common/Logging/LogManager.cs +++ /dev/null @@ -1,20 +0,0 @@ -using MediaBrowser.Model.Logging; - -namespace MediaBrowser.Common.Logging -{ - /// <summary> - /// Class LogManager - /// </summary> - public static class LogManager - { - /// <summary> - /// Gets the logger. - /// </summary> - /// <param name="name">The name.</param> - /// <returns>ILogger.</returns> - public static ILogger GetLogger(string name) - { - return new NLogger(name); - } - } -} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index b80cd8e84..b806df856 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -114,8 +114,6 @@ <Reference Include="System.Runtime.Remoting" /> <Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Web" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Xaml" /> <Reference Include="System.Xml.Linq" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Data" /> @@ -142,16 +140,10 @@ <Compile Include="Kernel\BaseManager.cs" /> <Compile Include="Kernel\BasePeriodicWebSocketListener.cs" /> <Compile Include="Kernel\BaseWebSocketListener.cs" /> + <Compile Include="Kernel\IApplicationHost.cs" /> <Compile Include="Kernel\IKernel.cs" /> <Compile Include="Kernel\TcpManager.cs" /> <Compile Include="Localization\LocalizedStringData.cs" /> - <Compile Include="Logging\LogHelper.cs" /> - <Compile Include="Logging\LogManager.cs" /> - <Compile Include="Logging\LogWindow.xaml.cs"> - <DependentUpon>LogWindow.xaml</DependentUpon> - </Compile> - <Compile Include="Logging\NLogger.cs" /> - <Compile Include="Logging\WindowTraceListener.cs" /> <Compile Include="Mef\MefUtils.cs" /> <Compile Include="Net\AlchemyWebSocket.cs" /> <Compile Include="Net\BaseRestService.cs" /> @@ -201,7 +193,6 @@ <Compile Include="ScheduledTasks\IntervalTrigger.cs" /> <Compile Include="ScheduledTasks\IScheduledTask.cs" /> <Compile Include="ScheduledTasks\WeeklyTrigger.cs" /> - <Compile Include="UI\BaseApplication.cs" /> <Compile Include="Updates\ApplicationUpdateCheck.cs" /> <Compile Include="Updates\ApplicationUpdater.cs" /> <Compile Include="Updates\ClickOnceHelper.cs" /> @@ -229,12 +220,6 @@ <Resource Include="Resources\Images\Icon.ico" /> </ItemGroup> <ItemGroup> - <Page Include="Logging\LogWindow.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - </ItemGroup> - <ItemGroup> <Resource Include="README.txt" /> <Content Include="swagger-ui\css\screen.css" /> <Resource Include="swagger-ui\images\pet_store_api.png" /> @@ -251,6 +236,7 @@ <Content Include="swagger-ui\swagger-ui.js" /> <Content Include="swagger-ui\swagger-ui.min.js" /> </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/MediaBrowser.Common/Net/AlchemyWebSocket.cs b/MediaBrowser.Common/Net/AlchemyWebSocket.cs index 5a5103f74..584efa999 100644 --- a/MediaBrowser.Common/Net/AlchemyWebSocket.cs +++ b/MediaBrowser.Common/Net/AlchemyWebSocket.cs @@ -1,5 +1,4 @@ using Alchemy.Classes; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Logging; using System; diff --git a/MediaBrowser.Common/Net/BaseRestService.cs b/MediaBrowser.Common/Net/BaseRestService.cs index cfec9398d..59818a932 100644 --- a/MediaBrowser.Common/Net/BaseRestService.cs +++ b/MediaBrowser.Common/Net/BaseRestService.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Logging; using ServiceStack.Common; using ServiceStack.Common.Web; @@ -23,17 +22,18 @@ namespace MediaBrowser.Common.Net public class BaseRestService : Service, IRestfulService { /// <summary> - /// The logger - /// </summary> - protected ILogger Logger = LogManager.GetLogger("RestService"); - - /// <summary> /// Gets or sets the kernel. /// </summary> /// <value>The kernel.</value> public IKernel Kernel { get; set; } /// <summary> + /// Gets or sets the logger. + /// </summary> + /// <value>The logger.</value> + public ILogger Logger { get; set; } + + /// <summary> /// Gets a value indicating whether this instance is range request. /// </summary> /// <value><c>true</c> if this instance is range request; otherwise, <c>false</c>.</value> diff --git a/MediaBrowser.Common/Net/Handlers/BaseHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseHandler.cs index 95c86e6f7..3b3630047 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseHandler.cs @@ -1,7 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; -using MediaBrowser.Model.Logging; using System; using System.Collections; using System.Collections.Generic; @@ -24,19 +22,12 @@ namespace MediaBrowser.Common.Net.Handlers where TKernelType : IKernel { /// <summary> - /// Gets the logger. - /// </summary> - /// <value>The logger.</value> - protected ILogger Logger { get; private set; } - - /// <summary> /// Initializes the specified kernel. /// </summary> /// <param name="kernel">The kernel.</param> public void Initialize(IKernel kernel) { Kernel = (TKernelType)kernel; - Logger = SharedLogger.Logger; } /// <summary> @@ -303,7 +294,7 @@ namespace MediaBrowser.Common.Net.Handlers response.ContentType = "text/plain"; - Logger.ErrorException("Error processing request", ex); + //Logger.ErrorException("Error processing request", ex); if (!string.IsNullOrEmpty(ex.Message)) { @@ -321,7 +312,7 @@ namespace MediaBrowser.Common.Net.Handlers } catch (Exception ex1) { - Logger.ErrorException("Error dumping stack trace", ex1); + //Logger.ErrorException("Error dumping stack trace", ex1); } } @@ -449,7 +440,7 @@ namespace MediaBrowser.Common.Net.Handlers if (Kernel.Configuration.EnableHttpLevelLogging) { - Logger.LogMultiline(msg, LogSeverity.Debug, log); + //Logger.LogMultiline(msg, LogSeverity.Debug, log); } } @@ -604,7 +595,7 @@ namespace MediaBrowser.Common.Net.Handlers } catch (Exception ex) { - Logger.ErrorException("Error disposing compressed stream", ex); + //Logger.ErrorException("Error disposing compressed stream", ex); } } @@ -615,7 +606,7 @@ namespace MediaBrowser.Common.Net.Handlers } catch (Exception ex) { - Logger.ErrorException("Error disposing response", ex); + //Logger.ErrorException("Error disposing response", ex); } } @@ -750,14 +741,6 @@ namespace MediaBrowser.Common.Net.Handlers } } - internal static class SharedLogger - { - /// <summary> - /// The logger - /// </summary> - internal static ILogger Logger = LogManager.GetLogger("Http Handler"); - } - /// <summary> /// Class ResponseInfo /// </summary> diff --git a/MediaBrowser.Common/Net/HttpServer.cs b/MediaBrowser.Common/Net/HttpServer.cs index 7183b63c0..184b82c16 100644 --- a/MediaBrowser.Common/Net/HttpServer.cs +++ b/MediaBrowser.Common/Net/HttpServer.cs @@ -4,7 +4,6 @@ using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Logging; using ServiceStack.Api.Swagger; using ServiceStack.Common.Web; -using ServiceStack.Logging; using ServiceStack.Logging.NLogger; using ServiceStack.ServiceHost; using ServiceStack.ServiceInterface.Cors; @@ -144,6 +143,7 @@ namespace MediaBrowser.Common.Net } container.Register(Kernel); + container.Register(_logger); foreach (var service in Kernel.RestServices) { @@ -155,7 +155,7 @@ namespace MediaBrowser.Common.Net Serialization.JsonSerializer.Configure(); - LogManager.LogFactory = new NLogFactory(); + ServiceStack.Logging.LogManager.LogFactory = new NLogFactory(); } /// <summary> diff --git a/MediaBrowser.Common/Net/WebSocketConnection.cs b/MediaBrowser.Common/Net/WebSocketConnection.cs index 24b8e2a9f..d274d390d 100644 --- a/MediaBrowser.Common/Net/WebSocketConnection.cs +++ b/MediaBrowser.Common/Net/WebSocketConnection.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.Serialization; +using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Logging; using System; using System.Net; diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index 4da5a69f3..98b2f8161 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Plugins; diff --git a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs index 61ed649e2..99dd7ab01 100644 --- a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; @@ -301,9 +300,10 @@ namespace MediaBrowser.Common.ScheduledTasks /// Initializes the specified kernel. /// </summary> /// <param name="kernel">The kernel.</param> - public void Initialize(IKernel kernel) + /// <param name="logger">The logger.</param> + public void Initialize(IKernel kernel, ILogger logger) { - Logger = LogManager.GetLogger(GetType().Name); + Logger = logger; Kernel = (TKernelType)kernel; ReloadTriggerEvents(); diff --git a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs b/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs index 9220116b2..a3809c4b9 100644 --- a/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/IScheduledTask.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Kernel; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; @@ -76,7 +77,8 @@ namespace MediaBrowser.Common.ScheduledTasks /// Initializes the specified kernel. /// </summary> /// <param name="kernel">The kernel.</param> - void Initialize(IKernel kernel); + /// <param name="logger">The logger.</param> + void Initialize(IKernel kernel, ILogger logger); /// <summary> /// Cancels if running. diff --git a/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs b/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs index 1412be2a2..a7e3f90a0 100644 --- a/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/Tasks/SystemUpdateTask.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Updates; using MediaBrowser.Model.Tasks; using System; diff --git a/MediaBrowser.Common/Serialization/XmlSerializer.cs b/MediaBrowser.Common/Serialization/XmlSerializer.cs index c1258b72e..07010a5d2 100644 --- a/MediaBrowser.Common/Serialization/XmlSerializer.cs +++ b/MediaBrowser.Common/Serialization/XmlSerializer.cs @@ -1,9 +1,8 @@ -using MediaBrowser.Common.Logging; +using MediaBrowser.Model.Logging; using System; using System.IO; using System.Linq; using System.Xml; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Common.Serialization { diff --git a/MediaBrowser.Common/UI/BaseApplication.cs b/MediaBrowser.Common/UI/BaseApplication.cs deleted file mode 100644 index 00b256517..000000000 --- a/MediaBrowser.Common/UI/BaseApplication.cs +++ /dev/null @@ -1,412 +0,0 @@ -using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Updates; -using MediaBrowser.Model.Logging; -using Microsoft.Win32; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Deployment.Application; -using System.Net.Cache; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; -using System.Windows.Media.Imaging; - -namespace MediaBrowser.Common.UI -{ - /// <summary> - /// Serves as a base Application class for both the UI and Server apps. - /// </summary> - public abstract class BaseApplication : Application, INotifyPropertyChanged - { - /// <summary> - /// The single instance mutex - /// </summary> - private Mutex SingleInstanceMutex; - /// <summary> - /// Gets the name of the publisher. - /// </summary> - /// <value>The name of the publisher.</value> - protected abstract string PublisherName { get; } - /// <summary> - /// Gets the name of the suite. - /// </summary> - /// <value>The name of the suite.</value> - protected abstract string SuiteName { get; } - /// <summary> - /// Gets the name of the product. - /// </summary> - /// <value>The name of the product.</value> - protected abstract string ProductName { get; } - /// <summary> - /// Gets the name of the uninstaller file. - /// </summary> - /// <value>The name of the uninstaller file.</value> - protected abstract string UninstallerFileName { get; } - - /// <summary> - /// Gets or sets a value indicating whether [last run at startup value]. - /// </summary> - /// <value><c>null</c> if [last run at startup value] contains no value, <c>true</c> if [last run at startup value]; otherwise, <c>false</c>.</value> - private bool? LastRunAtStartupValue { get; set; } - - /// <summary> - /// Gets or sets the kernel. - /// </summary> - /// <value>The kernel.</value> - protected IKernel Kernel { get; set; } - - /// <summary> - /// Instantiates the kernel. - /// </summary> - /// <returns>IKernel.</returns> - protected abstract IKernel InstantiateKernel(); - /// <summary> - /// Instantiates the main window. - /// </summary> - /// <returns>Window.</returns> - protected abstract Window InstantiateMainWindow(); - - /// <summary> - /// Occurs when [property changed]. - /// </summary> - public event PropertyChangedEventHandler PropertyChanged; - - /// <summary> - /// Gets or sets the logger. - /// </summary> - /// <value>The logger.</value> - protected ILogger Logger { get; set; } - - /// <summary> - /// Initializes a new instance of the <see cref="BaseApplication" /> class. - /// </summary> - /// <param name="logger">The logger.</param> - protected BaseApplication(ILogger logger) - { - Logger = logger; - } - - /// <summary> - /// Called when [property changed]. - /// </summary> - /// <param name="info">The info.</param> - public void OnPropertyChanged(String info) - { - if (PropertyChanged != null) - { - try - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - catch (Exception ex) - { - Logger.ErrorException("Error in event handler", ex); - } - } - } - - /// <summary> - /// Raises the <see cref="E:System.Windows.Application.Startup" /> event. - /// </summary> - /// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param> - protected override void OnStartup(StartupEventArgs e) - { - bool createdNew; - SingleInstanceMutex = new Mutex(true, @"Local\" + GetType().Assembly.GetName().Name, out createdNew); - if (!createdNew) - { - SingleInstanceMutex = null; - Shutdown(); - return; - } - - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - LoadKernel(); - - SystemEvents.SessionEnding += SystemEvents_SessionEnding; - } - - /// <summary> - /// Handles the UnhandledException event of the CurrentDomain control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="UnhandledExceptionEventArgs" /> instance containing the event data.</param> - void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - var exception = (Exception) e.ExceptionObject; - - Logger.ErrorException("UnhandledException", exception); - - MessageBox.Show("Unhandled exception: " + exception.Message); - } - - /// <summary> - /// Handles the SessionEnding event of the SystemEvents control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="SessionEndingEventArgs" /> instance containing the event data.</param> - void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) - { - // Try to shut down gracefully - Shutdown(); - } - - /// <summary> - /// Loads the kernel. - /// </summary> - protected virtual async void LoadKernel() - { - Kernel = InstantiateKernel(); - - try - { - InstantiateMainWindow().Show(); - - var now = DateTime.UtcNow; - - await Kernel.Init(); - - var done = (DateTime.UtcNow - now); - Logger.Info("Kernel.Init completed in {0}{1} minutes and {2} seconds.", done.Hours > 0 ? done.Hours + " Hours " : "", done.Minutes, done.Seconds); - - await OnKernelLoaded(); - } - catch (Exception ex) - { - Logger.ErrorException("Error launching application", ex); - - MessageBox.Show("There was an error launching Media Browser: " + ex.Message); - - // Shutdown the app with an error code - Shutdown(1); - } - } - - /// <summary> - /// Called when [kernel loaded]. - /// </summary> - /// <returns>Task.</returns> - protected virtual Task OnKernelLoaded() - { - return Task.Run(() => - { - Kernel.ApplicationRestartRequested += Kernel_ApplicationRestartRequested; - Kernel.ConfigurationUpdated += Kernel_ConfigurationUpdated; - - ConfigureClickOnceStartup(); - }); - } - - /// <summary> - /// Handles the ConfigurationUpdated event of the Kernel control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> - void Kernel_ConfigurationUpdated(object sender, EventArgs e) - { - if (!LastRunAtStartupValue.HasValue || LastRunAtStartupValue.Value != Kernel.Configuration.RunAtStartup) - { - ConfigureClickOnceStartup(); - } - } - - /// <summary> - /// Configures the click once startup. - /// </summary> - private void ConfigureClickOnceStartup() - { - if (!ApplicationDeployment.IsNetworkDeployed) - { - return; - } - - try - { - var clickOnceHelper = new ClickOnceHelper(PublisherName, ProductName, SuiteName); - - if (Kernel.Configuration.RunAtStartup) - { - clickOnceHelper.UpdateUninstallParameters(UninstallerFileName); - clickOnceHelper.AddShortcutToStartup(); - } - else - { - clickOnceHelper.RemoveShortcutFromStartup(); - } - - LastRunAtStartupValue = Kernel.Configuration.RunAtStartup; - } - catch (Exception ex) - { - Logger.ErrorException("Error configuring ClickOnce", ex); - } - } - - /// <summary> - /// Handles the ApplicationRestartRequested event of the Kernel control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> - void Kernel_ApplicationRestartRequested(object sender, EventArgs e) - { - Restart(); - } - - /// <summary> - /// Restarts this instance. - /// </summary> - public void Restart() - { - Dispatcher.Invoke(ReleaseMutex); - - Kernel.Dispose(); - - System.Windows.Forms.Application.Restart(); - - Dispatcher.Invoke(Shutdown); - } - - /// <summary> - /// Releases the mutex. - /// </summary> - private void ReleaseMutex() - { - if (SingleInstanceMutex == null) - { - return; - } - - SingleInstanceMutex.ReleaseMutex(); - SingleInstanceMutex.Close(); - SingleInstanceMutex.Dispose(); - SingleInstanceMutex = null; - } - - /// <summary> - /// Raises the <see cref="E:System.Windows.Application.Exit" /> event. - /// </summary> - /// <param name="e">An <see cref="T:System.Windows.ExitEventArgs" /> that contains the event data.</param> - protected override void OnExit(ExitEventArgs e) - { - ReleaseMutex(); - - base.OnExit(e); - - Kernel.Dispose(); - } - - /// <summary> - /// Signals the external command line args. - /// </summary> - /// <param name="args">The args.</param> - /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - public bool SignalExternalCommandLineArgs(IList<string> args) - { - OnSecondInstanceLaunched(args); - - return true; - } - - /// <summary> - /// Called when [second instance launched]. - /// </summary> - /// <param name="args">The args.</param> - protected virtual void OnSecondInstanceLaunched(IList<string> args) - { - if (MainWindow.WindowState == WindowState.Minimized) - { - MainWindow.WindowState = WindowState.Maximized; - } - } - - /// <summary> - /// Gets the image. - /// </summary> - /// <param name="uri">The URI.</param> - /// <returns>Image.</returns> - /// <exception cref="System.ArgumentNullException">uri</exception> - public Image GetImage(string uri) - { - if (string.IsNullOrEmpty(uri)) - { - throw new ArgumentNullException("uri"); - } - - return GetImage(new Uri(uri)); - } - - /// <summary> - /// Gets the image. - /// </summary> - /// <param name="uri">The URI.</param> - /// <returns>Image.</returns> - /// <exception cref="System.ArgumentNullException">uri</exception> - public Image GetImage(Uri uri) - { - if (uri == null) - { - throw new ArgumentNullException("uri"); - } - - return new Image { Source = GetBitmapImage(uri) }; - } - - /// <summary> - /// Gets the bitmap image. - /// </summary> - /// <param name="uri">The URI.</param> - /// <returns>BitmapImage.</returns> - /// <exception cref="System.ArgumentNullException">uri</exception> - public BitmapImage GetBitmapImage(string uri) - { - if (string.IsNullOrEmpty(uri)) - { - throw new ArgumentNullException("uri"); - } - - return GetBitmapImage(new Uri(uri)); - } - - /// <summary> - /// Gets the bitmap image. - /// </summary> - /// <param name="uri">The URI.</param> - /// <returns>BitmapImage.</returns> - /// <exception cref="System.ArgumentNullException">uri</exception> - public BitmapImage GetBitmapImage(Uri uri) - { - if (uri == null) - { - throw new ArgumentNullException("uri"); - } - - var bitmap = new BitmapImage - { - CreateOptions = BitmapCreateOptions.DelayCreation, - CacheOption = BitmapCacheOption.OnDemand, - UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable) - }; - - bitmap.BeginInit(); - bitmap.UriSource = uri; - bitmap.EndInit(); - - RenderOptions.SetBitmapScalingMode(bitmap, BitmapScalingMode.Fant); - return bitmap; - } - } - - /// <summary> - /// Interface IApplication - /// </summary> - public interface IApplication - { - /// <summary> - /// Initializes the component. - /// </summary> - void InitializeComponent(); - } -} diff --git a/MediaBrowser.Controller/Drawing/ImageHeader.cs b/MediaBrowser.Controller/Drawing/ImageHeader.cs index 7fec7d4c5..91b4b93e9 100644 --- a/MediaBrowser.Controller/Drawing/ImageHeader.cs +++ b/MediaBrowser.Controller/Drawing/ImageHeader.cs @@ -1,10 +1,9 @@ -using MediaBrowser.Common.Logging; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Drawing { diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs index 2077525a3..16fd4a5b8 100644 --- a/MediaBrowser.Controller/Drawing/ImageManager.cs +++ b/MediaBrowser.Controller/Drawing/ImageManager.cs @@ -6,6 +6,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -15,7 +16,6 @@ using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Drawing { @@ -581,7 +581,20 @@ namespace MediaBrowser.Controller.Drawing // Run the enhancers sequentially in order of priority foreach (var enhancer in imageEnhancers) { - result = await enhancer.EnhanceImageAsync(item, result, imageType, imageIndex).ConfigureAwait(false); + var typeName = enhancer.GetType().Name; + + _logger.Debug("Running {0} for {1}", typeName, item.Path ?? item.Name ?? "--Unknown--"); + + try + { + result = await enhancer.EnhanceImageAsync(item, result, imageType, imageIndex).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("{0} failed enhancing {1}", ex, typeName, item.Name); + + throw; + } } return result; diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 888963c9d..023a79ee9 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Win32; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; @@ -8,6 +7,7 @@ using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.IO; @@ -16,7 +16,6 @@ using System.Runtime.Serialization; using System.Text; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Entities { @@ -97,7 +96,7 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// The logger /// </summary> - protected static ILogger Logger = LogManager.GetLogger("BaseItem"); + protected static internal ILogger Logger { get; internal set; } /// <summary> /// Returns a <see cref="System.String" /> that represents this instance. diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 3f212a314..33e9f291d 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Concurrent; diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 843a84c3a..f67934f5d 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -1,11 +1,11 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Tasks; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -14,7 +14,6 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Tasks; using SortOrder = MediaBrowser.Controller.Sorting.SortOrder; namespace MediaBrowser.Controller.Entities diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 3ac4f60f5..6a76e2125 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Win32; using MediaBrowser.Model.Entities; using System; diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index 1d9e6c4d1..ee9815e62 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Tasks; diff --git a/MediaBrowser.Controller/IO/DirectoryWatchers.cs b/MediaBrowser.Controller/IO/DirectoryWatchers.cs index 4eaa6e7d3..62e1a6a36 100644 --- a/MediaBrowser.Controller/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Controller/IO/DirectoryWatchers.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.ScheduledTasks; diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs index 3ccf8add6..130f08625 100644 --- a/MediaBrowser.Controller/IO/FileData.cs +++ b/MediaBrowser.Controller/IO/FileData.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Common.Win32; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 992809c2f..a8cfb8dd7 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Playback; @@ -312,12 +313,18 @@ namespace MediaBrowser.Controller /// </summary> /// <value>The bluray examiner.</value> private IBlurayExaminer BlurayExaminer { get; set; } - + /// <summary> /// Creates a kernel based on a Data path, which is akin to our current programdata path /// </summary> - public Kernel(IIsoManager isoManager, IZipClient zipClient, IBlurayExaminer blurayExaminer, ILogger logger) - : base(isoManager, logger) + /// <param name="appHost">The app host.</param> + /// <param name="isoManager">The iso manager.</param> + /// <param name="zipClient">The zip client.</param> + /// <param name="blurayExaminer">The bluray examiner.</param> + /// <param name="logger">The logger.</param> + /// <exception cref="System.ArgumentNullException">isoManager</exception> + public Kernel(IApplicationHost appHost, IIsoManager isoManager, IZipClient zipClient, IBlurayExaminer blurayExaminer, ILogger logger) + : base(appHost, isoManager, logger) { if (isoManager == null) { @@ -337,6 +344,13 @@ namespace MediaBrowser.Controller Instance = this; ZipClient = zipClient; BlurayExaminer = blurayExaminer; + + // For now there's no real way to inject this properly + BaseItem.Logger = logger; + Ratings.Logger = logger; + LocalizedStrings.Logger = logger; + // For now, until this can become an interface + BaseMetadataProvider.Logger = logger; } /// <summary> diff --git a/MediaBrowser.Controller/Library/DtoBuilder.cs b/MediaBrowser.Controller/Library/DtoBuilder.cs index 6e0735a54..8cf9d5b57 100644 --- a/MediaBrowser.Controller/Library/DtoBuilder.cs +++ b/MediaBrowser.Controller/Library/DtoBuilder.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -18,14 +17,19 @@ namespace MediaBrowser.Controller.Library /// <summary> /// Generates DTO's from domain entities /// </summary> - public static class DtoBuilder + public class DtoBuilder { /// <summary> /// The index folder delimeter /// </summary> const string IndexFolderDelimeter = "-index-"; - private static ILogger Logger = LogManager.GetLogger("DtoBuilder"); + private ILogger Logger; + + public DtoBuilder(ILogger logger) + { + Logger = logger; + } /// <summary> /// Gets the dto base item. @@ -34,7 +38,7 @@ namespace MediaBrowser.Controller.Library /// <param name="fields">The fields.</param> /// <returns>Task{DtoBaseItem}.</returns> /// <exception cref="System.ArgumentNullException">item</exception> - public async static Task<BaseItemDto> GetDtoBaseItem(BaseItem item, List<ItemFields> fields) + public async Task<BaseItemDto> GetDtoBaseItem(BaseItem item, List<ItemFields> fields) { if (item == null) { @@ -91,7 +95,7 @@ namespace MediaBrowser.Controller.Library /// <param name="fields">The fields.</param> /// <returns>Task{DtoBaseItem}.</returns> /// <exception cref="System.ArgumentNullException"></exception> - public async static Task<BaseItemDto> GetDtoBaseItem(BaseItem item, User user, List<ItemFields> fields) + public async Task<BaseItemDto> GetDtoBaseItem(BaseItem item, User user, List<ItemFields> fields) { if (item == null) { @@ -153,7 +157,7 @@ namespace MediaBrowser.Controller.Library /// <param name="item">The item.</param> /// <param name="user">The user.</param> /// <param name="fields">The fields.</param> - private static void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) + private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List<ItemFields> fields) { dto.IsNew = item.IsRecentlyAdded(user); @@ -192,7 +196,7 @@ namespace MediaBrowser.Controller.Library /// <param name="dto">The dto.</param> /// <param name="item">The item.</param> /// <returns>Task.</returns> - private static async Task AttachPrimaryImageAspectRatio(BaseItemDto dto, BaseItem item) + private async Task AttachPrimaryImageAspectRatio(BaseItemDto dto, BaseItem item) { var path = item.PrimaryImagePath; @@ -234,7 +238,7 @@ namespace MediaBrowser.Controller.Library /// <param name="dto">The dto.</param> /// <param name="item">The item.</param> /// <param name="fields">The fields.</param> - private static void AttachBasicFields(BaseItemDto dto, BaseItem item, List<ItemFields> fields) + private void AttachBasicFields(BaseItemDto dto, BaseItem item, List<ItemFields> fields) { if (fields.Contains(ItemFields.DateCreated)) { @@ -555,7 +559,7 @@ namespace MediaBrowser.Controller.Library /// <param name="dto">The dto.</param> /// <param name="item">The item.</param> /// <returns>Task.</returns> - private static async Task AttachPeople(BaseItemDto dto, BaseItem item) + private async Task AttachPeople(BaseItemDto dto, BaseItem item) { if (item.People == null) { @@ -614,7 +618,7 @@ namespace MediaBrowser.Controller.Library /// </summary> /// <param name="item">The item.</param> /// <returns>BaseItem.</returns> - private static BaseItem GetParentBackdropItem(BaseItem item) + private BaseItem GetParentBackdropItem(BaseItem item) { var parent = item.Parent; @@ -636,7 +640,7 @@ namespace MediaBrowser.Controller.Library /// </summary> /// <param name="item">The item.</param> /// <returns>BaseItem.</returns> - private static BaseItem GetParentLogoItem(BaseItem item) + private BaseItem GetParentLogoItem(BaseItem item) { var parent = item.Parent; @@ -675,7 +679,7 @@ namespace MediaBrowser.Controller.Library /// <param name="data">The data.</param> /// <returns>DtoUserItemData.</returns> /// <exception cref="System.ArgumentNullException"></exception> - public static UserItemDataDto GetDtoUserItemData(UserItemData data) + public UserItemDataDto GetDtoUserItemData(UserItemData data) { if (data == null) { @@ -699,7 +703,7 @@ namespace MediaBrowser.Controller.Library /// <param name="chapterInfo">The chapter info.</param> /// <param name="item">The item.</param> /// <returns>ChapterInfoDto.</returns> - private static ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item) + private ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item) { var dto = new ChapterInfoDto { @@ -786,7 +790,7 @@ namespace MediaBrowser.Controller.Library /// <param name="user">The user.</param> /// <returns>DtoUser.</returns> /// <exception cref="System.ArgumentNullException">user</exception> - public static UserDto GetDtoUser(User user) + public UserDto GetDtoUser(User user) { if (user == null) { @@ -924,7 +928,7 @@ namespace MediaBrowser.Controller.Library /// </summary> /// <param name="item">The item.</param> /// <returns>List{System.String}.</returns> - private static List<Guid> GetBackdropImageTags(BaseItem item) + private List<Guid> GetBackdropImageTags(BaseItem item) { if (item.BackdropImagePaths == null) { diff --git a/MediaBrowser.Controller/Library/Profiler.cs b/MediaBrowser.Controller/Library/Profiler.cs index 3ac53f62a..469d8ef18 100644 --- a/MediaBrowser.Controller/Library/Profiler.cs +++ b/MediaBrowser.Controller/Library/Profiler.cs @@ -1,7 +1,6 @@ -using System; +using MediaBrowser.Model.Logging; +using System; using System.Diagnostics; -using MediaBrowser.Common.Logging; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Library { diff --git a/MediaBrowser.Controller/Library/UserManager.cs b/MediaBrowser.Controller/Library/UserManager.cs index f9593db0c..8084366b7 100644 --- a/MediaBrowser.Controller/Library/UserManager.cs +++ b/MediaBrowser.Controller/Library/UserManager.cs @@ -73,7 +73,7 @@ namespace MediaBrowser.Controller.Library EventHelper.QueueEventIfNotNull(UserUpdated, this, new GenericEventArgs<User> { Argument = user }, _logger); // Notify connected ui's - Kernel.TcpManager.SendWebSocketMessage("UserUpdated", DtoBuilder.GetDtoUser(user)); + Kernel.TcpManager.SendWebSocketMessage("UserUpdated", new DtoBuilder(_logger).GetDtoUser(user)); } #endregion diff --git a/MediaBrowser.Controller/Localization/LocalizedStrings.cs b/MediaBrowser.Controller/Localization/LocalizedStrings.cs index aa651e181..01b259591 100644 --- a/MediaBrowser.Controller/Localization/LocalizedStrings.cs +++ b/MediaBrowser.Controller/Localization/LocalizedStrings.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Localization; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; @@ -19,7 +18,7 @@ namespace MediaBrowser.Controller.Localization /// <summary> /// The logger /// </summary> - private static readonly ILogger Logger = LogManager.GetLogger("LocalizedStrings"); + static internal ILogger Logger { get; set; } /// <summary> /// The base prefix /// </summary> diff --git a/MediaBrowser.Controller/Localization/Ratings.cs b/MediaBrowser.Controller/Localization/Ratings.cs index 2f7188a9b..46368a250 100644 --- a/MediaBrowser.Controller/Localization/Ratings.cs +++ b/MediaBrowser.Controller/Localization/Ratings.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Model.Logging; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Common.Logging; namespace MediaBrowser.Controller.Localization { @@ -11,6 +11,7 @@ namespace MediaBrowser.Controller.Localization /// </summary> public static class Ratings { + static internal ILogger Logger { get; set; } /// <summary> /// The ratings def /// </summary> @@ -40,7 +41,7 @@ namespace MediaBrowser.Controller.Localization public static Dictionary<string, int> Initialize(bool blockUnrated) { //build our ratings dictionary from the combined local one and us one - ratingsDef = new RatingsDefinition(Path.Combine(Kernel.Instance.ApplicationPaths.LocalizationPath, "Ratings-" + Kernel.Instance.Configuration.MetadataCountryCode + ".txt"), LogManager.GetLogger("RatingsDefinition")); + ratingsDef = new RatingsDefinition(Path.Combine(Kernel.Instance.ApplicationPaths.LocalizationPath, "Ratings-" + Kernel.Instance.Configuration.MetadataCountryCode + ".txt"), Logger); //global value of None var dict = new Dictionary<string, int> {{"None", -1}}; foreach (var pair in ratingsDef.RatingsDict) diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index f592466a6..c2b11ae32 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -130,8 +130,8 @@ <Compile Include="Playback\IIntroProvider.cs" /> <Compile Include="Plugins\BaseConfigurationPage.cs" /> <Compile Include="Plugins\PluginSecurityManager.cs" /> - <Compile Include="Providers\BaseImageEnhancer.cs" /> <Compile Include="Providers\FanartBaseProvider.cs" /> + <Compile Include="Providers\BaseImageEnhancer.cs" /> <Compile Include="Providers\ImagesByNameProvider.cs" /> <Compile Include="Providers\MediaInfo\BaseFFMpegImageProvider.cs" /> <Compile Include="Providers\MediaInfo\BaseFFMpegProvider.cs" /> diff --git a/MediaBrowser.Controller/Providers/BaseImageEnhancer.cs b/MediaBrowser.Controller/Providers/BaseImageEnhancer.cs index 0bcfff183..aeceeaf5f 100644 --- a/MediaBrowser.Controller/Providers/BaseImageEnhancer.cs +++ b/MediaBrowser.Controller/Providers/BaseImageEnhancer.cs @@ -1,8 +1,6 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; using System; using System.Drawing; using System.Threading.Tasks; @@ -15,10 +13,6 @@ namespace MediaBrowser.Controller.Providers public abstract class BaseImageEnhancer : IDisposable { /// <summary> - /// The logger - /// </summary> - private static readonly ILogger Logger = LogManager.GetLogger("ImageEnhancer"); - /// <summary> /// Return true only if the given image for the given item will be enhanced by this enhancer. /// </summary> /// <param name="item">The item.</param> @@ -92,27 +86,14 @@ namespace MediaBrowser.Controller.Providers /// <param name="imageIndex">Index of the image.</param> /// <returns>Task{Image}.</returns> /// <exception cref="System.ArgumentNullException"></exception> - public async Task<Image> EnhanceImageAsync(BaseItem item, Image originalImage, ImageType imageType, int imageIndex) + public Task<Image> EnhanceImageAsync(BaseItem item, Image originalImage, ImageType imageType, int imageIndex) { if (item == null || originalImage == null) { throw new ArgumentNullException(); } - var typeName = GetType().Name; - - Logger.Debug("Running {0} for {1}", typeName, item.Path ?? item.Name ?? "--Unknown--"); - - try - { - return await EnhanceImageAsyncInternal(item, originalImage, imageType, imageIndex).ConfigureAwait(false); - } - catch (Exception ex) - { - Logger.ErrorException("{0} failed enhancing {1}", ex, typeName, item.Name); - - throw; - } + return EnhanceImageAsyncInternal(item, originalImage, imageType, imageIndex); } } } diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index 3916c0f54..e16519864 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Logging; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -17,7 +16,7 @@ namespace MediaBrowser.Controller.Providers /// Gets the logger. /// </summary> /// <value>The logger.</value> - protected ILogger Logger { get; private set; } + protected static internal ILogger Logger { get; internal set; } // Cache these since they will be used a lot /// <summary> @@ -113,7 +112,6 @@ namespace MediaBrowser.Controller.Providers /// </summary> protected virtual void Initialize() { - Logger = LogManager.GetLogger(GetType().Name); } /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs index d8fd76805..49c829fff 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaInfo; diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs index 0d6cc41b8..277b6d891 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Resolvers.TV; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs b/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs index db85ae4f7..cfb402456 100644 --- a/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs +++ b/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs @@ -1,9 +1,8 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.Win32; +using MediaBrowser.Common.Win32; using System; using System.Collections.Generic; -using System.Text.RegularExpressions; using System.Linq; +using System.Text.RegularExpressions; namespace MediaBrowser.Controller.Resolvers.TV { diff --git a/MediaBrowser.Installer/MediaBrowser.Installer_TemporaryKey.pfx b/MediaBrowser.Installer/MediaBrowser.Installer_TemporaryKey.pfx Binary files differnew file mode 100644 index 000000000..18ec3ef6b --- /dev/null +++ b/MediaBrowser.Installer/MediaBrowser.Installer_TemporaryKey.pfx diff --git a/MediaBrowser.Common/Logging/LogHelper.cs b/MediaBrowser.Logging.NLog/LogHelper.cs index 8b638a28e..93df4b2aa 100644 --- a/MediaBrowser.Common/Logging/LogHelper.cs +++ b/MediaBrowser.Logging.NLog/LogHelper.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace MediaBrowser.Common.Logging +namespace MediaBrowser.Logging.Nlog { /// <summary> /// Class LogHelper diff --git a/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj b/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj new file mode 100644 index 000000000..e24373aeb --- /dev/null +++ b/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{67310740-0EC4-4DC2-9921-33DF38B20167}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MediaBrowser.Logging.NLog</RootNamespace> + <AssemblyName>MediaBrowser.Logging.NLog</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="NLog"> + <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="LogHelper.cs" /> + <Compile Include="NLogger.cs" /> + <Compile Include="NlogManager.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> + <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> + <Name>MediaBrowser.Model</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project>
\ No newline at end of file diff --git a/MediaBrowser.Common/Logging/NLogger.cs b/MediaBrowser.Logging.NLog/NLogger.cs index 584c5616b..b3aedbf7c 100644 --- a/MediaBrowser.Common/Logging/NLogger.cs +++ b/MediaBrowser.Logging.NLog/NLogger.cs @@ -2,12 +2,12 @@ using System; using System.Text; -namespace MediaBrowser.Common.Logging +namespace MediaBrowser.Logging.Nlog { /// <summary> /// Class NLogger /// </summary> - internal class NLogger : ILogger + public class NLogger : ILogger { /// <summary> /// The _logger diff --git a/MediaBrowser.Logging.NLog/NlogManager.cs b/MediaBrowser.Logging.NLog/NlogManager.cs new file mode 100644 index 000000000..4d6aeadd8 --- /dev/null +++ b/MediaBrowser.Logging.NLog/NlogManager.cs @@ -0,0 +1,50 @@ +using NLog; +using NLog.Config; +using NLog.Targets; + +namespace MediaBrowser.Logging.Nlog +{ + /// <summary> + /// Class NlogManager + /// </summary> + public static class NlogManager + { + /// <summary> + /// Adds the file target. + /// </summary> + /// <param name="path">The path.</param> + /// <param name="enableDebugLogging">if set to <c>true</c> [enable debug logging].</param> + public static void AddFileTarget(string path, bool enableDebugLogging) + { + var logFile = new FileTarget(); + + logFile.FileName = path; + logFile.Layout = "${longdate}, ${level}, ${logger}, ${message}"; + + AddLogTarget(logFile, "ApplicationLogFile", enableDebugLogging); + } + + /// <summary> + /// Adds the log target. + /// </summary> + /// <param name="target">The target.</param> + /// <param name="name">The name.</param> + /// <param name="enableDebugLogging">if set to <c>true</c> [enable debug logging].</param> + private static void AddLogTarget(Target target, string name, bool enableDebugLogging) + { + var config = LogManager.Configuration; + + config.RemoveTarget(name); + + target.Name = name; + config.AddTarget(name, target); + + var level = enableDebugLogging ? LogLevel.Debug : LogLevel.Info; + + var rule = new LoggingRule("*", level, target); + config.LoggingRules.Add(rule); + + LogManager.Configuration = config; + } + } +} diff --git a/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs b/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..35e100281 --- /dev/null +++ b/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MediaBrowser.Logging.NLog")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MediaBrowser.Logging.NLog")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("095763bf-68a9-4d89-ad01-d0e3c1f5c11f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MediaBrowser.Logging.NLog/packages.config b/MediaBrowser.Logging.NLog/packages.config new file mode 100644 index 000000000..ede36938c --- /dev/null +++ b/MediaBrowser.Logging.NLog/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> +</packages>
\ No newline at end of file diff --git a/MediaBrowser.Plugins.MpcHc/MpcHcMediaPlayer.cs b/MediaBrowser.Plugins.MpcHc/MpcHcMediaPlayer.cs index baad046dd..e2d5398e4 100644 --- a/MediaBrowser.Plugins.MpcHc/MpcHcMediaPlayer.cs +++ b/MediaBrowser.Plugins.MpcHc/MpcHcMediaPlayer.cs @@ -1,6 +1,6 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using MediaBrowser.UI.Configuration; using MediaBrowser.UI.Controller; using MediaBrowser.UI.Playback; @@ -32,6 +32,12 @@ namespace MediaBrowser.Plugins.MpcHc /// </summary> private SemaphoreSlim MpcHttpInterfaceResourcePool = new SemaphoreSlim(1, 1); + [ImportingConstructor] + public MpcHcMediaPlayer([Import("logger")] ILogger logger) + : base(logger) + { + } + /// <summary> /// Gets or sets the HTTP interface cancellation token. /// </summary> diff --git a/MediaBrowser.Plugins.Tmt5/Tmt5MediaPlayer.cs b/MediaBrowser.Plugins.Tmt5/Tmt5MediaPlayer.cs index fc6b4e37f..2643eaa44 100644 --- a/MediaBrowser.Plugins.Tmt5/Tmt5MediaPlayer.cs +++ b/MediaBrowser.Plugins.Tmt5/Tmt5MediaPlayer.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Logging; using MediaBrowser.UI.Configuration; using MediaBrowser.UI.Playback; using MediaBrowser.UI.Playback.ExternalPlayer; @@ -21,6 +21,12 @@ namespace MediaBrowser.Plugins.Tmt5 [Export(typeof(BaseMediaPlayer))] public class Tmt5MediaPlayer : BaseExternalPlayer { + [ImportingConstructor] + public Tmt5MediaPlayer([Import("logger")] ILogger logger) + : base(logger) + { + } + /// <summary> /// Gets the name. /// </summary> diff --git a/MediaBrowser.Server.Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Sqlite/SQLiteRepository.cs index 09484d68e..1caae970e 100644 --- a/MediaBrowser.Server.Sqlite/SQLiteRepository.cs +++ b/MediaBrowser.Server.Sqlite/SQLiteRepository.cs @@ -1,4 +1,3 @@ -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; diff --git a/MediaBrowser.Server.Uninstall/MediaBrowser.Server.Uninstall.csproj b/MediaBrowser.Server.Uninstall/MediaBrowser.Server.Uninstall.csproj index bce0138af..3c51ce6a2 100644 --- a/MediaBrowser.Server.Uninstall/MediaBrowser.Server.Uninstall.csproj +++ b/MediaBrowser.Server.Uninstall/MediaBrowser.Server.Uninstall.csproj @@ -44,9 +44,6 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> - <Compile Include="..\MediaBrowser.Common\Updates\ClickOnceHelper.cs"> - <Link>ClickOnceHelper.cs</Link> - </Compile> <Compile Include="Globals.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> @@ -54,6 +51,12 @@ <ItemGroup> <None Include="App.config" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> + <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> + <Name>MediaBrowser.Common</Name> + </ProjectReference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/MediaBrowser.ServerApplication/App.xaml b/MediaBrowser.ServerApplication/App.xaml index 6b7f6c38f..3729dc7b6 100644 --- a/MediaBrowser.ServerApplication/App.xaml +++ b/MediaBrowser.ServerApplication/App.xaml @@ -1,8 +1,7 @@ -<z:BaseApplication x:Class="MediaBrowser.ServerApplication.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:z="clr-namespace:MediaBrowser.Common.UI;assembly=MediaBrowser.Common">
- <Application.Resources>
-
- </Application.Resources>
-</z:BaseApplication>
+<Application x:Class="MediaBrowser.ServerApplication.App" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + <Application.Resources> + + </Application.Resources> +</Application> diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index 4da5c39fe..cc6367127 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -1,23 +1,31 @@ using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.UI; +using MediaBrowser.Common.Updates; using MediaBrowser.Controller; using MediaBrowser.IsoMounter; +using MediaBrowser.Logging.Nlog; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Uninstall; using MediaBrowser.ServerApplication.Implementations; +using Microsoft.Win32; using System; -using System.Collections.Generic; +using System.Deployment.Application; using System.Diagnostics; +using System.IO; using System.Linq; +using System.Net.Cache; +using System.Threading; +using System.Threading.Tasks; using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Media.Imaging; namespace MediaBrowser.ServerApplication { /// <summary> /// Interaction logic for App.xaml /// </summary> - public partial class App : BaseApplication, IApplication + public partial class App : Application, IApplicationHost { /// <summary> /// Defines the entry point of the application. @@ -25,8 +33,7 @@ namespace MediaBrowser.ServerApplication [STAThread] public static void Main() { - var application = new App(LogManager.GetLogger("App")); - application.InitializeComponent(); + var application = new App(new NLogger("App")); application.Run(); } @@ -44,20 +51,44 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// The single instance mutex + /// </summary> + private Mutex SingleInstanceMutex; + + /// <summary> + /// Gets or sets the kernel. + /// </summary> + /// <value>The kernel.</value> + protected IKernel Kernel { get; set; } + + /// <summary> + /// Gets or sets the logger. + /// </summary> + /// <value>The logger.</value> + protected ILogger Logger { get; set; } + + /// <summary> + /// Gets or sets the log file path. + /// </summary> + /// <value>The log file path.</value> + private string LogFilePath { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="App" /> class. /// </summary> /// <param name="logger">The logger.</param> public App(ILogger logger) - : base(logger) { - + Logger = logger; + + InitializeComponent(); } /// <summary> /// Gets the name of the product. /// </summary> /// <value>The name of the product.</value> - protected override string ProductName + protected string ProductName { get { return Globals.ProductName; } } @@ -66,7 +97,7 @@ namespace MediaBrowser.ServerApplication /// Gets the name of the publisher. /// </summary> /// <value>The name of the publisher.</value> - protected override string PublisherName + protected string PublisherName { get { return Globals.PublisherName; } } @@ -75,7 +106,7 @@ namespace MediaBrowser.ServerApplication /// Gets the name of the suite. /// </summary> /// <value>The name of the suite.</value> - protected override string SuiteName + protected string SuiteName { get { return Globals.SuiteName; } } @@ -84,21 +115,180 @@ namespace MediaBrowser.ServerApplication /// Gets the name of the uninstaller file. /// </summary> /// <value>The name of the uninstaller file.</value> - protected override string UninstallerFileName + protected string UninstallerFileName { get { return "MediaBrowser.Server.Uninstall.exe"; } } /// <summary> - /// Called when [second instance launched]. + /// Gets or sets a value indicating whether [last run at startup value]. /// </summary> - /// <param name="args">The args.</param> - protected override void OnSecondInstanceLaunched(IList<string> args) + /// <value><c>null</c> if [last run at startup value] contains no value, <c>true</c> if [last run at startup value]; otherwise, <c>false</c>.</value> + private bool? LastRunAtStartupValue { get; set; } + + /// <summary> + /// Raises the <see cref="E:System.Windows.Application.Startup" /> event. + /// </summary> + /// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param> + protected override void OnStartup(StartupEventArgs e) { - base.OnSecondInstanceLaunched(args); + bool createdNew; + SingleInstanceMutex = new Mutex(true, @"Local\" + GetType().Assembly.GetName().Name, out createdNew); + if (!createdNew) + { + SingleInstanceMutex = null; + Shutdown(); + return; + } - OpenDashboard(); - InitializeComponent(); + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + LoadKernel(); + + SystemEvents.SessionEnding += SystemEvents_SessionEnding; + } + + /// <summary> + /// Handles the UnhandledException event of the CurrentDomain control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="UnhandledExceptionEventArgs" /> instance containing the event data.</param> + void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + var exception = (Exception)e.ExceptionObject; + + Logger.ErrorException("UnhandledException", exception); + + MessageBox.Show("Unhandled exception: " + exception.Message); + } + + /// <summary> + /// Handles the SessionEnding event of the SystemEvents control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="SessionEndingEventArgs" /> instance containing the event data.</param> + void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) + { + // Try to shut down gracefully + Shutdown(); + } + + /// <summary> + /// Loads the kernel. + /// </summary> + protected async void LoadKernel() + { + Kernel = new Kernel(this, new PismoIsoManager(Logger), new DotNetZipClient(), new BdInfoExaminer(), Logger); + + try + { + new MainWindow(Logger).Show(); + + var now = DateTime.UtcNow; + + await Kernel.Init(); + + var done = (DateTime.UtcNow - now); + Logger.Info("Kernel.Init completed in {0}{1} minutes and {2} seconds.", done.Hours > 0 ? done.Hours + " Hours " : "", done.Minutes, done.Seconds); + + await OnKernelLoaded(); + } + catch (Exception ex) + { + Logger.ErrorException("Error launching application", ex); + + MessageBox.Show("There was an error launching Media Browser: " + ex.Message); + + // Shutdown the app with an error code + Shutdown(1); + } + } + + /// <summary> + /// Called when [kernel loaded]. + /// </summary> + /// <returns>Task.</returns> + protected Task OnKernelLoaded() + { + return Task.Run(() => + { + Kernel.ConfigurationUpdated += Kernel_ConfigurationUpdated; + + ConfigureClickOnceStartup(); + }); + } + + /// <summary> + /// Handles the ConfigurationUpdated event of the Kernel control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> + void Kernel_ConfigurationUpdated(object sender, EventArgs e) + { + if (!LastRunAtStartupValue.HasValue || LastRunAtStartupValue.Value != Kernel.Configuration.RunAtStartup) + { + ConfigureClickOnceStartup(); + } + } + + /// <summary> + /// Configures the click once startup. + /// </summary> + private void ConfigureClickOnceStartup() + { + if (!ApplicationDeployment.IsNetworkDeployed) + { + return; + } + + try + { + var clickOnceHelper = new ClickOnceHelper(PublisherName, ProductName, SuiteName); + + if (Kernel.Configuration.RunAtStartup) + { + clickOnceHelper.UpdateUninstallParameters(UninstallerFileName); + clickOnceHelper.AddShortcutToStartup(); + } + else + { + clickOnceHelper.RemoveShortcutFromStartup(); + } + + LastRunAtStartupValue = Kernel.Configuration.RunAtStartup; + } + catch (Exception ex) + { + Logger.ErrorException("Error configuring ClickOnce", ex); + } + } + + /// <summary> + /// Raises the <see cref="E:System.Windows.Application.Exit" /> event. + /// </summary> + /// <param name="e">An <see cref="T:System.Windows.ExitEventArgs" /> that contains the event data.</param> + protected override void OnExit(ExitEventArgs e) + { + ReleaseMutex(); + + base.OnExit(e); + + Kernel.Dispose(); + } + + /// <summary> + /// Releases the mutex. + /// </summary> + private void ReleaseMutex() + { + if (SingleInstanceMutex == null) + { + return; + } + + SingleInstanceMutex.ReleaseMutex(); + SingleInstanceMutex.Close(); + SingleInstanceMutex.Dispose(); + SingleInstanceMutex = null; } /// <summary> @@ -179,21 +369,105 @@ namespace MediaBrowser.ServerApplication } /// <summary> - /// Instantiates the kernel. + /// Restarts this instance. + /// </summary> + /// <exception cref="System.NotImplementedException"></exception> + public void Restart() + { + Dispatcher.Invoke(ReleaseMutex); + + Kernel.Dispose(); + + System.Windows.Forms.Application.Restart(); + + Dispatcher.Invoke(Shutdown); + } + + /// <summary> + /// Reloads the logger. + /// </summary> + /// <exception cref="System.NotImplementedException"></exception> + public void ReloadLogger() + { + LogFilePath = Path.Combine(Kernel.ApplicationPaths.LogDirectoryPath, "Server-" + DateTime.Now.Ticks + ".log"); + + NlogManager.AddFileTarget(LogFilePath, Kernel.Configuration.EnableDebugLevelLogging); + } + + /// <summary> + /// Gets the image. + /// </summary> + /// <param name="uri">The URI.</param> + /// <returns>Image.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public Image GetImage(string uri) + { + if (string.IsNullOrEmpty(uri)) + { + throw new ArgumentNullException("uri"); + } + + return GetImage(new Uri(uri)); + } + + /// <summary> + /// Gets the image. + /// </summary> + /// <param name="uri">The URI.</param> + /// <returns>Image.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public Image GetImage(Uri uri) + { + if (uri == null) + { + throw new ArgumentNullException("uri"); + } + + return new Image { Source = GetBitmapImage(uri) }; + } + + /// <summary> + /// Gets the bitmap image. /// </summary> - /// <returns>IKernel.</returns> - protected override IKernel InstantiateKernel() + /// <param name="uri">The URI.</param> + /// <returns>BitmapImage.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public BitmapImage GetBitmapImage(string uri) { - return new Kernel(new PismoIsoManager(Logger), new DotNetZipClient(), new BdInfoExaminer(), Logger); + if (string.IsNullOrEmpty(uri)) + { + throw new ArgumentNullException("uri"); + } + + return GetBitmapImage(new Uri(uri)); } /// <summary> - /// Instantiates the main window. + /// Gets the bitmap image. /// </summary> - /// <returns>Window.</returns> - protected override Window InstantiateMainWindow() + /// <param name="uri">The URI.</param> + /// <returns>BitmapImage.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public BitmapImage GetBitmapImage(Uri uri) { - return new MainWindow(Logger); + if (uri == null) + { + throw new ArgumentNullException("uri"); + } + + var bitmap = new BitmapImage + { + CreateOptions = BitmapCreateOptions.DelayCreation, + CacheOption = BitmapCacheOption.OnDemand, + UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable) + }; + + bitmap.BeginInit(); + bitmap.UriSource = uri; + bitmap.EndInit(); + + RenderOptions.SetBitmapScalingMode(bitmap, BitmapScalingMode.Fant); + return bitmap; } } } diff --git a/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs b/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs index 312e70e66..5dceba994 100644 --- a/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs +++ b/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.ServerApplication/Controls/MultiItemUpdateNotification.xaml.cs b/MediaBrowser.ServerApplication/Controls/MultiItemUpdateNotification.xaml.cs index bab1958fd..9d58c0227 100644 --- a/MediaBrowser.ServerApplication/Controls/MultiItemUpdateNotification.xaml.cs +++ b/MediaBrowser.ServerApplication/Controls/MultiItemUpdateNotification.xaml.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; diff --git a/MediaBrowser.Common/Logging/LogWindow.xaml b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml index 726d3c968..d50b55454 100644 --- a/MediaBrowser.Common/Logging/LogWindow.xaml +++ b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml @@ -1,4 +1,4 @@ -<Window x:Class="MediaBrowser.Common.Logging.LogWindow" +<Window x:Class="MediaBrowser.ServerApplication.Logging.LogWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Media Browser Log" Height="300" Width="968"> diff --git a/MediaBrowser.Common/Logging/LogWindow.xaml.cs b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs index 3dc11db5b..fca978486 100644 --- a/MediaBrowser.Common/Logging/LogWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/Logging/LogWindow.xaml.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows; -namespace MediaBrowser.Common.Logging +namespace MediaBrowser.ServerApplication.Logging { /// <summary> /// Interaction logic for LogWindow.xaml diff --git a/MediaBrowser.Common/Logging/WindowTraceListener.cs b/MediaBrowser.ServerApplication/Logging/WindowTraceListener.cs index 046dedf86..10d6ef812 100644 --- a/MediaBrowser.Common/Logging/WindowTraceListener.cs +++ b/MediaBrowser.ServerApplication/Logging/WindowTraceListener.cs @@ -1,6 +1,6 @@ using System.Diagnostics; -namespace MediaBrowser.Common.Logging +namespace MediaBrowser.ServerApplication.Logging { /// <summary> /// Class WindowTraceListener diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index e020aebf7..8a312e7ef 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -1,9 +1,9 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Controller; +using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using MediaBrowser.ServerApplication.Controls; +using MediaBrowser.ServerApplication.Logging; using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index a5be8d687..ff8be69e4 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -120,6 +120,10 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath> </Reference> + <Reference Include="NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath> + </Reference> <Reference Include="Platinum.Managed, Version=1.0.4794.22684, Culture=neutral, processorArchitecture=x86"> <SpecificVersion>False</SpecificVersion> <HintPath>..\ThirdParty\UPnP\Libs\Platinum.Managed.dll</HintPath> @@ -134,9 +138,11 @@ <Reference Include="System.Data.SQLite.Linq"> <HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath> </Reference> + <Reference Include="System.Deployment" /> <Reference Include="System.Drawing" /> <Reference Include="System.Runtime.Remoting" /> <Reference Include="System.Web.Extensions" /> + <Reference Include="System.Windows.Forms" /> <Reference Include="System.Xml" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Core" /> @@ -166,6 +172,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Logging\LogWindow.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </Page> <Page Include="MainWindow.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> @@ -185,6 +195,10 @@ <Compile Include="LibraryExplorer.xaml.cs"> <DependentUpon>LibraryExplorer.xaml</DependentUpon> </Compile> + <Compile Include="Logging\LogWindow.xaml.cs"> + <DependentUpon>LogWindow.xaml</DependentUpon> + </Compile> + <Compile Include="Logging\WindowTraceListener.cs" /> <Compile Include="MainWindow.xaml.cs"> <DependentUpon>MainWindow.xaml</DependentUpon> <SubType>Code</SubType> @@ -238,6 +252,10 @@ <Project>{5356ae30-6a6e-4a64-81e3-f76c50595e64}</Project> <Name>MediaBrowser.IsoMounter</Name> </ProjectReference> + <ProjectReference Include="..\MediaBrowser.Logging.NLog\MediaBrowser.Logging.NLog.csproj"> + <Project>{67310740-0ec4-4dc2-9921-33df38b20167}</Project> + <Name>MediaBrowser.Logging.NLog</Name> + </ProjectReference> <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> <Name>MediaBrowser.Model</Name> diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication_TemporaryKey.pfx b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication_TemporaryKey.pfx Binary files differnew file mode 100644 index 000000000..64676b054 --- /dev/null +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication_TemporaryKey.pfx diff --git a/MediaBrowser.ServerApplication/packages.config b/MediaBrowser.ServerApplication/packages.config index c1e5c8098..c9cf3ee00 100644 --- a/MediaBrowser.ServerApplication/packages.config +++ b/MediaBrowser.ServerApplication/packages.config @@ -2,5 +2,6 @@ <packages> <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" /> <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" /> + <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.UI.Uninstall/MediaBrowser.UI.Uninstall.csproj b/MediaBrowser.UI.Uninstall/MediaBrowser.UI.Uninstall.csproj index c7c7b4644..060d86d8e 100644 --- a/MediaBrowser.UI.Uninstall/MediaBrowser.UI.Uninstall.csproj +++ b/MediaBrowser.UI.Uninstall/MediaBrowser.UI.Uninstall.csproj @@ -44,9 +44,6 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> - <Compile Include="..\MediaBrowser.Common\Updates\ClickOnceHelper.cs"> - <Link>ClickOnceHelper.cs</Link> - </Compile> <Compile Include="Globals.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> @@ -54,6 +51,12 @@ <ItemGroup> <None Include="App.config" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> + <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> + <Name>MediaBrowser.Common</Name> + </ProjectReference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/MediaBrowser.UI.sln b/MediaBrowser.UI.sln index 2c8e43133..8f4f3145a 100644 --- a/MediaBrowser.UI.sln +++ b/MediaBrowser.UI.sln @@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.IsoMounter", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.UI.Controls", "MediaBrowser.UI.Controls\MediaBrowser.UI.Controls.csproj", "{1ADFE460-FD95-46FA-8871-CCCB4B62E2E8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Logging.NLog", "MediaBrowser.Logging.NLog\MediaBrowser.Logging.NLog.csproj", "{67310740-0EC4-4DC2-9921-33DF38B20167}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -143,6 +145,16 @@ Global {1ADFE460-FD95-46FA-8871-CCCB4B62E2E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1ADFE460-FD95-46FA-8871-CCCB4B62E2E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1ADFE460-FD95-46FA-8871-CCCB4B62E2E8}.Release|x86.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|x86.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Any CPU.Build.0 = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MediaBrowser.UI/App.xaml b/MediaBrowser.UI/App.xaml index c7087d2be..d8d7a8037 100644 --- a/MediaBrowser.UI/App.xaml +++ b/MediaBrowser.UI/App.xaml @@ -1,7 +1,6 @@ -<z:BaseApplication x:Class="MediaBrowser.UI.App" +<Application x:Class="MediaBrowser.UI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:z="clr-namespace:MediaBrowser.Common.UI;assembly=MediaBrowser.Common"> + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> @@ -13,4 +12,4 @@ </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> -</z:BaseApplication>
\ No newline at end of file +</Application>
\ No newline at end of file diff --git a/MediaBrowser.UI/App.xaml.cs b/MediaBrowser.UI/App.xaml.cs index c4a99c1a8..5867f1119 100644 --- a/MediaBrowser.UI/App.xaml.cs +++ b/MediaBrowser.UI/App.xaml.cs @@ -1,10 +1,13 @@ -using MediaBrowser.ApiInteraction; +using System.Deployment.Application; +using System.Net.Cache; +using System.Windows.Media; +using MediaBrowser.ApiInteraction; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; -using MediaBrowser.Common.UI; +using MediaBrowser.Common.Updates; using MediaBrowser.IsoMounter; +using MediaBrowser.Logging.Nlog; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; @@ -24,15 +27,22 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; +using Microsoft.Win32; namespace MediaBrowser.UI { /// <summary> /// Interaction logic for App.xaml /// </summary> - public partial class App : BaseApplication, IApplication + public partial class App : Application, IApplicationHost { /// <summary> + /// Gets or sets a value indicating whether [last run at startup value]. + /// </summary> + /// <value><c>null</c> if [last run at startup value] contains no value, <c>true</c> if [last run at startup value]; otherwise, <c>false</c>.</value> + private bool? LastRunAtStartupValue { get; set; } + + /// <summary> /// Gets or sets the clock timer. /// </summary> /// <value>The clock timer.</value> @@ -44,10 +54,38 @@ namespace MediaBrowser.UI private Timer ServerConfigurationTimer { get; set; } /// <summary> + /// The single instance mutex + /// </summary> + private Mutex SingleInstanceMutex; + + /// <summary> + /// Gets or sets the kernel. + /// </summary> + /// <value>The kernel.</value> + protected IKernel Kernel { get; set; } + + /// <summary> + /// Gets or sets the logger. + /// </summary> + /// <value>The logger.</value> + protected ILogger Logger { get; set; } + + /// <summary> + /// Gets or sets the log file path. + /// </summary> + /// <value>The log file path.</value> + private string LogFilePath { get; set; } + + /// <summary> + /// Occurs when [property changed]. + /// </summary> + public event PropertyChangedEventHandler PropertyChanged; + + /// <summary> /// Gets the name of the product. /// </summary> /// <value>The name of the product.</value> - protected override string ProductName + protected string ProductName { get { return Globals.ProductName; } } @@ -56,7 +94,7 @@ namespace MediaBrowser.UI /// Gets the name of the publisher. /// </summary> /// <value>The name of the publisher.</value> - protected override string PublisherName + protected string PublisherName { get { return Globals.PublisherName; } } @@ -65,7 +103,7 @@ namespace MediaBrowser.UI /// Gets the name of the suite. /// </summary> /// <value>The name of the suite.</value> - protected override string SuiteName + protected string SuiteName { get { return Globals.SuiteName; } } @@ -74,7 +112,7 @@ namespace MediaBrowser.UI /// Gets the name of the uninstaller file. /// </summary> /// <value>The name of the uninstaller file.</value> - protected override string UninstallerFileName + protected string UninstallerFileName { get { return "MediaBrowser.UI.Uninstall.exe"; } } @@ -236,7 +274,7 @@ namespace MediaBrowser.UI [STAThread] public static void Main() { - var application = new App(LogManager.GetLogger("App")); + var application = new App(new NLogger("App")); application.InitializeComponent(); application.Run(); @@ -247,25 +285,26 @@ namespace MediaBrowser.UI /// </summary> /// <param name="logger">The logger.</param> public App(ILogger logger) - : base(logger) { + Logger = logger; + InitializeComponent(); } /// <summary> /// Instantiates the kernel. /// </summary> /// <returns>IKernel.</returns> - protected override IKernel InstantiateKernel() + protected IKernel InstantiateKernel() { - return new UIKernel(new PismoIsoManager(Logger), Logger); + return new UIKernel(this, new PismoIsoManager(Logger), Logger); } /// <summary> /// Instantiates the main window. /// </summary> /// <returns>Window.</returns> - protected override Window InstantiateMainWindow() + protected Window InstantiateMainWindow() { HiddenWindow = new HiddenWindow { }; @@ -361,7 +400,7 @@ namespace MediaBrowser.UI /// <summary> /// Loads the kernel. /// </summary> - protected override async void LoadKernel() + protected async void LoadKernel() { // Without this the app will shutdown after the splash screen closes ShutdownMode = ShutdownMode.OnExplicitShutdown; @@ -378,7 +417,7 @@ namespace MediaBrowser.UI ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose; - await OnKernelLoaded(); + OnKernelLoaded(); InstantiateMainWindow().Show(); @@ -401,9 +440,11 @@ namespace MediaBrowser.UI /// Called when [kernel loaded]. /// </summary> /// <returns>Task.</returns> - protected override async Task OnKernelLoaded() + protected void OnKernelLoaded() { - await base.OnKernelLoaded().ConfigureAwait(false); + Kernel.ConfigurationUpdated += Kernel_ConfigurationUpdated; + + ConfigureClickOnceStartup(); PropertyChanged += AppPropertyChanged; @@ -422,6 +463,71 @@ namespace MediaBrowser.UI } /// <summary> + /// Raises the <see cref="E:System.Windows.Application.Startup" /> event. + /// </summary> + /// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param> + protected override void OnStartup(StartupEventArgs e) + { + bool createdNew; + SingleInstanceMutex = new Mutex(true, @"Local\" + GetType().Assembly.GetName().Name, out createdNew); + if (!createdNew) + { + SingleInstanceMutex = null; + Shutdown(); + return; + } + + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + LoadKernel(); + + SystemEvents.SessionEnding += SystemEvents_SessionEnding; + } + + /// <summary> + /// Handles the UnhandledException event of the CurrentDomain control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="UnhandledExceptionEventArgs" /> instance containing the event data.</param> + void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + var exception = (Exception)e.ExceptionObject; + + Logger.ErrorException("UnhandledException", exception); + + MessageBox.Show("Unhandled exception: " + exception.Message); + } + + /// <summary> + /// Called when [property changed]. + /// </summary> + /// <param name="info">The info.</param> + public void OnPropertyChanged(String info) + { + if (PropertyChanged != null) + { + try + { + PropertyChanged(this, new PropertyChangedEventArgs(info)); + } + catch (Exception ex) + { + Logger.ErrorException("Error in event handler", ex); + } + } + } + + /// <summary> + /// Handles the SessionEnding event of the SystemEvents control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="SessionEndingEventArgs" /> instance containing the event data.</param> + void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) + { + // Try to shut down gracefully + Shutdown(); + } + + /// <summary> /// Raises the <see cref="E:System.Windows.Application.Exit" /> event. /// </summary> /// <param name="e">An <see cref="T:System.Windows.ExitEventArgs" /> that contains the event data.</param> @@ -441,10 +547,30 @@ namespace MediaBrowser.UI UIKernel.Instance.SaveConfiguration(); } + ReleaseMutex(); + base.OnExit(e); + + Kernel.Dispose(); } /// <summary> + /// Releases the mutex. + /// </summary> + private void ReleaseMutex() + { + if (SingleInstanceMutex == null) + { + return; + } + + SingleInstanceMutex.ReleaseMutex(); + SingleInstanceMutex.Close(); + SingleInstanceMutex.Dispose(); + SingleInstanceMutex = null; + } + + /// <summary> /// Apps the property changed. /// </summary> /// <param name="sender">The sender.</param> @@ -771,5 +897,112 @@ namespace MediaBrowser.UI return bitmapImage; } } + + /// <summary> + /// Handles the ConfigurationUpdated event of the Kernel control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> + void Kernel_ConfigurationUpdated(object sender, EventArgs e) + { + if (!LastRunAtStartupValue.HasValue || LastRunAtStartupValue.Value != Kernel.Configuration.RunAtStartup) + { + ConfigureClickOnceStartup(); + } + } + + /// <summary> + /// Configures the click once startup. + /// </summary> + private void ConfigureClickOnceStartup() + { + if (!ApplicationDeployment.IsNetworkDeployed) + { + return; + } + + try + { + var clickOnceHelper = new ClickOnceHelper(PublisherName, ProductName, SuiteName); + + if (Kernel.Configuration.RunAtStartup) + { + clickOnceHelper.UpdateUninstallParameters(UninstallerFileName); + clickOnceHelper.AddShortcutToStartup(); + } + else + { + clickOnceHelper.RemoveShortcutFromStartup(); + } + + LastRunAtStartupValue = Kernel.Configuration.RunAtStartup; + } + catch (Exception ex) + { + Logger.ErrorException("Error configuring ClickOnce", ex); + } + } + + public void Restart() + { + Dispatcher.Invoke(ReleaseMutex); + + Kernel.Dispose(); + + System.Windows.Forms.Application.Restart(); + + Dispatcher.Invoke(Shutdown); + } + + public void ReloadLogger() + { + LogFilePath = Path.Combine(Kernel.ApplicationPaths.LogDirectoryPath, "Server-" + DateTime.Now.Ticks + ".log"); + + NlogManager.AddFileTarget(LogFilePath, Kernel.Configuration.EnableDebugLevelLogging); + } + + /// <summary> + /// Gets the bitmap image. + /// </summary> + /// <param name="uri">The URI.</param> + /// <returns>BitmapImage.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public BitmapImage GetBitmapImage(string uri) + { + if (string.IsNullOrEmpty(uri)) + { + throw new ArgumentNullException("uri"); + } + + return GetBitmapImage(new Uri(uri)); + } + + /// <summary> + /// Gets the bitmap image. + /// </summary> + /// <param name="uri">The URI.</param> + /// <returns>BitmapImage.</returns> + /// <exception cref="System.ArgumentNullException">uri</exception> + public BitmapImage GetBitmapImage(Uri uri) + { + if (uri == null) + { + throw new ArgumentNullException("uri"); + } + + var bitmap = new BitmapImage + { + CreateOptions = BitmapCreateOptions.DelayCreation, + CacheOption = BitmapCacheOption.OnDemand, + UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable) + }; + + bitmap.BeginInit(); + bitmap.UriSource = uri; + bitmap.EndInit(); + + RenderOptions.SetBitmapScalingMode(bitmap, BitmapScalingMode.Fant); + return bitmap; + } } } diff --git a/MediaBrowser.UI/Controller/UIKernel.cs b/MediaBrowser.UI/Controller/UIKernel.cs index e90599934..1bed49cf9 100644 --- a/MediaBrowser.UI/Controller/UIKernel.cs +++ b/MediaBrowser.UI/Controller/UIKernel.cs @@ -1,7 +1,6 @@ using MediaBrowser.ApiInteraction; using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; @@ -10,13 +9,9 @@ using MediaBrowser.UI.Playback; using System; using System.Collections.Generic; using System.ComponentModel.Composition; -using System.Diagnostics; -using System.IO; -using System.Linq; using System.Net; using System.Net.Cache; using System.Net.Http; -using System.Reflection; using System.Threading.Tasks; namespace MediaBrowser.UI.Controller @@ -47,8 +42,8 @@ namespace MediaBrowser.UI.Controller /// <summary> /// Initializes a new instance of the <see cref="UIKernel" /> class. /// </summary> - public UIKernel(IIsoManager isoManager, ILogger logger) - : base(isoManager, logger) + public UIKernel(IApplicationHost appHost, IIsoManager isoManager, ILogger logger) + : base(appHost, isoManager, logger) { Instance = this; } @@ -122,9 +117,7 @@ namespace MediaBrowser.UI.Controller { DisposeApiClient(); - var logger = LogManager.GetLogger("ApiClient"); - - ApiClient = new ApiClient(logger, new AsyncHttpClient(new WebRequestHandler + ApiClient = new ApiClient(Logger, new AsyncHttpClient(new WebRequestHandler { AutomaticDecompression = DecompressionMethods.Deflate, CachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate) diff --git a/MediaBrowser.UI/ImageViewerWindow.xaml.cs b/MediaBrowser.UI/ImageViewerWindow.xaml.cs index df2066800..a8baa3e9f 100644 --- a/MediaBrowser.UI/ImageViewerWindow.xaml.cs +++ b/MediaBrowser.UI/ImageViewerWindow.xaml.cs @@ -35,7 +35,7 @@ namespace MediaBrowser.UI { base.OnLoaded(); - Image.Source = App.Instance.GetBitmapImage(Images.First().Item1); + //Image.Source = App.Instance.GetBitmapImage(Images.First().Item1); } } } diff --git a/MediaBrowser.UI/MainWindow.xaml.cs b/MediaBrowser.UI/MainWindow.xaml.cs index 0ec60217d..bc12b92e5 100644 --- a/MediaBrowser.UI/MainWindow.xaml.cs +++ b/MediaBrowser.UI/MainWindow.xaml.cs @@ -1,12 +1,10 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using MediaBrowser.UI.Controller; using MediaBrowser.UI.Controls; using System; -using System.ComponentModel; using System.Linq; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.UI/MediaBrowser.UI.csproj b/MediaBrowser.UI/MediaBrowser.UI.csproj index 8d6432ebb..a8d7c9b4c 100644 --- a/MediaBrowser.UI/MediaBrowser.UI.csproj +++ b/MediaBrowser.UI/MediaBrowser.UI.csproj @@ -116,6 +116,7 @@ <Reference Include="System" /> <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Data" /> + <Reference Include="System.Deployment" /> <Reference Include="System.Drawing" /> <Reference Include="System.Net" /> <Reference Include="System.Net.Http" /> @@ -307,6 +308,10 @@ <Project>{5356ae30-6a6e-4a64-81e3-f76c50595e64}</Project> <Name>MediaBrowser.IsoMounter</Name> </ProjectReference> + <ProjectReference Include="..\MediaBrowser.Logging.NLog\MediaBrowser.Logging.NLog.csproj"> + <Project>{67310740-0ec4-4dc2-9921-33df38b20167}</Project> + <Name>MediaBrowser.Logging.NLog</Name> + </ProjectReference> <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> <Name>MediaBrowser.Model</Name> diff --git a/MediaBrowser.UI/MediaBrowser.UI_TemporaryKey.pfx b/MediaBrowser.UI/MediaBrowser.UI_TemporaryKey.pfx Binary files differnew file mode 100644 index 000000000..8a983ab8c --- /dev/null +++ b/MediaBrowser.UI/MediaBrowser.UI_TemporaryKey.pfx diff --git a/MediaBrowser.UI/Playback/BaseMediaPlayer.cs b/MediaBrowser.UI/Playback/BaseMediaPlayer.cs index f635b474d..6e3324b05 100644 --- a/MediaBrowser.UI/Playback/BaseMediaPlayer.cs +++ b/MediaBrowser.UI/Playback/BaseMediaPlayer.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Events; -using MediaBrowser.Common.Logging; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; @@ -212,9 +211,9 @@ namespace MediaBrowser.UI.Playback /// <summary> /// Initializes a new instance of the <see cref="BaseMediaPlayer" /> class. /// </summary> - protected BaseMediaPlayer() + protected BaseMediaPlayer(ILogger logger) { - Logger = LogManager.GetLogger(GetType().Name); + Logger = logger; } /// <summary> diff --git a/MediaBrowser.UI/Playback/ExternalPlayer/BaseExternalPlayer.cs b/MediaBrowser.UI/Playback/ExternalPlayer/BaseExternalPlayer.cs index 0b05a6482..c50911d71 100644 --- a/MediaBrowser.UI/Playback/ExternalPlayer/BaseExternalPlayer.cs +++ b/MediaBrowser.UI/Playback/ExternalPlayer/BaseExternalPlayer.cs @@ -1,5 +1,5 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Logging; using MediaBrowser.UI.Configuration; using MediaBrowser.UI.UserInput; using System; @@ -16,6 +16,10 @@ namespace MediaBrowser.UI.Playback.ExternalPlayer /// </summary> public abstract class BaseExternalPlayer : BaseMediaPlayer { + protected BaseExternalPlayer(ILogger logger) : base(logger) + { + } + /// <summary> /// Gets a value indicating whether this instance can mute. /// </summary> diff --git a/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs b/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs index 0144ce47a..3efb28d22 100644 --- a/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs +++ b/MediaBrowser.UI/Playback/ExternalPlayer/GenericExternalPlayer.cs @@ -1,5 +1,6 @@ using MediaBrowser.Model.Dto; using System.ComponentModel.Composition; +using MediaBrowser.Model.Logging; namespace MediaBrowser.UI.Playback.ExternalPlayer { @@ -9,6 +10,12 @@ namespace MediaBrowser.UI.Playback.ExternalPlayer [Export(typeof(BaseMediaPlayer))] public class GenericExternalPlayer : BaseExternalPlayer { + [ImportingConstructor] + public GenericExternalPlayer([Import("logger")] ILogger logger) + : base(logger) + { + } + /// <summary> /// Gets the name. /// </summary> diff --git a/MediaBrowser.UI/Playback/InternalPlayer/BaseInternalMediaPlayer.cs b/MediaBrowser.UI/Playback/InternalPlayer/BaseInternalMediaPlayer.cs index 2ff17b789..e9178d3f5 100644 --- a/MediaBrowser.UI/Playback/InternalPlayer/BaseInternalMediaPlayer.cs +++ b/MediaBrowser.UI/Playback/InternalPlayer/BaseInternalMediaPlayer.cs @@ -1,4 +1,5 @@ using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Logging; using MediaBrowser.UI.Configuration; using System.Collections.Generic; using System.Windows; @@ -10,6 +11,10 @@ namespace MediaBrowser.UI.Playback.InternalPlayer /// </summary> public abstract class BaseInternalMediaPlayer : BaseMediaPlayer { + protected BaseInternalMediaPlayer(ILogger logger) : base(logger) + { + } + /// <summary> /// Ensures the media player created. /// </summary> diff --git a/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs b/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs index 08c9acfcb..7233eb64f 100644 --- a/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs +++ b/MediaBrowser.UI/Playback/NVlc/InternalMediaPlayerNVlc.cs @@ -1,20 +1,20 @@ -using System.IO; -using Declarations.Events; +using Declarations.Events; using Declarations.Media; using Declarations.Players; using Implementation; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using MediaBrowser.UI.Configuration; using MediaBrowser.UI.Playback.InternalPlayer; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Drawing; +using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; -using MediaState = Declarations.MediaState; namespace MediaBrowser.UI.Playback.NVlc { @@ -24,6 +24,12 @@ namespace MediaBrowser.UI.Playback.NVlc [Export(typeof(BaseMediaPlayer))] public class InternalMediaPlayerNVlc : BaseInternalMediaPlayer { + [ImportingConstructor] + public InternalMediaPlayerNVlc([Import("logger")] ILogger logger) + : base(logger) + { + } + /// <summary> /// Gets or sets the media player factory. /// </summary> diff --git a/MediaBrowser.UI/ViewModels/DtoBaseItemViewModel.cs b/MediaBrowser.UI/ViewModels/DtoBaseItemViewModel.cs index 5f28bdc18..f8194e04b 100644 --- a/MediaBrowser.UI/ViewModels/DtoBaseItemViewModel.cs +++ b/MediaBrowser.UI/ViewModels/DtoBaseItemViewModel.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Logging; -using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.UI.Pages; using System; diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs index b2d4f353e..2dcb5e57e 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs @@ -39,7 +39,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>Task{IEnumerable{TaskInfo}}.</returns> protected override Task<DashboardInfo> GetDataToSend(object state) { - return Task.FromResult(DashboardService.GetDashboardInfo((Kernel)Kernel)); + return Task.FromResult(DashboardService.GetDashboardInfo((Kernel)Kernel, Logger)); } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 50472423e..41bde3c7f 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -5,6 +5,7 @@ using MediaBrowser.Common.ScheduledTasks.Tasks; using MediaBrowser.Controller; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using ServiceStack.ServiceHost; using ServiceStack.WebHost.Endpoints; @@ -97,18 +98,21 @@ namespace MediaBrowser.WebDashboard.Api { var kernel = (Kernel)Kernel; - return GetDashboardInfo(kernel); + return GetDashboardInfo(kernel, Logger); } /// <summary> /// Gets the dashboard info. /// </summary> /// <param name="kernel">The kernel.</param> + /// <param name="logger">The logger.</param> /// <returns>DashboardInfo.</returns> - public static DashboardInfo GetDashboardInfo(Kernel kernel) + public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger) { var connections = kernel.UserManager.ActiveConnections.ToArray(); + var dtoBuilder = new DtoBuilder(logger); + return new DashboardInfo { SystemInfo = kernel.GetSystemInfo(), @@ -121,7 +125,7 @@ namespace MediaBrowser.WebDashboard.Api ActiveConnections = connections, - Users = kernel.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(DtoBuilder.GetDtoUser).ToArray() + Users = kernel.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(dtoBuilder.GetDtoUser).ToArray() }; } diff --git a/MediaBrowser.sln b/MediaBrowser.sln index f9d2816af..a9fae4edb 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -49,6 +49,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Server.Sqlite" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Server.WorldWeatherOnline", "MediaBrowser.Server.WorldWeatherOnline\MediaBrowser.Server.WorldWeatherOnline.csproj", "{973CA45C-8362-490B-8327-C68098FD4891}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Logging.NLog", "MediaBrowser.Logging.NLog\MediaBrowser.Logging.NLog.csproj", "{67310740-0EC4-4DC2-9921-33DF38B20167}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -319,6 +321,20 @@ Global {973CA45C-8362-490B-8327-C68098FD4891}.Release|Win32.ActiveCfg = Release|Any CPU {973CA45C-8362-490B-8327-C68098FD4891}.Release|x64.ActiveCfg = Release|Any CPU {973CA45C-8362-490B-8327-C68098FD4891}.Release|x86.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|Win32.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|x64.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Debug|x86.ActiveCfg = Debug|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Any CPU.Build.0 = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|Win32.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|x64.ActiveCfg = Release|Any CPU + {67310740-0EC4-4DC2-9921-33DF38B20167}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |
