make open subtitle project portable
This commit is contained in:
parent
0d5e95222a
commit
31c8c3bf7f
|
@ -32,6 +32,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Common.Impleme
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Providers", "MediaBrowser.Providers\MediaBrowser.Providers.csproj", "{442B5058-DCAF-4263-BB6A-F21E31120A1B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSubtitlesHandler", "OpenSubtitlesHandler\OpenSubtitlesHandler.csproj", "{4A4402D4-E910-443B-B8FC-2C18286A2CA0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -105,6 +107,12 @@ Global
|
|||
{442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Any CPU.Build.0 = Release Mono|Any CPU
|
||||
{442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.ActiveCfg = Release Mono|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.Build.0 = Release Mono|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -121,5 +129,6 @@ Global
|
|||
{88AE38DF-19D7-406F-A6A9-09527719A21E} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839}
|
||||
{C4D2573A-3FD3-441F-81AF-174AC4CD4E1D} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839}
|
||||
{442B5058-DCAF-4263-BB6A-F21E31120A1B} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839}
|
||||
{4A4402D4-E910-443B-B8FC-2C18286A2CA0} = {8ADD772F-F0A4-4A53-9B2F-AF4A4C585839}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using MediaBrowser.Model.Cryptography;
|
||||
|
@ -8,10 +9,21 @@ namespace MediaBrowser.Common.Implementations.Cryptography
|
|||
public class CryptographyProvider : ICryptographyProvider
|
||||
{
|
||||
public Guid GetMD5(string str)
|
||||
{
|
||||
return new Guid(GetMD5Bytes(str));
|
||||
}
|
||||
public byte[] GetMD5Bytes(string str)
|
||||
{
|
||||
using (var provider = MD5.Create())
|
||||
{
|
||||
return new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(str)));
|
||||
return provider.ComputeHash(Encoding.Unicode.GetBytes(str));
|
||||
}
|
||||
}
|
||||
public byte[] GetMD5Bytes(Stream str)
|
||||
{
|
||||
using (var provider = MD5.Create())
|
||||
{
|
||||
return provider.ComputeHash(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,16 +218,17 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
|||
});
|
||||
}
|
||||
|
||||
private string NormalizeLanguage(string language)
|
||||
{
|
||||
// Problem with Greek subtitle download #1349
|
||||
if (string.Equals (language, "gre", StringComparison.OrdinalIgnoreCase)) {
|
||||
private string NormalizeLanguage(string language)
|
||||
{
|
||||
// Problem with Greek subtitle download #1349
|
||||
if (string.Equals(language, "gre", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
|
||||
return "ell";
|
||||
}
|
||||
return "ell";
|
||||
}
|
||||
|
||||
return language;
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<RemoteSubtitleInfo>> Search(SubtitleSearchRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
|
@ -265,8 +266,13 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
|||
|
||||
await Login(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var subLanguageId = NormalizeLanguage(request.Language);
|
||||
var hash = Utilities.ComputeHash(request.MediaPath);
|
||||
var subLanguageId = NormalizeLanguage(request.Language);
|
||||
string hash;
|
||||
|
||||
using (var fileStream = File.OpenRead(request.MediaPath))
|
||||
{
|
||||
hash = Utilities.ComputeHash(fileStream);
|
||||
}
|
||||
var fileInfo = new FileInfo(request.MediaPath);
|
||||
var movieByteSize = fileInfo.Length;
|
||||
var searchImdbId = request.ContentType == VideoContentType.Movie ? imdbId.ToString(_usCulture) : "";
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace MediaBrowser.Model.Cryptography
|
||||
{
|
||||
public interface ICryptographyProvider
|
||||
{
|
||||
Guid GetMD5(string str);
|
||||
byte[] GetMD5Bytes(string str);
|
||||
byte[] GetMD5Bytes(Stream str);
|
||||
}
|
||||
}
|
|
@ -119,6 +119,7 @@ using MediaBrowser.Model.Social;
|
|||
using MediaBrowser.Model.Xml;
|
||||
using MediaBrowser.Server.Implementations.Reflection;
|
||||
using MediaBrowser.Server.Implementations.Xml;
|
||||
using OpenSubtitlesHandler;
|
||||
|
||||
namespace MediaBrowser.Server.Startup.Common
|
||||
{
|
||||
|
@ -974,6 +975,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|||
CollectionFolder.XmlSerializer = XmlSerializer;
|
||||
BaseStreamingService.AppHost = this;
|
||||
BaseStreamingService.HttpClient = HttpClient;
|
||||
Utilities.CryptographyProvider = CryptographyProvider;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -137,6 +137,10 @@
|
|||
<Project>{23499896-b135-4527-8574-c26e926ea99e}</Project>
|
||||
<Name>MediaBrowser.XbmcMetadata</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\OpenSubtitlesHandler\OpenSubtitlesHandler.csproj">
|
||||
<Project>{4a4402d4-e910-443b-b8fc-2c18286a2ca0}</Project>
|
||||
<Name>OpenSubtitlesHandler</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
|
|
|
@ -37,17 +37,17 @@ namespace OpenSubtitlesHandler
|
|||
protected double seconds;
|
||||
protected string status;
|
||||
|
||||
protected virtual void LoadAttributes()
|
||||
protected void LoadAttributes()
|
||||
{
|
||||
foreach (Attribute attr in Attribute.GetCustomAttributes(this.GetType()))
|
||||
{
|
||||
if (attr.GetType() == typeof(MethodResponseDescription))
|
||||
{
|
||||
this.name = ((MethodResponseDescription)attr).Name;
|
||||
this.message = ((MethodResponseDescription)attr).Message;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//foreach (Attribute attr in Attribute.GetCustomAttributes(this.GetType()))
|
||||
//{
|
||||
// if (attr.GetType() == typeof(MethodResponseDescription))
|
||||
// {
|
||||
// this.name = ((MethodResponseDescription)attr).Name;
|
||||
// this.message = ((MethodResponseDescription)attr).Message;
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
[Description("The name of this response"), Category("MethodResponse")]
|
||||
|
@ -59,4 +59,14 @@ namespace OpenSubtitlesHandler
|
|||
[Description("The status"), Category("MethodResponse")]
|
||||
public string Status { get { return status; } set { status = value; } }
|
||||
}
|
||||
|
||||
public class DescriptionAttribute : Attribute
|
||||
{
|
||||
public DescriptionAttribute(string text) { }
|
||||
}
|
||||
|
||||
public class CategoryAttribute : Attribute
|
||||
{
|
||||
public CategoryAttribute(string text) { }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,11 @@
|
|||
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<TargetFrameworkProfile />
|
||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
|
||||
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -36,15 +40,6 @@
|
|||
<OutputPath>bin\Release Mono</OutputPath>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Console\OSHConsole.cs" />
|
||||
<Compile Include="Interfaces\IMethodResponse.cs" />
|
||||
|
@ -119,7 +114,10 @@
|
|||
<ItemGroup>
|
||||
<Content Include="XML-RPC\Docs\XML-RPC.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
|
|
@ -20,10 +20,10 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Cryptography;
|
||||
|
||||
namespace OpenSubtitlesHandler
|
||||
{
|
||||
|
@ -32,50 +32,33 @@ namespace OpenSubtitlesHandler
|
|||
/// </summary>
|
||||
public sealed class Utilities
|
||||
{
|
||||
public static ICryptographyProvider CryptographyProvider { get; set; }
|
||||
private const string XML_RPC_SERVER = "https://api.opensubtitles.org/xml-rpc";
|
||||
|
||||
/// <summary>
|
||||
/// Compute movie hash
|
||||
/// </summary>
|
||||
/// <param name="fileName">The complete media file path</param>
|
||||
/// <returns>The hash as Hexadecimal string</returns>
|
||||
public static string ComputeHash(string fileName)
|
||||
public static string ComputeHash(Stream stream)
|
||||
{
|
||||
byte[] hash = MovieHasher.ComputeMovieHash(File.OpenRead(fileName));
|
||||
byte[] hash = MovieHasher.ComputeMovieHash(stream);
|
||||
return MovieHasher.ToHexadecimal(hash);
|
||||
}
|
||||
/// <summary>
|
||||
/// Compute md5 for a file
|
||||
/// </summary>
|
||||
/// <param name="filename">The complete file path</param>
|
||||
/// <returns>MD5 of the file</returns>
|
||||
public static string ComputeMd5(string filename)
|
||||
{
|
||||
var md5 = MD5.Create();
|
||||
var sb = new StringBuilder();
|
||||
Stream str = new FileStream(filename, FileMode.Open, FileAccess.Read);
|
||||
|
||||
foreach (var b in md5.ComputeHash(str))
|
||||
sb.Append(b.ToString("x2").ToLower());
|
||||
str.Close();
|
||||
return sb.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// Decompress data using GZip
|
||||
/// </summary>
|
||||
/// <param name="dataToDecompress">The stream that hold the data</param>
|
||||
/// <returns>Bytes array of decompressed data</returns>
|
||||
public static byte[] Decompress(Stream dataToDecompress)
|
||||
{
|
||||
MemoryStream target = new MemoryStream();
|
||||
|
||||
using (System.IO.Compression.GZipStream decompressionStream = new System.IO.Compression.GZipStream(dataToDecompress,
|
||||
System.IO.Compression.CompressionMode.Decompress))
|
||||
using (MemoryStream target = new MemoryStream())
|
||||
{
|
||||
decompressionStream.CopyTo(target);
|
||||
using (System.IO.Compression.GZipStream decompressionStream = new System.IO.Compression.GZipStream(dataToDecompress, System.IO.Compression.CompressionMode.Decompress))
|
||||
{
|
||||
decompressionStream.CopyTo(target);
|
||||
}
|
||||
return target.ToArray();
|
||||
}
|
||||
return target.GetBuffer();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -127,17 +110,19 @@ namespace OpenSubtitlesHandler
|
|||
/// <returns>The string of the stream after decode using given encoding</returns>
|
||||
public static string GetStreamString(Stream responseStream, Encoding encoding)
|
||||
{
|
||||
// Handle response, should be XML text.
|
||||
List<byte> data = new List<byte>();
|
||||
while (true)
|
||||
using (responseStream)
|
||||
{
|
||||
int r = responseStream.ReadByte();
|
||||
if (r < 0)
|
||||
break;
|
||||
data.Add((byte)r);
|
||||
// Handle response, should be XML text.
|
||||
List<byte> data = new List<byte>();
|
||||
while (true)
|
||||
{
|
||||
int r = responseStream.ReadByte();
|
||||
if (r < 0)
|
||||
break;
|
||||
data.Add((byte)r);
|
||||
}
|
||||
return encoding.GetString(data.ToArray());
|
||||
}
|
||||
responseStream.Close();
|
||||
return encoding.GetString(data.ToArray());
|
||||
}
|
||||
/// <summary>
|
||||
/// Handle server response stream and decode it as ASCII encoding string.
|
||||
|
|
|
@ -233,32 +233,41 @@ namespace XmlRpcHandler
|
|||
}
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
private static IXmlRpcValue ReadValue(XmlReader xmlReader)
|
||||
private static string ReadString(XmlReader reader)
|
||||
{
|
||||
while (xmlReader.Read())
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
return reader.ReadElementContentAsString();
|
||||
}
|
||||
return reader.ReadContentAsString();
|
||||
}
|
||||
|
||||
private static IXmlRpcValue ReadValue(XmlReader xmlReader, bool skipRead = false)
|
||||
{
|
||||
while (skipRead || xmlReader.Read())
|
||||
{
|
||||
if (xmlReader.Name == "value" && xmlReader.IsStartElement())
|
||||
{
|
||||
xmlReader.Read();
|
||||
if (xmlReader.Name == "string" && xmlReader.IsStartElement())
|
||||
{
|
||||
return new XmlRpcValueBasic(xmlReader.ReadString(), XmlRpcBasicValueType.String);
|
||||
return new XmlRpcValueBasic(ReadString(xmlReader), XmlRpcBasicValueType.String);
|
||||
}
|
||||
else if (xmlReader.Name == "int" && xmlReader.IsStartElement())
|
||||
{
|
||||
return new XmlRpcValueBasic(int.Parse(xmlReader.ReadString(), UsCulture), XmlRpcBasicValueType.Int);
|
||||
return new XmlRpcValueBasic(int.Parse(ReadString(xmlReader), UsCulture), XmlRpcBasicValueType.Int);
|
||||
}
|
||||
else if (xmlReader.Name == "boolean" && xmlReader.IsStartElement())
|
||||
{
|
||||
return new XmlRpcValueBasic(xmlReader.ReadString() == "1", XmlRpcBasicValueType.Boolean);
|
||||
return new XmlRpcValueBasic(ReadString(xmlReader) == "1", XmlRpcBasicValueType.Boolean);
|
||||
}
|
||||
else if (xmlReader.Name == "double" && xmlReader.IsStartElement())
|
||||
{
|
||||
return new XmlRpcValueBasic(double.Parse(xmlReader.ReadString(), UsCulture), XmlRpcBasicValueType.Double);
|
||||
return new XmlRpcValueBasic(double.Parse(ReadString(xmlReader), UsCulture), XmlRpcBasicValueType.Double);
|
||||
}
|
||||
else if (xmlReader.Name == "dateTime.iso8601" && xmlReader.IsStartElement())
|
||||
{
|
||||
string date = xmlReader.ReadString();
|
||||
string date = ReadString(xmlReader);
|
||||
int year = int.Parse(date.Substring(0, 4), UsCulture);
|
||||
int month = int.Parse(date.Substring(4, 2), UsCulture);
|
||||
int day = int.Parse(date.Substring(6, 2), UsCulture);
|
||||
|
@ -270,7 +279,7 @@ namespace XmlRpcHandler
|
|||
}
|
||||
else if (xmlReader.Name == "base64" && xmlReader.IsStartElement())
|
||||
{
|
||||
return new XmlRpcValueBasic(BitConverter.ToInt64(Convert.FromBase64String(xmlReader.ReadString()), 0)
|
||||
return new XmlRpcValueBasic(BitConverter.ToInt64(Convert.FromBase64String(ReadString(xmlReader)), 0)
|
||||
, XmlRpcBasicValueType.Double);
|
||||
}
|
||||
else if (xmlReader.Name == "struct" && xmlReader.IsStartElement())
|
||||
|
@ -283,9 +292,9 @@ namespace XmlRpcHandler
|
|||
{
|
||||
XmlRpcStructMember member = new XmlRpcStructMember("", null);
|
||||
xmlReader.Read();// read name
|
||||
member.Name = xmlReader.ReadString();
|
||||
member.Name = ReadString(xmlReader);
|
||||
|
||||
IXmlRpcValue val = ReadValue(xmlReader);
|
||||
IXmlRpcValue val = ReadValue(xmlReader, true);
|
||||
if (val != null)
|
||||
{
|
||||
member.Data = val;
|
||||
|
@ -320,6 +329,11 @@ namespace XmlRpcHandler
|
|||
}
|
||||
}
|
||||
else break;
|
||||
|
||||
if (skipRead)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
15
OpenSubtitlesHandler/project.json
Normal file
15
OpenSubtitlesHandler/project.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"supports": {
|
||||
"net46.app": {},
|
||||
"dnxcore50.app": {}
|
||||
},
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore": "5.0.0",
|
||||
"Microsoft.NETCore.Portable.Compatibility": "1.0.0"
|
||||
},
|
||||
"frameworks": {
|
||||
"dotnet": {
|
||||
"imports": "portable-net452"
|
||||
}
|
||||
}
|
||||
}
|
9048
OpenSubtitlesHandler/project.lock.json
Normal file
9048
OpenSubtitlesHandler/project.lock.json
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -24,6 +24,7 @@
|
|||
<ProjectReference Include="..\..\MediaBrowser.Providers\MediaBrowser.Providers.csproj" />
|
||||
<ProjectReference Include="..\..\MediaBrowser.WebDashboard\MediaBrowser.WebDashboard.csproj" />
|
||||
<ProjectReference Include="..\..\MediaBrowser.XbmcMetadata\MediaBrowser.XbmcMetadata.csproj" />
|
||||
<ProjectReference Include="..\..\OpenSubtitlesHandler\OpenSubtitlesHandler.csproj" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
</Project>
|
|
@ -7033,6 +7033,23 @@
|
|||
"copyToOutput": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenSubtitlesHandler/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETFramework,Version=v4.6",
|
||||
"compile": {
|
||||
"bin/Debug/OpenSubtitlesHandler.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"bin/Debug/OpenSubtitlesHandler.dll": {}
|
||||
},
|
||||
"contentFiles": {
|
||||
"bin/Debug/OpenSubtitlesHandler.pdb": {
|
||||
"buildAction": "None",
|
||||
"codeLanguage": "any",
|
||||
"copyToOutput": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -38,6 +38,9 @@
|
|||
},
|
||||
"MediaBrowser.XbmcMetadata": {
|
||||
"target": "project"
|
||||
},
|
||||
"OpenSubtitlesHandler": {
|
||||
"target": "project"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2205,6 +2205,16 @@
|
|||
"MediaBrowser.Model": "1.0.0",
|
||||
"NETStandard.Library": "1.6.0"
|
||||
}
|
||||
},
|
||||
"OpenSubtitlesHandler/1.0.0": {
|
||||
"type": "project",
|
||||
"framework": ".NETPlatform,Version=v5.0",
|
||||
"dependencies": {
|
||||
"MediaBrowser.Common": "1.0.0",
|
||||
"MediaBrowser.Model": "1.0.0",
|
||||
"Microsoft.NETCore": "5.0.0",
|
||||
"Microsoft.NETCore.Portable.Compatibility": "1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -6978,6 +6988,11 @@
|
|||
"type": "project",
|
||||
"path": "../../MediaBrowser.XbmcMetadata/project.json",
|
||||
"msbuildProject": "../../MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj"
|
||||
},
|
||||
"OpenSubtitlesHandler/1.0.0": {
|
||||
"type": "project",
|
||||
"path": "../../OpenSubtitlesHandler/project.json",
|
||||
"msbuildProject": "../../OpenSubtitlesHandler/OpenSubtitlesHandler.csproj"
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
|
@ -6992,7 +7007,8 @@
|
|||
"MediaBrowser.Model",
|
||||
"MediaBrowser.Providers",
|
||||
"MediaBrowser.WebDashboard",
|
||||
"MediaBrowser.XbmcMetadata"
|
||||
"MediaBrowser.XbmcMetadata",
|
||||
"OpenSubtitlesHandler"
|
||||
]
|
||||
},
|
||||
"tools": {},
|
||||
|
|
Loading…
Reference in New Issue
Block a user