commit
962a0f561d
|
@ -147,7 +147,7 @@ namespace Emby.Common.Implementations
|
||||||
/// <value>The configuration manager.</value>
|
/// <value>The configuration manager.</value>
|
||||||
protected IConfigurationManager ConfigurationManager { get; private set; }
|
protected IConfigurationManager ConfigurationManager { get; private set; }
|
||||||
|
|
||||||
protected IFileSystem FileSystemManager { get; private set; }
|
public IFileSystem FileSystemManager { get; private set; }
|
||||||
|
|
||||||
protected IIsoManager IsoManager { get; private set; }
|
protected IIsoManager IsoManager { get; private set; }
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,6 @@ using Emby.Dlna.MediaReceiverRegistrar;
|
||||||
using Emby.Dlna.Ssdp;
|
using Emby.Dlna.Ssdp;
|
||||||
using Emby.Server.Core;
|
using Emby.Server.Core;
|
||||||
using Emby.Server.Implementations.Activity;
|
using Emby.Server.Implementations.Activity;
|
||||||
using Emby.Server.Core.Configuration;
|
|
||||||
using Emby.Server.Implementations.Devices;
|
using Emby.Server.Implementations.Devices;
|
||||||
using Emby.Server.Implementations.FFMpeg;
|
using Emby.Server.Implementations.FFMpeg;
|
||||||
using Emby.Server.Core.IO;
|
using Emby.Server.Core.IO;
|
||||||
|
@ -94,7 +93,6 @@ using Emby.Server.Implementations.Social;
|
||||||
using Emby.Server.Implementations.Sync;
|
using Emby.Server.Implementations.Sync;
|
||||||
using Emby.Server.Implementations.Channels;
|
using Emby.Server.Implementations.Channels;
|
||||||
using Emby.Server.Implementations.Collections;
|
using Emby.Server.Implementations.Collections;
|
||||||
using Emby.Server.Implementations.Connect;
|
|
||||||
using Emby.Server.Implementations.Dto;
|
using Emby.Server.Implementations.Dto;
|
||||||
using Emby.Server.Implementations.EntryPoints;
|
using Emby.Server.Implementations.EntryPoints;
|
||||||
using Emby.Server.Implementations.FileOrganization;
|
using Emby.Server.Implementations.FileOrganization;
|
||||||
|
@ -134,6 +132,7 @@ using Emby.Drawing;
|
||||||
using Emby.Server.Implementations.Migrations;
|
using Emby.Server.Implementations.Migrations;
|
||||||
using MediaBrowser.Model.Diagnostics;
|
using MediaBrowser.Model.Diagnostics;
|
||||||
using Emby.Common.Implementations.Diagnostics;
|
using Emby.Common.Implementations.Diagnostics;
|
||||||
|
using Emby.Server.Implementations.Configuration;
|
||||||
|
|
||||||
namespace Emby.Server.Core
|
namespace Emby.Server.Core
|
||||||
{
|
{
|
||||||
|
@ -526,6 +525,8 @@ namespace Emby.Server.Core
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract IConnectManager CreateConnectManager();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers resources that classes will depend on
|
/// Registers resources that classes will depend on
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -635,7 +636,7 @@ namespace Emby.Server.Core
|
||||||
var encryptionManager = new EncryptionManager();
|
var encryptionManager = new EncryptionManager();
|
||||||
RegisterSingleInstance<IEncryptionManager>(encryptionManager);
|
RegisterSingleInstance<IEncryptionManager>(encryptionManager);
|
||||||
|
|
||||||
ConnectManager = new ConnectManager(LogManager.GetLogger("ConnectManager"), ApplicationPaths, JsonSerializer, encryptionManager, HttpClient, this, ServerConfigurationManager, UserManager, ProviderManager, SecurityManager, FileSystemManager);
|
ConnectManager = CreateConnectManager();
|
||||||
RegisterSingleInstance(ConnectManager);
|
RegisterSingleInstance(ConnectManager);
|
||||||
|
|
||||||
DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, LogManager.GetLogger("DeviceManager"), FileSystemManager), UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager, LogManager.GetLogger("DeviceManager"), NetworkManager);
|
DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, LogManager.GetLogger("DeviceManager"), FileSystemManager), UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager, LogManager.GetLogger("DeviceManager"), NetworkManager);
|
||||||
|
|
16
Emby.Server.Core/Logging/ConsoleLogger.cs
Normal file
16
Emby.Server.Core/Logging/ConsoleLogger.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Model.Logging;
|
||||||
|
|
||||||
|
namespace Emby.Server.Core.Logging
|
||||||
|
{
|
||||||
|
public class ConsoleLogger : IConsoleLogger
|
||||||
|
{
|
||||||
|
public void WriteLine(string message)
|
||||||
|
{
|
||||||
|
Console.WriteLine(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,8 @@
|
||||||
using System.IO;
|
using System;
|
||||||
|
using System.IO;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
||||||
namespace Emby.Common.Implementations
|
namespace Emby.Server.Implementations.AppBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides a base class to hold common application paths used by both the Ui and Server.
|
/// Provides a base class to hold common application paths used by both the Ui and Server.
|
||||||
|
@ -12,12 +13,15 @@ namespace Emby.Common.Implementations
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="BaseApplicationPaths"/> class.
|
/// Initializes a new instance of the <see cref="BaseApplicationPaths"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected BaseApplicationPaths(string programDataPath, string appFolderPath)
|
protected BaseApplicationPaths(string programDataPath, string appFolderPath, Action<string> createDirectoryFn)
|
||||||
{
|
{
|
||||||
ProgramDataPath = programDataPath;
|
ProgramDataPath = programDataPath;
|
||||||
ProgramSystemPath = appFolderPath;
|
ProgramSystemPath = appFolderPath;
|
||||||
|
CreateDirectoryFn = createDirectoryFn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Action<string> CreateDirectoryFn;
|
||||||
|
|
||||||
public string ProgramDataPath { get; private set; }
|
public string ProgramDataPath { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -41,7 +45,7 @@ namespace Emby.Common.Implementations
|
||||||
{
|
{
|
||||||
_dataDirectory = Path.Combine(ProgramDataPath, "data");
|
_dataDirectory = Path.Combine(ProgramDataPath, "data");
|
||||||
|
|
||||||
Directory.CreateDirectory(_dataDirectory);
|
CreateDirectoryFn(_dataDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _dataDirectory;
|
return _dataDirectory;
|
||||||
|
@ -148,7 +152,7 @@ namespace Emby.Common.Implementations
|
||||||
{
|
{
|
||||||
_cachePath = Path.Combine(ProgramDataPath, "cache");
|
_cachePath = Path.Combine(ProgramDataPath, "cache");
|
||||||
|
|
||||||
Directory.CreateDirectory(_cachePath);
|
CreateDirectoryFn(_cachePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _cachePath;
|
return _cachePath;
|
|
@ -7,13 +7,12 @@ using System.Threading;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using Emby.Common.Implementations;
|
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace Emby.Common.Implementations.Configuration
|
namespace Emby.Server.Implementations.AppBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class BaseConfigurationManager
|
/// Class BaseConfigurationManager
|
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace Emby.Common.Implementations.Configuration
|
namespace Emby.Server.Implementations.AppBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class ConfigurationHelper
|
/// Class ConfigurationHelper
|
|
@ -2,7 +2,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Emby.Common.Implementations.Configuration;
|
using Emby.Server.Implementations.AppBase;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
|
@ -17,7 +17,7 @@ using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace Emby.Server.Core.Configuration
|
namespace Emby.Server.Implementations.Configuration
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class ServerConfigurationManager
|
/// Class ServerConfigurationManager
|
||||||
|
@ -187,7 +187,7 @@ namespace Emby.Server.Core.Configuration
|
||||||
// Validate
|
// Validate
|
||||||
if (!FileSystem.DirectoryExists(newPath))
|
if (!FileSystem.DirectoryExists(newPath))
|
||||||
{
|
{
|
||||||
throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath));
|
throw new FileNotFoundException(string.Format("{0} does not exist.", newPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
EnsureWriteAccess(newPath);
|
EnsureWriteAccess(newPath);
|
|
@ -1,36 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Connect
|
|
||||||
{
|
|
||||||
public class ConnectData
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the server identifier.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The server identifier.</value>
|
|
||||||
public string ServerId { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the access key.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The access key.</value>
|
|
||||||
public string AccessKey { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the authorizations.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The authorizations.</value>
|
|
||||||
public List<ConnectAuthorizationInternal> PendingAuthorizations { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the last authorizations refresh.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The last authorizations refresh.</value>
|
|
||||||
public DateTime LastAuthorizationsRefresh { get; set; }
|
|
||||||
|
|
||||||
public ConnectData()
|
|
||||||
{
|
|
||||||
PendingAuthorizations = new List<ConnectAuthorizationInternal>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,218 +0,0 @@
|
||||||
using MediaBrowser.Common;
|
|
||||||
using MediaBrowser.Common.Configuration;
|
|
||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Controller.Connect;
|
|
||||||
using MediaBrowser.Controller.Plugins;
|
|
||||||
using MediaBrowser.Model.Logging;
|
|
||||||
using MediaBrowser.Model.Net;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Controller.Security;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Threading;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Connect
|
|
||||||
{
|
|
||||||
public class ConnectEntryPoint : IServerEntryPoint
|
|
||||||
{
|
|
||||||
private ITimer _timer;
|
|
||||||
private IpAddressInfo _cachedIpAddress;
|
|
||||||
private readonly IHttpClient _httpClient;
|
|
||||||
private readonly IApplicationPaths _appPaths;
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IConnectManager _connectManager;
|
|
||||||
|
|
||||||
private readonly INetworkManager _networkManager;
|
|
||||||
private readonly IApplicationHost _appHost;
|
|
||||||
private readonly IFileSystem _fileSystem;
|
|
||||||
private readonly ITimerFactory _timerFactory;
|
|
||||||
private readonly IEncryptionManager _encryption;
|
|
||||||
|
|
||||||
public ConnectEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, ILogger logger, INetworkManager networkManager, IConnectManager connectManager, IApplicationHost appHost, IFileSystem fileSystem, ITimerFactory timerFactory, IEncryptionManager encryption)
|
|
||||||
{
|
|
||||||
_httpClient = httpClient;
|
|
||||||
_appPaths = appPaths;
|
|
||||||
_logger = logger;
|
|
||||||
_networkManager = networkManager;
|
|
||||||
_connectManager = connectManager;
|
|
||||||
_appHost = appHost;
|
|
||||||
_fileSystem = fileSystem;
|
|
||||||
_timerFactory = timerFactory;
|
|
||||||
_encryption = encryption;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Run()
|
|
||||||
{
|
|
||||||
LoadCachedAddress();
|
|
||||||
|
|
||||||
_timer = _timerFactory.Create(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(1));
|
|
||||||
((ConnectManager)_connectManager).Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly string[] _ipLookups =
|
|
||||||
{
|
|
||||||
"http://bot.whatismyipaddress.com",
|
|
||||||
"https://connect.emby.media/service/ip"
|
|
||||||
};
|
|
||||||
|
|
||||||
private async void TimerCallback(object state)
|
|
||||||
{
|
|
||||||
IpAddressInfo validIpAddress = null;
|
|
||||||
|
|
||||||
foreach (var ipLookupUrl in _ipLookups)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
validIpAddress = await GetIpAddress(ipLookupUrl).ConfigureAwait(false);
|
|
||||||
|
|
||||||
// Try to find the ipv4 address, if present
|
|
||||||
if (validIpAddress.AddressFamily != IpAddressFamily.InterNetworkV6)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (HttpException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting connection info", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this produced an ipv6 address, try again
|
|
||||||
if (validIpAddress != null && validIpAddress.AddressFamily == IpAddressFamily.InterNetworkV6)
|
|
||||||
{
|
|
||||||
foreach (var ipLookupUrl in _ipLookups)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var newAddress = await GetIpAddress(ipLookupUrl, true).ConfigureAwait(false);
|
|
||||||
|
|
||||||
// Try to find the ipv4 address, if present
|
|
||||||
if (newAddress.AddressFamily != IpAddressFamily.InterNetworkV6)
|
|
||||||
{
|
|
||||||
validIpAddress = newAddress;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (HttpException)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error getting connection info", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (validIpAddress != null)
|
|
||||||
{
|
|
||||||
((ConnectManager)_connectManager).OnWanAddressResolved(validIpAddress);
|
|
||||||
CacheAddress(validIpAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task<IpAddressInfo> GetIpAddress(string lookupUrl, bool preferIpv4 = false)
|
|
||||||
{
|
|
||||||
// Sometimes whatismyipaddress might fail, but it won't do us any good having users raise alarms over it.
|
|
||||||
var logErrors = false;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
logErrors = true;
|
|
||||||
#endif
|
|
||||||
using (var stream = await _httpClient.Get(new HttpRequestOptions
|
|
||||||
{
|
|
||||||
Url = lookupUrl,
|
|
||||||
UserAgent = "Emby/" + _appHost.ApplicationVersion,
|
|
||||||
LogErrors = logErrors,
|
|
||||||
|
|
||||||
// Seeing block length errors with our server
|
|
||||||
EnableHttpCompression = false,
|
|
||||||
PreferIpv4 = preferIpv4,
|
|
||||||
BufferContent = false
|
|
||||||
|
|
||||||
}).ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
using (var reader = new StreamReader(stream))
|
|
||||||
{
|
|
||||||
var addressString = await reader.ReadToEndAsync().ConfigureAwait(false);
|
|
||||||
|
|
||||||
return _networkManager.ParseIpAddress(addressString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CacheFilePath
|
|
||||||
{
|
|
||||||
get { return Path.Combine(_appPaths.DataPath, "wan.dat"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CacheAddress(IpAddressInfo address)
|
|
||||||
{
|
|
||||||
if (_cachedIpAddress != null && _cachedIpAddress.Equals(address))
|
|
||||||
{
|
|
||||||
// no need to update the file if the address has not changed
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var path = CacheFilePath;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_fileSystem.WriteAllText(path, _encryption.EncryptString(address.ToString()), Encoding.UTF8);
|
|
||||||
_cachedIpAddress = address;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error saving data", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadCachedAddress()
|
|
||||||
{
|
|
||||||
var path = CacheFilePath;
|
|
||||||
|
|
||||||
_logger.Info("Loading data from {0}", path);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var endpoint = _encryption.DecryptString(_fileSystem.ReadAllText(path, Encoding.UTF8));
|
|
||||||
IpAddressInfo ipAddress;
|
|
||||||
|
|
||||||
if (_networkManager.TryParseIpAddress(endpoint, out ipAddress))
|
|
||||||
{
|
|
||||||
_cachedIpAddress = ipAddress;
|
|
||||||
((ConnectManager)_connectManager).OnWanAddressResolved(ipAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException)
|
|
||||||
{
|
|
||||||
// File isn't there. no biggie
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error loading data", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
if (_timer != null)
|
|
||||||
{
|
|
||||||
_timer.Dispose();
|
|
||||||
_timer = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,85 +0,0 @@
|
||||||
using MediaBrowser.Model.Configuration;
|
|
||||||
using MediaBrowser.Model.Connect;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Connect
|
|
||||||
{
|
|
||||||
public class ServerRegistrationResponse
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
public string Url { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
public string AccessKey { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UpdateServerRegistrationResponse
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
public string Url { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GetConnectUserResponse
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
public string DisplayName { get; set; }
|
|
||||||
public string Email { get; set; }
|
|
||||||
public bool IsActive { get; set; }
|
|
||||||
public string ImageUrl { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ServerUserAuthorizationResponse
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
public string ServerId { get; set; }
|
|
||||||
public string UserId { get; set; }
|
|
||||||
public string AccessToken { get; set; }
|
|
||||||
public string DateCreated { get; set; }
|
|
||||||
public bool IsActive { get; set; }
|
|
||||||
public string AcceptStatus { get; set; }
|
|
||||||
public string UserType { get; set; }
|
|
||||||
public string UserImageUrl { get; set; }
|
|
||||||
public string UserName { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ConnectUserPreferences
|
|
||||||
{
|
|
||||||
public string[] PreferredAudioLanguages { get; set; }
|
|
||||||
public bool PlayDefaultAudioTrack { get; set; }
|
|
||||||
public string[] PreferredSubtitleLanguages { get; set; }
|
|
||||||
public SubtitlePlaybackMode SubtitleMode { get; set; }
|
|
||||||
public bool GroupMoviesIntoBoxSets { get; set; }
|
|
||||||
|
|
||||||
public ConnectUserPreferences()
|
|
||||||
{
|
|
||||||
PreferredAudioLanguages = new string[] { };
|
|
||||||
PreferredSubtitleLanguages = new string[] { };
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ConnectUserPreferences FromUserConfiguration(UserConfiguration config)
|
|
||||||
{
|
|
||||||
return new ConnectUserPreferences
|
|
||||||
{
|
|
||||||
PlayDefaultAudioTrack = config.PlayDefaultAudioTrack,
|
|
||||||
SubtitleMode = config.SubtitleMode,
|
|
||||||
PreferredAudioLanguages = string.IsNullOrWhiteSpace(config.AudioLanguagePreference) ? new string[] { } : new[] { config.AudioLanguagePreference },
|
|
||||||
PreferredSubtitleLanguages = string.IsNullOrWhiteSpace(config.SubtitleLanguagePreference) ? new string[] { } : new[] { config.SubtitleLanguagePreference }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MergeInto(UserConfiguration config)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UserPreferencesDto<T>
|
|
||||||
{
|
|
||||||
public T data { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ConnectAuthorizationInternal : ConnectAuthorization
|
|
||||||
{
|
|
||||||
public string AccessToken { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Connect
|
|
||||||
{
|
|
||||||
public static class Validator
|
|
||||||
{
|
|
||||||
static readonly Regex ValidEmailRegex = CreateValidEmailRegex();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Taken from http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
private static Regex CreateValidEmailRegex()
|
|
||||||
{
|
|
||||||
const string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
|
|
||||||
+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
|
|
||||||
+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
|
|
||||||
|
|
||||||
return new Regex(validEmailPattern, RegexOptions.IgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static bool EmailIsValid(string emailAddress)
|
|
||||||
{
|
|
||||||
bool isValid = ValidEmailRegex.IsMatch(emailAddress);
|
|
||||||
|
|
||||||
return isValid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1031,7 +1031,7 @@ namespace Emby.Server.Implementations.Dto
|
||||||
|
|
||||||
if (fields.Contains(ItemFields.Path))
|
if (fields.Contains(ItemFields.Path))
|
||||||
{
|
{
|
||||||
dto.Path = GetMappedPath(item);
|
dto.Path = GetMappedPath(item, owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
dto.PremiereDate = item.PremiereDate;
|
dto.PremiereDate = item.PremiereDate;
|
||||||
|
@ -1566,7 +1566,7 @@ namespace Emby.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetMappedPath(BaseItem item)
|
private string GetMappedPath(BaseItem item, BaseItem ownerItem)
|
||||||
{
|
{
|
||||||
var path = item.Path;
|
var path = item.Path;
|
||||||
|
|
||||||
|
@ -1574,7 +1574,7 @@ namespace Emby.Server.Implementations.Dto
|
||||||
|
|
||||||
if (locationType == LocationType.FileSystem || locationType == LocationType.Offline)
|
if (locationType == LocationType.FileSystem || locationType == LocationType.Offline)
|
||||||
{
|
{
|
||||||
path = _libraryManager.GetPathAfterNetworkSubstitution(path, item);
|
path = _libraryManager.GetPathAfterNetworkSubstitution(path, ownerItem ?? item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
|
|
|
@ -35,6 +35,9 @@
|
||||||
<Compile Include="Activity\ActivityLogEntryPoint.cs" />
|
<Compile Include="Activity\ActivityLogEntryPoint.cs" />
|
||||||
<Compile Include="Activity\ActivityManager.cs" />
|
<Compile Include="Activity\ActivityManager.cs" />
|
||||||
<Compile Include="Activity\ActivityRepository.cs" />
|
<Compile Include="Activity\ActivityRepository.cs" />
|
||||||
|
<Compile Include="AppBase\BaseApplicationPaths.cs" />
|
||||||
|
<Compile Include="AppBase\BaseConfigurationManager.cs" />
|
||||||
|
<Compile Include="AppBase\ConfigurationHelper.cs" />
|
||||||
<Compile Include="Branding\BrandingConfigurationFactory.cs" />
|
<Compile Include="Branding\BrandingConfigurationFactory.cs" />
|
||||||
<Compile Include="Browser\BrowserLauncher.cs" />
|
<Compile Include="Browser\BrowserLauncher.cs" />
|
||||||
<Compile Include="Channels\ChannelConfigurations.cs" />
|
<Compile Include="Channels\ChannelConfigurations.cs" />
|
||||||
|
@ -46,11 +49,7 @@
|
||||||
<Compile Include="Collections\CollectionImageProvider.cs" />
|
<Compile Include="Collections\CollectionImageProvider.cs" />
|
||||||
<Compile Include="Collections\CollectionManager.cs" />
|
<Compile Include="Collections\CollectionManager.cs" />
|
||||||
<Compile Include="Collections\CollectionsDynamicFolder.cs" />
|
<Compile Include="Collections\CollectionsDynamicFolder.cs" />
|
||||||
<Compile Include="Connect\ConnectData.cs" />
|
<Compile Include="Configuration\ServerConfigurationManager.cs" />
|
||||||
<Compile Include="Connect\ConnectEntryPoint.cs" />
|
|
||||||
<Compile Include="Connect\ConnectManager.cs" />
|
|
||||||
<Compile Include="Connect\Responses.cs" />
|
|
||||||
<Compile Include="Connect\Validator.cs" />
|
|
||||||
<Compile Include="Data\ManagedConnection.cs" />
|
<Compile Include="Data\ManagedConnection.cs" />
|
||||||
<Compile Include="Data\SqliteDisplayPreferencesRepository.cs" />
|
<Compile Include="Data\SqliteDisplayPreferencesRepository.cs" />
|
||||||
<Compile Include="Data\SqliteFileOrganizationRepository.cs" />
|
<Compile Include="Data\SqliteFileOrganizationRepository.cs" />
|
||||||
|
@ -179,6 +178,7 @@
|
||||||
<Compile Include="LiveTv\TunerHosts\MulticastStream.cs" />
|
<Compile Include="LiveTv\TunerHosts\MulticastStream.cs" />
|
||||||
<Compile Include="LiveTv\TunerHosts\QueueStream.cs" />
|
<Compile Include="LiveTv\TunerHosts\QueueStream.cs" />
|
||||||
<Compile Include="Localization\LocalizationManager.cs" />
|
<Compile Include="Localization\LocalizationManager.cs" />
|
||||||
|
<Compile Include="Logging\UnhandledExceptionWriter.cs" />
|
||||||
<Compile Include="MediaEncoder\EncodingManager.cs" />
|
<Compile Include="MediaEncoder\EncodingManager.cs" />
|
||||||
<Compile Include="Migrations\IVersionMigration.cs" />
|
<Compile Include="Migrations\IVersionMigration.cs" />
|
||||||
<Compile Include="Migrations\LibraryScanMigration.cs" />
|
<Compile Include="Migrations\LibraryScanMigration.cs" />
|
||||||
|
@ -213,6 +213,7 @@
|
||||||
<Compile Include="Security\MBLicenseFile.cs" />
|
<Compile Include="Security\MBLicenseFile.cs" />
|
||||||
<Compile Include="Security\PluginSecurityManager.cs" />
|
<Compile Include="Security\PluginSecurityManager.cs" />
|
||||||
<Compile Include="Security\RegRecord.cs" />
|
<Compile Include="Security\RegRecord.cs" />
|
||||||
|
<Compile Include="ServerApplicationPaths.cs" />
|
||||||
<Compile Include="ServerManager\ServerManager.cs" />
|
<Compile Include="ServerManager\ServerManager.cs" />
|
||||||
<Compile Include="ServerManager\WebSocketConnection.cs" />
|
<Compile Include="ServerManager\WebSocketConnection.cs" />
|
||||||
<Compile Include="Services\ServicePath.cs" />
|
<Compile Include="Services\ServicePath.cs" />
|
||||||
|
|
|
@ -2,20 +2,25 @@
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace Emby.Server.Core
|
namespace Emby.Server.Implementations.Logging
|
||||||
{
|
{
|
||||||
public class UnhandledExceptionWriter
|
public class UnhandledExceptionWriter
|
||||||
{
|
{
|
||||||
private readonly IApplicationPaths _appPaths;
|
private readonly IApplicationPaths _appPaths;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly ILogManager _logManager;
|
private readonly ILogManager _logManager;
|
||||||
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private readonly IConsoleLogger _console;
|
||||||
|
|
||||||
public UnhandledExceptionWriter(IApplicationPaths appPaths, ILogger logger, ILogManager logManager)
|
public UnhandledExceptionWriter(IApplicationPaths appPaths, ILogger logger, ILogManager logManager, IFileSystem fileSystem, IConsoleLogger console)
|
||||||
{
|
{
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_logManager = logManager;
|
_logManager = logManager;
|
||||||
|
_fileSystem = fileSystem;
|
||||||
|
_console = console;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Log(Exception ex)
|
public void Log(Exception ex)
|
||||||
|
@ -24,15 +29,15 @@ namespace Emby.Server.Core
|
||||||
_logManager.Flush();
|
_logManager.Flush();
|
||||||
|
|
||||||
var path = Path.Combine(_appPaths.LogDirectoryPath, "unhandled_" + Guid.NewGuid() + ".txt");
|
var path = Path.Combine(_appPaths.LogDirectoryPath, "unhandled_" + Guid.NewGuid() + ".txt");
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
|
||||||
|
|
||||||
var builder = LogHelper.GetLogMessage(ex);
|
var builder = LogHelper.GetLogMessage(ex);
|
||||||
|
|
||||||
// Write to console just in case file logging fails
|
// Write to console just in case file logging fails
|
||||||
Console.WriteLine("UnhandledException");
|
_console.WriteLine("UnhandledException");
|
||||||
Console.WriteLine(builder.ToString());
|
_console.WriteLine(builder.ToString());
|
||||||
|
|
||||||
File.WriteAllText(path, builder.ToString());
|
_fileSystem.WriteAllText(path, builder.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,9 @@
|
||||||
using System.IO;
|
using System;
|
||||||
using Emby.Common.Implementations;
|
using System.IO;
|
||||||
|
using Emby.Server.Implementations.AppBase;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
|
|
||||||
namespace Emby.Server.Core
|
namespace Emby.Server.Implementations
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extends BaseApplicationPaths to add paths that are only applicable on the server
|
/// Extends BaseApplicationPaths to add paths that are only applicable on the server
|
||||||
|
@ -12,8 +13,8 @@ namespace Emby.Server.Core
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="BaseApplicationPaths" /> class.
|
/// Initializes a new instance of the <see cref="BaseApplicationPaths" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ServerApplicationPaths(string programDataPath, string appFolderPath, string applicationResourcesPath)
|
public ServerApplicationPaths(string programDataPath, string appFolderPath, string applicationResourcesPath, Action<string> createDirectoryFn)
|
||||||
: base(programDataPath, appFolderPath)
|
: base(programDataPath, appFolderPath, createDirectoryFn)
|
||||||
{
|
{
|
||||||
ApplicationResourcesPath = applicationResourcesPath;
|
ApplicationResourcesPath = applicationResourcesPath;
|
||||||
}
|
}
|
7
MediaBrowser.Model/Logging/IConsoleLogger.cs
Normal file
7
MediaBrowser.Model/Logging/IConsoleLogger.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Model.Logging
|
||||||
|
{
|
||||||
|
public interface IConsoleLogger
|
||||||
|
{
|
||||||
|
void WriteLine(string message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -135,6 +135,7 @@
|
||||||
<Compile Include="Dto\MetadataEditorInfo.cs" />
|
<Compile Include="Dto\MetadataEditorInfo.cs" />
|
||||||
<Compile Include="Dto\NameIdPair.cs" />
|
<Compile Include="Dto\NameIdPair.cs" />
|
||||||
<Compile Include="Dto\NameValuePair.cs" />
|
<Compile Include="Dto\NameValuePair.cs" />
|
||||||
|
<Compile Include="Logging\IConsoleLogger.cs" />
|
||||||
<Compile Include="Net\IpEndPointInfo.cs" />
|
<Compile Include="Net\IpEndPointInfo.cs" />
|
||||||
<Compile Include="Net\ISocket.cs" />
|
<Compile Include="Net\ISocket.cs" />
|
||||||
<Compile Include="Net\ISocketFactory.cs" />
|
<Compile Include="Net\ISocketFactory.cs" />
|
||||||
|
|
|
@ -61,6 +61,9 @@
|
||||||
<Reference Include="Emby.Common.Implementations">
|
<Reference Include="Emby.Common.Implementations">
|
||||||
<HintPath>..\ThirdParty\emby\Emby.Common.Implementations.dll</HintPath>
|
<HintPath>..\ThirdParty\emby\Emby.Common.Implementations.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Emby.Server.Connect">
|
||||||
|
<HintPath>..\ThirdParty\emby\Emby.Server.Connect.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Emby.Server.Core">
|
<Reference Include="Emby.Server.Core">
|
||||||
<HintPath>..\ThirdParty\emby\Emby.Server.Core.dll</HintPath>
|
<HintPath>..\ThirdParty\emby\Emby.Server.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Emby.Server.Connect;
|
||||||
using Emby.Server.Core;
|
using Emby.Server.Core;
|
||||||
using Emby.Server.Implementations;
|
using Emby.Server.Implementations;
|
||||||
using Emby.Server.Implementations.FFMpeg;
|
using MediaBrowser.Controller.Connect;
|
||||||
using MediaBrowser.IsoMounter;
|
using MediaBrowser.IsoMounter;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
@ -26,6 +27,11 @@ namespace MediaBrowser.Server.Mono
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override IConnectManager CreateConnectManager()
|
||||||
|
{
|
||||||
|
return new ConnectManager();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void RestartInternal()
|
protected override void RestartInternal()
|
||||||
{
|
{
|
||||||
MainClass.Restart(StartupOptions);
|
MainClass.Restart(StartupOptions);
|
||||||
|
@ -46,6 +52,7 @@ namespace MediaBrowser.Server.Mono
|
||||||
var list = new List<Assembly>();
|
var list = new List<Assembly>();
|
||||||
|
|
||||||
list.Add(typeof(LinuxIsoManager).Assembly);
|
list.Add(typeof(LinuxIsoManager).Assembly);
|
||||||
|
list.Add(typeof(ConnectManager).Assembly);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,11 @@ using Emby.Common.Implementations.Logging;
|
||||||
using Emby.Common.Implementations.Networking;
|
using Emby.Common.Implementations.Networking;
|
||||||
using Emby.Common.Implementations.Security;
|
using Emby.Common.Implementations.Security;
|
||||||
using Emby.Server.Core;
|
using Emby.Server.Core;
|
||||||
|
using Emby.Server.Core.Logging;
|
||||||
using Emby.Server.Implementations;
|
using Emby.Server.Implementations;
|
||||||
using Emby.Server.Implementations.IO;
|
using Emby.Server.Implementations.IO;
|
||||||
|
using Emby.Server.Implementations.Logging;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.System;
|
using MediaBrowser.Model.System;
|
||||||
using MediaBrowser.Server.Startup.Common.IO;
|
using MediaBrowser.Server.Startup.Common.IO;
|
||||||
using Mono.Unix.Native;
|
using Mono.Unix.Native;
|
||||||
|
@ -32,6 +35,7 @@ namespace MediaBrowser.Server.Mono
|
||||||
private static ApplicationHost _appHost;
|
private static ApplicationHost _appHost;
|
||||||
|
|
||||||
private static ILogger _logger;
|
private static ILogger _logger;
|
||||||
|
private static IFileSystem FileSystem;
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
@ -98,7 +102,9 @@ namespace MediaBrowser.Server.Mono
|
||||||
|
|
||||||
var appFolderPath = Path.GetDirectoryName(applicationPath);
|
var appFolderPath = Path.GetDirectoryName(applicationPath);
|
||||||
|
|
||||||
return new ServerApplicationPaths(programDataPath, appFolderPath, Path.GetDirectoryName(applicationPath));
|
Action<string> createDirectoryFn = s => Directory.CreateDirectory(s);
|
||||||
|
|
||||||
|
return new ServerApplicationPaths(programDataPath, appFolderPath, Path.GetDirectoryName(applicationPath), createDirectoryFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly TaskCompletionSource<bool> ApplicationTaskCompletionSource = new TaskCompletionSource<bool>();
|
private static readonly TaskCompletionSource<bool> ApplicationTaskCompletionSource = new TaskCompletionSource<bool>();
|
||||||
|
@ -111,6 +117,8 @@ namespace MediaBrowser.Server.Mono
|
||||||
var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false, appPaths.TempDirectory);
|
var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false, appPaths.TempDirectory);
|
||||||
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
|
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
|
||||||
|
|
||||||
|
FileSystem = fileSystem;
|
||||||
|
|
||||||
var environmentInfo = GetEnvironmentInfo();
|
var environmentInfo = GetEnvironmentInfo();
|
||||||
|
|
||||||
var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
|
var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
|
||||||
|
@ -247,7 +255,7 @@ namespace MediaBrowser.Server.Mono
|
||||||
{
|
{
|
||||||
var exception = (Exception)e.ExceptionObject;
|
var exception = (Exception)e.ExceptionObject;
|
||||||
|
|
||||||
new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager).Log(exception);
|
new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager, FileSystem, new ConsoleLogger()).Log(exception);
|
||||||
|
|
||||||
if (!Debugger.IsAttached)
|
if (!Debugger.IsAttached)
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,11 +23,14 @@ using Emby.Common.Implementations.Logging;
|
||||||
using Emby.Common.Implementations.Networking;
|
using Emby.Common.Implementations.Networking;
|
||||||
using Emby.Common.Implementations.Security;
|
using Emby.Common.Implementations.Security;
|
||||||
using Emby.Server.Core;
|
using Emby.Server.Core;
|
||||||
|
using Emby.Server.Core.Logging;
|
||||||
using Emby.Server.Implementations;
|
using Emby.Server.Implementations;
|
||||||
using Emby.Server.Implementations.Browser;
|
using Emby.Server.Implementations.Browser;
|
||||||
using Emby.Server.Implementations.IO;
|
using Emby.Server.Implementations.IO;
|
||||||
|
using Emby.Server.Implementations.Logging;
|
||||||
using ImageMagickSharp;
|
using ImageMagickSharp;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Server.Startup.Common.IO;
|
using MediaBrowser.Server.Startup.Common.IO;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication
|
namespace MediaBrowser.ServerApplication
|
||||||
|
@ -47,6 +50,8 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
public static string ApplicationPath;
|
public static string ApplicationPath;
|
||||||
|
|
||||||
|
private static IFileSystem FileSystem;
|
||||||
|
|
||||||
public static bool TryGetLocalFromUncDirectory(string local, out string unc)
|
public static bool TryGetLocalFromUncDirectory(string local, out string unc)
|
||||||
{
|
{
|
||||||
if ((local == null) || (local == ""))
|
if ((local == null) || (local == ""))
|
||||||
|
@ -259,16 +264,18 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
var resourcesPath = Path.GetDirectoryName(applicationPath);
|
var resourcesPath = Path.GetDirectoryName(applicationPath);
|
||||||
|
|
||||||
|
Action<string> createDirectoryFn = s => Directory.CreateDirectory(s);
|
||||||
|
|
||||||
if (runAsService)
|
if (runAsService)
|
||||||
{
|
{
|
||||||
var systemPath = Path.GetDirectoryName(applicationPath);
|
var systemPath = Path.GetDirectoryName(applicationPath);
|
||||||
|
|
||||||
var programDataPath = Path.GetDirectoryName(systemPath);
|
var programDataPath = Path.GetDirectoryName(systemPath);
|
||||||
|
|
||||||
return new ServerApplicationPaths(programDataPath, appFolderPath, resourcesPath);
|
return new ServerApplicationPaths(programDataPath, appFolderPath, resourcesPath, createDirectoryFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(applicationPath), appFolderPath, resourcesPath);
|
return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(applicationPath), appFolderPath, resourcesPath, createDirectoryFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -330,6 +337,8 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
|
var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
|
||||||
|
|
||||||
|
FileSystem = fileSystem;
|
||||||
|
|
||||||
_appHost = new WindowsAppHost(appPaths,
|
_appHost = new WindowsAppHost(appPaths,
|
||||||
logManager,
|
logManager,
|
||||||
options,
|
options,
|
||||||
|
@ -580,7 +589,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
var exception = (Exception)e.ExceptionObject;
|
var exception = (Exception)e.ExceptionObject;
|
||||||
|
|
||||||
new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager).Log(exception);
|
new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager, FileSystem, new ConsoleLogger()).Log(exception);
|
||||||
|
|
||||||
if (!IsRunningAsService)
|
if (!IsRunningAsService)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,6 +67,9 @@
|
||||||
<Reference Include="Emby.Common.Implementations">
|
<Reference Include="Emby.Common.Implementations">
|
||||||
<HintPath>..\ThirdParty\emby\Emby.Common.Implementations.dll</HintPath>
|
<HintPath>..\ThirdParty\emby\Emby.Common.Implementations.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Emby.Server.Connect">
|
||||||
|
<HintPath>..\ThirdParty\emby\Emby.Server.Connect.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Emby.Server.Core">
|
<Reference Include="Emby.Server.Core">
|
||||||
<HintPath>..\ThirdParty\emby\Emby.Server.Core.dll</HintPath>
|
<HintPath>..\ThirdParty\emby\Emby.Server.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|
|
@ -4,10 +4,12 @@ using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices.ComTypes;
|
using System.Runtime.InteropServices.ComTypes;
|
||||||
|
using Emby.Server.Connect;
|
||||||
using Emby.Server.Core;
|
using Emby.Server.Core;
|
||||||
using Emby.Server.Implementations;
|
using Emby.Server.Implementations;
|
||||||
using Emby.Server.Implementations.EntryPoints;
|
using Emby.Server.Implementations.EntryPoints;
|
||||||
using Emby.Server.Implementations.FFMpeg;
|
using Emby.Server.Implementations.FFMpeg;
|
||||||
|
using MediaBrowser.Controller.Connect;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.System;
|
using MediaBrowser.Model.System;
|
||||||
|
@ -27,6 +29,11 @@ namespace MediaBrowser.ServerApplication
|
||||||
get { return MainStartup.IsRunningAsService; }
|
get { return MainStartup.IsRunningAsService; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override IConnectManager CreateConnectManager()
|
||||||
|
{
|
||||||
|
return new ConnectManager();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void RestartInternal()
|
protected override void RestartInternal()
|
||||||
{
|
{
|
||||||
MainStartup.Restart();
|
MainStartup.Restart();
|
||||||
|
@ -41,6 +48,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
//list.Add(typeof(PismoIsoManager).Assembly);
|
//list.Add(typeof(PismoIsoManager).Assembly);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list.Add(typeof(ConnectManager).Assembly);
|
||||||
list.Add(GetType().Assembly);
|
list.Add(GetType().Assembly);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.680</version>
|
<version>3.0.681</version>
|
||||||
<title>Emby.Common.Internal</title>
|
<title>Emby.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.694</version>
|
<version>3.0.695</version>
|
||||||
<title>Emby.Common</title>
|
<title>Emby.Common</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.694</version>
|
<version>3.0.695</version>
|
||||||
<title>Emby.Server.Core</title>
|
<title>Emby.Server.Core</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Emby Server.</description>
|
<description>Contains core components required to build plugins for Emby Server.</description>
|
||||||
<copyright>Copyright © Emby 2013</copyright>
|
<copyright>Copyright © Emby 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.694" />
|
<dependency id="MediaBrowser.Common" version="3.0.695" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("3.2.1.111")]
|
[assembly: AssemblyVersion("3.2.1.112")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user