|
|
@ -782,6 +782,31 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case "thumb":
|
|
|
|
case "thumb":
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
FetchThumbNode(reader, itemResult);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
string readerName = reader.Name;
|
|
|
|
|
|
|
|
if (_validProviderIds.TryGetValue(readerName, out string? providerIdValue))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var id = reader.ReadElementContentAsString();
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(providerIdValue) && !string.IsNullOrWhiteSpace(id))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
item.SetProviderId(providerIdValue, id);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
reader.Skip();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void FetchThumbNode(XmlReader reader, MetadataResult<T> itemResult)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var artType = reader.GetAttribute("aspect");
|
|
|
|
var artType = reader.GetAttribute("aspect");
|
|
|
|
var val = reader.ReadElementContentAsString();
|
|
|
|
var val = reader.ReadElementContentAsString();
|
|
|
@ -792,15 +817,15 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
|
// - tag containing '.' because we can't set images for seasons, episodes or movie sets within series or movies
|
|
|
|
// - tag containing '.' because we can't set images for seasons, episodes or movie sets within series or movies
|
|
|
|
if (string.IsNullOrEmpty(artType) || string.IsNullOrEmpty(val) || artType.Contains('.', StringComparison.Ordinal))
|
|
|
|
if (string.IsNullOrEmpty(artType) || string.IsNullOrEmpty(val) || artType.Contains('.', StringComparison.Ordinal))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ImageType imageType = GetImageType(artType);
|
|
|
|
ImageType imageType = GetImageType(artType);
|
|
|
|
|
|
|
|
|
|
|
|
if (!Uri.TryCreate(val, UriKind.Absolute, out var uri))
|
|
|
|
if (!Uri.TryCreate(val, UriKind.Absolute, out var uri))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Logger.LogError("Image location {Path} specified in nfo file for {ItemName} is not a valid URL or file path.", val, item.Name);
|
|
|
|
Logger.LogError("Image location {Path} specified in nfo file for {ItemName} is not a valid URL or file path.", val, itemResult.Item.Name);
|
|
|
|
break;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (uri.IsFile)
|
|
|
|
if (uri.IsFile)
|
|
|
@ -808,15 +833,15 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
|
// only allow one item of each type
|
|
|
|
// only allow one item of each type
|
|
|
|
if (itemResult.Images.Any(x => x.Type == imageType))
|
|
|
|
if (itemResult.Images.Any(x => x.Type == imageType))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var fileSystemMetadata = _directoryService.GetFile(val);
|
|
|
|
var fileSystemMetadata = _directoryService.GetFile(val);
|
|
|
|
// non existing file returns null
|
|
|
|
// non existing file returns null
|
|
|
|
if (fileSystemMetadata == null || !fileSystemMetadata.Exists)
|
|
|
|
if (fileSystemMetadata == null || !fileSystemMetadata.Exists)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Logger.LogWarning("Artwork file {Path} specified in nfo file for {ItemName} does not exist.", uri, item.Name);
|
|
|
|
Logger.LogWarning("Artwork file {Path} specified in nfo file for {ItemName} does not exist.", uri, itemResult.Item.Name);
|
|
|
|
break;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
itemResult.Images.Add(new LocalImageInfo()
|
|
|
|
itemResult.Images.Add(new LocalImageInfo()
|
|
|
@ -830,32 +855,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
|
// only allow one item of each type
|
|
|
|
// only allow one item of each type
|
|
|
|
if (itemResult.RemoteImages.Any(x => x.type == imageType))
|
|
|
|
if (itemResult.RemoteImages.Any(x => x.type == imageType))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
itemResult.RemoteImages.Add((uri.ToString(), imageType));
|
|
|
|
itemResult.RemoteImages.Add((uri.ToString(), imageType));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
string readerName = reader.Name;
|
|
|
|
|
|
|
|
if (_validProviderIds.TryGetValue(readerName, out string? providerIdValue))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var id = reader.ReadElementContentAsString();
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(providerIdValue) && !string.IsNullOrWhiteSpace(id))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
item.SetProviderId(providerIdValue, id);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
reader.Skip();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void FetchFromFileInfoNode(XmlReader reader, T item)
|
|
|
|
private void FetchFromFileInfoNode(XmlReader reader, T item)
|
|
|
|