mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-04-24 22:17:25 -04:00
moved a few things for mono
This commit is contained in:
parent
0ab379e271
commit
fe5a9232c8
36 changed files with 740 additions and 279 deletions
87
MediaBrowser.Common.Implementations/Archiving/ZipClient.cs
Normal file
87
MediaBrowser.Common.Implementations/Archiving/ZipClient.cs
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
|
using SharpCompress.Archive.SevenZip;
|
||||||
|
using SharpCompress.Common;
|
||||||
|
using SharpCompress.Reader;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Common.Implementations.Archiving
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class DotNetZipClient
|
||||||
|
/// </summary>
|
||||||
|
public class ZipClient : IZipClient
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceFile">The source file.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var fileStream = File.OpenRead(sourceFile))
|
||||||
|
{
|
||||||
|
ExtractAll(fileStream, targetPath, overwriteExistingFiles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The source.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var reader = ReaderFactory.Open(source))
|
||||||
|
{
|
||||||
|
var options = ExtractOptions.ExtractFullPath;
|
||||||
|
|
||||||
|
if (overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
options = options | ExtractOptions.Overwrite;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.WriteAllToDirectory(targetPath, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from7z.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceFile">The source file.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAllFrom7z(string sourceFile, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var fileStream = File.OpenRead(sourceFile))
|
||||||
|
{
|
||||||
|
ExtractAllFrom7z(fileStream, targetPath, overwriteExistingFiles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from7z.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The source.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
public void ExtractAllFrom7z(Stream source, string targetPath, bool overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
using (var archive = SevenZipArchive.Open(source))
|
||||||
|
{
|
||||||
|
using (var reader = archive.ExtractAllEntries())
|
||||||
|
{
|
||||||
|
var options = ExtractOptions.ExtractFullPath;
|
||||||
|
|
||||||
|
if (overwriteExistingFiles)
|
||||||
|
{
|
||||||
|
options = options | ExtractOptions.Overwrite;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.WriteAllToDirectory(targetPath, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
|
using MediaBrowser.Common.Implementations.Archiving;
|
||||||
using MediaBrowser.Common.Implementations.NetworkManagement;
|
using MediaBrowser.Common.Implementations.NetworkManagement;
|
||||||
using MediaBrowser.Common.Implementations.ScheduledTasks;
|
using MediaBrowser.Common.Implementations.ScheduledTasks;
|
||||||
using MediaBrowser.Common.Implementations.Security;
|
using MediaBrowser.Common.Implementations.Security;
|
||||||
|
@ -10,6 +11,7 @@ using MediaBrowser.Common.Plugins;
|
||||||
using MediaBrowser.Common.ScheduledTasks;
|
using MediaBrowser.Common.ScheduledTasks;
|
||||||
using MediaBrowser.Common.Security;
|
using MediaBrowser.Common.Security;
|
||||||
using MediaBrowser.Common.Updates;
|
using MediaBrowser.Common.Updates;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using MediaBrowser.Model.Updates;
|
using MediaBrowser.Model.Updates;
|
||||||
|
@ -149,6 +151,12 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <value>The installation manager.</value>
|
/// <value>The installation manager.</value>
|
||||||
protected IInstallationManager InstallationManager { get; set; }
|
protected IInstallationManager InstallationManager { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the zip client.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The zip client.</value>
|
||||||
|
protected IZipClient ZipClient { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
|
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -202,12 +210,27 @@ namespace MediaBrowser.Common.Implementations
|
||||||
{
|
{
|
||||||
Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false));
|
Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false));
|
||||||
|
|
||||||
Task.Run(() => ConfigureAutoRunAtStartup());
|
Task.Run(() => ConfigureAutorun());
|
||||||
|
|
||||||
ConfigurationManager.ConfigurationUpdated += OnConfigurationUpdated;
|
ConfigurationManager.ConfigurationUpdated += OnConfigurationUpdated;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configures the autorun.
|
||||||
|
/// </summary>
|
||||||
|
private void ConfigureAutorun()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ConfigureAutoRunAtStartup(ConfigurationManager.CommonConfiguration.RunAtStartup);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.ErrorException("Error configuring autorun", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the composable part assemblies.
|
/// Gets the composable part assemblies.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -281,6 +304,9 @@ namespace MediaBrowser.Common.Implementations
|
||||||
|
|
||||||
InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, NetworkManager, ConfigurationManager);
|
InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, NetworkManager, ConfigurationManager);
|
||||||
RegisterSingleInstance(InstallationManager);
|
RegisterSingleInstance(InstallationManager);
|
||||||
|
|
||||||
|
ZipClient = new ZipClient();
|
||||||
|
RegisterSingleInstance(ZipClient);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -453,11 +479,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Defines the full path to our shortcut in the start menu
|
|
||||||
/// </summary>
|
|
||||||
protected abstract string ProductShortcutPath { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the ConfigurationUpdated event of the ConfigurationManager control.
|
/// Handles the ConfigurationUpdated event of the ConfigurationManager control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -466,32 +487,10 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <exception cref="System.NotImplementedException"></exception>
|
/// <exception cref="System.NotImplementedException"></exception>
|
||||||
protected virtual void OnConfigurationUpdated(object sender, EventArgs e)
|
protected virtual void OnConfigurationUpdated(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ConfigureAutoRunAtStartup();
|
ConfigureAutorun();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
protected abstract void ConfigureAutoRunAtStartup(bool autorun);
|
||||||
/// Configures the auto run at startup.
|
|
||||||
/// </summary>
|
|
||||||
private void ConfigureAutoRunAtStartup()
|
|
||||||
{
|
|
||||||
if (ConfigurationManager.CommonConfiguration.RunAtStartup)
|
|
||||||
{
|
|
||||||
//Copy our shortut into the startup folder for this user
|
|
||||||
File.Copy(ProductShortcutPath, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), Path.GetFileName(ProductShortcutPath) ?? "MBstartup.lnk"), true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//Remove our shortcut from the startup folder for this user
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), Path.GetFileName(ProductShortcutPath) ?? "MBstartup.lnk"));
|
|
||||||
}
|
|
||||||
catch (FileNotFoundException)
|
|
||||||
{
|
|
||||||
//This is okay - trying to remove it anyway
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes the plugin.
|
/// Removes the plugin.
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="SharpCompress">
|
||||||
|
<HintPath>..\packages\sharpcompress.0.10.1.3\lib\net40\SharpCompress.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
@ -58,6 +61,7 @@
|
||||||
<Compile Include="..\SharedVersion.cs">
|
<Compile Include="..\SharedVersion.cs">
|
||||||
<Link>Properties\SharedVersion.cs</Link>
|
<Link>Properties\SharedVersion.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Archiving\ZipClient.cs" />
|
||||||
<Compile Include="BaseApplicationHost.cs" />
|
<Compile Include="BaseApplicationHost.cs" />
|
||||||
<Compile Include="BaseApplicationPaths.cs" />
|
<Compile Include="BaseApplicationPaths.cs" />
|
||||||
<Compile Include="Configuration\BaseConfigurationManager.cs" />
|
<Compile Include="Configuration\BaseConfigurationManager.cs" />
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
<packages>
|
<packages>
|
||||||
<package id="NLog" version="2.0.1.2" targetFramework="net45" />
|
<package id="NLog" version="2.0.1.2" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
||||||
|
<package id="sharpcompress" version="0.10.1.3" targetFramework="net45" />
|
||||||
<package id="SimpleInjector" version="2.3.5" targetFramework="net45" />
|
<package id="SimpleInjector" version="2.3.5" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -22,5 +22,21 @@ namespace MediaBrowser.Model.IO
|
||||||
/// <param name="targetPath">The target path.</param>
|
/// <param name="targetPath">The target path.</param>
|
||||||
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles);
|
void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from7z.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sourceFile">The source file.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
void ExtractAllFrom7z(string sourceFile, string targetPath, bool overwriteExistingFiles);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extracts all from7z.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The source.</param>
|
||||||
|
/// <param name="targetPath">The target path.</param>
|
||||||
|
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
||||||
|
void ExtractAllFrom7z(Stream source, string targetPath, bool overwriteExistingFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,17 @@
|
||||||
<Properties>
|
<Properties>
|
||||||
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" />
|
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" />
|
||||||
<MonoDevelop.Ide.Workbench />
|
<MonoDevelop.Ide.Workbench ActiveDocument="d:\Development\MediaBrowser\MediaBrowser.Server.Mono\Native\Sqlite.cs">
|
||||||
|
<Files>
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\Program.cs" Line="1" Column="1" />
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\MainWindow.cs" Line="8" Column="12" />
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\Native\Autorun.cs" Line="17" Column="4" />
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\Native\ServerAuthorization.cs" Line="23" Column="1" />
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\FFMpeg\FFMpegDownloader.cs" Line="7" Column="14" />
|
||||||
|
<File FileName="MediaBrowser.ServerApplication\ApplicationHost.cs" Line="548" Column="61" />
|
||||||
|
<File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="22" Column="13" />
|
||||||
|
<File FileName="d:\Development\MediaBrowser\MediaBrowser.Server.Mono\Native\Sqlite.cs" Line="21" Column="14" />
|
||||||
|
</Files>
|
||||||
|
</MonoDevelop.Ide.Workbench>
|
||||||
<MonoDevelop.Ide.DebuggingService.Breakpoints>
|
<MonoDevelop.Ide.DebuggingService.Breakpoints>
|
||||||
<BreakpointStore />
|
<BreakpointStore />
|
||||||
</MonoDevelop.Ide.DebuggingService.Breakpoints>
|
</MonoDevelop.Ide.DebuggingService.Breakpoints>
|
||||||
|
|
|
@ -5,7 +5,7 @@ using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Server.Implementations.Udp;
|
using MediaBrowser.Server.Implementations.Udp;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.EntryPoints
|
namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class UdpServerEntryPoint
|
/// Class UdpServerEntryPoint
|
||||||
|
@ -35,6 +35,8 @@ namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly IHttpServer _httpServer;
|
private readonly IHttpServer _httpServer;
|
||||||
|
|
||||||
|
public const int PortNumber = 7359;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="UdpServerEntryPoint"/> class.
|
/// Initializes a new instance of the <see cref="UdpServerEntryPoint"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -59,7 +61,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
udpServer.Start(ApplicationHost.UdpServerPort);
|
udpServer.Start(PortNumber);
|
||||||
|
|
||||||
UdpServer = udpServer;
|
UdpServer = udpServer;
|
||||||
}
|
}
|
|
@ -113,6 +113,7 @@
|
||||||
<Compile Include="EntryPoints\Notifications\RemoteNotifications.cs" />
|
<Compile Include="EntryPoints\Notifications\RemoteNotifications.cs" />
|
||||||
<Compile Include="EntryPoints\Notifications\WebSocketNotifier.cs" />
|
<Compile Include="EntryPoints\Notifications\WebSocketNotifier.cs" />
|
||||||
<Compile Include="EntryPoints\RefreshUsersMetadata.cs" />
|
<Compile Include="EntryPoints\RefreshUsersMetadata.cs" />
|
||||||
|
<Compile Include="EntryPoints\UdpServerEntryPoint.cs" />
|
||||||
<Compile Include="EntryPoints\WebSocketEvents.cs" />
|
<Compile Include="EntryPoints\WebSocketEvents.cs" />
|
||||||
<Compile Include="HttpServer\HttpResultFactory.cs" />
|
<Compile Include="HttpServer\HttpResultFactory.cs" />
|
||||||
<Compile Include="HttpServer\HttpServer.cs" />
|
<Compile Include="HttpServer\HttpServer.cs" />
|
||||||
|
|
36
MediaBrowser.Server.Mono/FFMpeg/FFMpegDownloader.cs
Normal file
36
MediaBrowser.Server.Mono/FFMpeg/FFMpegDownloader.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
|
using MediaBrowser.Common.IO;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Model.Net;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.FFMpeg
|
||||||
|
{
|
||||||
|
public class FFMpegDownloader
|
||||||
|
{
|
||||||
|
private readonly IHttpClient _httpClient;
|
||||||
|
private readonly IApplicationPaths _appPaths;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private readonly IZipClient _zipClient;
|
||||||
|
|
||||||
|
public FFMpegDownloader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient, IZipClient zipClient)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_appPaths = appPaths;
|
||||||
|
_httpClient = httpClient;
|
||||||
|
_zipClient = zipClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<FFMpegInfo> GetFFMpegInfo()
|
||||||
|
{
|
||||||
|
return Task.FromResult (new FFMpegInfo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,6 +40,9 @@
|
||||||
<Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
<Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="gtk-gui\gui.stetic">
|
<EmbeddedResource Include="gtk-gui\gui.stetic">
|
||||||
|
@ -52,6 +55,25 @@
|
||||||
<Compile Include="gtk-gui\MainWindow.cs" />
|
<Compile Include="gtk-gui\MainWindow.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="..\MediaBrowser.ServerApplication\EntryPoints\StartupWizard.cs">
|
||||||
|
<Link>EntryPoints\StartupWizard.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.ServerApplication\Native\BrowserLauncher.cs">
|
||||||
|
<Link>Native\BrowserLauncher.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Native\Autorun.cs" />
|
||||||
|
<Compile Include="Native\ServerAuthorization.cs" />
|
||||||
|
<Compile Include="FFMpeg\FFMpegDownloader.cs" />
|
||||||
|
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegInfo.cs">
|
||||||
|
<Link>FFMpeg\FFMpegInfo.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.ServerApplication\ApplicationHost.cs">
|
||||||
|
<Link>ApplicationHost.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Native\HttpMessageHandlerFactory.cs" />
|
||||||
|
<Compile Include="Native\Assemblies.cs" />
|
||||||
|
<Compile Include="Native\Sqlite.cs" />
|
||||||
|
<Compile Include="Native\NativeApp.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -88,4 +110,10 @@
|
||||||
<Name>MediaBrowser.Api</Name>
|
<Name>MediaBrowser.Api</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="EntryPoints\" />
|
||||||
|
<Folder Include="Implementations\" />
|
||||||
|
<Folder Include="Native\" />
|
||||||
|
<Folder Include="FFMpeg\" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
22
MediaBrowser.Server.Mono/Native/Assemblies.cs
Normal file
22
MediaBrowser.Server.Mono/Native/Assemblies.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Assemblies
|
||||||
|
/// </summary>
|
||||||
|
public static class Assemblies
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the assemblies with parts.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>List{Assembly}.</returns>
|
||||||
|
public static List<Assembly> GetAssembliesWithParts()
|
||||||
|
{
|
||||||
|
var list = new List<Assembly>();
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
MediaBrowser.Server.Mono/Native/Autorun.cs
Normal file
20
MediaBrowser.Server.Mono/Native/Autorun.cs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Autorun
|
||||||
|
/// </summary>
|
||||||
|
public static class Autorun
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Configures the specified autorun.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="autorun">if set to <c>true</c> [autorun].</param>
|
||||||
|
public static void Configure(bool autorun)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.Server.Mono/Native/HttpMessageHandlerFactory.cs
Normal file
25
MediaBrowser.Server.Mono/Native/HttpMessageHandlerFactory.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Cache;
|
||||||
|
using System.Net.Http;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class HttpMessageHandlerFactory
|
||||||
|
/// </summary>
|
||||||
|
public static class HttpMessageHandlerFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the HTTP message handler.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="enableHttpCompression">if set to <c>true</c> [enable HTTP compression].</param>
|
||||||
|
/// <returns>HttpMessageHandler.</returns>
|
||||||
|
public static HttpMessageHandler GetHttpMessageHandler(bool enableHttpCompression)
|
||||||
|
{
|
||||||
|
return new HttpClientHandler
|
||||||
|
{
|
||||||
|
AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.Server.Mono/Native/NativeApp.cs
Normal file
25
MediaBrowser.Server.Mono/Native/NativeApp.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class NativeApp
|
||||||
|
/// </summary>
|
||||||
|
public static class NativeApp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Shutdowns this instance.
|
||||||
|
/// </summary>
|
||||||
|
public static void Shutdown()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restarts this instance.
|
||||||
|
/// </summary>
|
||||||
|
public static void Restart()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
MediaBrowser.Server.Mono/Native/ServerAuthorization.cs
Normal file
26
MediaBrowser.Server.Mono/Native/ServerAuthorization.cs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Authorization
|
||||||
|
/// </summary>
|
||||||
|
public static class ServerAuthorization
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Authorizes the server.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="httpServerPort">The HTTP server port.</param>
|
||||||
|
/// <param name="httpServerUrlPrefix">The HTTP server URL prefix.</param>
|
||||||
|
/// <param name="webSocketPort">The web socket port.</param>
|
||||||
|
/// <param name="udpPort">The UDP port.</param>
|
||||||
|
/// <param name="tempDirectory">The temp directory.</param>
|
||||||
|
public static void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int webSocketPort, int udpPort, string tempDirectory)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
MediaBrowser.Server.Mono/Native/Sqlite.cs
Normal file
36
MediaBrowser.Server.Mono/Native/Sqlite.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.SQLite;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Sqlite
|
||||||
|
/// </summary>
|
||||||
|
public static class Sqlite
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Connects to db.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbPath">The db path.</param>
|
||||||
|
/// <returns>Task{IDbConnection}.</returns>
|
||||||
|
/// <exception cref="System.ArgumentNullException">dbPath</exception>
|
||||||
|
public static async Task<IDbConnection> OpenDatabase(string dbPath)
|
||||||
|
{
|
||||||
|
var connectionstr = new SQLiteConnectionStringBuilder
|
||||||
|
{
|
||||||
|
PageSize = 4096,
|
||||||
|
CacheSize = 4096,
|
||||||
|
SyncMode = SynchronizationModes.Normal,
|
||||||
|
DataSource = dbPath,
|
||||||
|
JournalMode = SQLiteJournalModeEnum.Wal
|
||||||
|
};
|
||||||
|
|
||||||
|
var connection = new SQLiteConnection(connectionstr.ConnectionString);
|
||||||
|
|
||||||
|
await connection.OpenAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<stetic-interface>
|
<stetic-interface>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<images-root-path>..</images-root-path>
|
||||||
<target-gtk-version>2.12</target-gtk-version>
|
<target-gtk-version>2.12</target-gtk-version>
|
||||||
</configuration>
|
</configuration>
|
||||||
<import>
|
<import>
|
||||||
|
|
|
@ -154,58 +154,5 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(Shutdown);
|
Dispatcher.Invoke(Shutdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the dashboard page.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="page">The page.</param>
|
|
||||||
/// <param name="loggedInUser">The logged in user.</param>
|
|
||||||
/// <param name="configurationManager">The configuration manager.</param>
|
|
||||||
/// <param name="appHost">The app host.</param>
|
|
||||||
public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager, IServerApplicationHost appHost)
|
|
||||||
{
|
|
||||||
var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" +
|
|
||||||
appHost.WebApplicationName + "/dashboard/" + page;
|
|
||||||
|
|
||||||
OpenUrl(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the URL.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="url">The URL.</param>
|
|
||||||
public static void OpenUrl(string url)
|
|
||||||
{
|
|
||||||
var process = new Process
|
|
||||||
{
|
|
||||||
StartInfo = new ProcessStartInfo
|
|
||||||
{
|
|
||||||
FileName = url
|
|
||||||
},
|
|
||||||
|
|
||||||
EnableRaisingEvents = true
|
|
||||||
};
|
|
||||||
|
|
||||||
process.Exited += ProcessExited;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
process.Start();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
MessageBox.Show("There was an error launching your web browser. Please check your defualt browser settings.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Processes the exited.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender">The sender.</param>
|
|
||||||
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
|
||||||
static void ProcessExited(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
((Process)sender).Dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Controller.Resolvers;
|
using MediaBrowser.Controller.Resolvers;
|
||||||
using MediaBrowser.Controller.Session;
|
using MediaBrowser.Controller.Session;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
using MediaBrowser.IsoMounter;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.MediaInfo;
|
using MediaBrowser.Model.MediaInfo;
|
||||||
|
@ -36,6 +35,7 @@ using MediaBrowser.Server.Implementations.BdInfo;
|
||||||
using MediaBrowser.Server.Implementations.Configuration;
|
using MediaBrowser.Server.Implementations.Configuration;
|
||||||
using MediaBrowser.Server.Implementations.Drawing;
|
using MediaBrowser.Server.Implementations.Drawing;
|
||||||
using MediaBrowser.Server.Implementations.Dto;
|
using MediaBrowser.Server.Implementations.Dto;
|
||||||
|
using MediaBrowser.Server.Implementations.EntryPoints;
|
||||||
using MediaBrowser.Server.Implementations.HttpServer;
|
using MediaBrowser.Server.Implementations.HttpServer;
|
||||||
using MediaBrowser.Server.Implementations.IO;
|
using MediaBrowser.Server.Implementations.IO;
|
||||||
using MediaBrowser.Server.Implementations.Library;
|
using MediaBrowser.Server.Implementations.Library;
|
||||||
|
@ -46,16 +46,14 @@ using MediaBrowser.Server.Implementations.Providers;
|
||||||
using MediaBrowser.Server.Implementations.ServerManager;
|
using MediaBrowser.Server.Implementations.ServerManager;
|
||||||
using MediaBrowser.Server.Implementations.Session;
|
using MediaBrowser.Server.Implementations.Session;
|
||||||
using MediaBrowser.Server.Implementations.WebSocket;
|
using MediaBrowser.Server.Implementations.WebSocket;
|
||||||
using MediaBrowser.ServerApplication.Implementations;
|
using MediaBrowser.ServerApplication.FFMpeg;
|
||||||
|
using MediaBrowser.ServerApplication.Native;
|
||||||
using MediaBrowser.WebDashboard.Api;
|
using MediaBrowser.WebDashboard.Api;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data.SQLite;
|
using System.Data;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
|
||||||
using System.Net.Cache;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
@ -68,8 +66,6 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost
|
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost
|
||||||
{
|
{
|
||||||
internal const int UdpServerPort = 7359;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the server kernel.
|
/// Gets the server kernel.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -142,11 +138,6 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <value>The provider manager.</value>
|
/// <value>The provider manager.</value>
|
||||||
private IProviderManager ProviderManager { get; set; }
|
private IProviderManager ProviderManager { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the zip client.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The zip client.</value>
|
|
||||||
private IZipClient ZipClient { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the HTTP server.
|
/// Gets or sets the HTTP server.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The HTTP server.</value>
|
/// <value>The HTTP server.</value>
|
||||||
|
@ -175,14 +166,6 @@ namespace MediaBrowser.ServerApplication
|
||||||
private IItemRepository ItemRepository { get; set; }
|
private IItemRepository ItemRepository { get; set; }
|
||||||
private INotificationsRepository NotificationsRepository { get; set; }
|
private INotificationsRepository NotificationsRepository { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The full path to our startmenu shortcut
|
|
||||||
/// </summary>
|
|
||||||
protected override string ProductShortcutPath
|
|
||||||
{
|
|
||||||
get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Media Browser 3", "Media Browser Server.lnk"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
private Task<IHttpServer> _httpServerCreationTask;
|
private Task<IHttpServer> _httpServerCreationTask;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -256,9 +239,6 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer());
|
RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer());
|
||||||
|
|
||||||
ZipClient = new ZipClient();
|
|
||||||
RegisterSingleInstance(ZipClient);
|
|
||||||
|
|
||||||
var mediaEncoderTask = RegisterMediaEncoder();
|
var mediaEncoderTask = RegisterMediaEncoder();
|
||||||
|
|
||||||
UserDataRepository = new SqliteUserDataRepository(ApplicationPaths, JsonSerializer, LogManager);
|
UserDataRepository = new SqliteUserDataRepository(ApplicationPaths, JsonSerializer, LogManager);
|
||||||
|
@ -322,7 +302,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
private async Task RegisterMediaEncoder()
|
private async Task RegisterMediaEncoder()
|
||||||
{
|
{
|
||||||
var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient).GetFFMpegInfo().ConfigureAwait(false);
|
var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient, ZipClient).GetFFMpegInfo().ConfigureAwait(false);
|
||||||
|
|
||||||
MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ApplicationPaths, JsonSerializer, info.Path, info.ProbePath, info.Version);
|
MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ApplicationPaths, JsonSerializer, info.Path, info.ProbePath, info.Version);
|
||||||
RegisterSingleInstance(MediaEncoder);
|
RegisterSingleInstance(MediaEncoder);
|
||||||
|
@ -407,27 +387,14 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <param name="dbPath">The db path.</param>
|
/// <param name="dbPath">The db path.</param>
|
||||||
/// <returns>Task{IDbConnection}.</returns>
|
/// <returns>Task{IDbConnection}.</returns>
|
||||||
/// <exception cref="System.ArgumentNullException">dbPath</exception>
|
/// <exception cref="System.ArgumentNullException">dbPath</exception>
|
||||||
private static async Task<SQLiteConnection> ConnectToDb(string dbPath)
|
private static Task<IDbConnection> ConnectToDb(string dbPath)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(dbPath))
|
if (string.IsNullOrEmpty(dbPath))
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("dbPath");
|
throw new ArgumentNullException("dbPath");
|
||||||
}
|
}
|
||||||
|
|
||||||
var connectionstr = new SQLiteConnectionStringBuilder
|
return Sqlite.OpenDatabase(dbPath);
|
||||||
{
|
|
||||||
PageSize = 4096,
|
|
||||||
CacheSize = 4096,
|
|
||||||
SyncMode = SynchronizationModes.Normal,
|
|
||||||
DataSource = dbPath,
|
|
||||||
JournalMode = SQLiteJournalModeEnum.Wal
|
|
||||||
};
|
|
||||||
|
|
||||||
var connection = new SQLiteConnection(connectionstr.ConnectionString);
|
|
||||||
|
|
||||||
await connection.OpenAsync().ConfigureAwait(false);
|
|
||||||
|
|
||||||
return connection;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -479,7 +446,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
IsoManager.AddParts(GetExports<IIsoMounter>());
|
IsoManager.AddParts(GetExports<IIsoMounter>());
|
||||||
|
|
||||||
SessionManager.AddParts(GetExports<ISessionRemoteController>());
|
SessionManager.AddParts(GetExports<ISessionRemoteController>());
|
||||||
|
|
||||||
ImageProcessor.AddParts(GetExports<IImageEnhancer>());
|
ImageProcessor.AddParts(GetExports<IImageEnhancer>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,7 +497,6 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
NotifyPendingRestart();
|
NotifyPendingRestart();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -547,7 +513,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
Logger.ErrorException("Error sending server restart web socket message", ex);
|
Logger.ErrorException("Error sending server restart web socket message", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainStartup.Restart();
|
NativeApp.Restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -571,44 +537,44 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <returns>IEnumerable{Assembly}.</returns>
|
/// <returns>IEnumerable{Assembly}.</returns>
|
||||||
protected override IEnumerable<Assembly> GetComposablePartAssemblies()
|
protected override IEnumerable<Assembly> GetComposablePartAssemblies()
|
||||||
{
|
{
|
||||||
|
var list = Directory.EnumerateFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.TopDirectoryOnly)
|
||||||
|
.Select(LoadAssembly)
|
||||||
|
.Where(a => a != null)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
// Gets all plugin assemblies by first reading all bytes of the .dll and calling Assembly.Load against that
|
// Gets all plugin assemblies by first reading all bytes of the .dll and calling Assembly.Load against that
|
||||||
// This will prevent the .dll file from getting locked, and allow us to replace it when needed
|
// This will prevent the .dll file from getting locked, and allow us to replace it when needed
|
||||||
foreach (var pluginAssembly in Directory
|
|
||||||
.EnumerateFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.TopDirectoryOnly)
|
|
||||||
.Select(LoadAssembly).Where(a => a != null))
|
|
||||||
{
|
|
||||||
yield return pluginAssembly;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include composable parts in the Api assembly
|
// Include composable parts in the Api assembly
|
||||||
yield return typeof(ApiEntryPoint).Assembly;
|
list.Add(typeof(ApiEntryPoint).Assembly);
|
||||||
|
|
||||||
// Include composable parts in the Dashboard assembly
|
// Include composable parts in the Dashboard assembly
|
||||||
yield return typeof(DashboardInfo).Assembly;
|
list.Add(typeof(DashboardInfo).Assembly);
|
||||||
|
|
||||||
// Include composable parts in the Model assembly
|
// Include composable parts in the Model assembly
|
||||||
yield return typeof(SystemInfo).Assembly;
|
list.Add(typeof(SystemInfo).Assembly);
|
||||||
|
|
||||||
// Include composable parts in the Common assembly
|
// Include composable parts in the Common assembly
|
||||||
yield return typeof(IApplicationHost).Assembly;
|
list.Add(typeof(IApplicationHost).Assembly);
|
||||||
|
|
||||||
// Include composable parts in the Controller assembly
|
// Include composable parts in the Controller assembly
|
||||||
yield return typeof(Kernel).Assembly;
|
list.Add(typeof(Kernel).Assembly);
|
||||||
|
|
||||||
// Include composable parts in the Providers assembly
|
// Include composable parts in the Providers assembly
|
||||||
yield return typeof(ImagesByNameProvider).Assembly;
|
list.Add(typeof(ImagesByNameProvider).Assembly);
|
||||||
|
|
||||||
// Common implementations
|
// Common implementations
|
||||||
yield return typeof(TaskManager).Assembly;
|
list.Add(typeof(TaskManager).Assembly);
|
||||||
|
|
||||||
// Server implementations
|
// Server implementations
|
||||||
yield return typeof(ServerApplicationPaths).Assembly;
|
list.Add(typeof(ServerApplicationPaths).Assembly);
|
||||||
|
|
||||||
// Pismo
|
list.AddRange(Assemblies.GetAssembliesWithParts());
|
||||||
yield return typeof(PismoIsoManager).Assembly;
|
|
||||||
|
|
||||||
// Include composable parts in the running assembly
|
// Include composable parts in the running assembly
|
||||||
yield return GetType().Assembly;
|
list.Add(GetType().Assembly);
|
||||||
|
|
||||||
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly string _systemId = Environment.MachineName.GetMD5().ToString();
|
private readonly string _systemId = Environment.MachineName.GetMD5().ToString();
|
||||||
|
@ -667,7 +633,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
Logger.ErrorException("Error sending server shutdown web socket message", ex);
|
Logger.ErrorException("Error sending server shutdown web socket message", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainStartup.Shutdown();
|
NativeApp.Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -677,36 +643,16 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
Logger.Info("Requesting administrative access to authorize http server");
|
Logger.Info("Requesting administrative access to authorize http server");
|
||||||
|
|
||||||
// Create a temp file path to extract the bat file to
|
try
|
||||||
var tmpFile = Path.Combine(ConfigurationManager.CommonApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat");
|
|
||||||
|
|
||||||
// Extract the bat file
|
|
||||||
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.ServerApplication.RegisterServer.bat"))
|
|
||||||
{
|
{
|
||||||
using (var fileStream = File.Create(tmpFile))
|
ServerAuthorization.AuthorizeServer(ServerConfigurationManager.Configuration.HttpServerPortNumber,
|
||||||
{
|
HttpServerUrlPrefix, ServerConfigurationManager.Configuration.LegacyWebSocketPortNumber,
|
||||||
stream.CopyTo(fileStream);
|
UdpServerEntryPoint.PortNumber,
|
||||||
}
|
ConfigurationManager.CommonApplicationPaths.TempDirectory);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
var startInfo = new ProcessStartInfo
|
|
||||||
{
|
{
|
||||||
FileName = tmpFile,
|
Logger.ErrorException("Error authorizing server", ex);
|
||||||
|
|
||||||
Arguments = string.Format("{0} {1} {2} {3}", ServerConfigurationManager.Configuration.HttpServerPortNumber,
|
|
||||||
HttpServerUrlPrefix,
|
|
||||||
UdpServerPort,
|
|
||||||
ServerConfigurationManager.Configuration.LegacyWebSocketPortNumber),
|
|
||||||
|
|
||||||
CreateNoWindow = true,
|
|
||||||
WindowStyle = ProcessWindowStyle.Hidden,
|
|
||||||
Verb = "runas",
|
|
||||||
ErrorDialog = false
|
|
||||||
};
|
|
||||||
|
|
||||||
using (var process = Process.Start(startInfo))
|
|
||||||
{
|
|
||||||
process.WaitForExit();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -716,8 +662,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="progress">The progress.</param>
|
/// <param name="progress">The progress.</param>
|
||||||
/// <returns>Task{CheckForUpdateResult}.</returns>
|
/// <returns>Task{CheckForUpdateResult}.</returns>
|
||||||
public override async Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken,
|
public override async Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress)
|
||||||
IProgress<double> progress)
|
|
||||||
{
|
{
|
||||||
var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false);
|
var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -748,11 +693,12 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <returns>HttpMessageHandler.</returns>
|
/// <returns>HttpMessageHandler.</returns>
|
||||||
protected override HttpMessageHandler GetHttpMessageHandler(bool enableHttpCompression)
|
protected override HttpMessageHandler GetHttpMessageHandler(bool enableHttpCompression)
|
||||||
{
|
{
|
||||||
return new WebRequestHandler
|
return HttpMessageHandlerFactory.GetHttpMessageHandler(enableHttpCompression);
|
||||||
{
|
}
|
||||||
CachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate),
|
|
||||||
AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None
|
protected override void ConfigureAutoRunAtStartup(bool autorun)
|
||||||
};
|
{
|
||||||
|
Autorun.Configure(autorun);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,10 @@ using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Plugins;
|
using MediaBrowser.Controller.Plugins;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using System.ComponentModel;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows.Forms;
|
||||||
|
using MediaBrowser.ServerApplication.Native;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.EntryPoints
|
namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
{
|
{
|
||||||
|
@ -31,9 +32,10 @@ namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The app host.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
/// <param name="userManager">The user manager.</param>
|
/// <param name="userManager">The user manager.</param>
|
||||||
public StartupWizard(IServerApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager)
|
public StartupWizard(IServerApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager, ILogger logger)
|
||||||
{
|
{
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
|
_logger = logger;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_configurationManager = configurationManager;
|
_configurationManager = configurationManager;
|
||||||
}
|
}
|
||||||
|
@ -58,9 +60,9 @@ namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
App.OpenDashboardPage("wizardstart.html", user, _configurationManager, _appHost);
|
BrowserLauncher.OpenDashboardPage("wizardstart.html", user, _configurationManager, _appHost, _logger);
|
||||||
}
|
}
|
||||||
catch (Win32Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error launching startup wizard", ex);
|
_logger.ErrorException("Error launching startup wizard", ex);
|
||||||
|
|
||||||
|
@ -75,4 +77,4 @@ namespace MediaBrowser.ServerApplication.EntryPoints
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,11 +1,9 @@
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Net;
|
using MediaBrowser.Model.Net;
|
||||||
using SharpCompress.Archive.SevenZip;
|
|
||||||
using SharpCompress.Common;
|
|
||||||
using SharpCompress.Reader;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -14,13 +12,14 @@ using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.Implementations
|
namespace MediaBrowser.ServerApplication.FFMpeg
|
||||||
{
|
{
|
||||||
public class FFMpegDownloader
|
public class FFMpegDownloader
|
||||||
{
|
{
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly IApplicationPaths _appPaths;
|
private readonly IApplicationPaths _appPaths;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
private readonly IZipClient _zipClient;
|
||||||
|
|
||||||
private const string Version = "ffmpeg20130904";
|
private const string Version = "ffmpeg20130904";
|
||||||
|
|
||||||
|
@ -37,11 +36,12 @@ namespace MediaBrowser.ServerApplication.Implementations
|
||||||
"https://www.dropbox.com/s/a81cb2ob23fwcfs/ffmpeg-20130904-git-f974289-win32-static.7z?dl=1"
|
"https://www.dropbox.com/s/a81cb2ob23fwcfs/ffmpeg-20130904-git-f974289-win32-static.7z?dl=1"
|
||||||
};
|
};
|
||||||
|
|
||||||
public FFMpegDownloader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient)
|
public FFMpegDownloader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient, IZipClient zipClient)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
|
_zipClient = zipClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<FFMpegInfo> GetFFMpegInfo()
|
public async Task<FFMpegInfo> GetFFMpegInfo()
|
||||||
|
@ -138,13 +138,7 @@ namespace MediaBrowser.ServerApplication.Implementations
|
||||||
|
|
||||||
private void Extract7zArchive(string archivePath, string targetPath)
|
private void Extract7zArchive(string archivePath, string targetPath)
|
||||||
{
|
{
|
||||||
using (var archive = SevenZipArchive.Open(archivePath))
|
_zipClient.ExtractAllFrom7z(archivePath, targetPath, true);
|
||||||
{
|
|
||||||
using (var reader = archive.ExtractAllEntries())
|
|
||||||
{
|
|
||||||
reader.WriteAllToDirectory(targetPath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DeleteFile(string path)
|
private void DeleteFile(string path)
|
||||||
|
@ -305,11 +299,4 @@ namespace MediaBrowser.ServerApplication.Implementations
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FFMpegInfo
|
|
||||||
{
|
|
||||||
public string Path { get; set; }
|
|
||||||
public string ProbePath { get; set; }
|
|
||||||
public string Version { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
24
MediaBrowser.ServerApplication/FFMpeg/FFMpegInfo.cs
Normal file
24
MediaBrowser.ServerApplication/FFMpeg/FFMpegInfo.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
namespace MediaBrowser.ServerApplication.FFMpeg
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class FFMpegInfo
|
||||||
|
/// </summary>
|
||||||
|
public class FFMpegInfo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the path.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The path.</value>
|
||||||
|
public string Path { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the probe path.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The probe path.</value>
|
||||||
|
public string ProbePath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the version.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The version.</value>
|
||||||
|
public string Version { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,48 +0,0 @@
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using SharpCompress.Common;
|
|
||||||
using SharpCompress.Reader;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.Implementations
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class DotNetZipClient
|
|
||||||
/// </summary>
|
|
||||||
public class ZipClient : IZipClient
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Extracts all.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sourceFile">The source file.</param>
|
|
||||||
/// <param name="targetPath">The target path.</param>
|
|
||||||
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
|
||||||
public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles)
|
|
||||||
{
|
|
||||||
using (var fileStream = File.OpenRead(sourceFile))
|
|
||||||
{
|
|
||||||
ExtractAll(fileStream, targetPath, overwriteExistingFiles);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Extracts all.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="source">The source.</param>
|
|
||||||
/// <param name="targetPath">The target path.</param>
|
|
||||||
/// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
|
|
||||||
public void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles)
|
|
||||||
{
|
|
||||||
using (var reader = ReaderFactory.Open(source))
|
|
||||||
{
|
|
||||||
var options = ExtractOptions.ExtractFullPath;
|
|
||||||
|
|
||||||
if (overwriteExistingFiles)
|
|
||||||
{
|
|
||||||
options = options | ExtractOptions.Overwrite;
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.WriteAllToDirectory(targetPath, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,7 +11,6 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.ServiceProcess;
|
using System.ServiceProcess;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication
|
namespace MediaBrowser.ServerApplication
|
||||||
|
|
|
@ -12,6 +12,7 @@ using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using MediaBrowser.ServerApplication.Native;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication
|
namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
|
@ -188,19 +189,19 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
||||||
void cmdApiDocs_Click(object sender, EventArgs e)
|
void cmdApiDocs_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
App.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" +
|
BrowserLauncher.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" +
|
||||||
_appHost.WebApplicationName + "/metadata");
|
_appHost.WebApplicationName + "/metadata", _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmdSwaggerApiDocs_Click(object sender, EventArgs e)
|
void cmdSwaggerApiDocs_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
App.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" +
|
BrowserLauncher.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" +
|
||||||
_appHost.WebApplicationName + "/swagger-ui/index.html");
|
_appHost.WebApplicationName + "/swagger-ui/index.html", _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmdGithubWiki_Click(object sender, EventArgs e)
|
void cmdGithubWiki_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
App.OpenUrl("https://github.com/MediaBrowser/MediaBrowser/wiki");
|
BrowserLauncher.OpenUrl("https://github.com/MediaBrowser/MediaBrowser/wiki", _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -254,7 +255,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void OpenDashboard(User loggedInUser)
|
private void OpenDashboard(User loggedInUser)
|
||||||
{
|
{
|
||||||
App.OpenDashboardPage("dashboard.html", loggedInUser, _configurationManager, _appHost);
|
BrowserLauncher.OpenDashboardPage("dashboard.html", loggedInUser, _configurationManager, _appHost, _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -264,7 +265,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
|
/// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
|
||||||
private void cmVisitCT_click(object sender, RoutedEventArgs e)
|
private void cmVisitCT_click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
App.OpenUrl("http://community.mediabrowser.tv/");
|
BrowserLauncher.OpenUrl("http://community.mediabrowser.tv/", _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -275,7 +276,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e)
|
private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator);
|
var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator);
|
||||||
App.OpenDashboardPage("index.html", user, _configurationManager, _appHost);
|
BrowserLauncher.OpenDashboardPage("index.html", user, _configurationManager, _appHost, _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -130,10 +130,6 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\MediaBrowser.IsoMounting.3.0.56\lib\net45\MediaBrowser.IsoMounter.dll</HintPath>
|
<HintPath>..\packages\MediaBrowser.IsoMounting.3.0.56\lib\net45\MediaBrowser.IsoMounter.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MoreLinq, Version=1.0.16006.0, Culture=neutral, PublicKeyToken=384d532d7e88985d, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="NLog, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\NLog.2.0.1.2\lib\net45\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.2.0.1.2\lib\net45\NLog.dll</HintPath>
|
||||||
|
@ -168,9 +164,6 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\ServiceStack.Text.3.9.62\lib\net35\ServiceStack.Text.dll</HintPath>
|
<HintPath>..\packages\ServiceStack.Text.3.9.62\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SharpCompress">
|
|
||||||
<HintPath>..\packages\sharpcompress.0.10.1.3\lib\net40\SharpCompress.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="SimpleInjector, Version=2.3.5.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
<Reference Include="SimpleInjector, Version=2.3.5.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\SimpleInjector.2.3.5\lib\net40-client\SimpleInjector.dll</HintPath>
|
<HintPath>..\packages\SimpleInjector.2.3.5\lib\net40-client\SimpleInjector.dll</HintPath>
|
||||||
|
@ -190,7 +183,6 @@
|
||||||
<Reference Include="System.Net" />
|
<Reference Include="System.Net" />
|
||||||
<Reference Include="System.Net.Http" />
|
<Reference Include="System.Net.Http" />
|
||||||
<Reference Include="System.Net.Http.WebRequest" />
|
<Reference Include="System.Net.Http.WebRequest" />
|
||||||
<Reference Include="System.Runtime.Remoting" />
|
|
||||||
<Reference Include="System.ServiceProcess" />
|
<Reference Include="System.ServiceProcess" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
|
@ -212,12 +204,19 @@
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="EntryPoints\StartupWizard.cs" />
|
<Compile Include="EntryPoints\StartupWizard.cs" />
|
||||||
<Compile Include="EntryPoints\UdpServerEntryPoint.cs" />
|
<Compile Include="FFMpeg\FFMpegInfo.cs" />
|
||||||
<Compile Include="Implementations\FFMpegDownloader.cs" />
|
<Compile Include="Native\Assemblies.cs" />
|
||||||
|
<Compile Include="Native\HttpMessageHandlerFactory.cs" />
|
||||||
|
<Compile Include="Native\NativeApp.cs" />
|
||||||
|
<Compile Include="Native\ServerAuthorization.cs" />
|
||||||
|
<Compile Include="Native\Autorun.cs" />
|
||||||
|
<Compile Include="Native\BrowserLauncher.cs" />
|
||||||
|
<Compile Include="FFMpeg\FFMpegDownloader.cs" />
|
||||||
<Compile Include="MainStartup.cs" />
|
<Compile Include="MainStartup.cs" />
|
||||||
<Compile Include="BackgroundServiceInstaller.cs">
|
<Compile Include="BackgroundServiceInstaller.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Native\Sqlite.cs" />
|
||||||
<Compile Include="Splash\SplashWindow.xaml.cs">
|
<Compile Include="Splash\SplashWindow.xaml.cs">
|
||||||
<DependentUpon>SplashWindow.xaml</DependentUpon>
|
<DependentUpon>SplashWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -245,7 +244,6 @@
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ApplicationHost.cs" />
|
<Compile Include="ApplicationHost.cs" />
|
||||||
<Compile Include="Implementations\ZipClient.cs" />
|
|
||||||
<Compile Include="LibraryExplorer.xaml.cs">
|
<Compile Include="LibraryExplorer.xaml.cs">
|
||||||
<DependentUpon>LibraryExplorer.xaml</DependentUpon>
|
<DependentUpon>LibraryExplorer.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -281,15 +279,15 @@
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<None Include="app.manifest" />
|
<None Include="app.manifest" />
|
||||||
<None Include="Implementations\ARIALUNI.7z" />
|
<None Include="FFMpeg\ARIALUNI.7z" />
|
||||||
<None Include="Implementations\ffmpeg-20130904-git-f974289-win32-static.7z" />
|
<None Include="FFMpeg\ffmpeg-20130904-git-f974289-win32-static.7z" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<AppDesigner Include="Properties\" />
|
<AppDesigner Include="Properties\" />
|
||||||
<EmbeddedResource Include="RegisterServer.bat" />
|
<EmbeddedResource Include="Native\RegisterServer.bat" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config">
|
<None Include="App.config">
|
||||||
|
|
25
MediaBrowser.ServerApplication/Native/Assemblies.cs
Normal file
25
MediaBrowser.ServerApplication/Native/Assemblies.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
using MediaBrowser.IsoMounter;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Assemblies
|
||||||
|
/// </summary>
|
||||||
|
public static class Assemblies
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the assemblies with parts.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>List{Assembly}.</returns>
|
||||||
|
public static List<Assembly> GetAssembliesWithParts()
|
||||||
|
{
|
||||||
|
var list = new List<Assembly>();
|
||||||
|
|
||||||
|
list.Add(typeof(PismoIsoManager).Assembly);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
MediaBrowser.ServerApplication/Native/Autorun.cs
Normal file
31
MediaBrowser.ServerApplication/Native/Autorun.cs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Autorun
|
||||||
|
/// </summary>
|
||||||
|
public static class Autorun
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Configures the specified autorun.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="autorun">if set to <c>true</c> [autorun].</param>
|
||||||
|
public static void Configure(bool autorun)
|
||||||
|
{
|
||||||
|
var shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Media Browser 3", "Media Browser Server.lnk");
|
||||||
|
|
||||||
|
if (autorun)
|
||||||
|
{
|
||||||
|
//Copy our shortut into the startup folder for this user
|
||||||
|
File.Copy(shortcutPath, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), Path.GetFileName(shortcutPath) ?? "MBstartup.lnk"), true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Remove our shortcut from the startup folder for this user
|
||||||
|
File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), Path.GetFileName(shortcutPath) ?? "MBstartup.lnk"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
MediaBrowser.ServerApplication/Native/BrowserLauncher.cs
Normal file
68
MediaBrowser.ServerApplication/Native/BrowserLauncher.cs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
using MediaBrowser.Controller;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Model.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
public static class BrowserLauncher
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Opens the dashboard page.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="page">The page.</param>
|
||||||
|
/// <param name="loggedInUser">The logged in user.</param>
|
||||||
|
/// <param name="configurationManager">The configuration manager.</param>
|
||||||
|
/// <param name="appHost">The app host.</param>
|
||||||
|
public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger)
|
||||||
|
{
|
||||||
|
var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" +
|
||||||
|
appHost.WebApplicationName + "/dashboard/" + page;
|
||||||
|
|
||||||
|
OpenUrl(url, logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Opens the URL.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="url">The URL.</param>
|
||||||
|
public static void OpenUrl(string url, ILogger logger)
|
||||||
|
{
|
||||||
|
var process = new Process
|
||||||
|
{
|
||||||
|
StartInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = url
|
||||||
|
},
|
||||||
|
|
||||||
|
EnableRaisingEvents = true
|
||||||
|
};
|
||||||
|
|
||||||
|
process.Exited += ProcessExited;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
process.Start();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.ErrorException("Error launching url: {0}", ex, url);
|
||||||
|
|
||||||
|
MessageBox.Show("There was an error launching your web browser. Please check your default browser settings.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processes the exited.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The sender.</param>
|
||||||
|
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
||||||
|
private static void ProcessExited(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
((Process)sender).Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Cache;
|
||||||
|
using System.Net.Http;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class HttpMessageHandlerFactory
|
||||||
|
/// </summary>
|
||||||
|
public static class HttpMessageHandlerFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the HTTP message handler.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="enableHttpCompression">if set to <c>true</c> [enable HTTP compression].</param>
|
||||||
|
/// <returns>HttpMessageHandler.</returns>
|
||||||
|
public static HttpMessageHandler GetHttpMessageHandler(bool enableHttpCompression)
|
||||||
|
{
|
||||||
|
return new WebRequestHandler
|
||||||
|
{
|
||||||
|
CachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate),
|
||||||
|
AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.ServerApplication/Native/NativeApp.cs
Normal file
25
MediaBrowser.ServerApplication/Native/NativeApp.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class NativeApp
|
||||||
|
/// </summary>
|
||||||
|
public static class NativeApp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Shutdowns this instance.
|
||||||
|
/// </summary>
|
||||||
|
public static void Shutdown()
|
||||||
|
{
|
||||||
|
MainStartup.Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restarts this instance.
|
||||||
|
/// </summary>
|
||||||
|
public static void Restart()
|
||||||
|
{
|
||||||
|
MainStartup.Restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
56
MediaBrowser.ServerApplication/Native/ServerAuthorization.cs
Normal file
56
MediaBrowser.ServerApplication/Native/ServerAuthorization.cs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Authorization
|
||||||
|
/// </summary>
|
||||||
|
public static class ServerAuthorization
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Authorizes the server.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="httpServerPort">The HTTP server port.</param>
|
||||||
|
/// <param name="httpServerUrlPrefix">The HTTP server URL prefix.</param>
|
||||||
|
/// <param name="webSocketPort">The web socket port.</param>
|
||||||
|
/// <param name="udpPort">The UDP port.</param>
|
||||||
|
/// <param name="tempDirectory">The temp directory.</param>
|
||||||
|
public static void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int webSocketPort, int udpPort, string tempDirectory)
|
||||||
|
{
|
||||||
|
// Create a temp file path to extract the bat file to
|
||||||
|
var tmpFile = Path.Combine(tempDirectory, Guid.NewGuid() + ".bat");
|
||||||
|
|
||||||
|
// Extract the bat file
|
||||||
|
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(typeof(ServerAuthorization).Namespace + ".RegisterServer.bat"))
|
||||||
|
{
|
||||||
|
using (var fileStream = File.Create(tmpFile))
|
||||||
|
{
|
||||||
|
stream.CopyTo(fileStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = tmpFile,
|
||||||
|
|
||||||
|
Arguments = string.Format("{0} {1} {2} {3}", httpServerPort,
|
||||||
|
httpServerUrlPrefix,
|
||||||
|
udpPort,
|
||||||
|
webSocketPort),
|
||||||
|
|
||||||
|
CreateNoWindow = true,
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden,
|
||||||
|
Verb = "runas",
|
||||||
|
ErrorDialog = false
|
||||||
|
};
|
||||||
|
|
||||||
|
using (var process = Process.Start(startInfo))
|
||||||
|
{
|
||||||
|
process.WaitForExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
MediaBrowser.ServerApplication/Native/Sqlite.cs
Normal file
36
MediaBrowser.ServerApplication/Native/Sqlite.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.SQLite;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class Sqlite
|
||||||
|
/// </summary>
|
||||||
|
public static class Sqlite
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Connects to db.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbPath">The db path.</param>
|
||||||
|
/// <returns>Task{IDbConnection}.</returns>
|
||||||
|
/// <exception cref="System.ArgumentNullException">dbPath</exception>
|
||||||
|
public static async Task<IDbConnection> OpenDatabase(string dbPath)
|
||||||
|
{
|
||||||
|
var connectionstr = new SQLiteConnectionStringBuilder
|
||||||
|
{
|
||||||
|
PageSize = 4096,
|
||||||
|
CacheSize = 4096,
|
||||||
|
SyncMode = SynchronizationModes.Normal,
|
||||||
|
DataSource = dbPath,
|
||||||
|
JournalMode = SQLiteJournalModeEnum.Wal
|
||||||
|
};
|
||||||
|
|
||||||
|
var connection = new SQLiteConnection(connectionstr.ConnectionString);
|
||||||
|
|
||||||
|
await connection.OpenAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,14 +4,12 @@
|
||||||
<package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" />
|
<package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" />
|
||||||
<package id="MahApps.Metro" version="0.11.0.17-ALPHA" targetFramework="net45" />
|
<package id="MahApps.Metro" version="0.11.0.17-ALPHA" targetFramework="net45" />
|
||||||
<package id="MediaBrowser.IsoMounting" version="3.0.56" targetFramework="net45" />
|
<package id="MediaBrowser.IsoMounting" version="3.0.56" targetFramework="net45" />
|
||||||
<package id="morelinq" version="1.0.16006" targetFramework="net45" />
|
|
||||||
<package id="NLog" version="2.0.1.2" targetFramework="net45" />
|
<package id="NLog" version="2.0.1.2" targetFramework="net45" />
|
||||||
<package id="ServiceStack" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack" version="3.9.62" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Common" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack.Common" version="3.9.62" targetFramework="net45" />
|
||||||
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.44" targetFramework="net45" />
|
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.44" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Redis" version="3.9.44" targetFramework="net45" />
|
<package id="ServiceStack.Redis" version="3.9.44" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
<package id="ServiceStack.Text" version="3.9.62" targetFramework="net45" />
|
||||||
<package id="sharpcompress" version="0.10.1.3" targetFramework="net45" />
|
|
||||||
<package id="SimpleInjector" version="2.3.5" targetFramework="net45" />
|
<package id="SimpleInjector" version="2.3.5" targetFramework="net45" />
|
||||||
<package id="System.Data.SQLite.x86" version="1.0.88.0" targetFramework="net45" />
|
<package id="System.Data.SQLite.x86" version="1.0.88.0" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
Loading…
Add table
Add a link
Reference in a new issue