diff --git a/Emby.Common.Implementations/BaseApplicationHost.cs b/Emby.Common.Implementations/BaseApplicationHost.cs index 897557efd3..e1f7ef08aa 100644 --- a/Emby.Common.Implementations/BaseApplicationHost.cs +++ b/Emby.Common.Implementations/BaseApplicationHost.cs @@ -549,6 +549,8 @@ return null; TimerFactory = new TimerFactory(); RegisterSingleInstance(TimerFactory); + RegisterSingleInstance(CryptographyProvider); + return Task.FromResult(true); } diff --git a/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs b/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs index 5ece28dc67..7b8d95b96c 100644 --- a/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs +++ b/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs @@ -19,6 +19,15 @@ namespace Emby.Common.Implementations.Cryptography return provider.ComputeHash(Encoding.Unicode.GetBytes(str)); } } + + public byte[] GetSHA1Bytes(byte[] bytes) + { + using (var provider = SHA1.Create()) + { + return provider.ComputeHash(bytes); + } + } + public byte[] GetMD5Bytes(Stream str) { using (var provider = MD5.Create()) @@ -26,5 +35,13 @@ namespace Emby.Common.Implementations.Cryptography return provider.ComputeHash(str); } } + + public byte[] GetMD5Bytes(byte[] bytes) + { + using (var provider = MD5.Create()) + { + return provider.ComputeHash(bytes); + } + } } } diff --git a/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs index 4c034fa6aa..85fcb556f0 100644 --- a/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -169,9 +169,23 @@ namespace Emby.Common.Implementations.HttpClientManager AddRequestHeaders(httpWebRequest, options); #if NET46 - httpWebRequest.AutomaticDecompression = options.EnableHttpCompression ? - (options.DecompressionMethod ?? DecompressionMethods.Deflate) : - DecompressionMethods.None; + if (options.EnableHttpCompression) + { + if (options.DecompressionMethod.HasValue) + { + httpWebRequest.AutomaticDecompression = options.DecompressionMethod.Value == CompressionMethod.Gzip + ? DecompressionMethods.GZip + : DecompressionMethods.Deflate; + } + else + { + httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate; + } + } + else + { + httpWebRequest.AutomaticDecompression = DecompressionMethods.None; + } #endif } diff --git a/MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs b/Emby.Common.Implementations/Reflection/AssemblyInfo.cs similarity index 63% rename from MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs rename to Emby.Common.Implementations/Reflection/AssemblyInfo.cs index ec25e7951e..820856da5f 100644 --- a/MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs +++ b/Emby.Common.Implementations/Reflection/AssemblyInfo.cs @@ -1,14 +1,18 @@ using System; using System.IO; using MediaBrowser.Model.Reflection; +using System.Reflection; -namespace MediaBrowser.Server.Implementations.Reflection +namespace Emby.Common.Implementations.Reflection { public class AssemblyInfo : IAssemblyInfo { public Stream GetManifestResourceStream(Type type, string resource) { +#if NET46 return type.Assembly.GetManifestResourceStream(resource); +#endif + return type.GetTypeInfo().Assembly.GetManifestResourceStream(resource); } } } diff --git a/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs b/Emby.Common.Implementations/TextEncoding/TextEncoding.cs similarity index 88% rename from MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs rename to Emby.Common.Implementations/TextEncoding/TextEncoding.cs index 4c047b7d5e..35b869e43b 100644 --- a/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs +++ b/Emby.Common.Implementations/TextEncoding/TextEncoding.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.TextEncoding; -namespace MediaBrowser.Server.Implementations.TextEncoding +namespace Emby.Common.Implementations.TextEncoding { public class TextEncoding : IEncoding { @@ -42,8 +42,7 @@ namespace MediaBrowser.Server.Implementations.TextEncoding if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76) return Encoding.UTF7; - // It's ok - anything aside from utf is ok since that's what we're looking for - return Encoding.Default; + return null; } } } diff --git a/MediaBrowser.Server.Implementations/Xml/XmlReaderSettingsFactory.cs b/Emby.Common.Implementations/Xml/XmlReaderSettingsFactory.cs similarity index 87% rename from MediaBrowser.Server.Implementations/Xml/XmlReaderSettingsFactory.cs rename to Emby.Common.Implementations/Xml/XmlReaderSettingsFactory.cs index ae7018ad44..806290cf44 100644 --- a/MediaBrowser.Server.Implementations/Xml/XmlReaderSettingsFactory.cs +++ b/Emby.Common.Implementations/Xml/XmlReaderSettingsFactory.cs @@ -1,7 +1,7 @@ using System.Xml; using MediaBrowser.Model.Xml; -namespace MediaBrowser.Server.Implementations.Xml +namespace Emby.Common.Implementations.Xml { public class XmlReaderSettingsFactory : IXmlReaderSettingsFactory { @@ -11,7 +11,9 @@ namespace MediaBrowser.Server.Implementations.Xml if (!enableValidation) { +#if NET46 settings.ValidationType = ValidationType.None; +#endif } return settings; diff --git a/Emby.Common.Implementations/project.json b/Emby.Common.Implementations/project.json index a65b863458..dc96f5726c 100644 --- a/Emby.Common.Implementations/project.json +++ b/Emby.Common.Implementations/project.json @@ -23,27 +23,20 @@ "System.Xml.Serialization": "4.0.0.0" }, "dependencies": { - "MediaBrowser.Common": { - "target": "project" - }, + "SimpleInjector": "3.2.4", + "NLog": "4.4.0-betaV15", "MediaBrowser.Model": { "target": "project" }, - "SimpleInjector": "3.2.4", - "NLog": "4.4.0-betaV15" - } + "MediaBrowser.Common": { + "target": "project" + } } }, "netstandard1.6": { "imports": "dnxcore50", "dependencies": { "NETStandard.Library": "1.6.0", - "MediaBrowser.Common": { - "target": "project" - }, - "MediaBrowser.Model": { - "target": "project" - }, - "System.IO.FileSystem.DriveInfo": "4.0.0", + "System.IO.FileSystem.DriveInfo": "4.0.0", "System.Diagnostics.Process": "4.1.0", "System.Threading.Timer": "4.0.1", "System.Net.Requests": "4.0.11", @@ -58,8 +51,13 @@ "System.Reflection.Primitives": "4.0.1", "System.Runtime.Loader": "4.0.0", "SimpleInjector": "3.2.4", - "NLog": "4.4.0-betaV15" - } + "NLog": "4.4.0-betaV15", + "MediaBrowser.Model": { + "target": "project" + }, + "MediaBrowser.Common": { + "target": "project" + } } } } } diff --git a/Emby.Dlna/DlnaManager.cs b/Emby.Dlna/DlnaManager.cs index c5798a5d1b..c348e658cc 100644 --- a/Emby.Dlna/DlnaManager.cs +++ b/Emby.Dlna/DlnaManager.cs @@ -560,17 +560,19 @@ namespace Emby.Dlna ? ImageFormat.Png : ImageFormat.Jpg; + var resource = GetType().Namespace + ".Images." + filename.ToLower(); + #if NET46 return new ImageStream { Format = format, - Stream = GetType().Assembly.GetManifestResourceStream("MediaBrowser.Dlna.Images." + filename.ToLower()) + Stream = GetType().Assembly.GetManifestResourceStream(resource) }; #elif NETSTANDARD1_6 return new ImageStream { Format = format, - Stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream("MediaBrowser.Dlna.Images." + filename.ToLower()) + Stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(resource) }; #endif throw new NotImplementedException(); diff --git a/Emby.Photos/Emby.Photos.csproj b/Emby.Photos/Emby.Photos.csproj index ed126a41c4..21631aeb54 100644 --- a/Emby.Photos/Emby.Photos.csproj +++ b/Emby.Photos/Emby.Photos.csproj @@ -37,6 +37,9 @@ + + Properties\SharedVersion.cs + diff --git a/Emby.Photos/Properties/AssemblyInfo.cs b/Emby.Photos/Properties/AssemblyInfo.cs index abef142ef1..49ac833457 100644 --- a/Emby.Photos/Properties/AssemblyInfo.cs +++ b/Emby.Photos/Properties/AssemblyInfo.cs @@ -31,6 +31,4 @@ using System.Runtime.InteropServices; // // 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")] +// [assembly: AssemblyVersion("1.0.*")] \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs similarity index 99% rename from MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs rename to Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs index 51f5f57b3e..11fd3a872e 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/ActivityLogEntryPoint.cs +++ b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs @@ -19,7 +19,7 @@ using System.Linq; using System.Text; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.Activity { public class ActivityLogEntryPoint : IServerEntryPoint { diff --git a/MediaBrowser.Server.Implementations/Activity/ActivityManager.cs b/Emby.Server.Implementations/Activity/ActivityManager.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Activity/ActivityManager.cs rename to Emby.Server.Implementations/Activity/ActivityManager.cs index 2af9395c37..b6095f0820 100644 --- a/MediaBrowser.Server.Implementations/Activity/ActivityManager.cs +++ b/Emby.Server.Implementations/Activity/ActivityManager.cs @@ -8,7 +8,7 @@ using System; using System.Linq; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Activity +namespace Emby.Server.Implementations.Activity { public class ActivityManager : IActivityManager { diff --git a/MediaBrowser.Server.Implementations/Branding/BrandingConfigurationFactory.cs b/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs similarity index 90% rename from MediaBrowser.Server.Implementations/Branding/BrandingConfigurationFactory.cs rename to Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs index d6cd3424b1..a29f55f168 100644 --- a/MediaBrowser.Server.Implementations/Branding/BrandingConfigurationFactory.cs +++ b/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.Branding; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Branding +namespace Emby.Server.Implementations.Branding { public class BrandingConfigurationFactory : IConfigurationFactory { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs b/Emby.Server.Implementations/Channels/ChannelConfigurations.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs rename to Emby.Server.Implementations/Channels/ChannelConfigurations.cs index 9dfb0404e0..ef0973e7f4 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs +++ b/Emby.Server.Implementations/Channels/ChannelConfigurations.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.Configuration; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public static class ChannelConfigurationExtension { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs rename to Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs index fae78b9bc0..98011ddd48 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs +++ b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelDynamicMediaSourceProvider : IMediaSourceProvider { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs b/Emby.Server.Implementations/Channels/ChannelImageProvider.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs rename to Emby.Server.Implementations/Channels/ChannelImageProvider.cs index c98f71ce2a..f892b1e620 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs +++ b/Emby.Server.Implementations/Channels/ChannelImageProvider.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelImageProvider : IDynamicImageProvider, IHasItemChangeMonitor { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Channels/ChannelManager.cs rename to Emby.Server.Implementations/Channels/ChannelManager.cs index 300973ce10..2ce880c93a 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/Emby.Server.Implementations/Channels/ChannelManager.cs @@ -31,7 +31,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelManager : IChannelManager { @@ -410,7 +410,7 @@ namespace MediaBrowser.Server.Implementations.Channels } } } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -781,7 +781,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -801,7 +801,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -943,7 +943,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -963,7 +963,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -1104,7 +1104,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -1127,7 +1127,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/Emby.Server.Implementations/Channels/ChannelPostScanTask.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs rename to Emby.Server.Implementations/Channels/ChannelPostScanTask.cs index afb842c1c9..aef06bd1d6 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/Emby.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -11,7 +11,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelPostScanTask { diff --git a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs b/Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs rename to Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs index 8bcb3cda99..d5ec86445d 100644 --- a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs +++ b/Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { class RefreshChannelsScheduledTask : IScheduledTask { diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs b/Emby.Server.Implementations/Collections/CollectionImageProvider.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs rename to Emby.Server.Implementations/Collections/CollectionImageProvider.cs index d70d4b9e65..b82d4e44e0 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs +++ b/Emby.Server.Implementations/Collections/CollectionImageProvider.cs @@ -6,16 +6,14 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using MediaBrowser.Server.Implementations.Photos; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; +using Emby.Server.Implementations.Images; using MediaBrowser.Model.IO; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Collections +namespace Emby.Server.Implementations.Collections { public class CollectionImageProvider : BaseDynamicImageProvider { diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/Emby.Server.Implementations/Collections/CollectionManager.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Collections/CollectionManager.cs rename to Emby.Server.Implementations/Collections/CollectionManager.cs index f074fd812c..d0bd76c354 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ b/Emby.Server.Implementations/Collections/CollectionManager.cs @@ -11,11 +11,9 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Collections +namespace Emby.Server.Implementations.Collections { public class CollectionManager : ICollectionManager { diff --git a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs b/Emby.Server.Implementations/Devices/DeviceManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Devices/DeviceManager.cs rename to Emby.Server.Implementations/Devices/DeviceManager.cs index e2e59df088..cdf636e22d 100644 --- a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs +++ b/Emby.Server.Implementations/Devices/DeviceManager.cs @@ -21,7 +21,7 @@ using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; -namespace MediaBrowser.Server.Implementations.Devices +namespace Emby.Server.Implementations.Devices { public class DeviceManager : IDeviceManager { diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Dto/DtoService.cs rename to Emby.Server.Implementations/Dto/DtoService.cs index a06656b211..85549439b7 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -29,7 +29,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Dto +namespace Emby.Server.Implementations.Dto { public class DtoService : IDtoService { diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj new file mode 100644 index 0000000000..7eb6a67d4a --- /dev/null +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -0,0 +1,249 @@ + + + + + 11.0 + Debug + AnyCPU + {E383961B-9356-4D5D-8233-9A1079D03055} + Library + Properties + Emby.Server.Implementations + Emby.Server.Implementations + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile7 + v4.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {9142eefa-7570-41e1-bfcc-468bb571af2f} + MediaBrowser.Common + + + {17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2} + MediaBrowser.Controller + + + {7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b} + MediaBrowser.Model + + + {442b5058-dcaf-4263-bb6a-f21e31120a1b} + MediaBrowser.Providers + + + + + \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs similarity index 90% rename from MediaBrowser.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs rename to Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs index 1067e052d9..38708648fe 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs +++ b/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs @@ -10,8 +10,9 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.LiveTv; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { public class AutomaticRestartEntryPoint : IServerEntryPoint { @@ -21,10 +22,11 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly ISessionManager _sessionManager; private readonly IServerConfigurationManager _config; private readonly ILiveTvManager _liveTvManager; + private readonly ITimerFactory _timerFactory; - private Timer _timer; + private ITimer _timer; - public AutomaticRestartEntryPoint(IServerApplicationHost appHost, ILogger logger, ITaskManager iTaskManager, ISessionManager sessionManager, IServerConfigurationManager config, ILiveTvManager liveTvManager) + public AutomaticRestartEntryPoint(IServerApplicationHost appHost, ILogger logger, ITaskManager iTaskManager, ISessionManager sessionManager, IServerConfigurationManager config, ILiveTvManager liveTvManager, ITimerFactory timerFactory) { _appHost = appHost; _logger = logger; @@ -32,6 +34,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints _sessionManager = sessionManager; _config = config; _liveTvManager = liveTvManager; + _timerFactory = timerFactory; } public void Run() @@ -48,7 +51,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints if (_appHost.HasPendingRestart) { - _timer = new Timer(TimerCallback, null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10)); + _timer = _timerFactory.Create(TimerCallback, null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10)); } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs similarity index 95% rename from MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs rename to Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs index 9f06a9860d..91142f9284 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs @@ -10,8 +10,9 @@ using System.Linq; using System.Threading; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { public class LibraryChangedNotifier : IServerEntryPoint { @@ -23,6 +24,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly ISessionManager _sessionManager; private readonly IUserManager _userManager; private readonly ILogger _logger; + private readonly ITimerFactory _timerFactory; /// /// The _library changed sync lock @@ -40,19 +42,20 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// Gets or sets the library update timer. /// /// The library update timer. - private Timer LibraryUpdateTimer { get; set; } + private ITimer LibraryUpdateTimer { get; set; } /// /// The library update duration /// private const int LibraryUpdateDuration = 5000; - public LibraryChangedNotifier(ILibraryManager libraryManager, ISessionManager sessionManager, IUserManager userManager, ILogger logger) + public LibraryChangedNotifier(ILibraryManager libraryManager, ISessionManager sessionManager, IUserManager userManager, ILogger logger, ITimerFactory timerFactory) { _libraryManager = libraryManager; _sessionManager = sessionManager; _userManager = userManager; _logger = logger; + _timerFactory = timerFactory; } public void Run() @@ -79,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (LibraryUpdateTimer == null) { - LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, + LibraryUpdateTimer = _timerFactory.Create(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite); } else @@ -112,7 +115,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (LibraryUpdateTimer == null) { - LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, + LibraryUpdateTimer = _timerFactory.Create(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite); } else @@ -140,7 +143,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (LibraryUpdateTimer == null) { - LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, + LibraryUpdateTimer = _timerFactory.Create(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite); } else diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs b/Emby.Server.Implementations/EntryPoints/LoadRegistrations.cs similarity index 81% rename from MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs rename to Emby.Server.Implementations/EntryPoints/LoadRegistrations.cs index 47f22cae6b..0203b51928 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs +++ b/Emby.Server.Implementations/EntryPoints/LoadRegistrations.cs @@ -3,9 +3,9 @@ using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; using System; using System.Threading.Tasks; -using MediaBrowser.Server.Implementations.Threading; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { /// /// Class LoadRegistrations @@ -22,16 +22,18 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// private readonly ILogger _logger; - private PeriodicTimer _timer; + private ITimer _timer; + private readonly ITimerFactory _timerFactory; /// /// Initializes a new instance of the class. /// /// The security manager. /// The log manager. - public LoadRegistrations(ISecurityManager securityManager, ILogManager logManager) + public LoadRegistrations(ISecurityManager securityManager, ILogManager logManager, ITimerFactory timerFactory) { _securityManager = securityManager; + _timerFactory = timerFactory; _logger = logManager.GetLogger("Registration Loader"); } @@ -41,7 +43,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// public void Run() { - _timer = new PeriodicTimer(s => LoadAllRegistrations(), null, TimeSpan.FromMilliseconds(100), TimeSpan.FromHours(12)); + _timer = _timerFactory.Create(s => LoadAllRegistrations(), null, TimeSpan.FromMilliseconds(100), TimeSpan.FromHours(12)); } private async Task LoadAllRegistrations() diff --git a/MediaBrowser.Server.Implementations/EntryPoints/RecordingNotifier.cs b/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs similarity index 89% rename from MediaBrowser.Server.Implementations/EntryPoints/RecordingNotifier.cs rename to Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs index 414fda400b..b674fc39bb 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/RecordingNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs @@ -7,7 +7,7 @@ using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { public class RecordingNotifier : IServerEntryPoint { @@ -32,22 +32,22 @@ namespace MediaBrowser.Server.Implementations.EntryPoints _liveTvManager.SeriesTimerCreated += _liveTvManager_SeriesTimerCreated; } - private void _liveTvManager_SeriesTimerCreated(object sender, Model.Events.GenericEventArgs e) + private void _liveTvManager_SeriesTimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs e) { SendMessage("SeriesTimerCreated", e.Argument); } - private void _liveTvManager_TimerCreated(object sender, Model.Events.GenericEventArgs e) + private void _liveTvManager_TimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs e) { SendMessage("TimerCreated", e.Argument); } - private void _liveTvManager_SeriesTimerCancelled(object sender, Model.Events.GenericEventArgs e) + private void _liveTvManager_SeriesTimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs e) { SendMessage("SeriesTimerCancelled", e.Argument); } - private void _liveTvManager_TimerCancelled(object sender, Model.Events.GenericEventArgs e) + private void _liveTvManager_TimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs e) { SendMessage("TimerCancelled", e.Argument); } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs b/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs similarity index 95% rename from MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs rename to Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs index a0b7ff515c..77de849a17 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs +++ b/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Plugins; using System.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { /// /// Class RefreshUsersMetadata diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs b/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs similarity index 99% rename from MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs rename to Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs index 0da48a2d88..4d640bc95d 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; using System.Threading; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { /// /// Class WebSocketEvents diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/UsageEntryPoint.cs similarity index 98% rename from MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs rename to Emby.Server.Implementations/EntryPoints/UsageEntryPoint.cs index d14bd43689..1b897ca299 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs +++ b/Emby.Server.Implementations/EntryPoints/UsageEntryPoint.cs @@ -12,7 +12,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { /// /// Class UsageEntryPoint diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/Emby.Server.Implementations/EntryPoints/UsageReporter.cs similarity index 98% rename from MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs rename to Emby.Server.Implementations/EntryPoints/UsageReporter.cs index e445300e4d..be848acb77 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs +++ b/Emby.Server.Implementations/EntryPoints/UsageReporter.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { public class UsageReporter { diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs similarity index 93% rename from MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs rename to Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs index 8262048b1d..b934101809 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs @@ -11,8 +11,9 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints +namespace Emby.Server.Implementations.EntryPoints { class UserDataChangeNotifier : IServerEntryPoint { @@ -22,17 +23,19 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly IUserManager _userManager; private readonly object _syncLock = new object(); - private Timer UpdateTimer { get; set; } + private ITimer UpdateTimer { get; set; } + private readonly ITimerFactory _timerFactory; private const int UpdateDuration = 500; private readonly Dictionary> _changedItems = new Dictionary>(); - public UserDataChangeNotifier(IUserDataManager userDataManager, ISessionManager sessionManager, ILogger logger, IUserManager userManager) + public UserDataChangeNotifier(IUserDataManager userDataManager, ISessionManager sessionManager, ILogger logger, IUserManager userManager, ITimerFactory timerFactory) { _userDataManager = userDataManager; _sessionManager = sessionManager; _logger = logger; _userManager = userManager; + _timerFactory = timerFactory; } public void Run() @@ -51,7 +54,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (UpdateTimer == null) { - UpdateTimer = new Timer(UpdateTimerCallback, null, UpdateDuration, + UpdateTimer = _timerFactory.Create(UpdateTimerCallback, null, UpdateDuration, Timeout.Infinite); } else diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs similarity index 97% rename from MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs rename to Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index 19592bc4e5..3f4ede4789 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -7,8 +7,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.FileOrganization; using MediaBrowser.Model.Logging; -using MediaBrowser.Server.Implementations.Library; -using MediaBrowser.Server.Implementations.Logging; using System; using System.Collections.Generic; using System.Globalization; @@ -16,11 +14,16 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.Library; +using Emby.Server.Implementations.Logging; using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; +using MediaBrowser.Naming.TV; +using EpisodeInfo = MediaBrowser.Controller.Providers.EpisodeInfo; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public class EpisodeFileOrganizer { @@ -55,7 +58,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization OriginalPath = path, OriginalFileName = Path.GetFileName(path), Type = FileOrganizerType.Episode, - FileSize = new FileInfo(path).Length + FileSize = _fileSystem.GetFileInfo(path).Length }; try @@ -68,10 +71,10 @@ namespace MediaBrowser.Server.Implementations.FileOrganization } var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions(); - var resolver = new Naming.TV.EpisodeResolver(namingOptions, new PatternsLogger()); + var resolver = new EpisodeResolver(namingOptions, new PatternsLogger()); var episodeInfo = resolver.Resolve(path, false) ?? - new Naming.TV.EpisodeInfo(); + new MediaBrowser.Naming.TV.EpisodeInfo(); var seriesName = episodeInfo.SeriesName; @@ -505,7 +508,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization episodePaths.AddRange(filesOfOtherExtensions); } - catch (DirectoryNotFoundException) + catch (IOException) { // No big deal. Maybe the season folder doesn't already exist. } @@ -575,7 +578,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization result.ExtractedName = nameWithoutYear; result.ExtractedYear = yearInName; - var series = _libraryManager.GetItemList(new Controller.Entities.InternalItemsQuery + var series = _libraryManager.GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(Series).Name }, Recursive = true @@ -593,7 +596,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization if (info != null) { - series = _libraryManager.GetItemList(new Controller.Entities.InternalItemsQuery + series = _libraryManager.GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(Series).Name }, Recursive = true, @@ -808,8 +811,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization { try { - var sourceFileInfo = new FileInfo(sourcePath); - var destinationFileInfo = new FileInfo(newPath); + var sourceFileInfo = _fileSystem.GetFileInfo(sourcePath); + var destinationFileInfo = _fileSystem.GetFileInfo(newPath); if (sourceFileInfo.Length == destinationFileInfo.Length) { @@ -820,7 +823,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization { return false; } - catch (DirectoryNotFoundException) + catch (IOException) { return false; } diff --git a/MediaBrowser.Server.Implementations/FileOrganization/Extensions.cs b/Emby.Server.Implementations/FileOrganization/Extensions.cs similarity index 94% rename from MediaBrowser.Server.Implementations/FileOrganization/Extensions.cs rename to Emby.Server.Implementations/FileOrganization/Extensions.cs index c560152dbe..506bc0327e 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/Extensions.cs +++ b/Emby.Server.Implementations/FileOrganization/Extensions.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.FileOrganization; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public static class ConfigurationExtension { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs b/Emby.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs similarity index 98% rename from MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs rename to Emby.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs index 141dcf9b48..2a01765472 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs +++ b/Emby.Server.Implementations/FileOrganization/FileOrganizationNotifier.cs @@ -8,7 +8,7 @@ using System; using System.Threading; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { /// /// Class SessionInfoWebSocketListener diff --git a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs b/Emby.Server.Implementations/FileOrganization/FileOrganizationService.cs similarity index 99% rename from MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs rename to Emby.Server.Implementations/FileOrganization/FileOrganizationService.cs index de33c39e6f..4094e6b9b8 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs +++ b/Emby.Server.Implementations/FileOrganization/FileOrganizationService.cs @@ -21,7 +21,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public class FileOrganizationService : IFileOrganizationService { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs b/Emby.Server.Implementations/FileOrganization/NameUtils.cs similarity index 77% rename from MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs rename to Emby.Server.Implementations/FileOrganization/NameUtils.cs index 624133d4fb..eb22ca4ea8 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/NameUtils.cs +++ b/Emby.Server.Implementations/FileOrganization/NameUtils.cs @@ -2,10 +2,9 @@ using MediaBrowser.Controller.Entities; using System; using System.Globalization; -using System.Linq; -using System.Text; +using MediaBrowser.Controller.Extensions; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public static class NameUtils { @@ -54,7 +53,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization private static string GetComparableName(string name) { - name = RemoveDiacritics(name); + name = name.RemoveDiacritics(); name = " " + name + " "; @@ -78,19 +77,5 @@ namespace MediaBrowser.Server.Implementations.FileOrganization return name.Trim(); } - - /// - /// Removes the diacritics. - /// - /// The text. - /// System.String. - private static string RemoveDiacritics(string text) - { - return String.Concat( - text.Normalize(NormalizationForm.FormD) - .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != - UnicodeCategory.NonSpacingMark) - ).Normalize(NormalizationForm.FormC); - } } } diff --git a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs b/Emby.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs rename to Emby.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs index ca41db80c8..5be7ba7ada 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs +++ b/Emby.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs @@ -13,7 +13,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public class OrganizerScheduledTask : IScheduledTask, IConfigurableScheduledTask { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs similarity index 98% rename from MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs rename to Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs index d83aee25b1..2850c3a610 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs +++ b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs @@ -14,7 +14,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.FileOrganization +namespace Emby.Server.Implementations.FileOrganization { public class TvFolderOrganizer { @@ -191,7 +191,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization _fileSystem.DeleteDirectory(path, false); } catch (UnauthorizedAccessException) { } - catch (DirectoryNotFoundException) { } + catch (IOException) { } } } catch (UnauthorizedAccessException) { } diff --git a/MediaBrowser.Server.Implementations/IO/ThrottledStream.cs b/Emby.Server.Implementations/IO/ThrottledStream.cs similarity index 98% rename from MediaBrowser.Server.Implementations/IO/ThrottledStream.cs rename to Emby.Server.Implementations/IO/ThrottledStream.cs index 538812dc0b..81760b6397 100644 --- a/MediaBrowser.Server.Implementations/IO/ThrottledStream.cs +++ b/Emby.Server.Implementations/IO/ThrottledStream.cs @@ -3,7 +3,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.IO +namespace Emby.Server.Implementations.IO { /// /// Class for streaming data with throttling support. @@ -326,9 +326,10 @@ namespace MediaBrowser.Server.Implementations.IO try { // The time to sleep is more then a millisecond, so sleep. - Thread.Sleep(toSleep); + var task = Task.Delay(toSleep); + Task.WaitAll(task); } - catch (ThreadAbortException) + catch { // Eatup ThreadAbortException. } diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs rename to Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs index 0dd7672bc1..224cd056aa 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs @@ -18,7 +18,7 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Server.Implementations.Photos +namespace Emby.Server.Implementations.Images { public abstract class BaseDynamicImageProvider : IHasItemChangeMonitor, IForcedProvider, ICustomMetadataProvider, IHasOrder where T : IHasMetadata @@ -353,7 +353,7 @@ namespace MediaBrowser.Server.Implementations.Photos var ext = Path.GetExtension(image); var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ext); - File.Copy(image, outputPath); + FileSystem.CopyFile(image, outputPath, true); return outputPath; } diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/Emby.Server.Implementations/Intros/DefaultIntroProvider.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs rename to Emby.Server.Implementations/Intros/DefaultIntroProvider.cs index 72a63c5472..180f6aba7f 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/Emby.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -11,13 +11,11 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Intros +namespace Emby.Server.Implementations.Intros { public class DefaultIntroProvider : IIntroProvider { diff --git a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs rename to Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index f20d87c4bc..2e69cd2efa 100644 --- a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -10,7 +10,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// /// Provides the core resolver ignore rules diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/LibraryManager.cs rename to Emby.Server.Implementations/Library/LibraryManager.cs index 18feaa8498..7ae00d94c2 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -18,9 +18,6 @@ using MediaBrowser.Naming.Audio; using MediaBrowser.Naming.Common; using MediaBrowser.Naming.TV; using MediaBrowser.Naming.Video; -using MediaBrowser.Server.Implementations.Library.Validators; -using MediaBrowser.Server.Implementations.Logging; -using MediaBrowser.Server.Implementations.ScheduledTasks; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -30,6 +27,10 @@ using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.Library.Resolvers; +using Emby.Server.Implementations.Library.Validators; +using Emby.Server.Implementations.Logging; +using Emby.Server.Implementations.ScheduledTasks; using MediaBrowser.Model.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Model.Channels; @@ -37,14 +38,13 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Library; using MediaBrowser.Model.Net; -using MediaBrowser.Server.Implementations.Library.Resolvers; using SortOrder = MediaBrowser.Model.Entities.SortOrder; using VideoResolver = MediaBrowser.Naming.Video.VideoResolver; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// /// Class LibraryManager @@ -403,7 +403,7 @@ namespace MediaBrowser.Server.Implementations.Library { _fileSystem.DeleteDirectory(metadataPath, true); } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -1189,7 +1189,8 @@ namespace MediaBrowser.Server.Implementations.Library { Name = Path.GetFileName(dir), - Locations = Directory.EnumerateFiles(dir, "*.mblink", SearchOption.TopDirectoryOnly) + Locations = _fileSystem.GetFilePaths(dir, false) + .Where(i => string.Equals(ShortcutFileExtension, Path.GetExtension(i), StringComparison.OrdinalIgnoreCase)) .Select(_fileSystem.ResolveShortcut) .OrderBy(i => i) .ToList(), @@ -2302,11 +2303,11 @@ namespace MediaBrowser.Server.Implementations.Library var episodeInfo = locationType == LocationType.FileSystem || locationType == LocationType.Offline ? resolver.Resolve(episode.Path, isFolder) : - new Naming.TV.EpisodeInfo(); + new MediaBrowser.Naming.TV.EpisodeInfo(); if (episodeInfo == null) { - episodeInfo = new Naming.TV.EpisodeInfo(); + episodeInfo = new MediaBrowser.Naming.TV.EpisodeInfo(); } var changed = false; @@ -2787,10 +2788,7 @@ namespace MediaBrowser.Server.Implementations.Library { var path = Path.Combine(virtualFolderPath, collectionType + ".collection"); - using (File.Create(path)) - { - - } + _fileSystem.WriteAllBytes(path, new byte[] {}); } CollectionFolder.SaveLibraryOptions(virtualFolderPath, options); @@ -2827,21 +2825,20 @@ namespace MediaBrowser.Server.Implementations.Library private bool ValidateNetworkPath(string path) { - if (Environment.OSVersion.Platform == PlatformID.Win32NT) - { - // We can't validate protocol-based paths, so just allow them - if (path.IndexOf("://", StringComparison.OrdinalIgnoreCase) == -1) - { - return Directory.Exists(path); - } - } + //if (Environment.OSVersion.Platform == PlatformID.Win32NT) + //{ + // // We can't validate protocol-based paths, so just allow them + // if (path.IndexOf("://", StringComparison.OrdinalIgnoreCase) == -1) + // { + // return _fileSystem.DirectoryExists(path); + // } + //} // Without native support for unc, we cannot validate this when running under mono return true; } private const string ShortcutFileExtension = ".mblink"; - private const string ShortcutFileSearch = "*" + ShortcutFileExtension; public void AddMediaPath(string virtualFolderName, MediaPathInfo pathInfo) { AddMediaPathInternal(virtualFolderName, pathInfo, true); @@ -2863,12 +2860,12 @@ namespace MediaBrowser.Server.Implementations.Library if (!_fileSystem.DirectoryExists(path)) { - throw new DirectoryNotFoundException("The path does not exist."); + throw new FileNotFoundException("The path does not exist."); } if (!string.IsNullOrWhiteSpace(pathInfo.NetworkPath) && !ValidateNetworkPath(pathInfo.NetworkPath)) { - throw new DirectoryNotFoundException("The network path does not exist."); + throw new FileNotFoundException("The network path does not exist."); } var rootFolderPath = ConfigurationManager.ApplicationPaths.DefaultUserViewsPath; @@ -2911,7 +2908,7 @@ namespace MediaBrowser.Server.Implementations.Library if (!string.IsNullOrWhiteSpace(pathInfo.NetworkPath) && !ValidateNetworkPath(pathInfo.NetworkPath)) { - throw new DirectoryNotFoundException("The network path does not exist."); + throw new FileNotFoundException("The network path does not exist."); } var rootFolderPath = ConfigurationManager.ApplicationPaths.DefaultUserViewsPath; @@ -2973,7 +2970,7 @@ namespace MediaBrowser.Server.Implementations.Library if (!_fileSystem.DirectoryExists(path)) { - throw new DirectoryNotFoundException("The media folder does not exist"); + throw new FileNotFoundException("The media folder does not exist"); } _libraryMonitorFactory().Stop(); @@ -3044,10 +3041,12 @@ namespace MediaBrowser.Server.Implementations.Library if (!_fileSystem.DirectoryExists(virtualFolderPath)) { - throw new DirectoryNotFoundException(string.Format("The media collection {0} does not exist", virtualFolderName)); + throw new FileNotFoundException(string.Format("The media collection {0} does not exist", virtualFolderName)); } - var shortcut = Directory.EnumerateFiles(virtualFolderPath, ShortcutFileSearch, SearchOption.AllDirectories).FirstOrDefault(f => _fileSystem.ResolveShortcut(f).Equals(mediaPath, StringComparison.OrdinalIgnoreCase)); + var shortcut = _fileSystem.GetFilePaths(virtualFolderPath, true) + .Where(i => string.Equals(ShortcutFileExtension, Path.GetExtension(i), StringComparison.OrdinalIgnoreCase)) + .FirstOrDefault(f => _fileSystem.ResolveShortcut(f).Equals(mediaPath, StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(shortcut)) { diff --git a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs rename to Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs index 78107b82d1..7424ed5e5e 100644 --- a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs +++ b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { public class LocalTrailerPostScanTask : ILibraryPostScanTask { diff --git a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs b/Emby.Server.Implementations/Library/MediaSourceManager.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs rename to Emby.Server.Implementations/Library/MediaSourceManager.cs index 0f1931dda5..93c406ebca 100644 --- a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs +++ b/Emby.Server.Implementations/Library/MediaSourceManager.cs @@ -18,8 +18,9 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { public class MediaSourceManager : IMediaSourceManager, IDisposable { @@ -32,8 +33,9 @@ namespace MediaBrowser.Server.Implementations.Library private IMediaSourceProvider[] _providers; private readonly ILogger _logger; private readonly IUserDataManager _userDataManager; + private readonly ITimerFactory _timerFactory; - public MediaSourceManager(IItemRepository itemRepo, IUserManager userManager, ILibraryManager libraryManager, ILogger logger, IJsonSerializer jsonSerializer, IFileSystem fileSystem, IUserDataManager userDataManager) + public MediaSourceManager(IItemRepository itemRepo, IUserManager userManager, ILibraryManager libraryManager, ILogger logger, IJsonSerializer jsonSerializer, IFileSystem fileSystem, IUserDataManager userDataManager, ITimerFactory timerFactory) { _itemRepo = itemRepo; _userManager = userManager; @@ -42,6 +44,7 @@ namespace MediaBrowser.Server.Implementations.Library _jsonSerializer = jsonSerializer; _fileSystem = fileSystem; _userDataManager = userDataManager; + _timerFactory = timerFactory; } public void AddParts(IEnumerable providers) @@ -551,14 +554,14 @@ namespace MediaBrowser.Server.Implementations.Library return new Tuple(provider, keyId); } - private Timer _closeTimer; + private ITimer _closeTimer; private readonly TimeSpan _openStreamMaxAge = TimeSpan.FromSeconds(180); private void StartCloseTimer() { StopCloseTimer(); - _closeTimer = new Timer(CloseTimerCallback, null, _openStreamMaxAge, _openStreamMaxAge); + _closeTimer = _timerFactory.Create(CloseTimerCallback, null, _openStreamMaxAge, _openStreamMaxAge); } private void StopCloseTimer() diff --git a/MediaBrowser.Server.Implementations/Library/MusicManager.cs b/Emby.Server.Implementations/Library/MusicManager.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/MusicManager.cs rename to Emby.Server.Implementations/Library/MusicManager.cs index 3ff4348981..7669dd0bf1 100644 --- a/MediaBrowser.Server.Implementations/Library/MusicManager.cs +++ b/Emby.Server.Implementations/Library/MusicManager.cs @@ -6,7 +6,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { public class MusicManager : IMusicManager { diff --git a/MediaBrowser.Server.Implementations/Library/PathExtensions.cs b/Emby.Server.Implementations/Library/PathExtensions.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/PathExtensions.cs rename to Emby.Server.Implementations/Library/PathExtensions.cs index 6c0e3237e8..28ed2f53ca 100644 --- a/MediaBrowser.Server.Implementations/Library/PathExtensions.cs +++ b/Emby.Server.Implementations/Library/PathExtensions.cs @@ -1,7 +1,7 @@ using System; using System.Text.RegularExpressions; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { public static class PathExtensions { diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/Emby.Server.Implementations/Library/ResolverHelper.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/ResolverHelper.cs rename to Emby.Server.Implementations/Library/ResolverHelper.cs index c7d9d39b88..1d3cacc1dc 100644 --- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs +++ b/Emby.Server.Implementations/Library/ResolverHelper.cs @@ -9,7 +9,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// /// Class ResolverHelper @@ -112,7 +112,7 @@ namespace MediaBrowser.Server.Implementations.Library /// /// The MB name regex /// - private static readonly Regex MbNameRegex = new Regex(@"(\[.*?\])", RegexOptions.Compiled); + private static readonly Regex MbNameRegex = new Regex(@"(\[.*?\])"); internal static string StripBrackets(string inputString) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs similarity index 84% rename from MediaBrowser.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs index 039a17100a..d8805355ad 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs @@ -3,12 +3,12 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using System; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio +namespace Emby.Server.Implementations.Library.Resolvers.Audio { /// /// Class AudioResolver /// - public class AudioResolver : ItemResolver + public class AudioResolver : ItemResolver { private readonly ILibraryManager _libraryManager; @@ -31,7 +31,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// /// The args. /// Entities.Audio.Audio. - protected override Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args) + protected override MediaBrowser.Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args) { // Return audio if the path is a file and has a matching extension @@ -57,7 +57,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase) || isMixed) { - return new Controller.Entities.Audio.Audio(); + return new MediaBrowser.Controller.Entities.Audio.Audio(); } } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index c1ac7d68cd..f8e1051951 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -5,17 +5,17 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Naming.Audio; -using MediaBrowser.Server.Implementations.Logging; using System; using System.Collections.Generic; using System.IO; +using Emby.Server.Implementations.Logging; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio +namespace Emby.Server.Implementations.Library.Resolvers.Audio { /// /// Class MusicAlbumResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs index be651b9c80..2971405b94 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs @@ -11,7 +11,7 @@ using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio +namespace Emby.Server.Implementations.Library.Resolvers.Audio { /// /// Class MusicArtistResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs index 4dce16139f..b7819eb68c 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs @@ -2,17 +2,17 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using MediaBrowser.Naming.Video; -using MediaBrowser.Server.Implementations.Logging; using System; using System.IO; +using Emby.Server.Implementations.Logging; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { /// /// Resolves a Path into a Video or Video subclass /// /// - public abstract class BaseVideoResolver : Controller.Resolvers.ItemResolver + public abstract class BaseVideoResolver : MediaBrowser.Controller.Resolvers.ItemResolver where T : Video, new() { protected readonly ILibraryManager LibraryManager; @@ -45,7 +45,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers var namingOptions = ((LibraryManager)LibraryManager).GetNamingOptions(); // If the path is a file check for a matching extensions - var parser = new Naming.Video.VideoResolver(namingOptions, new PatternsLogger()); + var parser = new MediaBrowser.Naming.Video.VideoResolver(namingOptions, new PatternsLogger()); if (args.IsDirectory) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/FolderResolver.cs b/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/Resolvers/FolderResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs index ff07c5282f..5e73baa5ce 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/FolderResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { /// /// Class FolderResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/ItemResolver.cs b/Emby.Server.Implementations/Library/Resolvers/ItemResolver.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/Resolvers/ItemResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/ItemResolver.cs index a03eda263a..b4a37be5f2 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/ItemResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/ItemResolver.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { /// /// Class ItemResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs index e3447afc99..df441c5eda 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs @@ -5,7 +5,7 @@ using MediaBrowser.Model.Entities; using System; using System.IO; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies +namespace Emby.Server.Implementations.Library.Resolvers.Movies { /// /// Class BoxSetResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index bb1d57688f..d8c8b2024e 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -7,16 +7,16 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Extensions; using MediaBrowser.Naming.Video; -using MediaBrowser.Server.Implementations.Logging; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using Emby.Server.Implementations.Logging; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies +namespace Emby.Server.Implementations.Library.Resolvers.Movies { /// /// Class MovieResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs index 957fafb92f..3d7ede879f 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs @@ -7,7 +7,7 @@ using System; using System.IO; using System.Linq; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { public class PhotoAlbumResolver : FolderResolver { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs index 549ad522ed..df39e57add 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs @@ -11,7 +11,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { public class PhotoResolver : ItemResolver { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs index a95739f227..8c59cf20fd 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Playlists; using System; using System.IO; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { public class PlaylistResolver : FolderResolver { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs b/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs index 7a6198a005..1bec1073d7 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs @@ -9,7 +9,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { class SpecialFolderResolver : FolderResolver { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs index 6edc4a009e..2a4cc49b76 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Library; using System.Linq; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +namespace Emby.Server.Implementations.Library.Resolvers.TV { /// /// Class EpisodeResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs index fc49297482..c065feda10 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Naming.Common; using MediaBrowser.Naming.TV; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +namespace Emby.Server.Implementations.Library.Resolvers.TV { /// /// Class SeasonResolver diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs index 83566e2c14..44eb0e3e2c 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -6,18 +6,18 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Naming.Common; using MediaBrowser.Naming.TV; -using MediaBrowser.Server.Implementations.Logging; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using Emby.Server.Implementations.Logging; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV +namespace Emby.Server.Implementations.Library.Resolvers.TV { /// /// Class SeriesResolver @@ -171,7 +171,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV .ToList(); } - var episodeResolver = new Naming.TV.EpisodeResolver(namingOptions, new PatternsLogger()); + var episodeResolver = new MediaBrowser.Naming.TV.EpisodeResolver(namingOptions, new PatternsLogger()); var episodeInfo = episodeResolver.Resolve(fullName, false, false); if (episodeInfo != null && episodeInfo.EpisodeNumber.HasValue) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/VideoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Library/Resolvers/VideoResolver.cs rename to Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs index c7f21cef16..b5e1bf5f74 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/VideoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; -namespace MediaBrowser.Server.Implementations.Library.Resolvers +namespace Emby.Server.Implementations.Library.Resolvers { /// /// Resolves a Path into a Video diff --git a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs b/Emby.Server.Implementations/Library/SearchEngine.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/SearchEngine.cs rename to Emby.Server.Implementations/Library/SearchEngine.cs index c266fb191b..afdf65c063 100644 --- a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs +++ b/Emby.Server.Implementations/Library/SearchEngine.cs @@ -1,7 +1,5 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; @@ -11,13 +9,10 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MediaBrowser.Controller.Extensions; -using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// - /// Class LuceneSearchEngine - /// http://www.codeproject.com/Articles/320219/Lucene-Net-ultra-fast-search-for-MVC-or-WebForms /// public class SearchEngine : ISearchEngine { diff --git a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Library/UserDataManager.cs rename to Emby.Server.Implementations/Library/UserDataManager.cs index 9ee65a57c6..c8dde1287a 100644 --- a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs +++ b/Emby.Server.Implementations/Library/UserDataManager.cs @@ -13,7 +13,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// /// Class UserDataManager diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/Emby.Server.Implementations/Library/UserManager.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/UserManager.cs rename to Emby.Server.Implementations/Library/UserManager.cs index 794c924eb6..9c1d7fdf13 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/Emby.Server.Implementations/Library/UserManager.cs @@ -23,15 +23,13 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; -using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Cryptography; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { /// /// Class UserManager @@ -72,8 +70,10 @@ namespace MediaBrowser.Server.Implementations.Library private readonly Func _connectFactory; private readonly IServerApplicationHost _appHost; private readonly IFileSystem _fileSystem; + private readonly ICryptographyProvider _cryptographyProvider; + private readonly string _defaultUserName; - public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func imageProcessorFactory, Func dtoServiceFactory, Func connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer, IFileSystem fileSystem) + public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func imageProcessorFactory, Func dtoServiceFactory, Func connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ICryptographyProvider cryptographyProvider, string defaultUserName) { _logger = logger; UserRepository = userRepository; @@ -85,6 +85,8 @@ namespace MediaBrowser.Server.Implementations.Library _appHost = appHost; _jsonSerializer = jsonSerializer; _fileSystem = fileSystem; + _cryptographyProvider = cryptographyProvider; + _defaultUserName = defaultUserName; ConfigurationManager = configurationManager; Users = new List(); @@ -188,7 +190,14 @@ namespace MediaBrowser.Server.Implementations.Library public bool IsValidUsername(string username) { // Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.) - return username.All(IsValidUsernameCharacter); + foreach (var currentChar in username) + { + if (!IsValidUsernameCharacter(currentChar)) + { + return false; + } + } + return true; } private bool IsValidUsernameCharacter(char i) @@ -273,8 +282,8 @@ namespace MediaBrowser.Server.Implementations.Library { user.Policy.InvalidLoginAttemptCount = newValue; - var maxCount = user.Policy.IsAdministrator ? - 3 : + var maxCount = user.Policy.IsAdministrator ? + 3 : 5; var fireLockout = false; @@ -323,13 +332,9 @@ namespace MediaBrowser.Server.Implementations.Library /// /// The STR. /// System.String. - private static string GetSha1String(string str) + private string GetSha1String(string str) { - using (var provider = SHA1.Create()) - { - var hash = provider.ComputeHash(Encoding.UTF8.GetBytes(str)); - return BitConverter.ToString(hash).Replace("-", string.Empty); - } + return BitConverter.ToString(_cryptographyProvider.GetSHA1Bytes(Encoding.UTF8.GetBytes(str))).Replace("-", string.Empty); } /// @@ -343,7 +348,7 @@ namespace MediaBrowser.Server.Implementations.Library // There always has to be at least one user. if (users.Count == 0) { - var name = MakeValidUsername(Environment.UserName); + var name = MakeValidUsername(_defaultUserName); var user = InstantiateNewUser(name); @@ -741,9 +746,12 @@ namespace MediaBrowser.Server.Implementations.Library text.AppendLine(string.Empty); text.AppendLine(pin); text.AppendLine(string.Empty); - text.AppendLine("The pin code will expire at " + expiration.ToLocalTime().ToShortDateString() + " " + expiration.ToLocalTime().ToShortTimeString()); - _fileSystem.WriteAllText(path, text.ToString(), Encoding.UTF8); + var localExpirationTime = expiration.ToLocalTime(); + // Tuesday, 22 August 2006 06:30 AM + text.AppendLine("The pin code will expire at " + localExpirationTime.ToString("f1", CultureInfo.CurrentCulture)); + + _fileSystem.WriteAllText(path, text.ToString(), Encoding.UTF8); var result = new PasswordPinCreationResult { @@ -875,11 +883,11 @@ namespace MediaBrowser.Server.Implementations.Library return (UserPolicy)_xmlSerializer.DeserializeFromFile(typeof(UserPolicy), path); } } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { return GetDefaultPolicy(user); } - catch (FileNotFoundException) + catch (IOException) { return GetDefaultPolicy(user); } @@ -917,7 +925,7 @@ namespace MediaBrowser.Server.Implementations.Library var path = GetPolifyFilePath(user); - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); lock (_policySyncLock) { @@ -970,11 +978,11 @@ namespace MediaBrowser.Server.Implementations.Library return (UserConfiguration)_xmlSerializer.DeserializeFromFile(typeof(UserConfiguration), path); } } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { return new UserConfiguration(); } - catch (FileNotFoundException) + catch (IOException) { return new UserConfiguration(); } @@ -1004,7 +1012,7 @@ namespace MediaBrowser.Server.Implementations.Library config = _jsonSerializer.DeserializeFromString(json); } - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); lock (_configSyncLock) { diff --git a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs b/Emby.Server.Implementations/Library/UserViewManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Library/UserViewManager.cs rename to Emby.Server.Implementations/Library/UserViewManager.cs index 6a4e26ff94..b93f565a32 100644 --- a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs +++ b/Emby.Server.Implementations/Library/UserViewManager.cs @@ -15,7 +15,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Library +namespace Emby.Server.Implementations.Library { public class UserViewManager : IUserViewManager { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs index 91b035a350..4d718dbee8 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class ArtistsPostScanTask diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs rename to Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs index 3dcdbeae9d..643c5970e1 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class ArtistsValidator diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs index f3891180e2..ee6c4461c2 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class GameGenresPostScanTask diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs b/Emby.Server.Implementations/Library/Validators/GameGenresValidator.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs rename to Emby.Server.Implementations/Library/Validators/GameGenresValidator.cs index b06c0b3b9b..b1820bb917 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/GameGenresValidator.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { class GameGenresValidator { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs index ed2429769c..be46decfb1 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { public class GenresPostScanTask : ILibraryPostScanTask { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs rename to Emby.Server.Implementations/Library/Validators/GenresValidator.cs index f35bb51363..d8956f78a1 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { class GenresValidator { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs index 777532ff87..cd40215486 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class MusicGenresPostScanTask diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs b/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs rename to Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs index 2be99f106e..983c881b75 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { class MusicGenresValidator { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs rename to Emby.Server.Implementations/Library/Validators/PeopleValidator.cs index d9a7199be7..813f07fffd 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs @@ -15,7 +15,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class PeopleValidator diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs index 77c6d51465..d23efb6d3b 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { /// /// Class MusicGenresPostScanTask diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs rename to Emby.Server.Implementations/Library/Validators/StudiosValidator.cs index a19b8158a0..6faab7bb9d 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { class StudiosValidator { diff --git a/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/YearsPostScanTask.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs rename to Emby.Server.Implementations/Library/Validators/YearsPostScanTask.cs index 164b142234..ae43c77f0a 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/YearsPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/YearsPostScanTask.cs @@ -4,7 +4,7 @@ using System; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Library.Validators +namespace Emby.Server.Implementations.Library.Validators { public class YearsPostScanTask : ILibraryPostScanTask { diff --git a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs b/Emby.Server.Implementations/LiveTv/ChannelImageProvider.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs rename to Emby.Server.Implementations/LiveTv/ChannelImageProvider.cs index 23560b1aa1..95cefd9990 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs +++ b/Emby.Server.Implementations/LiveTv/ChannelImageProvider.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class ChannelImageProvider : IDynamicImageProvider, IHasItemChangeMonitor { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs index 4137ab2cf8..6bb06843a3 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs @@ -9,7 +9,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class DirectRecorder : IRecorder { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs similarity index 96% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 397e5fc9f4..b8b0cb73c1 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -15,7 +15,6 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -using MediaBrowser.Server.Implementations.FileOrganization; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -35,10 +34,12 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Diagnostics; using MediaBrowser.Model.FileOrganization; -using Microsoft.Win32; +using MediaBrowser.Model.System; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class EmbyTV : ILiveTvService, ISupportsDirectStreamProvider, ISupportsNewTimerIds, IDisposable { @@ -59,6 +60,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private readonly IProviderManager _providerManager; private readonly IFileOrganizationService _organizationService; private readonly IMediaEncoder _mediaEncoder; + private readonly IProcessFactory _processFactory; + private readonly ISystemEvents _systemEvents; public static EmbyTV Current; @@ -68,7 +71,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private readonly ConcurrentDictionary _activeRecordings = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); - public EmbyTV(IServerApplicationHost appHost, ILogger logger, IJsonSerializer jsonSerializer, IHttpClient httpClient, IServerConfigurationManager config, ILiveTvManager liveTvManager, IFileSystem fileSystem, ILibraryManager libraryManager, ILibraryMonitor libraryMonitor, IProviderManager providerManager, IFileOrganizationService organizationService, IMediaEncoder mediaEncoder) + public EmbyTV(IServerApplicationHost appHost, ILogger logger, IJsonSerializer jsonSerializer, IHttpClient httpClient, IServerConfigurationManager config, ILiveTvManager liveTvManager, IFileSystem fileSystem, ILibraryManager libraryManager, ILibraryMonitor libraryMonitor, IProviderManager providerManager, IFileOrganizationService organizationService, IMediaEncoder mediaEncoder, ITimerFactory timerFactory, IProcessFactory processFactory, ISystemEvents systemEvents) { Current = this; @@ -82,11 +85,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV _providerManager = providerManager; _organizationService = organizationService; _mediaEncoder = mediaEncoder; + _processFactory = processFactory; + _systemEvents = systemEvents; _liveTvManager = (LiveTvManager)liveTvManager; _jsonSerializer = jsonSerializer; _seriesTimerProvider = new SeriesTimerManager(fileSystem, jsonSerializer, _logger, Path.Combine(DataPath, "seriestimers")); - _timerProvider = new TimerManager(fileSystem, jsonSerializer, _logger, Path.Combine(DataPath, "timers"), _logger); + _timerProvider = new TimerManager(fileSystem, jsonSerializer, _logger, Path.Combine(DataPath, "timers"), _logger, timerFactory); _timerProvider.TimerFired += _timerProvider_TimerFired; _config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated; @@ -104,10 +109,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV { _timerProvider.RestartTimers(); - SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; + _systemEvents.Resume += _systemEvents_Resume; CreateRecordingFolders(); } + private void _systemEvents_Resume(object sender, EventArgs e) + { + _timerProvider.RestartTimers(); + } + private void OnRecordingFoldersChanged() { CreateRecordingFolders(); @@ -231,16 +241,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } } - void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) - { - _logger.Info("Power mode changed to {0}", e.Mode); - - if (e.Mode == PowerModes.Resume) - { - _timerProvider.RestartTimers(); - } - } - public string Name { get { return "Emby"; } @@ -988,7 +988,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV _liveStreamsSemaphore.Release(); } - throw new ApplicationException("Tuner not found."); + throw new Exception("Tuner not found."); } public async Task> GetChannelStreamMediaSources(string channelId, CancellationToken cancellationToken) @@ -1031,7 +1031,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV IsInfiniteStream = true, RequiresOpening = false, RequiresClosing = false, - Protocol = Model.MediaInfo.MediaProtocol.Http, + Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http, BufferMs = 0 }; @@ -1353,7 +1353,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV timer.StartDate = DateTime.UtcNow.AddSeconds(retryIntervalSeconds); _timerProvider.AddOrUpdate(timer); } - else if (File.Exists(recordPath)) + else if (_fileSystem.FileExists(recordPath)) { timer.RecordingPath = recordPath; timer.Status = RecordingStatus.Completed; @@ -1409,7 +1409,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV .Where(i => i.Status == RecordingStatus.Completed && !string.IsNullOrWhiteSpace(i.RecordingPath)) .Where(i => string.Equals(i.SeriesTimerId, seriesTimerId, StringComparison.OrdinalIgnoreCase)) .OrderByDescending(i => i.EndDate) - .Where(i => File.Exists(i.RecordingPath)) + .Where(i => _fileSystem.FileExists(i.RecordingPath)) .Skip(seriesTimer.KeepUpTo - 1) .ToList(); @@ -1457,13 +1457,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV { try { - File.Delete(timer.RecordingPath); + _fileSystem.DeleteFile(timer.RecordingPath); } - catch (DirectoryNotFoundException) - { - - } - catch (FileNotFoundException) + catch (IOException) { } @@ -1519,7 +1515,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV if (regInfo.IsValid) { - return new EncodedRecorder(_logger, _fileSystem, _mediaEncoder, _config.ApplicationPaths, _jsonSerializer, config, _httpClient); + return new EncodedRecorder(_logger, _fileSystem, _mediaEncoder, _config.ApplicationPaths, _jsonSerializer, config, _httpClient, _processFactory); } } @@ -1528,28 +1524,28 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private async void OnSuccessfulRecording(TimerInfo timer, string path) { - if (timer.IsProgramSeries && GetConfiguration().EnableAutoOrganize) - { - try - { - // this is to account for the library monitor holding a lock for additional time after the change is complete. - // ideally this shouldn't be hard-coded - await Task.Delay(30000).ConfigureAwait(false); + //if (timer.IsProgramSeries && GetConfiguration().EnableAutoOrganize) + //{ + // try + // { + // // this is to account for the library monitor holding a lock for additional time after the change is complete. + // // ideally this shouldn't be hard-coded + // await Task.Delay(30000).ConfigureAwait(false); - var organize = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager, _libraryMonitor, _providerManager); + // var organize = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager, _libraryMonitor, _providerManager); - var result = await organize.OrganizeEpisodeFile(path, _config.GetAutoOrganizeOptions(), false, CancellationToken.None).ConfigureAwait(false); + // var result = await organize.OrganizeEpisodeFile(path, _config.GetAutoOrganizeOptions(), false, CancellationToken.None).ConfigureAwait(false); - if (result.Status == FileSortingStatus.Success) - { - return; - } - } - catch (Exception ex) - { - _logger.ErrorException("Error processing new recording", ex); - } - } + // if (result.Status == FileSortingStatus.Success) + // { + // return; + // } + // } + // catch (Exception ex) + // { + // _logger.ErrorException("Error processing new recording", ex); + // } + //} } private void SaveNfo(TimerInfo timer, string recordingPath, string seriesPath) @@ -1575,7 +1571,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV { var nfoPath = Path.Combine(seriesPath, "tvshow.nfo"); - if (File.Exists(nfoPath)) + if (_fileSystem.FileExists(nfoPath)) { return; } @@ -1610,7 +1606,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV { var nfoPath = Path.ChangeExtension(recordingPath, ".nfo"); - if (File.Exists(nfoPath)) + if (_fileSystem.FileExists(nfoPath)) { return; } @@ -1931,7 +1927,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV var defaultFolder = RecordingPath; var defaultName = "Recordings"; - if (Directory.Exists(defaultFolder)) + if (_fileSystem.DirectoryExists(defaultFolder)) { list.Add(new VirtualFolderInfo { @@ -1941,7 +1937,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } var customPath = GetConfiguration().MovieRecordingPath; - if ((!string.IsNullOrWhiteSpace(customPath) && !string.Equals(customPath, defaultFolder, StringComparison.OrdinalIgnoreCase)) && Directory.Exists(customPath)) + if ((!string.IsNullOrWhiteSpace(customPath) && !string.Equals(customPath, defaultFolder, StringComparison.OrdinalIgnoreCase)) && _fileSystem.DirectoryExists(customPath)) { list.Add(new VirtualFolderInfo { @@ -1952,7 +1948,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } customPath = GetConfiguration().SeriesRecordingPath; - if ((!string.IsNullOrWhiteSpace(customPath) && !string.Equals(customPath, defaultFolder, StringComparison.OrdinalIgnoreCase)) && Directory.Exists(customPath)) + if ((!string.IsNullOrWhiteSpace(customPath) && !string.Equals(customPath, defaultFolder, StringComparison.OrdinalIgnoreCase)) && _fileSystem.DirectoryExists(customPath)) { list.Add(new VirtualFolderInfo { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs similarity index 94% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs index 675fca3258..b339537ae7 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTVRegistration.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using MediaBrowser.Common.Security; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class EmbyTVRegistration : IRequiresRegistration { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs similarity index 92% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs index 95c2b5ebb2..93ba9c420b 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs @@ -13,13 +13,14 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.MediaEncoding; +using MediaBrowser.Model.Diagnostics; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class EncodedRecorder : IRecorder { @@ -32,11 +33,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private bool _hasExited; private Stream _logFileStream; private string _targetPath; - private Process _process; + private IProcess _process; + private readonly IProcessFactory _processFactory; private readonly IJsonSerializer _json; private readonly TaskCompletionSource _taskCompletionSource = new TaskCompletionSource(); - public EncodedRecorder(ILogger logger, IFileSystem fileSystem, IMediaEncoder mediaEncoder, IServerApplicationPaths appPaths, IJsonSerializer json, LiveTvOptions liveTvOptions, IHttpClient httpClient) + public EncodedRecorder(ILogger logger, IFileSystem fileSystem, IMediaEncoder mediaEncoder, IServerApplicationPaths appPaths, IJsonSerializer json, LiveTvOptions liveTvOptions, IHttpClient httpClient, IProcessFactory processFactory) { _logger = logger; _fileSystem = fileSystem; @@ -45,6 +47,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV _json = json; _liveTvOptions = liveTvOptions; _httpClient = httpClient; + _processFactory = processFactory; } private string OutputFormat @@ -82,27 +85,23 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV _targetPath = targetFile; _fileSystem.CreateDirectory(Path.GetDirectoryName(targetFile)); - var process = new Process + var process = _processFactory.Create(new ProcessOptions { - StartInfo = new ProcessStartInfo - { - CreateNoWindow = true, - UseShellExecute = false, + CreateNoWindow = true, + UseShellExecute = false, - // Must consume both stdout and stderr or deadlocks may occur - //RedirectStandardOutput = true, - RedirectStandardError = true, - RedirectStandardInput = true, + // Must consume both stdout and stderr or deadlocks may occur + //RedirectStandardOutput = true, + RedirectStandardError = true, + RedirectStandardInput = true, - FileName = _mediaEncoder.EncoderPath, - Arguments = GetCommandLineArgs(mediaSource, inputFile, targetFile, duration), - - WindowStyle = ProcessWindowStyle.Hidden, - ErrorDialog = false - }, + FileName = _mediaEncoder.EncoderPath, + Arguments = GetCommandLineArgs(mediaSource, inputFile, targetFile, duration), + IsHidden = true, + ErrorDialog = false, EnableRaisingEvents = true - }; + }); _process = process; @@ -251,7 +250,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV /// /// Processes the exited. /// - private void OnFfMpegProcessExited(Process process, string inputFile) + private void OnFfMpegProcessExited(IProcess process, string inputFile) { _hasExited = true; diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs similarity index 80% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs index 713cb9cd30..139cf570ee 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs @@ -1,6 +1,6 @@ using MediaBrowser.Controller.Plugins; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class EntryPoint : IServerEntryPoint { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs similarity index 93% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs index 5706b6ae9e..3b5e60c4a7 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public interface IRecorder { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs similarity index 96% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs index 9bda9c3f60..ded4f04c4a 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs @@ -8,7 +8,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class ItemDataProvider where T : class @@ -54,9 +54,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV catch (FileNotFoundException) { } - catch (DirectoryNotFoundException) - { - } catch (IOException ex) { Logger.ErrorException("Error deserializing {0}", ex, jsonFile); diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs index f7b4b3fde6..0ae5971bcb 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs @@ -4,7 +4,7 @@ using System; using System.Globalization; using MediaBrowser.Model.LiveTv; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { internal class RecordingHelper { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs similarity index 93% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs index b2a347b77e..7bf6bf1ca2 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs @@ -6,7 +6,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class SeriesTimerManager : ItemDataProvider { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs similarity index 90% rename from MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs rename to Emby.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs index 1e01df29dc..35868d318e 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs @@ -12,20 +12,23 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.LiveTv; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV +namespace Emby.Server.Implementations.LiveTv.EmbyTV { public class TimerManager : ItemDataProvider { - private readonly ConcurrentDictionary _timers = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + private readonly ConcurrentDictionary _timers = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); private readonly ILogger _logger; public event EventHandler> TimerFired; + private readonly ITimerFactory _timerFactory; - public TimerManager(IFileSystem fileSystem, IJsonSerializer jsonSerializer, ILogger logger, string dataPath, ILogger logger1) + public TimerManager(IFileSystem fileSystem, IJsonSerializer jsonSerializer, ILogger logger, string dataPath, ILogger logger1, ITimerFactory timerFactory) : base(fileSystem, jsonSerializer, logger, dataPath, (r1, r2) => string.Equals(r1.Id, r2.Id, StringComparison.OrdinalIgnoreCase)) { _logger = logger1; + _timerFactory = timerFactory; } public void RestartTimers() @@ -126,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private void StartTimer(TimerInfo item, TimeSpan dueTime) { - var timer = new Timer(TimerCallback, item.Id, dueTime, TimeSpan.Zero); + var timer = _timerFactory.Create(TimerCallback, item.Id, dueTime, TimeSpan.Zero); if (_timers.TryAdd(item.Id, timer)) { @@ -141,7 +144,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV private void StopTimer(TimerInfo item) { - Timer timer; + ITimer timer; if (_timers.TryRemove(item.Id, out timer)) { timer.Dispose(); diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs similarity index 99% rename from MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs rename to Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs index d5abcf98e2..7beaed338b 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs +++ b/Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs @@ -16,7 +16,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv.Listings +namespace Emby.Server.Implementations.LiveTv.Listings { public class SchedulesDirect : IListingsProvider { @@ -589,13 +589,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings { var imageIdString = "["; - programIds.ForEach(i => + foreach (var i in programIds) { if (!imageIdString.Contains(i.Substring(0, 10))) { imageIdString += "\"" + i.Substring(0, 10) + "\","; } - }); + } + imageIdString = imageIdString.TrimEnd(',') + "]"; var httpOptions = new HttpRequestOptions() @@ -822,7 +823,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings return root.token; } - throw new ApplicationException("Could not authenticate with Schedules Direct Error: " + root.message); + throw new Exception("Could not authenticate with Schedules Direct Error: " + root.message); } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs b/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs similarity index 90% rename from MediaBrowser.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs rename to Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs index d3549aef55..57723e3c53 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs +++ b/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs @@ -15,21 +15,24 @@ using Emby.XmlTv.Entities; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv.Listings +namespace Emby.Server.Implementations.LiveTv.Listings { public class XmlTvListingsProvider : IListingsProvider { private readonly IServerConfigurationManager _config; private readonly IHttpClient _httpClient; private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; - public XmlTvListingsProvider(IServerConfigurationManager config, IHttpClient httpClient, ILogger logger) + public XmlTvListingsProvider(IServerConfigurationManager config, IHttpClient httpClient, ILogger logger, IFileSystem fileSystem) { _config = config; _httpClient = httpClient; _logger = logger; + _fileSystem = fileSystem; } public string Name @@ -58,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings var cacheFilename = DateTime.UtcNow.DayOfYear.ToString(CultureInfo.InvariantCulture) + "-" + DateTime.UtcNow.Hour.ToString(CultureInfo.InvariantCulture) + ".xml"; var cacheFile = Path.Combine(_config.ApplicationPaths.CachePath, "xmltv", cacheFilename); - if (File.Exists(cacheFile)) + if (_fileSystem.FileExists(cacheFile)) { return cacheFile; } @@ -70,7 +73,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings CancellationToken = cancellationToken, Url = path, Progress = new Progress(), - DecompressionMethod = DecompressionMethods.GZip, + DecompressionMethod = CompressionMethod.Gzip, // It's going to come back gzipped regardless of this value // So we need to make sure the decompression method is set to gzip @@ -78,13 +81,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings }).ConfigureAwait(false); - Directory.CreateDirectory(Path.GetDirectoryName(cacheFile)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(cacheFile)); - using (var stream = File.OpenRead(tempFile)) + using (var stream = _fileSystem.OpenRead(tempFile)) { using (var reader = new StreamReader(stream, Encoding.UTF8)) { - using (var fileStream = File.OpenWrite(cacheFile)) + using (var fileStream = _fileSystem.GetFileStream(cacheFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) { using (var writer = new StreamWriter(fileStream)) { @@ -138,10 +141,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings IsSeries = p.Episode != null, IsRepeat = p.IsRepeat, IsPremiere = p.Premiere != null, - IsKids = p.Categories.Any(c => info.KidsCategories.Contains(c, StringComparer.InvariantCultureIgnoreCase)), - IsMovie = p.Categories.Any(c => info.MovieCategories.Contains(c, StringComparer.InvariantCultureIgnoreCase)), - IsNews = p.Categories.Any(c => info.NewsCategories.Contains(c, StringComparer.InvariantCultureIgnoreCase)), - IsSports = p.Categories.Any(c => info.SportsCategories.Contains(c, StringComparer.InvariantCultureIgnoreCase)), + IsKids = p.Categories.Any(c => info.KidsCategories.Contains(c, StringComparer.OrdinalIgnoreCase)), + IsMovie = p.Categories.Any(c => info.MovieCategories.Contains(c, StringComparer.OrdinalIgnoreCase)), + IsNews = p.Categories.Any(c => info.NewsCategories.Contains(c, StringComparer.OrdinalIgnoreCase)), + IsSports = p.Categories.Any(c => info.SportsCategories.Contains(c, StringComparer.OrdinalIgnoreCase)), ImageUrl = p.Icon != null && !String.IsNullOrEmpty(p.Icon.Source) ? p.Icon.Source : null, HasImage = p.Icon != null && !String.IsNullOrEmpty(p.Icon.Source), OfficialRating = p.Rating != null && !String.IsNullOrEmpty(p.Rating.Value) ? p.Rating.Value : null, @@ -177,7 +180,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings if (channels != null) { - channels.ForEach(c => + foreach (var c in channels) { var channelNumber = info.GetMappedChannel(c.Number); var match = results.FirstOrDefault(r => string.Equals(r.Id, channelNumber, StringComparison.OrdinalIgnoreCase)); @@ -186,14 +189,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings { c.ImageUrl = match.Icon.Source; } - }); + } } } public Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings) { // Assume all urls are valid. check files for existence - if (!info.Path.StartsWith("http", StringComparison.OrdinalIgnoreCase) && !File.Exists(info.Path)) + if (!info.Path.StartsWith("http", StringComparison.OrdinalIgnoreCase) && !_fileSystem.FileExists(info.Path)) { throw new FileNotFoundException("Could not find the XmlTv file specified:", info.Path); } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveStreamHelper.cs b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs similarity index 94% rename from MediaBrowser.Server.Implementations/LiveTv/LiveStreamHelper.cs rename to Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs index 336c32baef..a338ae23ae 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveStreamHelper.cs +++ b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs @@ -8,7 +8,7 @@ using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class LiveStreamHelper { @@ -57,7 +57,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv mediaSource.RunTimeTicks = null; } - var audioStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == Model.Entities.MediaStreamType.Audio); + var audioStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Audio); if (audioStream == null || audioStream.Index == -1) { @@ -68,7 +68,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv mediaSource.DefaultAudioStreamIndex = audioStream.Index; } - var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == Model.Entities.MediaStreamType.Video); + var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Video); if (videoStream != null) { if (!videoStream.BitRate.HasValue) diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs b/Emby.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs similarity index 90% rename from MediaBrowser.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs rename to Emby.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs index 57d1d79e16..2be6427372 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.LiveTv; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class LiveTvConfigurationFactory : IConfigurationFactory { diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs similarity index 99% rename from MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs rename to Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs index c7a2d295d9..4e71615210 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -14,7 +14,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class LiveTvDtoService { diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs rename to Emby.Server.Implementations/LiveTv/LiveTvManager.cs index 93fc5459a1..adec668589 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs @@ -25,8 +25,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.IO; -using IniParser; -using IniParser.Model; using MediaBrowser.Common.Events; using MediaBrowser.Common.IO; using MediaBrowser.Common.Security; @@ -37,9 +35,9 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -using MediaBrowser.Server.Implementations.LiveTv.Listings; +using Emby.Server.Implementations.LiveTv.Listings; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { /// /// Class LiveTvManager @@ -2967,43 +2965,46 @@ namespace MediaBrowser.Server.Implementations.LiveTv public List GetSatIniMappings() { - var names = GetType().Assembly.GetManifestResourceNames().Where(i => i.IndexOf("SatIp.ini", StringComparison.OrdinalIgnoreCase) != -1).ToList(); + return new List(); + //var names = GetType().Assembly.GetManifestResourceNames().Where(i => i.IndexOf("SatIp.ini", StringComparison.OrdinalIgnoreCase) != -1).ToList(); - return names.Select(GetSatIniMappings).Where(i => i != null).DistinctBy(i => i.Value.Split('|')[0]).ToList(); + //return names.Select(GetSatIniMappings).Where(i => i != null).DistinctBy(i => i.Value.Split('|')[0]).ToList(); } public NameValuePair GetSatIniMappings(string resource) { - using (var stream = GetType().Assembly.GetManifestResourceStream(resource)) - { - using (var reader = new StreamReader(stream)) - { - var parser = new StreamIniDataParser(); - IniData data = parser.ReadData(reader); + return new NameValuePair(); + //using (var stream = GetType().Assembly.GetManifestResourceStream(resource)) + //{ + // using (var reader = new StreamReader(stream)) + // { + // var parser = new StreamIniDataParser(); + // IniData data = parser.ReadData(reader); - var satType1 = data["SATTYPE"]["1"]; - var satType2 = data["SATTYPE"]["2"]; + // var satType1 = data["SATTYPE"]["1"]; + // var satType2 = data["SATTYPE"]["2"]; - if (string.IsNullOrWhiteSpace(satType2)) - { - return null; - } + // if (string.IsNullOrWhiteSpace(satType2)) + // { + // return null; + // } - var srch = "SatIp.ini."; - var filename = Path.GetFileName(resource); + // var srch = "SatIp.ini."; + // var filename = Path.GetFileName(resource); - return new NameValuePair - { - Name = satType1 + " " + satType2, - Value = satType2 + "|" + filename.Substring(filename.IndexOf(srch) + srch.Length) - }; - } - } + // return new NameValuePair + // { + // Name = satType1 + " " + satType2, + // Value = satType2 + "|" + filename.Substring(filename.IndexOf(srch) + srch.Length) + // }; + // } + //} } public Task> GetSatChannelScanResult(TunerHostInfo info, CancellationToken cancellationToken) { - return new TunerHosts.SatIp.ChannelScan(_logger).Scan(info, cancellationToken); + return Task.FromResult(new List()); + //return new TunerHosts.SatIp.ChannelScan(_logger).Scan(info, cancellationToken); } public Task> GetChannelsForListingsProvider(string id, CancellationToken cancellationToken) diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs rename to Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs index 79d321e7e2..e0a35686ec 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs @@ -15,7 +15,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Dlna; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class LiveTvMediaSourceProvider : IMediaSourceProvider { @@ -164,7 +164,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv // Null this out so that it will be treated like a live stream mediaSource.RunTimeTicks = null; - var audioStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == Model.Entities.MediaStreamType.Audio); + var audioStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Audio); if (audioStream == null || audioStream.Index == -1) { @@ -175,7 +175,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv mediaSource.DefaultAudioStreamIndex = audioStream.Index; } - var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == Model.Entities.MediaStreamType.Video); + var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Video); if (videoStream != null) { if (!videoStream.BitRate.HasValue) diff --git a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs b/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs rename to Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs index 3f0538bd0b..f5d298af4c 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs +++ b/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class ProgramImageProvider : IDynamicImageProvider, IHasItemChangeMonitor, IHasOrder { diff --git a/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs b/Emby.Server.Implementations/LiveTv/RecordingImageProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs rename to Emby.Server.Implementations/LiveTv/RecordingImageProvider.cs index 25678c29d3..47663bdbc5 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs +++ b/Emby.Server.Implementations/LiveTv/RecordingImageProvider.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class RecordingImageProvider : IDynamicImageProvider, IHasItemChangeMonitor { diff --git a/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs b/Emby.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs rename to Emby.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs index bf0ed90eab..f2806292d0 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs +++ b/Emby.Server.Implementations/LiveTv/RefreshChannelsScheduledTask.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.LiveTv +namespace Emby.Server.Implementations.LiveTv { public class RefreshChannelsScheduledTask : IScheduledTask, IConfigurableScheduledTask { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs similarity index 99% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs index 0fe74798f5..ad43a611b8 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs @@ -15,7 +15,7 @@ using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Serialization; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts +namespace Emby.Server.Implementations.LiveTv.TunerHosts { public abstract class BaseTunerHost { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs index f039da9274..f2e48fbc0f 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs @@ -14,7 +14,7 @@ using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Events; using MediaBrowser.Model.Serialization; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun +namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun { public class HdHomerunDiscovery : IServerEntryPoint { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs index a32f4cca23..2d75367d96 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs @@ -24,7 +24,7 @@ using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Net; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun +namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun { public class HdHomerunHost : BaseTunerHost, ITunerHost, IConfigurableTunerHost { @@ -59,7 +59,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun private string GetChannelId(TunerHostInfo info, Channels i) { - var id = ChannelIdPrefix + i.GuideNumber.ToString(CultureInfo.InvariantCulture); + var id = ChannelIdPrefix + i.GuideNumber; if (info.DataVersion >= 1) { @@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun return lineup.Select(i => new ChannelInfo { Name = i.GuideName, - Number = i.GuideNumber.ToString(CultureInfo.InvariantCulture), + Number = i.GuideNumber, Id = GetChannelId(info, i), IsFavorite = i.Favorite, TunerHostId = info.Id, diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs similarity index 95% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs index 7bb4dc92e0..1e8057f875 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunLiveStream.cs @@ -10,14 +10,8 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Server.Implementations.LiveTv.EmbyTV; -using System.Collections.Generic; -using System.Linq; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun +namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun { public class HdHomerunLiveStream : LiveStream, IDirectStreamProvider { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs index b85b3810a3..756c3377c6 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs @@ -19,9 +19,8 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Serialization; -using MediaBrowser.Server.Implementations.LiveTv.EmbyTV; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts +namespace Emby.Server.Implementations.LiveTv.TunerHosts { public class M3UTunerHost : BaseTunerHost, ITunerHost, IConfigurableTunerHost { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs similarity index 98% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs index 3bfe902dfb..8784d57531 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs @@ -14,7 +14,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts +namespace Emby.Server.Implementations.LiveTv.TunerHosts { public class M3uParser { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs index 8ff3fd6c17..360a2cee78 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts +namespace Emby.Server.Implementations.LiveTv.TunerHosts { public class MulticastStream { diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs similarity index 97% rename from MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs rename to Emby.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs index c1566b9006..7605641b22 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Logging; -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts +namespace Emby.Server.Implementations.LiveTv.TunerHosts { public class QueueStream { diff --git a/Emby.Server.Implementations/Logging/PatternsLogger.cs b/Emby.Server.Implementations/Logging/PatternsLogger.cs new file mode 100644 index 0000000000..6dbf33d617 --- /dev/null +++ b/Emby.Server.Implementations/Logging/PatternsLogger.cs @@ -0,0 +1,63 @@ +using Patterns.Logging; +using System; + +namespace Emby.Server.Implementations.Logging +{ + public class PatternsLogger : ILogger + { + private readonly MediaBrowser.Model.Logging.ILogger _logger; + + public PatternsLogger() + : this(new MediaBrowser.Model.Logging.NullLogger()) + { + } + + public PatternsLogger(MediaBrowser.Model.Logging.ILogger logger) + { + _logger = logger; + } + + public void Debug(string message, params object[] paramList) + { + _logger.Debug(message, paramList); + } + + public void Error(string message, params object[] paramList) + { + _logger.Error(message, paramList); + } + + public void ErrorException(string message, Exception exception, params object[] paramList) + { + _logger.ErrorException(message, exception, paramList); + } + + public void Fatal(string message, params object[] paramList) + { + _logger.Fatal(message, paramList); + } + + public void FatalException(string message, Exception exception, params object[] paramList) + { + _logger.FatalException(message, exception, paramList); + } + + public void Info(string message, params object[] paramList) + { + _logger.Info(message, paramList); + } + + public void Warn(string message, params object[] paramList) + { + _logger.Warn(message, paramList); + } + + public void Log(LogSeverity severity, string message, params object[] paramList) + { + } + + public void LogMultiline(string message, LogSeverity severity, System.Text.StringBuilder additionalContent) + { + } + } +} diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs b/Emby.Server.Implementations/MediaEncoder/EncodingManager.cs similarity index 97% rename from MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs rename to Emby.Server.Implementations/MediaEncoder/EncodingManager.cs index 9f1744cc90..204e04061d 100644 --- a/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs +++ b/Emby.Server.Implementations/MediaEncoder/EncodingManager.cs @@ -18,7 +18,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Controller.Library; -namespace MediaBrowser.Server.Implementations.MediaEncoder +namespace Emby.Server.Implementations.MediaEncoder { public class EncodingManager : IEncodingManager { @@ -143,11 +143,11 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder var container = video.Container; var tempFile = await _encoder.ExtractVideoImage(inputPath, container, protocol, video.Video3DFormat, time, cancellationToken).ConfigureAwait(false); - File.Copy(tempFile, path, true); + _fileSystem.CopyFile(tempFile, path, true); try { - File.Delete(tempFile); + _fileSystem.DeleteFile(tempFile); } catch { @@ -205,7 +205,7 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder return _fileSystem.GetFilePaths(path) .ToList(); } - catch (DirectoryNotFoundException) + catch (IOException) { return new List(); } diff --git a/Emby.Server.Implementations/News/NewsEntryPoint.cs b/Emby.Server.Implementations/News/NewsEntryPoint.cs new file mode 100644 index 0000000000..1497d066fe --- /dev/null +++ b/Emby.Server.Implementations/News/NewsEntryPoint.cs @@ -0,0 +1,260 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Notifications; +using MediaBrowser.Controller.Plugins; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.News; +using MediaBrowser.Model.Notifications; +using MediaBrowser.Model.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Xml; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Threading; + +namespace Emby.Server.Implementations.News +{ + public class NewsEntryPoint : IServerEntryPoint + { + private ITimer _timer; + private readonly IHttpClient _httpClient; + private readonly IApplicationPaths _appPaths; + private readonly IFileSystem _fileSystem; + private readonly ILogger _logger; + private readonly IJsonSerializer _json; + + private readonly INotificationManager _notifications; + private readonly IUserManager _userManager; + + private readonly TimeSpan _frequency = TimeSpan.FromHours(24); + private readonly ITimerFactory _timerFactory; + + public NewsEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IJsonSerializer json, INotificationManager notifications, IUserManager userManager, ITimerFactory timerFactory) + { + _httpClient = httpClient; + _appPaths = appPaths; + _fileSystem = fileSystem; + _logger = logger; + _json = json; + _notifications = notifications; + _userManager = userManager; + _timerFactory = timerFactory; + } + + public void Run() + { + _timer = _timerFactory.Create(OnTimerFired, null, TimeSpan.FromMilliseconds(500), _frequency); + } + + /// + /// Called when [timer fired]. + /// + /// The state. + private async void OnTimerFired(object state) + { + var path = Path.Combine(_appPaths.CachePath, "news.json"); + + try + { + await DownloadNews(path).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error downloading news", ex); + } + } + + private async Task DownloadNews(string path) + { + DateTime? lastUpdate = null; + + if (_fileSystem.FileExists(path)) + { + lastUpdate = _fileSystem.GetLastWriteTimeUtc(path); + } + + var requestOptions = new HttpRequestOptions + { + Url = "http://emby.media/community/index.php?/blog/rss/1-media-browser-developers-blog", + Progress = new Progress(), + UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.42 Safari/537.36", + BufferContent = false + }; + + using (var stream = await _httpClient.Get(requestOptions).ConfigureAwait(false)) + { + using (var reader = XmlReader.Create(stream)) + { + var news = ParseRssItems(reader).ToList(); + + _json.SerializeToFile(news, path); + + await CreateNotifications(news, lastUpdate, CancellationToken.None).ConfigureAwait(false); + } + } + } + + private Task CreateNotifications(List items, DateTime? lastUpdate, CancellationToken cancellationToken) + { + if (lastUpdate.HasValue) + { + items = items.Where(i => i.Date.ToUniversalTime() >= lastUpdate.Value) + .ToList(); + } + + var tasks = items.Select(i => _notifications.SendNotification(new NotificationRequest + { + Date = i.Date, + Name = i.Title, + Description = i.Description, + Url = i.Link, + UserIds = _userManager.Users.Select(u => u.Id.ToString("N")).ToList() + + }, cancellationToken)); + + return Task.WhenAll(tasks); + } + + private IEnumerable ParseRssItems(XmlReader reader) + { + reader.MoveToContent(); + reader.Read(); + + while (!reader.EOF) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "channel": + { + using (var subReader = reader.ReadSubtree()) + { + return ParseFromChannelNode(subReader); + } + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + return new List(); + } + + private IEnumerable ParseFromChannelNode(XmlReader reader) + { + var list = new List(); + + reader.MoveToContent(); + reader.Read(); + + while (!reader.EOF) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "item": + { + using (var subReader = reader.ReadSubtree()) + { + list.Add(ParseItem(subReader)); + } + break; + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + return list; + } + + private NewsItem ParseItem(XmlReader reader) + { + var item = new NewsItem(); + + reader.MoveToContent(); + reader.Read(); + + while (!reader.EOF) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "title": + { + item.Title = reader.ReadElementContentAsString(); + break; + } + case "link": + { + item.Link = reader.ReadElementContentAsString(); + break; + } + case "description": + { + item.DescriptionHtml = reader.ReadElementContentAsString(); + item.Description = item.DescriptionHtml.StripHtml(); + break; + } + case "pubDate": + { + var date = reader.ReadElementContentAsString(); + DateTime parsedDate; + + if (DateTime.TryParse(date, out parsedDate)) + { + item.Date = parsedDate; + } + break; + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + return item; + } + + public void Dispose() + { + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } + } + } +} diff --git a/MediaBrowser.Server.Implementations/News/NewsService.cs b/Emby.Server.Implementations/News/NewsService.cs similarity index 95% rename from MediaBrowser.Server.Implementations/News/NewsService.cs rename to Emby.Server.Implementations/News/NewsService.cs index 0059ba4214..80e7996342 100644 --- a/MediaBrowser.Server.Implementations/News/NewsService.cs +++ b/Emby.Server.Implementations/News/NewsService.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; -namespace MediaBrowser.Server.Implementations.News +namespace Emby.Server.Implementations.News { public class NewsService : INewsService { @@ -25,7 +25,7 @@ namespace MediaBrowser.Server.Implementations.News { return GetProductNewsInternal(query); } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { // No biggie return new QueryResult @@ -33,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.News Items = new NewsItem[] { } }; } - catch (FileNotFoundException) + catch (IOException) { // No biggie return new QueryResult diff --git a/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs b/Emby.Server.Implementations/Notifications/CoreNotificationTypes.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs rename to Emby.Server.Implementations/Notifications/CoreNotificationTypes.cs index 0f2629f587..f9fb98f85e 100644 --- a/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs +++ b/Emby.Server.Implementations/Notifications/CoreNotificationTypes.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Notifications +namespace Emby.Server.Implementations.Notifications { public class CoreNotificationTypes : INotificationTypeFactory { diff --git a/MediaBrowser.Server.Implementations/Notifications/IConfigurableNotificationService.cs b/Emby.Server.Implementations/Notifications/IConfigurableNotificationService.cs similarity index 70% rename from MediaBrowser.Server.Implementations/Notifications/IConfigurableNotificationService.cs rename to Emby.Server.Implementations/Notifications/IConfigurableNotificationService.cs index cdfd0f640f..d74667c486 100644 --- a/MediaBrowser.Server.Implementations/Notifications/IConfigurableNotificationService.cs +++ b/Emby.Server.Implementations/Notifications/IConfigurableNotificationService.cs @@ -1,4 +1,4 @@ -namespace MediaBrowser.Server.Implementations.Notifications +namespace Emby.Server.Implementations.Notifications { public interface IConfigurableNotificationService { diff --git a/MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs b/Emby.Server.Implementations/Notifications/InternalNotificationService.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs rename to Emby.Server.Implementations/Notifications/InternalNotificationService.cs index 4a625f0fb0..61c564f188 100644 --- a/MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs +++ b/Emby.Server.Implementations/Notifications/InternalNotificationService.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using System; -namespace MediaBrowser.Server.Implementations.Notifications +namespace Emby.Server.Implementations.Notifications { public class InternalNotificationService : INotificationService, IConfigurableNotificationService { diff --git a/MediaBrowser.Server.Implementations/Notifications/NotificationConfigurationFactory.cs b/Emby.Server.Implementations/Notifications/NotificationConfigurationFactory.cs similarity index 90% rename from MediaBrowser.Server.Implementations/Notifications/NotificationConfigurationFactory.cs rename to Emby.Server.Implementations/Notifications/NotificationConfigurationFactory.cs index a336eba0ed..a7c5b12337 100644 --- a/MediaBrowser.Server.Implementations/Notifications/NotificationConfigurationFactory.cs +++ b/Emby.Server.Implementations/Notifications/NotificationConfigurationFactory.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.Notifications; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Notifications +namespace Emby.Server.Implementations.Notifications { public class NotificationConfigurationFactory : IConfigurationFactory { diff --git a/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs b/Emby.Server.Implementations/Notifications/NotificationManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs rename to Emby.Server.Implementations/Notifications/NotificationManager.cs index f19ff8a5f2..db79804978 100644 --- a/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs +++ b/Emby.Server.Implementations/Notifications/NotificationManager.cs @@ -13,7 +13,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Notifications +namespace Emby.Server.Implementations.Notifications { public class NotificationManager : INotificationManager { diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs b/Emby.Server.Implementations/Notifications/Notifications.cs similarity index 97% rename from MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs rename to Emby.Server.Implementations/Notifications/Notifications.cs index f3d1dc8f9b..2d441c18cc 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs +++ b/Emby.Server.Implementations/Notifications/Notifications.cs @@ -22,8 +22,9 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications +namespace Emby.Server.Implementations.Notifications { /// /// Creates notifications for various system events @@ -40,14 +41,15 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications private readonly ILibraryManager _libraryManager; private readonly ISessionManager _sessionManager; private readonly IServerApplicationHost _appHost; + private readonly ITimerFactory _timerFactory; - private Timer LibraryUpdateTimer { get; set; } + private ITimer LibraryUpdateTimer { get; set; } private readonly object _libraryChangedSyncLock = new object(); private readonly IConfigurationManager _config; private readonly IDeviceManager _deviceManager; - public Notifications(IInstallationManager installationManager, IUserManager userManager, ILogger logger, ITaskManager taskManager, INotificationManager notificationManager, ILibraryManager libraryManager, ISessionManager sessionManager, IServerApplicationHost appHost, IConfigurationManager config, IDeviceManager deviceManager) + public Notifications(IInstallationManager installationManager, IUserManager userManager, ILogger logger, ITaskManager taskManager, INotificationManager notificationManager, ILibraryManager libraryManager, ISessionManager sessionManager, IServerApplicationHost appHost, IConfigurationManager config, IDeviceManager deviceManager, ITimerFactory timerFactory) { _installationManager = installationManager; _userManager = userManager; @@ -59,6 +61,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications _appHost = appHost; _config = config; _deviceManager = deviceManager; + _timerFactory = timerFactory; } public void Run() @@ -332,7 +335,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications { if (LibraryUpdateTimer == null) { - LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, 5000, + LibraryUpdateTimer = _timerFactory.Create(LibraryUpdateTimerCallback, null, 5000, Timeout.Infinite); } else diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs b/Emby.Server.Implementations/Notifications/WebSocketNotifier.cs similarity index 95% rename from MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs rename to Emby.Server.Implementations/Notifications/WebSocketNotifier.cs index 916b4a6224..8b3367217c 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs +++ b/Emby.Server.Implementations/Notifications/WebSocketNotifier.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Notifications; using MediaBrowser.Controller.Plugins; using System.Linq; -namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications +namespace Emby.Server.Implementations.Notifications { /// /// Notifies clients anytime a notification is added or udpated diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/Emby.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs rename to Emby.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs index ed1d21d9ae..88f4f1f815 100644 --- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs +++ b/Emby.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs @@ -20,9 +20,9 @@ using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -using MediaBrowser.Server.Implementations.ScheduledTasks; +using Emby.Server.Implementations.ScheduledTasks; -namespace MediaBrowser.Server.Implementations.Persistence +namespace Emby.Server.Implementations.Persistence { public class CleanDatabaseScheduledTask : IScheduledTask { @@ -37,6 +37,7 @@ namespace MediaBrowser.Server.Implementations.Persistence public const int MigrationVersion = 23; public static bool EnableUnavailableMessage = false; + const int LatestSchemaVersion = 109; public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IHttpServer httpServer, ILocalizationManager localization, ITaskManager taskManager) { @@ -113,9 +114,9 @@ namespace MediaBrowser.Server.Implementations.Persistence _config.SaveConfiguration(); } - if (_config.Configuration.SchemaVersion < SqliteItemRepository.LatestSchemaVersion) + if (_config.Configuration.SchemaVersion < LatestSchemaVersion) { - _config.Configuration.SchemaVersion = SqliteItemRepository.LatestSchemaVersion; + _config.Configuration.SchemaVersion = LatestSchemaVersion; _config.SaveConfiguration(); } diff --git a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs b/Emby.Server.Implementations/Photos/PhotoAlbumImageProvider.cs similarity index 91% rename from MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs rename to Emby.Server.Implementations/Photos/PhotoAlbumImageProvider.cs index ab03f5aaa9..cc1756f960 100644 --- a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs +++ b/Emby.Server.Implementations/Photos/PhotoAlbumImageProvider.cs @@ -5,12 +5,11 @@ using MediaBrowser.Controller.Providers; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; +using Emby.Server.Implementations.Images; using MediaBrowser.Model.IO; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Server.Implementations.Photos +namespace Emby.Server.Implementations.Photos { public class PhotoAlbumImageProvider : BaseDynamicImageProvider { diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs b/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs rename to Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs index 0249b85ee5..ef7d6dba82 100644 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs +++ b/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs @@ -6,10 +6,10 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Playlists; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using MediaBrowser.Server.Implementations.Photos; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Emby.Server.Implementations.Images; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; @@ -17,7 +17,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Playlists +namespace Emby.Server.Implementations.Playlists { public class PlaylistImageProvider : BaseDynamicImageProvider { diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs b/Emby.Server.Implementations/Playlists/PlaylistManager.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs rename to Emby.Server.Implementations/Playlists/PlaylistManager.cs index 13202d94c2..9583141e0d 100644 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs +++ b/Emby.Server.Implementations/Playlists/PlaylistManager.cs @@ -16,7 +16,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Playlists +namespace Emby.Server.Implementations.Playlists { public class PlaylistManager : IPlaylistManager { @@ -267,9 +267,10 @@ namespace MediaBrowser.Server.Implementations.Playlists public Folder GetPlaylistsFolder(string userId) { - return _libraryManager.RootFolder.Children.OfType() - .FirstOrDefault() ?? _libraryManager.GetUserRootFolder().Children.OfType() - .FirstOrDefault(); + var typeName = "PlaylistsFolder"; + + return _libraryManager.RootFolder.Children.OfType().FirstOrDefault(i => string.Equals(i.GetType().Name, typeName, StringComparison.Ordinal)) ?? + _libraryManager.GetUserRootFolder().Children.OfType().FirstOrDefault(i => string.Equals(i.GetType().Name, typeName, StringComparison.Ordinal)); } } } diff --git a/Emby.Server.Implementations/Properties/AssemblyInfo.cs b/Emby.Server.Implementations/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..ed7f9631fa --- /dev/null +++ b/Emby.Server.Implementations/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +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("Emby.Server.Implementations")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Emby.Server.Implementations")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// 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.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs similarity index 92% rename from MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs rename to Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs index 63941f3b6d..d758158479 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs @@ -16,7 +16,7 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Class ChapterImagesTask @@ -32,12 +32,6 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// private readonly ILibraryManager _libraryManager; - /// - /// The current new item timer - /// - /// The new item timer. - private Timer NewItemTimer { get; set; } - private readonly IItemRepository _itemRepo; private readonly IApplicationPaths _appPaths; @@ -48,9 +42,6 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// /// Initializes a new instance of the class. /// - /// The log manager. - /// The library manager. - /// The item repo. public ChapterImagesTask(ILogManager logManager, ILibraryManager libraryManager, IItemRepository itemRepo, IApplicationPaths appPaths, IEncodingManager encodingManager, IFileSystem fileSystem) { _logger = logManager.GetLogger(GetType().Name); @@ -115,7 +106,7 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks { previouslyFailedImages = new List(); } - catch (DirectoryNotFoundException) + catch (IOException) { previouslyFailedImages = new List(); } diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs b/Emby.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs similarity index 97% rename from MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs rename to Emby.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs index f90e61902c..51122226bd 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/PeopleValidationTask.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Class PeopleValidationTask diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs b/Emby.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs rename to Emby.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs index 1d81ec043b..e619b68649 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Plugin Update Task diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs b/Emby.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs rename to Emby.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs index f10dbcfe7d..749233fa19 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs @@ -8,7 +8,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Class RefreshIntrosTask diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs b/Emby.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs similarity index 96% rename from MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs rename to Emby.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs index e695adb547..fb07b8e99a 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/RefreshMediaLibraryTask.cs @@ -1,13 +1,13 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; -using MediaBrowser.Server.Implementations.Library; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.Library; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Class RefreshMediaLibraryTask diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs b/Emby.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs rename to Emby.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs index e44eacf3d4..28fd8b68cb 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/SystemUpdateTask.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.ScheduledTasks +namespace Emby.Server.Implementations.ScheduledTasks { /// /// Plugin Update Task diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/Emby.Server.Implementations/ServerManager/ServerManager.cs similarity index 93% rename from MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs rename to Emby.Server.Implementations/ServerManager/ServerManager.cs index 4e706324f9..83ce0b6a35 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/Emby.Server.Implementations/ServerManager/ServerManager.cs @@ -10,14 +10,14 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; -using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Services; +using MediaBrowser.Model.TextEncoding; -namespace MediaBrowser.Server.Implementations.ServerManager +namespace Emby.Server.Implementations.ServerManager { /// /// Manages the Http Server, Udp Server and WebSocket connections @@ -76,6 +76,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager private bool _disposed; private readonly IMemoryStreamProvider _memoryStreamProvider; + private readonly IEncoding _textEncoding; /// /// Initializes a new instance of the class. @@ -85,7 +86,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// The logger. /// The configuration manager. /// applicationHost - public ServerManager(IServerApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, IMemoryStreamProvider memoryStreamProvider) + public ServerManager(IServerApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, IMemoryStreamProvider memoryStreamProvider, IEncoding textEncoding) { if (applicationHost == null) { @@ -105,6 +106,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager _applicationHost = applicationHost; ConfigurationManager = configurationManager; _memoryStreamProvider = memoryStreamProvider; + _textEncoding = textEncoding; } /// @@ -127,15 +129,13 @@ namespace MediaBrowser.Server.Implementations.ServerManager HttpServer = _applicationHost.Resolve(); HttpServer.StartServer(urlPrefixes, certificatePath); } - catch (SocketException ex) - { - _logger.ErrorException("The http server is unable to start due to a Socket error. This can occasionally happen when the operating system takes longer than usual to release the IP bindings from the previous session. This can take up to five minutes. Please try waiting or rebooting the system.", ex); - - throw; - } catch (Exception ex) { - _logger.ErrorException("Error starting Http Server", ex); + var msg = string.Equals(ex.GetType().Name, "SocketException", StringComparison.OrdinalIgnoreCase) + ? "The http server is unable to start due to a Socket error. This can occasionally happen when the operating system takes longer than usual to release the IP bindings from the previous session. This can take up to five minutes. Please try waiting or rebooting the system." + : "Error starting Http Server"; + + _logger.ErrorException(msg, ex); throw; } @@ -155,7 +155,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager return; } - var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger, _memoryStreamProvider) + var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger, _memoryStreamProvider, _textEncoding) { OnReceive = ProcessWebSocketMessageReceived, Url = e.Url, diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/Emby.Server.Implementations/ServerManager/WebSocketConnection.cs similarity index 95% rename from MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs rename to Emby.Server.Implementations/ServerManager/WebSocketConnection.cs index c1bd8ed6b0..dd17edea52 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/Emby.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -12,9 +12,10 @@ using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Services; +using MediaBrowser.Model.TextEncoding; using UniversalDetector; -namespace MediaBrowser.Server.Implementations.ServerManager +namespace Emby.Server.Implementations.ServerManager { /// /// Class WebSocketConnection @@ -77,6 +78,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// The query string. public QueryParamCollection QueryString { get; set; } private readonly IMemoryStreamProvider _memoryStreamProvider; + private readonly IEncoding _textEncoding; /// /// Initializes a new instance of the class. @@ -86,7 +88,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// The json serializer. /// The logger. /// socket - public WebSocketConnection(IWebSocket socket, string remoteEndPoint, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamProvider memoryStreamProvider) + public WebSocketConnection(IWebSocket socket, string remoteEndPoint, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamProvider memoryStreamProvider, IEncoding textEncoding) { if (socket == null) { @@ -113,6 +115,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager RemoteEndPoint = remoteEndPoint; _logger = logger; _memoryStreamProvider = memoryStreamProvider; + _textEncoding = textEncoding; socket.Closed += socket_Closed; } @@ -138,11 +141,11 @@ namespace MediaBrowser.Server.Implementations.ServerManager if (string.Equals(charset, "utf-8", StringComparison.OrdinalIgnoreCase)) { - OnReceiveInternal(Encoding.UTF8.GetString(bytes)); + OnReceiveInternal(Encoding.UTF8.GetString(bytes, 0, bytes.Length)); } else { - OnReceiveInternal(Encoding.ASCII.GetString(bytes)); + OnReceiveInternal(_textEncoding.GetASCIIString(bytes, 0, bytes.Length)); } } private string DetectCharset(byte[] bytes) diff --git a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs b/Emby.Server.Implementations/Session/HttpSessionController.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Session/HttpSessionController.cs rename to Emby.Server.Implementations/Session/HttpSessionController.cs index f54c452cca..cea5d9b406 100644 --- a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs +++ b/Emby.Server.Implementations/Session/HttpSessionController.cs @@ -12,7 +12,7 @@ using System.Net; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Session +namespace Emby.Server.Implementations.Session { public class HttpSessionController : ISessionController, IDisposable { diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Session/SessionManager.cs rename to Emby.Server.Implementations/Session/SessionManager.cs index 6d86ff0919..960fe07397 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/Emby.Server.Implementations/Session/SessionManager.cs @@ -30,8 +30,9 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Threading; -namespace MediaBrowser.Server.Implementations.Session +namespace Emby.Server.Implementations.Session { /// /// Class SessionManager @@ -61,6 +62,7 @@ namespace MediaBrowser.Server.Implementations.Session private readonly IAuthenticationRepository _authRepo; private readonly IDeviceManager _deviceManager; + private readonly ITimerFactory _timerFactory; /// /// The _active connections @@ -94,7 +96,7 @@ namespace MediaBrowser.Server.Implementations.Session private readonly SemaphoreSlim _sessionLock = new SemaphoreSlim(1, 1); - public SessionManager(IUserDataManager userDataManager, ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager, IMediaSourceManager mediaSourceManager) + public SessionManager(IUserDataManager userDataManager, ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager, IMediaSourceManager mediaSourceManager, ITimerFactory timerFactory) { _userDataManager = userDataManager; _logger = logger; @@ -109,6 +111,7 @@ namespace MediaBrowser.Server.Implementations.Session _authRepo = authRepo; _deviceManager = deviceManager; _mediaSourceManager = mediaSourceManager; + _timerFactory = timerFactory; _deviceManager.DeviceOptionsUpdated += _deviceManager_DeviceOptionsUpdated; } @@ -503,13 +506,13 @@ namespace MediaBrowser.Server.Implementations.Session return users; } - private Timer _idleTimer; + private ITimer _idleTimer; private void StartIdleCheckTimer() { if (_idleTimer == null) { - _idleTimer = new Timer(CheckForIdlePlayback, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); + _idleTimer = _timerFactory.Create(CheckForIdlePlayback, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); } } private void StopIdleCheckTimer() diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs rename to Emby.Server.Implementations/Session/SessionWebSocketListener.cs index 9d30135a78..336c2caee4 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Model.Services; -namespace MediaBrowser.Server.Implementations.Session +namespace Emby.Server.Implementations.Session { /// /// Class SessionWebSocketListener diff --git a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs b/Emby.Server.Implementations/Session/WebSocketController.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Session/WebSocketController.cs rename to Emby.Server.Implementations/Session/WebSocketController.cs index 765664299e..f0ff0b5ddd 100644 --- a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs +++ b/Emby.Server.Implementations/Session/WebSocketController.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Session +namespace Emby.Server.Implementations.Session { public class WebSocketController : ISessionController, IDisposable { diff --git a/MediaBrowser.Server.Implementations/Sorting/AirTimeComparer.cs b/Emby.Server.Implementations/Sorting/AirTimeComparer.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sorting/AirTimeComparer.cs rename to Emby.Server.Implementations/Sorting/AirTimeComparer.cs index 7e6a252cdc..bc05e9af3f 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AirTimeComparer.cs +++ b/Emby.Server.Implementations/Sorting/AirTimeComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class AirTimeComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs b/Emby.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs rename to Emby.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs index 91abbe34c9..494668cb9e 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs +++ b/Emby.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { class AiredEpisodeOrderComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs b/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs rename to Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs index 3c79b0c326..cd38340807 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs +++ b/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs @@ -5,7 +5,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class AlbumArtistComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/AlbumComparer.cs b/Emby.Server.Implementations/Sorting/AlbumComparer.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sorting/AlbumComparer.cs rename to Emby.Server.Implementations/Sorting/AlbumComparer.cs index f455d5c2bd..68f5f173e0 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AlbumComparer.cs +++ b/Emby.Server.Implementations/Sorting/AlbumComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class AlbumComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs b/Emby.Server.Implementations/Sorting/AlphanumComparator.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs rename to Emby.Server.Implementations/Sorting/AlphanumComparator.cs index 232bdb3b58..4bfcda1acf 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs +++ b/Emby.Server.Implementations/Sorting/AlphanumComparator.cs @@ -2,7 +2,7 @@ using System.Text; using MediaBrowser.Controller.Sorting; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class AlphanumComparator : IComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/ArtistComparer.cs b/Emby.Server.Implementations/Sorting/ArtistComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/ArtistComparer.cs rename to Emby.Server.Implementations/Sorting/ArtistComparer.cs index 9ff8a5ace3..edb195820f 100644 --- a/MediaBrowser.Server.Implementations/Sorting/ArtistComparer.cs +++ b/Emby.Server.Implementations/Sorting/ArtistComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class ArtistComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/BudgetComparer.cs b/Emby.Server.Implementations/Sorting/BudgetComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/BudgetComparer.cs rename to Emby.Server.Implementations/Sorting/BudgetComparer.cs index 87a7325c63..f3aef69f17 100644 --- a/MediaBrowser.Server.Implementations/Sorting/BudgetComparer.cs +++ b/Emby.Server.Implementations/Sorting/BudgetComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class BudgetComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/CommunityRatingComparer.cs b/Emby.Server.Implementations/Sorting/CommunityRatingComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/CommunityRatingComparer.cs rename to Emby.Server.Implementations/Sorting/CommunityRatingComparer.cs index bdd18a648b..396bbbdb97 100644 --- a/MediaBrowser.Server.Implementations/Sorting/CommunityRatingComparer.cs +++ b/Emby.Server.Implementations/Sorting/CommunityRatingComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class CommunityRatingComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/CriticRatingComparer.cs b/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/CriticRatingComparer.cs rename to Emby.Server.Implementations/Sorting/CriticRatingComparer.cs index 9484130cbc..877dbfcc1e 100644 --- a/MediaBrowser.Server.Implementations/Sorting/CriticRatingComparer.cs +++ b/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class CriticRatingComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/DateCreatedComparer.cs b/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/DateCreatedComparer.cs rename to Emby.Server.Implementations/Sorting/DateCreatedComparer.cs index 9862f0a8a6..c436fcb4a3 100644 --- a/MediaBrowser.Server.Implementations/Sorting/DateCreatedComparer.cs +++ b/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class DateCreatedComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs b/Emby.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs rename to Emby.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs index 5080edffd5..fc92505ac4 100644 --- a/MediaBrowser.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs +++ b/Emby.Server.Implementations/Sorting/DateLastMediaAddedComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class DateLastMediaAddedComparer : IUserBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/DatePlayedComparer.cs b/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sorting/DatePlayedComparer.cs rename to Emby.Server.Implementations/Sorting/DatePlayedComparer.cs index 3edf23020a..388d2772e8 100644 --- a/MediaBrowser.Server.Implementations/Sorting/DatePlayedComparer.cs +++ b/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class DatePlayedComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/GameSystemComparer.cs b/Emby.Server.Implementations/Sorting/GameSystemComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/GameSystemComparer.cs rename to Emby.Server.Implementations/Sorting/GameSystemComparer.cs index eb83b98e97..4ee30397dc 100644 --- a/MediaBrowser.Server.Implementations/Sorting/GameSystemComparer.cs +++ b/Emby.Server.Implementations/Sorting/GameSystemComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class GameSystemComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs b/Emby.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs rename to Emby.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs index 658708dba5..27485f09e2 100644 --- a/MediaBrowser.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs +++ b/Emby.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class IsFavoriteOrLikeComparer : IUserBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/IsFolderComparer.cs b/Emby.Server.Implementations/Sorting/IsFolderComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/IsFolderComparer.cs rename to Emby.Server.Implementations/Sorting/IsFolderComparer.cs index d2341d0651..756d13bd87 100644 --- a/MediaBrowser.Server.Implementations/Sorting/IsFolderComparer.cs +++ b/Emby.Server.Implementations/Sorting/IsFolderComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class IsFolderComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/IsPlayedComparer.cs b/Emby.Server.Implementations/Sorting/IsPlayedComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/IsPlayedComparer.cs rename to Emby.Server.Implementations/Sorting/IsPlayedComparer.cs index aebfbdb1c4..987dc54a51 100644 --- a/MediaBrowser.Server.Implementations/Sorting/IsPlayedComparer.cs +++ b/Emby.Server.Implementations/Sorting/IsPlayedComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class IsPlayedComparer : IUserBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs b/Emby.Server.Implementations/Sorting/IsUnplayedComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs rename to Emby.Server.Implementations/Sorting/IsUnplayedComparer.cs index f1c6a5a4eb..0f4e4c37e2 100644 --- a/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs +++ b/Emby.Server.Implementations/Sorting/IsUnplayedComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class IsUnplayedComparer : IUserBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/MetascoreComparer.cs b/Emby.Server.Implementations/Sorting/MetascoreComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/MetascoreComparer.cs rename to Emby.Server.Implementations/Sorting/MetascoreComparer.cs index bfd1626615..9759e02284 100644 --- a/MediaBrowser.Server.Implementations/Sorting/MetascoreComparer.cs +++ b/Emby.Server.Implementations/Sorting/MetascoreComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class MetascoreComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs b/Emby.Server.Implementations/Sorting/NameComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/NameComparer.cs rename to Emby.Server.Implementations/Sorting/NameComparer.cs index 49f86c485a..8ab5e5172c 100644 --- a/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs +++ b/Emby.Server.Implementations/Sorting/NameComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class NameComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/OfficialRatingComparer.cs b/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sorting/OfficialRatingComparer.cs rename to Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs index 3b1939b706..3eab4fccc9 100644 --- a/MediaBrowser.Server.Implementations/Sorting/OfficialRatingComparer.cs +++ b/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class OfficialRatingComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/PlayCountComparer.cs b/Emby.Server.Implementations/Sorting/PlayCountComparer.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sorting/PlayCountComparer.cs rename to Emby.Server.Implementations/Sorting/PlayCountComparer.cs index 8b14efffcf..aecad7c580 100644 --- a/MediaBrowser.Server.Implementations/Sorting/PlayCountComparer.cs +++ b/Emby.Server.Implementations/Sorting/PlayCountComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class PlayCountComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/PlayersComparer.cs b/Emby.Server.Implementations/Sorting/PlayersComparer.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sorting/PlayersComparer.cs rename to Emby.Server.Implementations/Sorting/PlayersComparer.cs index 5bcd080d7b..3b54517c3e 100644 --- a/MediaBrowser.Server.Implementations/Sorting/PlayersComparer.cs +++ b/Emby.Server.Implementations/Sorting/PlayersComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class PlayersComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/PremiereDateComparer.cs b/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/PremiereDateComparer.cs rename to Emby.Server.Implementations/Sorting/PremiereDateComparer.cs index ffe1fc24a1..d7219c86f4 100644 --- a/MediaBrowser.Server.Implementations/Sorting/PremiereDateComparer.cs +++ b/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class PremiereDateComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/ProductionYearComparer.cs b/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sorting/ProductionYearComparer.cs rename to Emby.Server.Implementations/Sorting/ProductionYearComparer.cs index 16d5313347..ea479419ac 100644 --- a/MediaBrowser.Server.Implementations/Sorting/ProductionYearComparer.cs +++ b/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class ProductionYearComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/RandomComparer.cs b/Emby.Server.Implementations/Sorting/RandomComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/RandomComparer.cs rename to Emby.Server.Implementations/Sorting/RandomComparer.cs index b1677331ac..1fbecde566 100644 --- a/MediaBrowser.Server.Implementations/Sorting/RandomComparer.cs +++ b/Emby.Server.Implementations/Sorting/RandomComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class RandomComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/RevenueComparer.cs b/Emby.Server.Implementations/Sorting/RevenueComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/RevenueComparer.cs rename to Emby.Server.Implementations/Sorting/RevenueComparer.cs index 6caa27ac39..62e43eac1e 100644 --- a/MediaBrowser.Server.Implementations/Sorting/RevenueComparer.cs +++ b/Emby.Server.Implementations/Sorting/RevenueComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class RevenueComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/RuntimeComparer.cs b/Emby.Server.Implementations/Sorting/RuntimeComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/RuntimeComparer.cs rename to Emby.Server.Implementations/Sorting/RuntimeComparer.cs index 793cb265e8..63c4758cb1 100644 --- a/MediaBrowser.Server.Implementations/Sorting/RuntimeComparer.cs +++ b/Emby.Server.Implementations/Sorting/RuntimeComparer.cs @@ -2,7 +2,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class RuntimeComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs b/Emby.Server.Implementations/Sorting/SeriesSortNameComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs rename to Emby.Server.Implementations/Sorting/SeriesSortNameComparer.cs index 6bc1264a48..b315d33c30 100644 --- a/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs +++ b/Emby.Server.Implementations/Sorting/SeriesSortNameComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { class SeriesSortNameComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs b/Emby.Server.Implementations/Sorting/SortNameComparer.cs similarity index 94% rename from MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs rename to Emby.Server.Implementations/Sorting/SortNameComparer.cs index 873753a2b2..f2a7648407 100644 --- a/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs +++ b/Emby.Server.Implementations/Sorting/SortNameComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { /// /// Class SortNameComparer diff --git a/MediaBrowser.Server.Implementations/Sorting/StartDateComparer.cs b/Emby.Server.Implementations/Sorting/StartDateComparer.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sorting/StartDateComparer.cs rename to Emby.Server.Implementations/Sorting/StartDateComparer.cs index 7e6f24ec1c..6be5f48830 100644 --- a/MediaBrowser.Server.Implementations/Sorting/StartDateComparer.cs +++ b/Emby.Server.Implementations/Sorting/StartDateComparer.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class StartDateComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sorting/StudioComparer.cs b/Emby.Server.Implementations/Sorting/StudioComparer.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sorting/StudioComparer.cs rename to Emby.Server.Implementations/Sorting/StudioComparer.cs index 83ab4dfc26..6735022afd 100644 --- a/MediaBrowser.Server.Implementations/Sorting/StudioComparer.cs +++ b/Emby.Server.Implementations/Sorting/StudioComparer.cs @@ -3,7 +3,7 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; using System.Linq; -namespace MediaBrowser.Server.Implementations.Sorting +namespace Emby.Server.Implementations.Sorting { public class StudioComparer : IBaseItemComparer { diff --git a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs b/Emby.Server.Implementations/Sync/AppSyncProvider.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs rename to Emby.Server.Implementations/Sync/AppSyncProvider.cs index 408ec717eb..d405a0ff94 100644 --- a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs +++ b/Emby.Server.Implementations/Sync/AppSyncProvider.cs @@ -7,7 +7,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class AppSyncProvider : ISyncProvider, IHasUniqueTargetIds, IHasSyncQuality, IHasDuplicateCheck { diff --git a/MediaBrowser.Server.Implementations/Sync/CloudSyncProfile.cs b/Emby.Server.Implementations/Sync/CloudSyncProfile.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Sync/CloudSyncProfile.cs rename to Emby.Server.Implementations/Sync/CloudSyncProfile.cs index f40b644989..1a78c8ae66 100644 --- a/MediaBrowser.Server.Implementations/Sync/CloudSyncProfile.cs +++ b/Emby.Server.Implementations/Sync/CloudSyncProfile.cs @@ -1,7 +1,7 @@ using MediaBrowser.Model.Dlna; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class CloudSyncProfile : DeviceProfile { diff --git a/MediaBrowser.Server.Implementations/Sync/IHasSyncQuality.cs b/Emby.Server.Implementations/Sync/IHasSyncQuality.cs similarity index 95% rename from MediaBrowser.Server.Implementations/Sync/IHasSyncQuality.cs rename to Emby.Server.Implementations/Sync/IHasSyncQuality.cs index e7eee09232..bec8b37a77 100644 --- a/MediaBrowser.Server.Implementations/Sync/IHasSyncQuality.cs +++ b/Emby.Server.Implementations/Sync/IHasSyncQuality.cs @@ -1,7 +1,7 @@ using MediaBrowser.Model.Sync; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public interface IHasSyncQuality { diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/Emby.Server.Implementations/Sync/MediaSync.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sync/MediaSync.cs rename to Emby.Server.Implementations/Sync/MediaSync.cs index b6853267ea..b420a3df43 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/Emby.Server.Implementations/Sync/MediaSync.cs @@ -13,15 +13,14 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; -using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.IO; +using MediaBrowser.Model.Cryptography; using MediaBrowser.Model.IO; -using MediaBrowser.Common.IO; -using MediaBrowser.Server.Implementations.IO; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class MediaSync { @@ -30,17 +29,19 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ILogger _logger; private readonly IFileSystem _fileSystem; private readonly IConfigurationManager _config; + private readonly ICryptographyProvider _cryptographyProvider; public const string PathSeparatorString = "/"; public const char PathSeparatorChar = '/'; - public MediaSync(ILogger logger, ISyncManager syncManager, IServerApplicationHost appHost, IFileSystem fileSystem, IConfigurationManager config) + public MediaSync(ILogger logger, ISyncManager syncManager, IServerApplicationHost appHost, IFileSystem fileSystem, IConfigurationManager config, ICryptographyProvider cryptographyProvider) { _logger = logger; _syncManager = syncManager; _appHost = appHost; _fileSystem = fileSystem; _config = config; + _cryptographyProvider = cryptographyProvider; } public async Task Sync(IServerSyncProvider provider, @@ -360,19 +361,16 @@ namespace MediaBrowser.Server.Implementations.Sync } } - private static string GetLocalId(string jobItemId, string itemId) + private string GetLocalId(string jobItemId, string itemId) { var bytes = Encoding.UTF8.GetBytes(jobItemId + itemId); bytes = CreateMd5(bytes); return BitConverter.ToString(bytes, 0, bytes.Length).Replace("-", string.Empty); } - private static byte[] CreateMd5(byte[] value) + private byte[] CreateMd5(byte[] value) { - using (var provider = MD5.Create()) - { - return provider.ComputeHash(value); - } + return _cryptographyProvider.GetMD5Bytes(value); } public LocalItem CreateLocalItem(IServerSyncProvider provider, SyncedItem syncedItem, SyncJob job, SyncTarget target, BaseItemDto libraryItem, string serverId, string serverName, string originalFileName) diff --git a/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs b/Emby.Server.Implementations/Sync/MultiProviderSync.cs similarity index 88% rename from MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs rename to Emby.Server.Implementations/Sync/MultiProviderSync.cs index 4716041177..db6cfcbd6d 100644 --- a/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs +++ b/Emby.Server.Implementations/Sync/MultiProviderSync.cs @@ -11,9 +11,10 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Cryptography; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class MultiProviderSync { @@ -22,14 +23,16 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ILogger _logger; private readonly IFileSystem _fileSystem; private readonly IConfigurationManager _config; + private readonly ICryptographyProvider _cryptographyProvider; - public MultiProviderSync(SyncManager syncManager, IServerApplicationHost appHost, ILogger logger, IFileSystem fileSystem, IConfigurationManager config) + public MultiProviderSync(SyncManager syncManager, IServerApplicationHost appHost, ILogger logger, IFileSystem fileSystem, IConfigurationManager config, ICryptographyProvider cryptographyProvider) { _syncManager = syncManager; _appHost = appHost; _logger = logger; _fileSystem = fileSystem; _config = config; + _cryptographyProvider = cryptographyProvider; } public async Task Sync(IEnumerable providers, IProgress progress, CancellationToken cancellationToken) @@ -61,7 +64,7 @@ namespace MediaBrowser.Server.Implementations.Sync var dataProvider = _syncManager.GetDataProvider(target.Item1, target.Item2); - await new MediaSync(_logger, _syncManager, _appHost, _fileSystem, _config) + await new MediaSync(_logger, _syncManager, _appHost, _fileSystem, _config, _cryptographyProvider) .Sync(target.Item1, dataProvider, target.Item2, innerProgress, cancellationToken) .ConfigureAwait(false); diff --git a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs b/Emby.Server.Implementations/Sync/ServerSyncScheduledTask.cs similarity index 87% rename from MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs rename to Emby.Server.Implementations/Sync/ServerSyncScheduledTask.cs index dc7f925a0a..17171633e7 100644 --- a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs +++ b/Emby.Server.Implementations/Sync/ServerSyncScheduledTask.cs @@ -7,10 +7,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Cryptography; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { class ServerSyncScheduledTask : IScheduledTask, IConfigurableScheduledTask { @@ -19,14 +20,16 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IFileSystem _fileSystem; private readonly IServerApplicationHost _appHost; private readonly IConfigurationManager _config; + private readonly ICryptographyProvider _cryptographyProvider; - public ServerSyncScheduledTask(ISyncManager syncManager, ILogger logger, IFileSystem fileSystem, IServerApplicationHost appHost, IConfigurationManager config) + public ServerSyncScheduledTask(ISyncManager syncManager, ILogger logger, IFileSystem fileSystem, IServerApplicationHost appHost, IConfigurationManager config, ICryptographyProvider cryptographyProvider) { _syncManager = syncManager; _logger = logger; _fileSystem = fileSystem; _appHost = appHost; _config = config; + _cryptographyProvider = cryptographyProvider; } public string Name @@ -49,7 +52,7 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Execute(CancellationToken cancellationToken, IProgress progress) { - return new MultiProviderSync((SyncManager)_syncManager, _appHost, _logger, _fileSystem, _config) + return new MultiProviderSync((SyncManager)_syncManager, _appHost, _logger, _fileSystem, _config, _cryptographyProvider) .Sync(ServerSyncProviders, progress, cancellationToken); } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncConfig.cs b/Emby.Server.Implementations/Sync/SyncConfig.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sync/SyncConfig.cs rename to Emby.Server.Implementations/Sync/SyncConfig.cs index 52c7743307..8a97326bda 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncConfig.cs +++ b/Emby.Server.Implementations/Sync/SyncConfig.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.Sync; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncConfigurationFactory : IConfigurationFactory { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs b/Emby.Server.Implementations/Sync/SyncConvertScheduledTask.cs similarity index 98% rename from MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs rename to Emby.Server.Implementations/Sync/SyncConvertScheduledTask.cs index 3a5023fe5e..8dafac7e10 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs +++ b/Emby.Server.Implementations/Sync/SyncConvertScheduledTask.cs @@ -13,7 +13,7 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncConvertScheduledTask : IScheduledTask { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncHelper.cs b/Emby.Server.Implementations/Sync/SyncHelper.cs similarity index 92% rename from MediaBrowser.Server.Implementations/Sync/SyncHelper.cs rename to Emby.Server.Implementations/Sync/SyncHelper.cs index fb4e0c6be0..da475f0038 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncHelper.cs +++ b/Emby.Server.Implementations/Sync/SyncHelper.cs @@ -1,6 +1,6 @@ using System; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncHelper { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobOptions.cs b/Emby.Server.Implementations/Sync/SyncJobOptions.cs similarity index 91% rename from MediaBrowser.Server.Implementations/Sync/SyncJobOptions.cs rename to Emby.Server.Implementations/Sync/SyncJobOptions.cs index cb8141c895..8e4d8e2edc 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobOptions.cs +++ b/Emby.Server.Implementations/Sync/SyncJobOptions.cs @@ -1,6 +1,6 @@ using MediaBrowser.Model.Dlna; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncJobOptions { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/Emby.Server.Implementations/Sync/SyncJobProcessor.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs rename to Emby.Server.Implementations/Sync/SyncJobProcessor.cs index 8d2c0b20c2..415757609d 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/Emby.Server.Implementations/Sync/SyncJobProcessor.cs @@ -28,7 +28,7 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncJobProcessor { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/Emby.Server.Implementations/Sync/SyncManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Sync/SyncManager.cs rename to Emby.Server.Implementations/Sync/SyncManager.cs index 7bcb7b05ed..d06ed49fd0 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/Emby.Server.Implementations/Sync/SyncManager.cs @@ -23,6 +23,7 @@ using MediaBrowser.Model.Users; using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Threading; @@ -30,7 +31,7 @@ using System.Threading.Tasks; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncManager : ISyncManager { @@ -124,7 +125,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (string.IsNullOrWhiteSpace(request.Name)) { - request.Name = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); + request.Name = DateTime.Now.ToString("f1", CultureInfo.CurrentCulture); } var target = GetSyncTargets(request.UserId) @@ -419,7 +420,7 @@ namespace MediaBrowser.Server.Implementations.Sync { _fileSystem.DeleteDirectory(path, true); } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -574,7 +575,7 @@ namespace MediaBrowser.Server.Implementations.Sync { _fileSystem.DeleteDirectory(jobItem.TemporaryPath, true); } - catch (DirectoryNotFoundException) + catch (IOException) { } catch (Exception ex) @@ -1061,7 +1062,7 @@ namespace MediaBrowser.Server.Implementations.Sync { _fileSystem.DeleteDirectory(path, true); } - catch (DirectoryNotFoundException) + catch (IOException) { } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncNotificationEntryPoint.cs b/Emby.Server.Implementations/Sync/SyncNotificationEntryPoint.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Sync/SyncNotificationEntryPoint.cs rename to Emby.Server.Implementations/Sync/SyncNotificationEntryPoint.cs index 7017b422ee..46cdb28a4d 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncNotificationEntryPoint.cs +++ b/Emby.Server.Implementations/Sync/SyncNotificationEntryPoint.cs @@ -5,7 +5,7 @@ using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Events; using MediaBrowser.Model.Sync; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncNotificationEntryPoint : IServerEntryPoint { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRegistrationInfo.cs b/Emby.Server.Implementations/Sync/SyncRegistrationInfo.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Sync/SyncRegistrationInfo.cs rename to Emby.Server.Implementations/Sync/SyncRegistrationInfo.cs index 40b84b1c21..c2658c5c54 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRegistrationInfo.cs +++ b/Emby.Server.Implementations/Sync/SyncRegistrationInfo.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Security; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncRegistrationInfo : IRequiresRegistration { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs b/Emby.Server.Implementations/Sync/SyncedMediaSourceProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs rename to Emby.Server.Implementations/Sync/SyncedMediaSourceProvider.cs index e0553b1b16..1e54885e67 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs +++ b/Emby.Server.Implementations/Sync/SyncedMediaSourceProvider.cs @@ -12,7 +12,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class SyncedMediaSourceProvider : IMediaSourceProvider { @@ -144,7 +144,7 @@ namespace MediaBrowser.Server.Implementations.Sync { mediaSource.Id = item.Id; mediaSource.SupportsTranscoding = false; - if (mediaSource.Protocol == Model.MediaInfo.MediaProtocol.File) + if (mediaSource.Protocol == MediaBrowser.Model.MediaInfo.MediaProtocol.File) { mediaSource.ETag = item.Id; } diff --git a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs b/Emby.Server.Implementations/Sync/TargetDataProvider.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs rename to Emby.Server.Implementations/Sync/TargetDataProvider.cs index 03df0d4e66..a0e0f4313f 100644 --- a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs +++ b/Emby.Server.Implementations/Sync/TargetDataProvider.cs @@ -11,7 +11,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.IO; -namespace MediaBrowser.Server.Implementations.Sync +namespace Emby.Server.Implementations.Sync { public class TargetDataProvider : ISyncDataProvider { diff --git a/MediaBrowser.Server.Implementations/TV/SeriesPostScanTask.cs b/Emby.Server.Implementations/TV/SeriesPostScanTask.cs similarity index 94% rename from MediaBrowser.Server.Implementations/TV/SeriesPostScanTask.cs rename to Emby.Server.Implementations/TV/SeriesPostScanTask.cs index a498dfec3c..2e04c883fa 100644 --- a/MediaBrowser.Server.Implementations/TV/SeriesPostScanTask.cs +++ b/Emby.Server.Implementations/TV/SeriesPostScanTask.cs @@ -14,10 +14,11 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Threading; using MediaBrowser.Model.Xml; using MediaBrowser.Providers.TV; -namespace MediaBrowser.Server.Implementations.TV +namespace Emby.Server.Implementations.TV { class SeriesGroup : List, IGrouping { @@ -132,8 +133,9 @@ namespace MediaBrowser.Server.Implementations.TV private const int LibraryUpdateDuration = 180000; private readonly ITaskManager _taskManager; private readonly IXmlReaderSettingsFactory _xmlSettings; + private readonly ITimerFactory _timerFactory; - public CleanMissingEpisodesEntryPoint(ILibraryManager libraryManager, IServerConfigurationManager config, ILogger logger, ILocalizationManager localization, IFileSystem fileSystem, ITaskManager taskManager, IXmlReaderSettingsFactory xmlSettings) + public CleanMissingEpisodesEntryPoint(ILibraryManager libraryManager, IServerConfigurationManager config, ILogger logger, ILocalizationManager localization, IFileSystem fileSystem, ITaskManager taskManager, IXmlReaderSettingsFactory xmlSettings, ITimerFactory timerFactory) { _libraryManager = libraryManager; _config = config; @@ -142,9 +144,10 @@ namespace MediaBrowser.Server.Implementations.TV _fileSystem = fileSystem; _taskManager = taskManager; _xmlSettings = xmlSettings; + _timerFactory = timerFactory; } - private Timer LibraryUpdateTimer { get; set; } + private ITimer LibraryUpdateTimer { get; set; } public void Run() { @@ -162,7 +165,7 @@ namespace MediaBrowser.Server.Implementations.TV { if (LibraryUpdateTimer == null) { - LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite); + LibraryUpdateTimer = _timerFactory.Create(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite); } else { diff --git a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs b/Emby.Server.Implementations/TV/TVSeriesManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs rename to Emby.Server.Implementations/TV/TVSeriesManager.cs index 03e8a9178e..f3bab78834 100644 --- a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs +++ b/Emby.Server.Implementations/TV/TVSeriesManager.cs @@ -9,7 +9,7 @@ using System.Collections.Generic; using System.Linq; using MediaBrowser.Controller.Configuration; -namespace MediaBrowser.Server.Implementations.TV +namespace Emby.Server.Implementations.TV { public class TVSeriesManager : ITVSeriesManager { diff --git a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Updates/InstallationManager.cs rename to Emby.Server.Implementations/Updates/InstallationManager.cs index c6930e4872..3c7a8242cb 100644 --- a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs +++ b/Emby.Server.Implementations/Updates/InstallationManager.cs @@ -3,7 +3,6 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Security.Cryptography; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common; @@ -14,13 +13,14 @@ using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; using MediaBrowser.Common.Security; using MediaBrowser.Common.Updates; +using MediaBrowser.Model.Cryptography; using MediaBrowser.Model.Events; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Updates; -namespace MediaBrowser.Server.Implementations.Updates +namespace Emby.Server.Implementations.Updates { /// /// Manages all install, uninstall and update operations (both plugins and system) @@ -40,7 +40,11 @@ namespace MediaBrowser.Server.Implementations.Updates /// /// The completed installations /// - public ConcurrentBag CompletedInstallations { get; set; } + private ConcurrentBag CompletedInstallationsInternal { get; set; } + + public IEnumerable CompletedInstallations { + get { return CompletedInstallationsInternal; } + } #region PluginUninstalled Event /// @@ -115,7 +119,9 @@ namespace MediaBrowser.Server.Implementations.Updates /// The application host. private readonly IApplicationHost _applicationHost; - public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, IConfigurationManager config, IFileSystem fileSystem) + private readonly ICryptographyProvider _cryptographyProvider; + + public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, IConfigurationManager config, IFileSystem fileSystem, ICryptographyProvider cryptographyProvider) { if (logger == null) { @@ -123,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.Updates } CurrentInstallations = new List>(); - CompletedInstallations = new ConcurrentBag(); + CompletedInstallationsInternal = new ConcurrentBag(); _applicationHost = appHost; _appPaths = appPaths; @@ -132,6 +138,7 @@ namespace MediaBrowser.Server.Implementations.Updates _securityManager = securityManager; _config = config; _fileSystem = fileSystem; + _cryptographyProvider = cryptographyProvider; _logger = logger; } @@ -500,7 +507,7 @@ namespace MediaBrowser.Server.Implementations.Updates progress.Report(100); - CompletedInstallations.Add(installationInfo); + CompletedInstallationsInternal.Add(installationInfo); EventHelper.FireEventIfNotNull(PackageInstallationCompleted, this, installationEventArgs, _logger); } @@ -597,13 +604,12 @@ namespace MediaBrowser.Server.Implementations.Updates var packageChecksum = string.IsNullOrWhiteSpace(package.checksum) ? Guid.Empty : new Guid(package.checksum); if (packageChecksum != Guid.Empty) // support for legacy uploads for now { - using (var crypto = new MD5CryptoServiceProvider()) - using (var stream = new BufferedStream(_fileSystem.OpenRead(tempFile), 100000)) + using (var stream = _fileSystem.OpenRead(tempFile)) { - var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); + var check = Guid.Parse(BitConverter.ToString(_cryptographyProvider.GetMD5Bytes(stream)).Replace("-", String.Empty)); if (check != packageChecksum) { - throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); + throw new Exception(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); } } } diff --git a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs b/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs similarity index 98% rename from MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs rename to Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs index 33a7b67258..ab63072386 100644 --- a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs +++ b/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs @@ -5,12 +5,12 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using MediaBrowser.Server.Implementations.Photos; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using Emby.Server.Implementations.Images; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Controller.Collections; @@ -20,7 +20,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Server.Implementations.UserViews +namespace Emby.Server.Implementations.UserViews { public class CollectionFolderImageProvider : BaseDynamicImageProvider { diff --git a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs b/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs similarity index 97% rename from MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs rename to Emby.Server.Implementations/UserViews/DynamicImageProvider.cs index 61f3c77f05..09b68c8ea3 100644 --- a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs +++ b/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs @@ -6,19 +6,17 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using MediaBrowser.Server.Implementations.Photos; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; +using Emby.Server.Implementations.Images; using MediaBrowser.Model.IO; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.UserViews +namespace Emby.Server.Implementations.UserViews { public class DynamicImageProvider : BaseDynamicImageProvider { diff --git a/Emby.Server.Implementations/project.json b/Emby.Server.Implementations/project.json new file mode 100644 index 0000000000..0f4463ed2e --- /dev/null +++ b/Emby.Server.Implementations/project.json @@ -0,0 +1,11 @@ +{ + "supports": {}, + "dependencies": { + "Emby.XmlTv": "1.0.0.63", + "MediaBrowser.Naming": "1.0.0.59", + "UniversalDetector": "1.0.1" + }, + "frameworks": { + ".NETPortable,Version=v4.5,Profile=Profile7": {} + } +} \ No newline at end of file diff --git a/Emby.Server.sln b/Emby.Server.sln index e9073a8d00..d28a492734 100644 --- a/Emby.Server.sln +++ b/Emby.Server.sln @@ -46,6 +46,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Api", "MediaBr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.MediaEncoding", "MediaBrowser.MediaEncoding\MediaBrowser.MediaEncoding.csproj", "{0BD82FA6-EB8A-4452-8AF5-74F9C3849451}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -161,6 +163,12 @@ Global {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Any CPU.Build.0 = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Any CPU.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -184,5 +192,6 @@ Global {89AB4548-770D-41FD-A891-8DAFF44F452C} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839} {4FD51AC5-2C16-4308-A993-C3A84F3B4582} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839} {0BD82FA6-EB8A-4452-8AF5-74F9C3849451} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839} + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839} EndGlobalSection EndGlobal diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs index f70986d678..e1ecd6595e 100644 --- a/MediaBrowser.Common/Net/HttpRequestOptions.cs +++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.Common.Net /// The URL. public string Url { get; set; } - public DecompressionMethods? DecompressionMethod { get; set; } + public CompressionMethod? DecompressionMethod { get; set; } /// /// Gets or sets the accept header. @@ -141,4 +141,10 @@ namespace MediaBrowser.Common.Net None = 0, Unconditional = 1 } + + public enum CompressionMethod + { + Deflate, + Gzip + } } diff --git a/MediaBrowser.Common/Properties/AssemblyInfo.cs b/MediaBrowser.Common/Properties/AssemblyInfo.cs index d7bbb6f3ab..09fd68f93a 100644 --- a/MediaBrowser.Common/Properties/AssemblyInfo.cs +++ b/MediaBrowser.Common/Properties/AssemblyInfo.cs @@ -18,9 +18,6 @@ using System.Runtime.InteropServices; // 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("cdec1bb7-6ffd-409f-b41f-0524a73df9be")] - // Version information for an assembly consists of the following four values: // // Major Version diff --git a/MediaBrowser.Common/Updates/IInstallationManager.cs b/MediaBrowser.Common/Updates/IInstallationManager.cs index f7a202f972..636526567e 100644 --- a/MediaBrowser.Common/Updates/IInstallationManager.cs +++ b/MediaBrowser.Common/Updates/IInstallationManager.cs @@ -2,7 +2,6 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Updates; using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -24,7 +23,7 @@ namespace MediaBrowser.Common.Updates /// /// The completed installations /// - ConcurrentBag CompletedInstallations { get; set; } + IEnumerable CompletedInstallations { get; } /// /// Occurs when [plugin uninstalled]. diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 0f26ad5ec1..6801a46398 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -14,6 +14,7 @@ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Profile7 v4.5 + 11.0 true @@ -367,9 +368,6 @@ MediaBrowser.Model - - - diff --git a/MediaBrowser.Controller/Properties/AssemblyInfo.cs b/MediaBrowser.Controller/Properties/AssemblyInfo.cs index a5abf79ee1..844b93f37d 100644 --- a/MediaBrowser.Controller/Properties/AssemblyInfo.cs +++ b/MediaBrowser.Controller/Properties/AssemblyInfo.cs @@ -18,9 +18,6 @@ using System.Runtime.InteropServices; // 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("bc09905a-04ed-497d-b39b-27593401e715")] - // Version information for an assembly consists of the following four values: // // Major Version diff --git a/MediaBrowser.Controller/packages.config b/MediaBrowser.Controller/packages.config deleted file mode 100644 index 6b8deb9c96..0000000000 --- a/MediaBrowser.Controller/packages.config +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs index 0c9226cf02..31b13056ca 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs @@ -1329,11 +1329,13 @@ namespace MediaBrowser.LocalMetadata.Parsers protected Share GetShare(XmlReader reader) { - reader.MoveToContent(); - var item = new Share(); - while (reader.Read()) + reader.MoveToContent(); + reader.Read(); + + // Loop through each element + while (!reader.EOF) { if (reader.NodeType == XmlNodeType.Element) { @@ -1350,12 +1352,17 @@ namespace MediaBrowser.LocalMetadata.Parsers item.CanEdit = string.Equals(reader.ReadElementContentAsString(), "true", StringComparison.OrdinalIgnoreCase); break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } + else + { + reader.Read(); + } } // This is valid diff --git a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs index d792373bf1..c42b44f9e5 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs @@ -31,11 +31,13 @@ namespace MediaBrowser.LocalMetadata.Parsers private void FetchFromCollectionItemsNode(XmlReader reader, MetadataResult item) { - reader.MoveToContent(); - var list = new List(); - while (reader.Read()) + reader.MoveToContent(); + reader.Read(); + + // Loop through each element + while (!reader.EOF) { if (reader.NodeType == XmlNodeType.Element) { @@ -55,12 +57,17 @@ namespace MediaBrowser.LocalMetadata.Parsers break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } + else + { + reader.Read(); + } } item.Item.LinkedChildren = list; diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs index 4c45545fce..ee986ae2df 100644 --- a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs @@ -65,11 +65,13 @@ namespace MediaBrowser.LocalMetadata.Parsers private void FetchFromCollectionItemsNode(XmlReader reader, Playlist item) { - reader.MoveToContent(); - var list = new List(); - while (reader.Read()) + reader.MoveToContent(); + reader.Read(); + + // Loop through each element + while (!reader.EOF) { if (reader.NodeType == XmlNodeType.Element) { @@ -89,12 +91,17 @@ namespace MediaBrowser.LocalMetadata.Parsers break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } + else + { + reader.Read(); + } } item.LinkedChildren = list; @@ -102,11 +109,13 @@ namespace MediaBrowser.LocalMetadata.Parsers private void FetchFromSharesNode(XmlReader reader, Playlist item) { - reader.MoveToContent(); - var list = new List(); - while (reader.Read()) + reader.MoveToContent(); + reader.Read(); + + // Loop through each element + while (!reader.EOF) { if (reader.NodeType == XmlNodeType.Element) { @@ -126,12 +135,17 @@ namespace MediaBrowser.LocalMetadata.Parsers break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } + else + { + reader.Read(); + } } item.Shares = list; diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 1248d138db..0baee67eae 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -793,7 +793,9 @@ namespace MediaBrowser.MediaEncoding.Subtitles { if (protocol == MediaProtocol.File) { - if (_textEncoding.GetFileEncoding(path).Equals(Encoding.UTF8)) + var fileEncoding = _textEncoding.GetFileEncoding(path); + + if (fileEncoding != null && fileEncoding.Equals(Encoding.UTF8)) { return string.Empty; } diff --git a/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs b/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs index 70f6798562..a3f86f9e28 100644 --- a/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs +++ b/MediaBrowser.Model/Cryptography/ICryptographyProvider.cs @@ -7,6 +7,8 @@ namespace MediaBrowser.Model.Cryptography { Guid GetMD5(string str); byte[] GetMD5Bytes(string str); + byte[] GetSHA1Bytes(byte[] bytes); byte[] GetMD5Bytes(Stream str); + byte[] GetMD5Bytes(byte[] bytes); } } \ No newline at end of file diff --git a/MediaBrowser.Mono.sln b/MediaBrowser.Mono.sln index 9dff1a1870..0a465f7dde 100644 --- a/MediaBrowser.Mono.sln +++ b/MediaBrowser.Mono.sln @@ -39,12 +39,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Photos", "Emby.Photos\ EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Emby.Common.Implementations", "Emby.Common.Implementations\Emby.Common.Implementations.xproj", "{5A27010A-09C6-4E86-93EA-437484C10917}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Mono.Nat", "Mono.Nat\Mono.Nat.xproj", "{0A82260B-4C22-4FD2-869A-E510044E3502}" -EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RSSDP", "RSSDP\RSSDP.xproj", "{C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}" EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Emby.Dlna", "Emby.Dlna\Emby.Dlna.xproj", "{F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}" EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Mono.Nat", "Mono.Nat\Mono.Nat.xproj", "{4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{E383961B-9356-4D5D-8233-9A1079D03055}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -241,17 +243,6 @@ Global {5A27010A-09C6-4E86-93EA-437484C10917}.Release|Any CPU.Build.0 = Release|Any CPU {5A27010A-09C6-4E86-93EA-437484C10917}.Release|x86.ActiveCfg = Release|Any CPU {5A27010A-09C6-4E86-93EA-437484C10917}.Release|x86.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x86.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x86.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x86.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Any CPU.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x86.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x86.Build.0 = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|Any CPU.Build.0 = Debug|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -274,6 +265,30 @@ Global {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Any CPU.Build.0 = Release|Any CPU {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.ActiveCfg = Release|Any CPU {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x86.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x86.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x86.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Any CPU.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x86.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x86.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x86.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x86.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x86.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x86.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Any CPU.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x86.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index 74a9680625..3c1bc21183 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -513,9 +513,10 @@ namespace MediaBrowser.Providers.TV using (var reader = XmlReader.Create(streamReader, settings)) { reader.MoveToContent(); + reader.Read(); // Loop through each element - while (reader.Read()) + while (!reader.EOF) { if (reader.NodeType == XmlNodeType.Element) { @@ -546,12 +547,17 @@ namespace MediaBrowser.Providers.TV break; } - default: - reader.Skip(); - break; + { + reader.Skip(); + break; + } } } + else + { + reader.Read(); + } } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index 649fec824e..5bbcc9d157 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -82,67 +82,73 @@ namespace MediaBrowser.Providers.TV // Use XmlReader for best performance using (reader) { - reader.MoveToContent(); + reader.MoveToContent(); + reader.Read(); - // Loop through each element - while (reader.Read()) - { - cancellationToken.ThrowIfCancellationRequested(); + // Loop through each element + while (!reader.EOF) + { + if (reader.NodeType == XmlNodeType.Element) + { + cancellationToken.ThrowIfCancellationRequested(); - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.Name) - { - case "thumb_width": - { - var val = reader.ReadElementContentAsString(); + switch (reader.Name) + { + case "thumb_width": + { + var val = reader.ReadElementContentAsString(); - if (!string.IsNullOrWhiteSpace(val)) - { - int rval; + if (!string.IsNullOrWhiteSpace(val)) + { + int rval; - // int.TryParse is local aware, so it can be probamatic, force us culture - if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) - { - width = rval; - } - } - break; - } + // int.TryParse is local aware, so it can be probamatic, force us culture + if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) + { + width = rval; + } + } + break; + } - case "thumb_height": - { - var val = reader.ReadElementContentAsString(); + case "thumb_height": + { + var val = reader.ReadElementContentAsString(); - if (!string.IsNullOrWhiteSpace(val)) - { - int rval; + if (!string.IsNullOrWhiteSpace(val)) + { + int rval; - // int.TryParse is local aware, so it can be probamatic, force us culture - if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) - { - height = rval; - } - } - break; - } + // int.TryParse is local aware, so it can be probamatic, force us culture + if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) + { + height = rval; + } + } + break; + } - case "filename": - { - var val = reader.ReadElementContentAsString(); - if (!string.IsNullOrWhiteSpace(val)) - { - url = TVUtils.BannerUrl + val; - } - break; - } - - default: - reader.Skip(); - break; - } - } - } + case "filename": + { + var val = reader.ReadElementContentAsString(); + if (!string.IsNullOrWhiteSpace(val)) + { + url = TVUtils.BannerUrl + val; + } + break; + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } } if (string.IsNullOrEmpty(url)) diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index 769b7821ab..565eeb259b 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -14,13 +14,13 @@ using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -using MediaBrowser.Server.Implementations.Threading; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Server.Implementations.Connect { public class ConnectEntryPoint : IServerEntryPoint { - private PeriodicTimer _timer; + private ITimer _timer; private readonly IHttpClient _httpClient; private readonly IApplicationPaths _appPaths; private readonly ILogger _logger; @@ -29,8 +29,9 @@ namespace MediaBrowser.Server.Implementations.Connect private readonly INetworkManager _networkManager; private readonly IApplicationHost _appHost; private readonly IFileSystem _fileSystem; + private readonly ITimerFactory _timerFactory; - public ConnectEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, ILogger logger, INetworkManager networkManager, IConnectManager connectManager, IApplicationHost appHost, IFileSystem fileSystem) + public ConnectEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, ILogger logger, INetworkManager networkManager, IConnectManager connectManager, IApplicationHost appHost, IFileSystem fileSystem, ITimerFactory timerFactory) { _httpClient = httpClient; _appPaths = appPaths; @@ -39,13 +40,14 @@ namespace MediaBrowser.Server.Implementations.Connect _connectManager = connectManager; _appHost = appHost; _fileSystem = fileSystem; + _timerFactory = timerFactory; } public void Run() { LoadCachedAddress(); - _timer = new PeriodicTimer(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(1)); + _timer = _timerFactory.Create(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(1)); ((ConnectManager)_connectManager).Start(); } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs index d86990a408..dcfa27cc04 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs @@ -11,7 +11,7 @@ using System.Net; using MediaBrowser.Common.Net; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Events; -using MediaBrowser.Server.Implementations.Threading; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Server.Implementations.EntryPoints { @@ -23,16 +23,18 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly IServerConfigurationManager _config; private readonly IDeviceDiscovery _deviceDiscovery; - private PeriodicTimer _timer; + private ITimer _timer; private bool _isStarted; + private readonly ITimerFactory _timerFactory; - public ExternalPortForwarding(ILogManager logmanager, IServerApplicationHost appHost, IServerConfigurationManager config, IDeviceDiscovery deviceDiscovery, IHttpClient httpClient) + public ExternalPortForwarding(ILogManager logmanager, IServerApplicationHost appHost, IServerConfigurationManager config, IDeviceDiscovery deviceDiscovery, IHttpClient httpClient, ITimerFactory timerFactory) { _logger = logmanager.GetLogger("PortMapper"); _appHost = appHost; _config = config; _deviceDiscovery = deviceDiscovery; _httpClient = httpClient; + _timerFactory = timerFactory; } private string _lastConfigIdentifier; @@ -94,7 +96,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints NatUtility.StartDiscovery(); - _timer = new PeriodicTimer(ClearCreatedRules, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); + _timer = _timerFactory.Create(ClearCreatedRules, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); _deviceDiscovery.DeviceDiscovered += _deviceDiscovery_DeviceDiscovered; diff --git a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs index eeefdd65a4..2742e1a268 100644 --- a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs +++ b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs @@ -14,7 +14,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; -using MediaBrowser.Server.Implementations.ScheduledTasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Server.Implementations.IO { @@ -26,13 +26,14 @@ namespace MediaBrowser.Server.Implementations.IO private IServerConfigurationManager ConfigurationManager { get; set; } private readonly IFileSystem _fileSystem; private readonly List _affectedPaths = new List(); - private Timer _timer; + private ITimer _timer; + private readonly ITimerFactory _timerFactory; private readonly object _timerLock = new object(); public string Path { get; private set; } public event EventHandler Completed; - public FileRefresher(string path, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, ITaskManager taskManager, ILogger logger) + public FileRefresher(string path, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, ITaskManager taskManager, ILogger logger, ITimerFactory timerFactory) { logger.Debug("New file refresher created for {0}", path); Path = path; @@ -42,6 +43,7 @@ namespace MediaBrowser.Server.Implementations.IO LibraryManager = libraryManager; TaskManager = taskManager; Logger = logger; + _timerFactory = timerFactory; AddPath(path); } @@ -88,7 +90,7 @@ namespace MediaBrowser.Server.Implementations.IO if (_timer == null) { - _timer = new Timer(OnTimerCallback, null, TimeSpan.FromSeconds(ConfigurationManager.Configuration.LibraryMonitorDelay), TimeSpan.FromMilliseconds(-1)); + _timer = _timerFactory.Create(OnTimerCallback, null, TimeSpan.FromSeconds(ConfigurationManager.Configuration.LibraryMonitorDelay), TimeSpan.FromMilliseconds(-1)); } else { @@ -163,7 +165,7 @@ namespace MediaBrowser.Server.Implementations.IO // If the root folder changed, run the library task so the user can see it if (itemsToRefresh.Any(i => i is AggregateFolder)) { - TaskManager.CancelIfRunningAndQueue(); + LibraryManager.ValidateMediaLibrary(new Progress(), CancellationToken.None); return; } @@ -268,11 +270,11 @@ namespace MediaBrowser.Server.Implementations.IO return false; } } - catch (DirectoryNotFoundException) - { - // File may have been deleted - return false; - } + //catch (DirectoryNotFoundException) + //{ + // // File may have been deleted + // return false; + //} catch (FileNotFoundException) { // File may have been deleted diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index 77981b5288..49cb1e75f4 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -4,7 +4,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Logging; -using Microsoft.Win32; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -16,6 +15,8 @@ using MediaBrowser.Model.IO; using MediaBrowser.Controller; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Threading; +using Microsoft.Win32; namespace MediaBrowser.Server.Implementations.IO { @@ -136,12 +137,12 @@ namespace MediaBrowser.Server.Implementations.IO private IServerConfigurationManager ConfigurationManager { get; set; } private readonly IFileSystem _fileSystem; - private readonly IServerApplicationHost _appHost; + private readonly ITimerFactory _timerFactory; /// /// Initializes a new instance of the class. /// - public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IServerApplicationHost appHost) + public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ITimerFactory timerFactory) { if (taskManager == null) { @@ -153,7 +154,7 @@ namespace MediaBrowser.Server.Implementations.IO Logger = logManager.GetLogger(GetType().Name); ConfigurationManager = configurationManager; _fileSystem = fileSystem; - _appHost = appHost; + _timerFactory = timerFactory; SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; } @@ -528,7 +529,7 @@ namespace MediaBrowser.Server.Implementations.IO } } - var newRefresher = new FileRefresher(path, _fileSystem, ConfigurationManager, LibraryManager, TaskManager, Logger); + var newRefresher = new FileRefresher(path, _fileSystem, ConfigurationManager, LibraryManager, TaskManager, Logger, _timerFactory); newRefresher.Completed += NewRefresher_Completed; _activeRefreshers.Add(newRefresher); } diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpHost.cs index 8dca261a38..55101ce10f 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpHost.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpHost.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Linq; using System.Threading; using System.Threading.Tasks; +using Emby.Server.Implementations.LiveTv.TunerHosts; using MediaBrowser.Model.IO; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; @@ -20,7 +21,6 @@ using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Serialization; -using MediaBrowser.Server.Implementations.LiveTv.EmbyTV; namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp { diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 15c2368e12..6118e15016 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -46,26 +46,23 @@ ..\ThirdParty\emby\Emby.Common.Implementations.dll - ..\packages\Emby.XmlTv.1.0.0.58\lib\portable-net46+win10\Emby.XmlTv.dll + ..\packages\Emby.XmlTv.1.0.0.63\lib\portable-net45+win8\Emby.XmlTv.dll True ..\packages\ini-parser.2.3.0\lib\net20\INIFileParser.dll True - - ..\packages\MediaBrowser.Naming.1.0.0.57\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll - True - ..\packages\Microsoft.IO.RecyclableMemoryStream.1.1.0.0\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll True - + + False ..\ThirdParty\emby\Mono.Nat.dll - - ..\packages\Patterns.Logging.1.0.0.4\lib\portable-net45+dnxcore50+sl4+wp71+win8+wpa81\Patterns.Logging.dll + + ..\packages\Patterns.Logging.1.0.0.6\lib\portable-net45+win8\Patterns.Logging.dll True @@ -108,50 +105,19 @@ Properties\SharedVersion.cs - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - @@ -175,79 +141,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -266,122 +162,43 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + {e383961b-9356-4d5d-8233-9a1079d03055} + Emby.Server.Implementations + {9142EEFA-7570-41E1-BFCC-468BB571AF2F} MediaBrowser.Common @@ -399,23 +216,6 @@ MediaBrowser.Providers - - - - - - - - - - - - - - - - - swagger-ui\lib\backbone-min.js @@ -481,7 +281,6 @@ swagger-ui\swagger-ui.min.js PreserveNewest - swagger-ui\fonts\droid-sans-v6-latin-700.eot PreserveNewest @@ -514,11 +313,29 @@ swagger-ui\fonts\droid-sans-v6-latin-regular.woff2 PreserveNewest + + + + + + + + + + + + + + + + + + - + @@ -529,10 +346,13 @@ + + + @@ -550,185 +370,180 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - swagger-ui\css\reset.css @@ -778,8 +593,6 @@ swagger-ui\lib\shred\content.js PreserveNewest - - diff --git a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs b/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs deleted file mode 100644 index 22cb4e86ac..0000000000 --- a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs +++ /dev/null @@ -1,170 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Notifications; -using MediaBrowser.Controller.Plugins; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.News; -using MediaBrowser.Model.Notifications; -using MediaBrowser.Model.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; -using MediaBrowser.Server.Implementations.Threading; - -namespace MediaBrowser.Server.Implementations.News -{ - public class NewsEntryPoint : IServerEntryPoint - { - private PeriodicTimer _timer; - private readonly IHttpClient _httpClient; - private readonly IApplicationPaths _appPaths; - private readonly IFileSystem _fileSystem; - private readonly ILogger _logger; - private readonly IJsonSerializer _json; - - private readonly INotificationManager _notifications; - private readonly IUserManager _userManager; - - private readonly TimeSpan _frequency = TimeSpan.FromHours(24); - - public NewsEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, IFileSystem fileSystem, ILogger logger, IJsonSerializer json, INotificationManager notifications, IUserManager userManager) - { - _httpClient = httpClient; - _appPaths = appPaths; - _fileSystem = fileSystem; - _logger = logger; - _json = json; - _notifications = notifications; - _userManager = userManager; - } - - public void Run() - { - _timer = new PeriodicTimer(OnTimerFired, null, TimeSpan.FromMilliseconds(500), _frequency); - } - - /// - /// Called when [timer fired]. - /// - /// The state. - private async void OnTimerFired(object state) - { - var path = Path.Combine(_appPaths.CachePath, "news.json"); - - try - { - await DownloadNews(path).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error downloading news", ex); - } - } - - private async Task DownloadNews(string path) - { - DateTime? lastUpdate = null; - - if (_fileSystem.FileExists(path)) - { - lastUpdate = _fileSystem.GetLastWriteTimeUtc(path); - } - - var requestOptions = new HttpRequestOptions - { - Url = "http://emby.media/community/index.php?/blog/rss/1-media-browser-developers-blog", - Progress = new Progress(), - UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.42 Safari/537.36", - BufferContent = false - }; - - using (var stream = await _httpClient.Get(requestOptions).ConfigureAwait(false)) - { - var doc = new XmlDocument(); - doc.Load(stream); - - var news = ParseRssItems(doc).ToList(); - - _json.SerializeToFile(news, path); - - await CreateNotifications(news, lastUpdate, CancellationToken.None).ConfigureAwait(false); - } - } - - private Task CreateNotifications(List items, DateTime? lastUpdate, CancellationToken cancellationToken) - { - if (lastUpdate.HasValue) - { - items = items.Where(i => i.Date.ToUniversalTime() >= lastUpdate.Value) - .ToList(); - } - - var tasks = items.Select(i => _notifications.SendNotification(new NotificationRequest - { - Date = i.Date, - Name = i.Title, - Description = i.Description, - Url = i.Link, - UserIds = _userManager.Users.Select(u => u.Id.ToString("N")).ToList() - - }, cancellationToken)); - - return Task.WhenAll(tasks); - } - - private IEnumerable ParseRssItems(XmlDocument xmlDoc) - { - var nodes = xmlDoc.SelectNodes("rss/channel/item"); - - if (nodes != null) - { - foreach (XmlNode node in nodes) - { - var newsItem = new NewsItem(); - - newsItem.Title = ParseDocElements(node, "title"); - - newsItem.DescriptionHtml = ParseDocElements(node, "description"); - newsItem.Description = newsItem.DescriptionHtml.StripHtml(); - - newsItem.Link = ParseDocElements(node, "link"); - - var date = ParseDocElements(node, "pubDate"); - DateTime parsedDate; - - if (DateTime.TryParse(date, out parsedDate)) - { - newsItem.Date = parsedDate; - } - - yield return newsItem; - } - } - } - - private string ParseDocElements(XmlNode parent, string xPath) - { - var node = parent.SelectSingleNode(xPath); - - return node != null ? node.InnerText : string.Empty; - } - - public void Dispose() - { - if (_timer != null) - { - _timer.Dispose(); - _timer = null; - } - } - } -} diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index add5b29aa7..5a43abe0f6 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,10 +1,9 @@  - + - - + \ No newline at end of file diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index f3f5176f06..fcaeb035d6 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -69,8 +69,8 @@ ..\packages\NLog.4.4.0-betaV15\lib\net45\NLog.dll True - - ..\packages\Patterns.Logging.1.0.0.4\lib\portable-net45+dnxcore50+sl4+wp71+win8+wpa81\Patterns.Logging.dll + + ..\packages\Patterns.Logging.1.0.0.6\lib\portable-net45+win8\Patterns.Logging.dll True diff --git a/MediaBrowser.Server.Mono/packages.config b/MediaBrowser.Server.Mono/packages.config index d67955cb5f..8d1ebc141b 100644 --- a/MediaBrowser.Server.Mono/packages.config +++ b/MediaBrowser.Server.Mono/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 2e86b6c3e6..077a589384 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -50,30 +50,20 @@ using MediaBrowser.Providers.Manager; using MediaBrowser.Providers.Subtitles; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations.Activity; -using MediaBrowser.Server.Implementations.Channels; -using MediaBrowser.Server.Implementations.Collections; using MediaBrowser.Server.Implementations.Configuration; using MediaBrowser.Server.Implementations.Connect; using MediaBrowser.Server.Implementations.Devices; -using MediaBrowser.Server.Implementations.Dto; using MediaBrowser.Server.Implementations.EntryPoints; -using MediaBrowser.Server.Implementations.FileOrganization; using MediaBrowser.Server.Implementations.HttpServer; using MediaBrowser.Server.Implementations.HttpServer.Security; using MediaBrowser.Server.Implementations.IO; -using MediaBrowser.Server.Implementations.Library; using MediaBrowser.Server.Implementations.LiveTv; using MediaBrowser.Server.Implementations.Localization; -using MediaBrowser.Server.Implementations.MediaEncoder; using MediaBrowser.Server.Implementations.Notifications; using MediaBrowser.Server.Implementations.Persistence; -using MediaBrowser.Server.Implementations.Playlists; using MediaBrowser.Server.Implementations.Security; -using MediaBrowser.Server.Implementations.ServerManager; -using MediaBrowser.Server.Implementations.Session; using MediaBrowser.Server.Implementations.Social; using MediaBrowser.Server.Implementations.Sync; -using MediaBrowser.Server.Implementations.TV; using MediaBrowser.Server.Startup.Common.FFMpeg; using MediaBrowser.Server.Startup.Common.Migrations; using MediaBrowser.WebDashboard.Api; @@ -91,7 +81,10 @@ using System.Threading; using System.Threading.Tasks; using Emby.Common.Implementations; using Emby.Common.Implementations.Networking; +using Emby.Common.Implementations.Reflection; +using Emby.Common.Implementations.TextEncoding; using Emby.Common.Implementations.Updates; +using Emby.Common.Implementations.Xml; using Emby.Photos; using MediaBrowser.Model.IO; using MediaBrowser.Api.Playback; @@ -101,13 +94,29 @@ using MediaBrowser.Common.Updates; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.IO; using Emby.Dlna; using Emby.Dlna.ConnectionManager; using Emby.Dlna.ContentDirectory; using Emby.Dlna.Main; using Emby.Dlna.MediaReceiverRegistrar; using Emby.Dlna.Ssdp; +using Emby.Server.Implementations.Activity; +using Emby.Server.Implementations.Channels; +using Emby.Server.Implementations.Collections; +using Emby.Server.Implementations.Devices; +using Emby.Server.Implementations.Dto; +using Emby.Server.Implementations.FileOrganization; +using Emby.Server.Implementations.Library; +using Emby.Server.Implementations.LiveTv; +using Emby.Server.Implementations.MediaEncoder; +using Emby.Server.Implementations.Notifications; +using Emby.Server.Implementations.Persistence; +using Emby.Server.Implementations.Playlists; +using Emby.Server.Implementations.ServerManager; +using Emby.Server.Implementations.Session; +using Emby.Server.Implementations.Sync; +using Emby.Server.Implementations.TV; +using Emby.Server.Implementations.Updates; using MediaBrowser.Model.Activity; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Globalization; @@ -120,11 +129,7 @@ using MediaBrowser.Model.Social; using MediaBrowser.Model.TextEncoding; using MediaBrowser.Model.Xml; using MediaBrowser.Server.Implementations.Archiving; -using MediaBrowser.Server.Implementations.Reflection; using MediaBrowser.Server.Implementations.Serialization; -using MediaBrowser.Server.Implementations.TextEncoding; -using MediaBrowser.Server.Implementations.Updates; -using MediaBrowser.Server.Implementations.Xml; using OpenSubtitlesHandler; using ServiceStack; using StringExtensions = MediaBrowser.Controller.Extensions.StringExtensions; @@ -530,7 +535,7 @@ namespace MediaBrowser.Server.Startup.Common SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager, FileSystemManager); RegisterSingleInstance(SecurityManager); - InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager); + InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager, CryptographyProvider); RegisterSingleInstance(InstallationManager); ZipClient = new ZipClient(FileSystemManager); @@ -577,7 +582,7 @@ namespace MediaBrowser.Server.Startup.Common SyncRepository = await GetSyncRepository().ConfigureAwait(false); RegisterSingleInstance(SyncRepository); - UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository, XmlSerializer, NetworkManager, () => ImageProcessor, () => DtoService, () => ConnectManager, this, JsonSerializer, FileSystemManager); + UserManager = new UserManager(LogManager.GetLogger("UserManager"), ServerConfigurationManager, UserRepository, XmlSerializer, NetworkManager, () => ImageProcessor, () => DtoService, () => ConnectManager, this, JsonSerializer, FileSystemManager, CryptographyProvider, Environment.UserName); RegisterSingleInstance(UserManager); LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager, UserDataManager, () => LibraryMonitor, FileSystemManager, () => ProviderManager, () => UserViewManager); @@ -586,7 +591,7 @@ namespace MediaBrowser.Server.Startup.Common var musicManager = new MusicManager(LibraryManager); RegisterSingleInstance(new MusicManager(LibraryManager)); - LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, this); + LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, TimerFactory); RegisterSingleInstance(LibraryMonitor); ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer, MemoryStreamProvider); @@ -599,7 +604,7 @@ namespace MediaBrowser.Server.Startup.Common RegisterSingleInstance(HttpServer, false); progress.Report(10); - ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager, MemoryStreamProvider); + ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager, MemoryStreamProvider, textEncoding); RegisterSingleInstance(ServerManager); var innerProgress = new ActionableProgress(); @@ -626,7 +631,7 @@ namespace MediaBrowser.Server.Startup.Common DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, LogManager.GetLogger("DeviceManager"), FileSystemManager), UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager, LogManager.GetLogger("DeviceManager"), NetworkManager); RegisterSingleInstance(DeviceManager); - var newsService = new Implementations.News.NewsService(ApplicationPaths, JsonSerializer); + var newsService = new Emby.Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer); RegisterSingleInstance(newsService); var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, LogManager.GetLogger("FileOrganizationService"), LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager); @@ -637,10 +642,10 @@ namespace MediaBrowser.Server.Startup.Common ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, LogManager.GetLogger("ChannelManager"), ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, LocalizationManager, HttpClient, ProviderManager); RegisterSingleInstance(ChannelManager); - MediaSourceManager = new MediaSourceManager(ItemRepository, UserManager, LibraryManager, LogManager.GetLogger("MediaSourceManager"), JsonSerializer, FileSystemManager, UserDataManager); + MediaSourceManager = new MediaSourceManager(ItemRepository, UserManager, LibraryManager, LogManager.GetLogger("MediaSourceManager"), JsonSerializer, FileSystemManager, UserDataManager, TimerFactory); RegisterSingleInstance(MediaSourceManager); - SessionManager = new SessionManager(UserDataManager, LogManager.GetLogger("SessionManager"), LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager, MediaSourceManager); + SessionManager = new SessionManager(UserDataManager, LogManager.GetLogger("SessionManager"), LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager, MediaSourceManager, TimerFactory); RegisterSingleInstance(SessionManager); var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("Dlna"), JsonSerializer, this); @@ -1160,9 +1165,12 @@ namespace MediaBrowser.Server.Startup.Common // Common implementations list.Add(typeof(TaskManager).Assembly); - // Server implementations + // MediaBrowser.Server implementations list.Add(typeof(ServerApplicationPaths).Assembly); + // Emby.Server implementations + list.Add(typeof(InstallationManager).Assembly); + // MediaEncoding list.Add(typeof(MediaEncoder).Assembly); diff --git a/MediaBrowser.Server.Startup.Common/EntryPoints/KeepServerAwake.cs b/MediaBrowser.Server.Startup.Common/EntryPoints/KeepServerAwake.cs index 79debce8da..95b42afbf9 100644 --- a/MediaBrowser.Server.Startup.Common/EntryPoints/KeepServerAwake.cs +++ b/MediaBrowser.Server.Startup.Common/EntryPoints/KeepServerAwake.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; using System; using System.Linq; -using MediaBrowser.Server.Implementations.Threading; +using MediaBrowser.Server.Startup.Common.Threading; namespace MediaBrowser.Server.Startup.Common.EntryPoints { diff --git a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj index 32d5d5f8e4..4aecb11dc9 100644 --- a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj +++ b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj @@ -38,12 +38,16 @@ ..\ThirdParty\emby\Emby.Dlna.dll + + ..\packages\MediaBrowser.Naming.1.0.0.59\lib\portable-net45+win8\MediaBrowser.Naming.dll + True + False ..\packages\Mono.Posix.4.0.0.0\lib\net40\Mono.Posix.dll - - ..\packages\Patterns.Logging.1.0.0.4\lib\portable-net45+dnxcore50+sl4+wp71+win8+wpa81\Patterns.Logging.dll + + ..\packages\Patterns.Logging.1.0.0.6\lib\portable-net45+win8\Patterns.Logging.dll True @@ -91,6 +95,7 @@ + @@ -102,6 +107,10 @@ {89ab4548-770d-41fd-a891-8daff44f452c} Emby.Photos + + {e383961b-9356-4d5d-8233-9a1079d03055} + Emby.Server.Implementations + {4fd51ac5-2c16-4308-a993-c3a84f3b4582} MediaBrowser.Api diff --git a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs index 4a1b4000e1..e095275b12 100644 --- a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs +++ b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Emby.Server.Implementations.Persistence; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Tasks; using MediaBrowser.Server.Implementations.Persistence; diff --git a/MediaBrowser.Server.Implementations/Threading/PeriodicTimer.cs b/MediaBrowser.Server.Startup.Common/Threading/PeriodicTimer.cs similarity index 87% rename from MediaBrowser.Server.Implementations/Threading/PeriodicTimer.cs rename to MediaBrowser.Server.Startup.Common/Threading/PeriodicTimer.cs index 057a84483b..3e898adfdf 100644 --- a/MediaBrowser.Server.Implementations/Threading/PeriodicTimer.cs +++ b/MediaBrowser.Server.Startup.Common/Threading/PeriodicTimer.cs @@ -2,7 +2,7 @@ using System.Threading; using Microsoft.Win32; -namespace MediaBrowser.Server.Implementations.Threading +namespace MediaBrowser.Server.Startup.Common.Threading { public class PeriodicTimer : IDisposable { @@ -46,13 +46,13 @@ namespace MediaBrowser.Server.Implementations.Threading { _timer = new Timer(TimerCallback, _state, dueTime, _period); - SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; + Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; } } private void DisposeTimer() { - SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged; + Microsoft.Win32.SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged; lock (_timerLock) { diff --git a/MediaBrowser.Server.Startup.Common/packages.config b/MediaBrowser.Server.Startup.Common/packages.config index 6ebe8be2d0..ea3d0e7f8d 100644 --- a/MediaBrowser.Server.Startup.Common/packages.config +++ b/MediaBrowser.Server.Startup.Common/packages.config @@ -1,6 +1,7 @@  + - + \ No newline at end of file diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index f2a53f7426..a306274e1d 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -75,8 +75,8 @@ ..\packages\NLog.4.4.0-betaV15\lib\net45\NLog.dll True - - ..\packages\Patterns.Logging.1.0.0.4\lib\portable-net45+dnxcore50+sl4+wp71+win8+wpa81\Patterns.Logging.dll + + ..\packages\Patterns.Logging.1.0.0.6\lib\portable-net45+win8\Patterns.Logging.dll True diff --git a/MediaBrowser.ServerApplication/packages.config b/MediaBrowser.ServerApplication/packages.config index ff817d51af..8dbcaa2b98 100644 --- a/MediaBrowser.ServerApplication/packages.config +++ b/MediaBrowser.ServerApplication/packages.config @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj index 0a86e96a50..e84fa8e653 100644 --- a/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj +++ b/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj @@ -32,11 +32,6 @@ prompt 4 - - - ..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll - - Properties\SharedVersion.cs diff --git a/MediaBrowser.XbmcMetadata/packages.config b/MediaBrowser.XbmcMetadata/packages.config index 79ff26ec64..6b8deb9c96 100644 --- a/MediaBrowser.XbmcMetadata/packages.config +++ b/MediaBrowser.XbmcMetadata/packages.config @@ -1,4 +1,3 @@  - \ No newline at end of file diff --git a/MediaBrowser.sln b/MediaBrowser.sln index bf226a6999..34c50de384 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -62,18 +62,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvdLib", "DvdLib\DvdLib.csp EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Emby.Common.Implementations", "Emby.Common.Implementations\Emby.Common.Implementations.xproj", "{5A27010A-09C6-4E86-93EA-437484C10917}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Mono.Nat", "Mono.Nat\Mono.Nat.xproj", "{0A82260B-4C22-4FD2-869A-E510044E3502}" - ProjectSection(ProjectDependencies) = postProject - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B} = {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B} - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2} = {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2} - {9142EEFA-7570-41E1-BFCC-468BB571AF2F} = {9142EEFA-7570-41E1-BFCC-468BB571AF2F} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BDInfo", "BDInfo\BDInfo.csproj", "{88AE38DF-19D7-406F-A6A9-09527719A21E}" EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RSSDP", "RSSDP\RSSDP.xproj", "{C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{E383961B-9356-4D5D-8233-9A1079D03055}" +EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Emby.Dlna", "Emby.Dlna\Emby.Dlna.xproj", "{F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RSSDP", "RSSDP\RSSDP.xproj", "{C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}" +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Mono.Nat", "Mono.Nat\Mono.Nat.xproj", "{4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -539,36 +536,6 @@ Global {5A27010A-09C6-4E86-93EA-437484C10917}.Release|x64.Build.0 = Release|Any CPU {5A27010A-09C6-4E86-93EA-437484C10917}.Release|x86.ActiveCfg = Release|Any CPU {5A27010A-09C6-4E86-93EA-437484C10917}.Release|x86.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Win32.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|Win32.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x64.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x64.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Debug|x86.Build.0 = Debug|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Win32.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|Win32.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x64.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x64.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x86.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release Mono|x86.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Any CPU.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Win32.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|Win32.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x64.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x64.Build.0 = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x86.ActiveCfg = Release|Any CPU - {0A82260B-4C22-4FD2-869A-E510044E3502}.Release|x86.Build.0 = Release|Any CPU {88AE38DF-19D7-406F-A6A9-09527719A21E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88AE38DF-19D7-406F-A6A9-09527719A21E}.Debug|Any CPU.Build.0 = Debug|Any CPU {88AE38DF-19D7-406F-A6A9-09527719A21E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -599,36 +566,6 @@ Global {88AE38DF-19D7-406F-A6A9-09527719A21E}.Release|x64.Build.0 = Release|Any CPU {88AE38DF-19D7-406F-A6A9-09527719A21E}.Release|x86.ActiveCfg = Release|Any CPU {88AE38DF-19D7-406F-A6A9-09527719A21E}.Release|x86.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Win32.ActiveCfg = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Win32.Build.0 = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x64.Build.0 = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x86.Build.0 = Debug|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Win32.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Win32.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x64.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x64.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x86.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x86.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Any CPU.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Win32.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Win32.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x64.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x64.Build.0 = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.ActiveCfg = Release|Any CPU - {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.Build.0 = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|Any CPU.Build.0 = Debug|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -659,6 +596,96 @@ Global {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x64.Build.0 = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x86.ActiveCfg = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x86.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|Win32.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x64.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x64.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x86.ActiveCfg = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Debug|x86.Build.0 = Debug|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Win32.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|Win32.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x64.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x64.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x86.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release Mono|x86.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Any CPU.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Win32.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|Win32.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x64.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x64.Build.0 = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x86.ActiveCfg = Release|Any CPU + {E383961B-9356-4D5D-8233-9A1079D03055}.Release|x86.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|Win32.Build.0 = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x64.Build.0 = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Debug|x86.Build.0 = Debug|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Win32.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|Win32.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x64.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x64.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x86.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release Mono|x86.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Any CPU.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Win32.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|Win32.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x64.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x64.Build.0 = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.ActiveCfg = Release|Any CPU + {F40E364D-01D9-4BBF-B82C-5D6C55E0A1F5}.Release|x86.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|Win32.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x64.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Debug|x86.Build.0 = Debug|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Win32.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|Win32.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x64.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x64.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x86.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release Mono|x86.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Any CPU.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Win32.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|Win32.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x64.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x64.Build.0 = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x86.ActiveCfg = Release|Any CPU + {4ACAB6A2-AC9A-4B50-BAEC-1FE4A1F3B8BC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Mono.Nat/Mono.Nat.xproj b/Mono.Nat/Mono.Nat.xproj index f460bec580..3479a2a677 100644 --- a/Mono.Nat/Mono.Nat.xproj +++ b/Mono.Nat/Mono.Nat.xproj @@ -6,7 +6,7 @@ - 0a82260b-4c22-4fd2-869a-e510044e3502 + 4acab6a2-ac9a-4b50-baec-1fe4a1f3b8bc Mono.Nat .\obj .\bin\ diff --git a/Mono.Nat/Properties/AssemblyInfo.cs b/Mono.Nat/Properties/AssemblyInfo.cs index f8fe5c3ea2..2a4e75c210 100644 --- a/Mono.Nat/Properties/AssemblyInfo.cs +++ b/Mono.Nat/Properties/AssemblyInfo.cs @@ -14,6 +14,3 @@ using System.Runtime.InteropServices; // 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("0a82260b-4c22-4fd2-869a-e510044e3502")] diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 544a63de93..c17450d2b4 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.681 + 3.0.682 Emby.Common Emby Team ebr,Luke,scottisafool @@ -13,8 +13,7 @@ Copyright © Emby 2013 - - - + +