mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-15 23:58:57 +00:00
Update to 3.5.2 and .net core 2.1
This commit is contained in:
@@ -10,11 +10,11 @@ using MediaBrowser.Model.IO;
|
||||
namespace MediaBrowser.LocalMetadata
|
||||
{
|
||||
public abstract class BaseXmlProvider<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor, IHasOrder
|
||||
where T : IHasMetadata, new()
|
||||
where T : BaseItem, new()
|
||||
{
|
||||
protected IFileSystem FileSystem;
|
||||
|
||||
public async Task<MetadataResult<T>> GetMetadata(ItemInfo info,
|
||||
public Task<MetadataResult<T>> GetMetadata(ItemInfo info,
|
||||
IDirectoryService directoryService,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -24,7 +24,7 @@ namespace MediaBrowser.LocalMetadata
|
||||
|
||||
if (file == null)
|
||||
{
|
||||
return result;
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
var path = file.FullName;
|
||||
@@ -45,7 +45,7 @@ namespace MediaBrowser.LocalMetadata
|
||||
result.HasMetadata = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken);
|
||||
@@ -57,7 +57,7 @@ namespace MediaBrowser.LocalMetadata
|
||||
|
||||
protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService);
|
||||
|
||||
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
|
||||
public bool HasChanged(BaseItem item, IDirectoryService directoryService)
|
||||
{
|
||||
var file = GetXmlFile(new ItemInfo(item), directoryService);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
get { return "Collection Folder Images"; }
|
||||
}
|
||||
|
||||
public bool Supports(IHasMetadata item)
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
return item is CollectionFolder && item.SupportsLocalMetadata;
|
||||
}
|
||||
@@ -35,7 +35,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
}
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService)
|
||||
{
|
||||
var collectionFolder = (CollectionFolder)item;
|
||||
|
||||
|
||||
@@ -29,12 +29,12 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
get { return 0; }
|
||||
}
|
||||
|
||||
public bool Supports(IHasMetadata item)
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
return item is Episode && item.SupportsLocalMetadata;
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService)
|
||||
{
|
||||
var parentPath = _fileSystem.GetDirectoryName(item.Path);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
get { return "Internal Images"; }
|
||||
}
|
||||
|
||||
public bool Supports(IHasMetadata item)
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
if (item is Photo)
|
||||
{
|
||||
@@ -61,7 +61,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
}
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService)
|
||||
{
|
||||
var path = item.GetInternalMetadataPath();
|
||||
|
||||
|
||||
@@ -32,12 +32,12 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
get { return 0; }
|
||||
}
|
||||
|
||||
public bool Supports(IHasMetadata item)
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
if (item.SupportsLocalMetadata)
|
||||
{
|
||||
// Episode has it's own provider
|
||||
if (item.IsOwnedItem || item is Episode || item is Audio || item is Photo)
|
||||
if (item is Episode || item is Audio || item is Photo)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -53,7 +53,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
{
|
||||
var series = season.Series;
|
||||
|
||||
if (series != null && series.LocationType == LocationType.FileSystem)
|
||||
if (series != null && series.IsFileProtocol)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -63,9 +63,9 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
return false;
|
||||
}
|
||||
|
||||
private IEnumerable<FileSystemMetadata> GetFiles(IHasMetadata item, bool includeDirectories, IDirectoryService directoryService)
|
||||
private IEnumerable<FileSystemMetadata> GetFiles(BaseItem item, bool includeDirectories, IDirectoryService directoryService)
|
||||
{
|
||||
if (item.LocationType != LocationType.FileSystem)
|
||||
if (!item.IsFileProtocol)
|
||||
{
|
||||
return new List<FileSystemMetadata>();
|
||||
}
|
||||
@@ -85,7 +85,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
.OrderBy(i => BaseItem.SupportedImageExtensionsList.IndexOf(i.Extension ?? string.Empty));
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService)
|
||||
{
|
||||
var files = GetFiles(item, true, directoryService).ToList();
|
||||
|
||||
@@ -96,12 +96,12 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, string path, bool isPathInMediaFolder, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, string path, bool isPathInMediaFolder, IDirectoryService directoryService)
|
||||
{
|
||||
return GetImages(item, new[] { path }, isPathInMediaFolder, directoryService);
|
||||
}
|
||||
|
||||
public List<LocalImageInfo> GetImages(IHasMetadata item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService)
|
||||
public List<LocalImageInfo> GetImages(BaseItem item, IEnumerable<string> paths, bool arePathsInMediaFolders, IDirectoryService directoryService)
|
||||
{
|
||||
IEnumerable<FileSystemMetadata> files = paths.SelectMany(i => _fileSystem.GetFiles(i, BaseItem.SupportedImageExtensions, true, false));
|
||||
|
||||
@@ -115,7 +115,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
return list;
|
||||
}
|
||||
|
||||
private void PopulateImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService)
|
||||
private void PopulateImages(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, bool supportParentSeriesFiles, IDirectoryService directoryService)
|
||||
{
|
||||
if (supportParentSeriesFiles)
|
||||
{
|
||||
@@ -259,7 +259,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
"movie"
|
||||
};
|
||||
|
||||
private void PopulatePrimaryImages(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder)
|
||||
private void PopulatePrimaryImages(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder)
|
||||
{
|
||||
string[] imageFileNames;
|
||||
|
||||
@@ -315,7 +315,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateBackdrops(IHasMetadata item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService)
|
||||
private void PopulateBackdrops(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder, IDirectoryService directoryService)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.Path))
|
||||
{
|
||||
@@ -416,7 +416,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
var seasonNumber = season.IndexNumber;
|
||||
|
||||
var series = season.Series;
|
||||
if (!seasonNumber.HasValue || series.LocationType != LocationType.FileSystem)
|
||||
if (!seasonNumber.HasValue || !series.IsFileProtocol)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,85 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" />
|
||||
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SharedVersion.cs"/>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{7EF9F3E0-697D-42F3-A08F-19DEB5F84392}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>MediaBrowser.LocalMetadata</RootNamespace>
|
||||
<AssemblyName>MediaBrowser.LocalMetadata</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SharedVersion.cs">
|
||||
<Link>Properties\SharedVersion.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BaseXmlProvider.cs" />
|
||||
<Compile Include="Images\CollectionFolderImageProvider.cs" />
|
||||
<Compile Include="Images\EpisodeLocalImageProvider.cs" />
|
||||
<Compile Include="Images\InternalMetadataFolderImageProvider.cs" />
|
||||
<Compile Include="Images\LocalImageProvider.cs" />
|
||||
<Compile Include="Parsers\BaseItemXmlParser.cs" />
|
||||
<Compile Include="Parsers\BoxSetXmlParser.cs" />
|
||||
<Compile Include="Parsers\GameSystemXmlParser.cs" />
|
||||
<Compile Include="Parsers\GameXmlParser.cs" />
|
||||
<Compile Include="Parsers\PlaylistXmlParser.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Providers\BoxSetXmlProvider.cs" />
|
||||
<Compile Include="Providers\FolderXmlProvider.cs" />
|
||||
<Compile Include="Providers\GameSystemXmlProvider.cs" />
|
||||
<Compile Include="Providers\GameXmlProvider.cs" />
|
||||
<Compile Include="Providers\PlaylistXmlProvider.cs" />
|
||||
<Compile Include="Savers\BaseXmlSaver.cs" />
|
||||
<Compile Include="Savers\BoxSetXmlSaver.cs" />
|
||||
<Compile Include="Savers\FolderXmlSaver.cs" />
|
||||
<Compile Include="Savers\GameSystemXmlSaver.cs" />
|
||||
<Compile Include="Savers\GameXmlSaver.cs" />
|
||||
<Compile Include="Savers\PersonXmlSaver.cs" />
|
||||
<Compile Include="Savers\PlaylistXmlSaver.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
|
||||
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
|
||||
<Name>MediaBrowser.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj">
|
||||
<Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project>
|
||||
<Name>MediaBrowser.Controller</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
|
||||
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||
<Name>MediaBrowser.Model</Name>
|
||||
</ProjectReference>
|
||||
</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">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Target Name="EmitMSBuildWarning" BeforeTargets="Build">
|
||||
<Warning Text="Packages containing MSBuild targets and props files cannot be fully installed in projects targeting multiple frameworks. The MSBuild targets and props files have been ignored." />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -253,18 +253,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
break;
|
||||
}
|
||||
|
||||
case "Website":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
item.HomePageUrl = val;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "LockedFields":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
@@ -462,13 +450,9 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
var hasTrailers = item as IHasTrailers;
|
||||
if (hasTrailers != null)
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
hasTrailers.AddTrailerUrl(val);
|
||||
}
|
||||
item.AddTrailerUrl(val);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -494,11 +478,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
using (var subtree = reader.ReadSubtree())
|
||||
{
|
||||
var hasTrailers = item as IHasTrailers;
|
||||
if (hasTrailers != null)
|
||||
{
|
||||
FetchDataFromTrailersNode(subtree, hasTrailers);
|
||||
}
|
||||
FetchDataFromTrailersNode(subtree, item);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -726,9 +706,10 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void FetchFromSharesNode(XmlReader reader, IHasShares item)
|
||||
{
|
||||
var list = new List<Share>();
|
||||
|
||||
reader.MoveToContent();
|
||||
reader.Read();
|
||||
|
||||
@@ -746,20 +727,24 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
reader.Read();
|
||||
continue;
|
||||
}
|
||||
using (var subtree = reader.ReadSubtree())
|
||||
|
||||
using (var subReader = reader.ReadSubtree())
|
||||
{
|
||||
var share = GetShareFromNode(subtree);
|
||||
if (share != null)
|
||||
var child = GetShare(subReader);
|
||||
|
||||
if (child != null)
|
||||
{
|
||||
item.Shares.Add(share);
|
||||
list.Add(child);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
break;
|
||||
{
|
||||
reader.Skip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -767,6 +752,8 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
reader.Read();
|
||||
}
|
||||
}
|
||||
|
||||
item.Shares = list.ToArray();
|
||||
}
|
||||
|
||||
private Share GetShareFromNode(XmlReader reader)
|
||||
@@ -1012,7 +999,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
}
|
||||
}
|
||||
|
||||
private void FetchDataFromTrailersNode(XmlReader reader, IHasTrailers item)
|
||||
private void FetchDataFromTrailersNode(XmlReader reader, T item)
|
||||
{
|
||||
reader.MoveToContent();
|
||||
reader.Read();
|
||||
@@ -1193,6 +1180,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
linkedItem.Path = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
case "ItemId":
|
||||
{
|
||||
linkedItem.LibraryItemId = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
@@ -1206,7 +1198,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
}
|
||||
|
||||
// This is valid
|
||||
if (!string.IsNullOrWhiteSpace(linkedItem.Path))
|
||||
if (!string.IsNullOrWhiteSpace(linkedItem.Path) || !string.IsNullOrWhiteSpace(linkedItem.LibraryItemId))
|
||||
{
|
||||
return linkedItem;
|
||||
}
|
||||
@@ -1277,7 +1269,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
|
||||
value = value.Trim().Trim(separator);
|
||||
|
||||
return string.IsNullOrWhiteSpace(value) ? new string[] { } : Split(value, separator, StringSplitOptions.RemoveEmptyEntries);
|
||||
return string.IsNullOrWhiteSpace(value) ? Array.Empty<string>() : Split(value, separator, StringSplitOptions.RemoveEmptyEntries);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1287,7 +1279,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
/// <param name="separators">The separators.</param>
|
||||
/// <param name="options">The options.</param>
|
||||
/// <returns>System.String[][].</returns>
|
||||
private static string[] Split(string val, char[] separators, StringSplitOptions options)
|
||||
private string[] Split(string val, char[] separators, StringSplitOptions options)
|
||||
{
|
||||
return val.Split(separators, options);
|
||||
}
|
||||
|
||||
@@ -12,14 +12,13 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
public class GameSystemXmlParser : BaseItemXmlParser<GameSystem>
|
||||
{
|
||||
private readonly Task _cachedTask = Task.FromResult(true);
|
||||
public Task FetchAsync(MetadataResult<GameSystem> item, string metadataFile, CancellationToken cancellationToken)
|
||||
{
|
||||
Fetch(item, metadataFile, cancellationToken);
|
||||
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
return _cachedTask;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -18,14 +18,13 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||
|
||||
private readonly Task _cachedTask = Task.FromResult(true);
|
||||
public Task FetchAsync(MetadataResult<Game> item, string metadataFile, CancellationToken cancellationToken)
|
||||
{
|
||||
Fetch(item, metadataFile, cancellationToken);
|
||||
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
return _cachedTask;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -20,21 +20,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "OwnerUserId":
|
||||
{
|
||||
var userId = reader.ReadElementContentAsString();
|
||||
if (!item.Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
item.Shares.Add(new Share
|
||||
{
|
||||
UserId = userId,
|
||||
CanEdit = true
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "PlaylistMediaType":
|
||||
{
|
||||
item.PlaylistMediaType = reader.ReadElementContentAsString();
|
||||
@@ -57,21 +42,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
}
|
||||
break;
|
||||
|
||||
case "Shares":
|
||||
|
||||
if (!reader.IsEmptyElement)
|
||||
{
|
||||
using (var subReader = reader.ReadSubtree())
|
||||
{
|
||||
FetchFromSharesNode(subReader, item);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Read();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
base.FetchDataFromXmlNode(reader, result);
|
||||
break;
|
||||
@@ -128,56 +98,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
||||
item.LinkedChildren = list.ToArray(list.Count);
|
||||
}
|
||||
|
||||
private void FetchFromSharesNode(XmlReader reader, Playlist item)
|
||||
{
|
||||
var list = new List<Share>();
|
||||
|
||||
reader.MoveToContent();
|
||||
reader.Read();
|
||||
|
||||
// Loop through each element
|
||||
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "Share":
|
||||
{
|
||||
if (reader.IsEmptyElement)
|
||||
{
|
||||
reader.Read();
|
||||
continue;
|
||||
}
|
||||
|
||||
using (var subReader = reader.ReadSubtree())
|
||||
{
|
||||
var child = GetShare(subReader);
|
||||
|
||||
if (child != null)
|
||||
{
|
||||
list.Add(child);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
reader.Skip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Read();
|
||||
}
|
||||
}
|
||||
|
||||
item.Shares = list;
|
||||
}
|
||||
|
||||
public PlaylistXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.LocalMetadata.Parsers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Xml;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Providers
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides metadata for Folders and all subclasses by parsing folder.xml
|
||||
/// </summary>
|
||||
public class FolderXmlProvider : BaseXmlProvider<Folder>
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IProviderManager _providerManager;
|
||||
protected IXmlReaderSettingsFactory XmlReaderSettingsFactory { get; private set; }
|
||||
|
||||
public FolderXmlProvider(IFileSystem fileSystem, ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory)
|
||||
: base(fileSystem)
|
||||
{
|
||||
_logger = logger;
|
||||
_providerManager = providerManager;
|
||||
XmlReaderSettingsFactory = xmlReaderSettingsFactory;
|
||||
}
|
||||
|
||||
protected override void Fetch(MetadataResult<Folder> result, string path, CancellationToken cancellationToken)
|
||||
{
|
||||
new BaseItemXmlParser<Folder>(_logger, _providerManager, XmlReaderSettingsFactory, FileSystem).Fetch(result, path, cancellationToken);
|
||||
}
|
||||
|
||||
protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService)
|
||||
{
|
||||
return directoryService.GetFile(Path.Combine(info.Path, "folder.xml"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using MediaBrowser.LocalMetadata.Parsers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
using MediaBrowser.LocalMetadata.Savers;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Xml;
|
||||
@@ -32,7 +32,7 @@ namespace MediaBrowser.LocalMetadata.Providers
|
||||
|
||||
protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService)
|
||||
{
|
||||
return directoryService.GetFile(Path.Combine(info.Path, "playlist.xml"));
|
||||
return directoryService.GetFile(PlaylistXmlSaver.GetSavePath(info.Path, FileSystem));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,92 +29,6 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
private static readonly Dictionary<string, string> CommonTags = new[] {
|
||||
|
||||
"Added",
|
||||
"AspectRatio",
|
||||
"AudioDbAlbumId",
|
||||
"AudioDbArtistId",
|
||||
"BirthDate",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"certification",
|
||||
|
||||
"Chapters",
|
||||
"ContentRating",
|
||||
"Countries",
|
||||
"CustomRating",
|
||||
"CriticRating",
|
||||
"DeathDate",
|
||||
"DisplayOrder",
|
||||
"EndDate",
|
||||
"Genres",
|
||||
"Genre",
|
||||
"GamesDbId",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"IMDB_ID",
|
||||
|
||||
"IMDB",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"IMDbId",
|
||||
|
||||
"Language",
|
||||
"LocalTitle",
|
||||
"OriginalTitle",
|
||||
"LockData",
|
||||
"LockedFields",
|
||||
"Format3D",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"MPAARating",
|
||||
|
||||
"MusicBrainzArtistId",
|
||||
"MusicBrainzAlbumArtistId",
|
||||
"MusicBrainzAlbumId",
|
||||
"MusicBrainzReleaseGroupId",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"MusicbrainzId",
|
||||
|
||||
"Overview",
|
||||
"Persons",
|
||||
"PremiereDate",
|
||||
"ProductionYear",
|
||||
"Rating",
|
||||
"RottenTomatoesId",
|
||||
"RunningTime",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"Runtime",
|
||||
|
||||
"SortTitle",
|
||||
"Studios",
|
||||
"Tags",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"TagLine",
|
||||
|
||||
"Taglines",
|
||||
"TMDbCollectionId",
|
||||
"TMDbId",
|
||||
|
||||
// Deprecated. No longer saving in this field.
|
||||
"Trailer",
|
||||
|
||||
"Trailers",
|
||||
"TVcomId",
|
||||
"TvDbId",
|
||||
"TVRageId",
|
||||
"Website",
|
||||
"Zap2ItId",
|
||||
"CollectionItems",
|
||||
"PlaylistItems",
|
||||
"Shares"
|
||||
|
||||
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
public BaseXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory)
|
||||
{
|
||||
FileSystem = fileSystem;
|
||||
@@ -150,7 +64,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
public string GetSavePath(BaseItem item)
|
||||
{
|
||||
return GetLocalSavePath(item);
|
||||
}
|
||||
@@ -160,14 +74,14 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
protected abstract string GetLocalSavePath(IHasMetadata item);
|
||||
protected abstract string GetLocalSavePath(BaseItem item);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the root element.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
protected virtual string GetRootElementName(IHasMetadata item)
|
||||
protected virtual string GetRootElementName(BaseItem item)
|
||||
{
|
||||
return "Item";
|
||||
}
|
||||
@@ -178,14 +92,9 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="updateType">Type of the update.</param>
|
||||
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
|
||||
public abstract bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType);
|
||||
public abstract bool IsEnabledFor(BaseItem item, ItemUpdateType updateType);
|
||||
|
||||
protected virtual List<string> GetTagsUsed()
|
||||
{
|
||||
return new List<string>();
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
public void Save(BaseItem item, CancellationToken cancellationToken)
|
||||
{
|
||||
var path = GetSavePath(item);
|
||||
|
||||
@@ -204,27 +113,15 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
private void SaveToFile(Stream stream, string path)
|
||||
{
|
||||
FileSystem.CreateDirectory(FileSystem.GetDirectoryName(path));
|
||||
|
||||
var file = FileSystem.GetFileInfo(path);
|
||||
|
||||
var wasHidden = false;
|
||||
|
||||
// This will fail if the file is hidden
|
||||
if (file.Exists)
|
||||
{
|
||||
if (file.IsHidden)
|
||||
{
|
||||
wasHidden = true;
|
||||
}
|
||||
FileSystem.SetAttributes(path, false, false);
|
||||
}
|
||||
// On Windows, savint the file will fail if the file is hidden or readonly
|
||||
FileSystem.SetAttributes(path, false, false);
|
||||
|
||||
using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
|
||||
{
|
||||
stream.CopyTo(filestream);
|
||||
}
|
||||
|
||||
if (wasHidden || ConfigurationManager.Configuration.SaveMetadataHidden)
|
||||
if (ConfigurationManager.Configuration.SaveMetadataHidden)
|
||||
{
|
||||
SetHidden(path, true);
|
||||
}
|
||||
@@ -242,7 +139,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
private void Save(IHasMetadata item, Stream stream, string xmlPath)
|
||||
private void Save(BaseItem item, Stream stream, string xmlPath)
|
||||
{
|
||||
var settings = new XmlWriterSettings
|
||||
{
|
||||
@@ -259,7 +156,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
|
||||
writer.WriteStartElement(root);
|
||||
|
||||
var baseItem = item as BaseItem;
|
||||
var baseItem = item;
|
||||
|
||||
if (baseItem != null)
|
||||
{
|
||||
@@ -268,32 +165,13 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
|
||||
WriteCustomElements(item, writer);
|
||||
|
||||
var tagsUsed = GetTagsUsed();
|
||||
|
||||
try
|
||||
{
|
||||
AddCustomTags(xmlPath, tagsUsed, writer, Logger, FileSystem);
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
|
||||
}
|
||||
catch (XmlException ex)
|
||||
{
|
||||
Logger.ErrorException("Error reading existng xml", ex);
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteEndDocument();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void WriteCustomElements(IHasMetadata item, XmlWriter writer);
|
||||
protected abstract void WriteCustomElements(BaseItem item, XmlWriter writer);
|
||||
|
||||
public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
@@ -373,20 +251,16 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
var hasTrailers = item as IHasTrailers;
|
||||
if (hasTrailers != null)
|
||||
if (item.RemoteTrailers.Length > 0)
|
||||
{
|
||||
if (hasTrailers.RemoteTrailers.Length > 0)
|
||||
writer.WriteStartElement("Trailers");
|
||||
|
||||
foreach (var trailer in item.RemoteTrailers)
|
||||
{
|
||||
writer.WriteStartElement("Trailers");
|
||||
|
||||
foreach (var trailer in hasTrailers.RemoteTrailers)
|
||||
{
|
||||
writer.WriteElementString("Trailer", trailer.Url);
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
writer.WriteElementString("Trailer", trailer.Url);
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
if (item.ProductionLocations.Length > 0)
|
||||
@@ -417,11 +291,6 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
writer.WriteElementString("ProductionYear", item.ProductionYear.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(item.HomePageUrl))
|
||||
{
|
||||
writer.WriteElementString("Website", item.HomePageUrl);
|
||||
}
|
||||
|
||||
var hasAspectRatio = item as IHasAspectRatio;
|
||||
if (hasAspectRatio != null)
|
||||
{
|
||||
@@ -447,7 +316,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
var timespan = TimeSpan.FromTicks(runTimeTicks.Value);
|
||||
|
||||
writer.WriteElementString("RunningTime", Convert.ToInt32(timespan.TotalMinutes).ToString(UsCulture));
|
||||
writer.WriteElementString("RunningTime", Math.Floor(timespan.TotalMinutes).ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (item.ProviderIds != null)
|
||||
@@ -469,7 +338,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
if (item.Genres.Count > 0)
|
||||
if (item.Genres.Length > 0)
|
||||
{
|
||||
writer.WriteStartElement("Genres");
|
||||
|
||||
@@ -536,7 +405,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
|
||||
var playlist = item as Playlist;
|
||||
if (playlist != null)
|
||||
if (playlist != null && !Playlist.IsPlaylistFile(playlist.Path))
|
||||
{
|
||||
AddLinkedChildren(playlist, writer, "PlaylistItems", "PlaylistItem");
|
||||
}
|
||||
@@ -617,10 +486,19 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
|
||||
foreach (var link in items)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(link.Path))
|
||||
if (!string.IsNullOrWhiteSpace(link.Path) || !string.IsNullOrWhiteSpace(link.LibraryItemId))
|
||||
{
|
||||
writer.WriteStartElement(singularNodeName);
|
||||
writer.WriteElementString("Path", link.Path);
|
||||
if (!string.IsNullOrWhiteSpace(link.Path))
|
||||
{
|
||||
writer.WriteElementString("Path", link.Path);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(link.LibraryItemId))
|
||||
{
|
||||
writer.WriteElementString("ItemId", link.LibraryItemId);
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
}
|
||||
@@ -628,62 +506,9 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
private static bool IsPersonType(PersonInfo person, string type)
|
||||
private bool IsPersonType(PersonInfo person, string type)
|
||||
{
|
||||
return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private void AddCustomTags(string path, List<string> xmlTagsUsed, XmlWriter writer, ILogger logger, IFileSystem fileSystem)
|
||||
{
|
||||
var settings = XmlReaderSettingsFactory.Create(false);
|
||||
|
||||
settings.CheckCharacters = false;
|
||||
settings.IgnoreProcessingInstructions = true;
|
||||
settings.IgnoreComments = true;
|
||||
|
||||
using (var fileStream = fileSystem.OpenRead(path))
|
||||
{
|
||||
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
|
||||
{
|
||||
// Use XmlReader for best performance
|
||||
using (var reader = XmlReader.Create(streamReader, settings))
|
||||
{
|
||||
try
|
||||
{
|
||||
reader.MoveToContent();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.ErrorException("Error reading existing xml tags from {0}.", ex, path);
|
||||
return;
|
||||
}
|
||||
|
||||
reader.Read();
|
||||
|
||||
// Loop through each element
|
||||
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
var name = reader.Name;
|
||||
|
||||
if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
writer.WriteNode(reader, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Skip();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Read();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
public class BoxSetXmlSaver : BaseXmlSaver
|
||||
{
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
@@ -27,11 +27,11 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
return item is BoxSet && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string GetLocalSavePath(IHasMetadata item)
|
||||
protected override string GetLocalSavePath(BaseItem item)
|
||||
{
|
||||
return Path.Combine(item.Path, "collection.xml");
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Xml;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
public class FolderXmlSaver : BaseXmlSaver
|
||||
{
|
||||
protected override string GetLocalSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "folder.xml");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "Item";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item is Folder)
|
||||
{
|
||||
if (!(item is Series) && !(item is BoxSet) && !(item is MusicArtist) && !(item is MusicAlbum) &&
|
||||
!(item is Season) &&
|
||||
!(item is GameSystem) &&
|
||||
!(item is Playlist))
|
||||
{
|
||||
return updateType >= ItemUpdateType.MetadataEdit;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
}
|
||||
|
||||
public FolderXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
@@ -26,17 +26,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
return item is GameSystem && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"GameSystem"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
var gameSystem = (GameSystem)item;
|
||||
|
||||
@@ -46,12 +36,12 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetLocalSavePath(IHasMetadata item)
|
||||
protected override string GetLocalSavePath(BaseItem item)
|
||||
{
|
||||
return Path.Combine(item.Path, "gamesystem.xml");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
protected override string GetRootElementName(BaseItem item)
|
||||
{
|
||||
return "Item";
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
/// </summary>
|
||||
public class GameXmlSaver : BaseXmlSaver
|
||||
{
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
private readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
@@ -28,18 +28,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
return item is Game && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"GameSystem",
|
||||
"Players"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
var game = (Game)item;
|
||||
|
||||
@@ -53,12 +42,12 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetLocalSavePath(IHasMetadata item)
|
||||
protected override string GetLocalSavePath(BaseItem item)
|
||||
{
|
||||
return GetGameSavePath((Game)item);
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
protected override string GetRootElementName(BaseItem item)
|
||||
{
|
||||
return "Item";
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
public class PlaylistXmlSaver : BaseXmlSaver
|
||||
{
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
@@ -23,18 +23,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
return item is Playlist && updateType >= ItemUpdateType.MetadataImport;
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"OwnerUserId",
|
||||
"PlaylistMediaType"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
var game = (Playlist)item;
|
||||
|
||||
@@ -44,9 +33,21 @@ namespace MediaBrowser.LocalMetadata.Savers
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetLocalSavePath(IHasMetadata item)
|
||||
protected override string GetLocalSavePath(BaseItem item)
|
||||
{
|
||||
return Path.Combine(item.Path, "playlist.xml");
|
||||
return GetSavePath(item.Path, FileSystem);
|
||||
}
|
||||
|
||||
public static string GetSavePath(string itemPath, IFileSystem fileSystem)
|
||||
{
|
||||
var path = itemPath;
|
||||
|
||||
if (Playlist.IsPlaylistFile(path))
|
||||
{
|
||||
return Path.ChangeExtension(itemPath, ".xml");
|
||||
}
|
||||
|
||||
return Path.Combine(path, "playlist.xml");
|
||||
}
|
||||
|
||||
public PlaylistXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
|
||||
|
||||
Reference in New Issue
Block a user