Merge pull request #652 from abeloin/master

Linux fixes
This commit is contained in:
Luke 2013-12-25 20:07:29 -08:00
commit 7c8424bf61
10 changed files with 123 additions and 35 deletions

View File

@ -209,8 +209,9 @@
<PostBuildEvent Condition=" '$(ConfigurationName)' != 'Release Mono' ">if '$(ConfigurationName)' == 'Release' ( <PostBuildEvent Condition=" '$(ConfigurationName)' != 'Release Mono' ">if '$(ConfigurationName)' == 'Release' (
xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\net45\" /y /d /r /i xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\net45\" /y /d /r /i
)</PostBuildEvent> )</PostBuildEvent>
<PostBuildEvent Condition=" '$(ConfigurationName)' == 'Release Mono' ">cp -fu "$(MSBuildProjectDirectory)\..\packages\PropertyChanged.Fody.1.41.0.0\PropertyChanged.Fody.dll" "$(MSBuildProjectDirectory)\..\Tools\Fody\"</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " /> <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " />
<Import Project="Fody.targets" /> <Import Project="Fody.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -228,8 +228,17 @@ namespace MediaBrowser.Server.Implementations.Drawing
// Graphics.FromImage will throw an exception if the PixelFormat is Indexed, so we need to handle that here // Graphics.FromImage will throw an exception if the PixelFormat is Indexed, so we need to handle that here
using (var thumbnail = new Bitmap(newWidth, newHeight, PixelFormat.Format32bppPArgb)) using (var thumbnail = new Bitmap(newWidth, newHeight, PixelFormat.Format32bppPArgb))
{ {
#if __MonoCS__
// Mono throw an exeception if assign 0 to SetResolution
if (originalImage.HorizontalResolution != 0 && originalImage.VerticalResolution != 0)
{
// Preserve the original resolution
thumbnail.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution);
}
#else
// Preserve the original resolution // Preserve the original resolution
thumbnail.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution); thumbnail.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution);
#endif
using (var thumbnailGraph = Graphics.FromImage(thumbnail)) using (var thumbnailGraph = Graphics.FromImage(thumbnail))
{ {

View File

@ -28,7 +28,18 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// </summary> /// </summary>
public async void Run() public async void Run()
{ {
#if __MonoCS__
try
{
await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false);
}
catch
{
System.Console.WriteLine("RefreshUsersMetadata task error: No users? First time running?");
}
#else
await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false); await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false);
#endif
} }
/// <summary> /// <summary>

View File

@ -48,9 +48,6 @@
<Reference Include="Alchemy"> <Reference Include="Alchemy">
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath> <HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
</Reference> </Reference>
<Reference Include="Mono.Data.Sqlite">
<HintPath>..\ThirdParty\Mono.Data.Sqlite\Mono.Data.Sqlite.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Api.Swagger"> <Reference Include="ServiceStack.Api.Swagger">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath> <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath>
</Reference> </Reference>
@ -67,9 +64,14 @@
<Reference Include="BDInfo"> <Reference Include="BDInfo">
<HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.5\lib\net20\BDInfo.dll</HintPath> <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.5\lib\net20\BDInfo.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Data.SQLite"> <Reference Include="System.Data.SQLite" Condition=" '$(ConfigurationName)' != 'Release Mono' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Data.SQLite" Condition=" '$(ConfigurationName)' == 'Release Mono' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\ThirdParty\System.Data.SQLite.ManagedOnly\x86\1.0.90.0\net40\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="ServiceStack"> <Reference Include="ServiceStack">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.dll</HintPath> <HintPath>..\ThirdParty\ServiceStack\ServiceStack.dll</HintPath>
</Reference> </Reference>
@ -85,6 +87,7 @@
<Reference Include="ServiceStack.Text"> <Reference Include="ServiceStack.Text">
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath> <HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
</Reference> </Reference>
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' " />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="..\SharedVersion.cs"> <Compile Include="..\SharedVersion.cs">
@ -345,6 +348,16 @@
</Content> </Content>
<EmbeddedResource Include="Localization\Ratings\be.txt" /> <EmbeddedResource Include="Localization\Ratings\be.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="..\ThirdParty\System.Data.SQLite.ManagedOnly\x86\1.0.90.0\net40\System.Data.SQLite.dll" Condition=" '$(ConfigurationName)' == 'Release Mono'">
<Link>System.Data.SQLite.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\System.Data.SQLite.ManagedOnly\x86\1.0.90.0\net40\System.Data.SQLite.Linq.dll" Condition=" '$(ConfigurationName)' == 'Release Mono'">
<Link>System.Data.SQLite.Linq.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\nuget.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -1,11 +1,7 @@
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
using System.Data; using System.Data;
#if __MonoCS__
using Mono.Data.Sqlite;
#else
using System.Data.SQLite; using System.Data.SQLite;
#endif
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -140,18 +136,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
logger.Info("Opening {0}", dbPath); logger.Info("Opening {0}", dbPath);
#if __MonoCS__
var connectionstr = new SqliteConnectionStringBuilder
{
PageSize = 4096,
CacheSize = 4096,
SyncMode = SynchronizationModes.Normal,
DataSource = dbPath,
JournalMode = SQLiteJournalModeEnum.Off
};
var connection = new SqliteConnection(connectionstr.ConnectionString);
#else
var connectionstr = new SQLiteConnectionStringBuilder var connectionstr = new SQLiteConnectionStringBuilder
{ {
PageSize = 4096, PageSize = 4096,
@ -162,7 +146,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
}; };
var connection = new SQLiteConnection(connectionstr.ConnectionString); var connection = new SQLiteConnection(connectionstr.ConnectionString);
#endif
await connection.OpenAsync().ConfigureAwait(false); await connection.OpenAsync().ConfigureAwait(false);
return connection; return connection;

View File

@ -4,6 +4,9 @@ using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
using System.Net; using System.Net;
#if __MonoCS__
using Mono.Unix.Native;
#endif
namespace MediaBrowser.Server.Implementations.WebSocket namespace MediaBrowser.Server.Implementations.WebSocket
{ {
@ -66,6 +69,20 @@ namespace MediaBrowser.Server.Implementations.WebSocket
TimeOut = TimeSpan.FromHours(24) TimeOut = TimeSpan.FromHours(24)
}; };
#if __MonoCS__
//Linux: port below 1024 require root or cap_net_bind_service
if (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX)
{
if (Syscall.getuid() == 0)
{
WebSocketServer.FlashAccessPolicyEnabled = true;
}
else
{
WebSocketServer.FlashAccessPolicyEnabled = false;
}
}
#endif
WebSocketServer.Start(); WebSocketServer.Start();
} }
catch (Exception ex) catch (Exception ex)

View File

@ -1,20 +1,57 @@
 using System;
namespace MediaBrowser.ServerApplication.FFMpeg namespace MediaBrowser.ServerApplication.FFMpeg
{ {
public static class FFMpegDownloadInfo public static class FFMpegDownloadInfo
{ {
public static string Version = "ffmpeg20130904"; public static string Version = ffmpegOsType("Version");
public static string[] FfMpegUrls = new[] public static string[] FfMpegUrls = ffmpegOsType("FfMpegUrls").Split(',');
{
"http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.2013-10-11.tar.gz",
"https://www.dropbox.com/s/b9v17h105cps7p0/ffmpeg.static.32bit.2013-10-11.tar.gz?dl=1" public static string FFMpegFilename = ffmpegOsType("FFMpegFilename");
}; public static string FFProbeFilename = ffmpegOsType("FFProbeFilename");
public static string FFMpegFilename = "ffmpeg"; public static string ArchiveType = ffmpegOsType("ArchiveType");
public static string FFProbeFilename = "ffprobe";
public static string ArchiveType = "gz"; private static string ffmpegOsType(string arg)
{
OperatingSystem os = Environment.OSVersion;
PlatformID pid = os.Platform;
switch (pid)
{
case PlatformID.Win32NT:
switch (arg)
{
case "Version":
return "ffmpeg20131221";
case "FfMpegUrls":
return "http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20131221-git-70d6ce7-win32-static.7z,https://www.dropbox.com/s/d38uj7857trbw1g/ffmpeg-20131209-git-a12f679-win32-static.7z?dl=1";
case "FFMpegFilename":
return "ffmpeg.exe";
case "FFProbeFilename":
return "ffprobe.exe";
case "ArchiveType":
return "7z";
}
break;
case PlatformID.Unix:
case PlatformID.MacOSX:
switch (arg)
{
case "Version":
return "ffmpeg20131221";
case "FfMpegUrls":
return "http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.2013-12-21.tar.gz,https://www.dropbox.com/s/b9v17h105cps7p0/ffmpeg.static.32bit.2013-10-11.tar.gz?dl=1";
case "FFMpegFilename":
return "ffmpeg";
case "FFProbeFilename":
return "ffprobe";
case "ArchiveType":
return "gz";
}
break;
}
return "";
}
} }
} }

View File

@ -50,6 +50,7 @@
<Reference Include="ServiceStack.Interfaces"> <Reference Include="ServiceStack.Interfaces">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath> <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
</Reference> </Reference>
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' "/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="..\SharedVersion.cs"> <Compile Include="..\SharedVersion.cs">
@ -127,8 +128,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="app.config" /> <None Include="app.config" />
<None Include="sqlite3.dll"> </ItemGroup>
<ItemGroup>
<Content Include="..\ThirdParty\SQLite3\x86\3.8.2\sqlite3.dll">
<Link>sqlite3.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </Content>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -102,7 +102,9 @@ namespace MediaBrowser.Server.Mono
Console.WriteLine ("appHost.Init"); Console.WriteLine ("appHost.Init");
var task = _appHost.Init(); var initProgress = new Progress<double>();
var task = _appHost.Init(initProgress);
Task.WaitAll (task); Task.WaitAll (task);
Console.WriteLine ("Running startup tasks"); Console.WriteLine ("Running startup tasks");

View File

@ -12,6 +12,9 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
#if __MonoCS__
using Mono.Unix.Native;
#endif
namespace MediaBrowser.ServerApplication.FFMpeg namespace MediaBrowser.ServerApplication.FFMpeg
{ {
@ -147,6 +150,13 @@ namespace MediaBrowser.ServerApplication.FFMpeg
})) }))
{ {
File.Copy(file, Path.Combine(targetFolder, Path.GetFileName(file)), true); File.Copy(file, Path.Combine(targetFolder, Path.GetFileName(file)), true);
#if __MonoCS__
//Linux: File permission to 666, and user's execute bit
if (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX)
{
Syscall.chmod(Path.Combine(targetFolder, Path.GetFileName(file)), FilePermissions.DEFFILEMODE | FilePermissions.S_IXUSR);
}
#endif
} }
} }
finally finally