|
@@ -121,19 +121,67 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|
|
{
|
|
|
info.Name = title;
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ title = FFProbeHelpers.GetDictionaryValue(tags, "title-eng");
|
|
|
+ if (!string.IsNullOrWhiteSpace(title))
|
|
|
+ {
|
|
|
+ info.Name = title;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var titleSort = FFProbeHelpers.GetDictionaryValue(tags, "titlesort");
|
|
|
+ if (!string.IsNullOrWhiteSpace(titleSort))
|
|
|
+ {
|
|
|
+ info.ForcedSortName = titleSort;
|
|
|
+ }
|
|
|
|
|
|
info.IndexNumber = FFProbeHelpers.GetDictionaryNumericValue(tags, "episode_sort");
|
|
|
info.ParentIndexNumber = FFProbeHelpers.GetDictionaryNumericValue(tags, "season_number");
|
|
|
info.ShowName = FFProbeHelpers.GetDictionaryValue(tags, "show_name");
|
|
|
info.ProductionYear = FFProbeHelpers.GetDictionaryNumericValue(tags, "date");
|
|
|
|
|
|
- // Several different forms of retaildate
|
|
|
- info.PremiereDate = FFProbeHelpers.GetDictionaryDateTime(tags, "retaildate") ??
|
|
|
+ // Several different forms of retail/premiere date
|
|
|
+ info.PremiereDate =
|
|
|
+ FFProbeHelpers.GetDictionaryDateTime(tags, "retaildate") ??
|
|
|
FFProbeHelpers.GetDictionaryDateTime(tags, "retail date") ??
|
|
|
FFProbeHelpers.GetDictionaryDateTime(tags, "retail_date") ??
|
|
|
FFProbeHelpers.GetDictionaryDateTime(tags, "date_released") ??
|
|
|
FFProbeHelpers.GetDictionaryDateTime(tags, "date");
|
|
|
|
|
|
+ // Set common metadata for music (audio) and music videos (video)
|
|
|
+ info.Album = FFProbeHelpers.GetDictionaryValue(tags, "album");
|
|
|
+
|
|
|
+ var artists = FFProbeHelpers.GetDictionaryValue(tags, "artists");
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(artists))
|
|
|
+ {
|
|
|
+ info.Artists = SplitArtists(artists, new[] { '/', ';' }, false)
|
|
|
+ .DistinctNames()
|
|
|
+ .ToArray();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var artist = FFProbeHelpers.GetDictionaryValue(tags, "artist");
|
|
|
+ if (string.IsNullOrWhiteSpace(artist))
|
|
|
+ {
|
|
|
+ info.Artists = Array.Empty<string>();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ info.Artists = SplitArtists(artist, _nameDelimiters, true)
|
|
|
+ .DistinctNames()
|
|
|
+ .ToArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // If we don't have a ProductionYear try and get it from PremiereDate
|
|
|
+ if (!info.ProductionYear.HasValue && info.PremiereDate.HasValue)
|
|
|
+ {
|
|
|
+ info.ProductionYear = info.PremiereDate.Value.Year;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Set mediaType-specific metadata
|
|
|
if (isAudio)
|
|
|
{
|
|
|
SetAudioRuntimeTicks(data, info);
|
|
@@ -1076,13 +1124,13 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|
|
|
|
|
private void SetAudioInfoFromTags(MediaInfo audio, Dictionary<string, string> tags)
|
|
|
{
|
|
|
- var peoples = new List<BaseItemPerson>();
|
|
|
+ var people = new List<BaseItemPerson>();
|
|
|
var composer = FFProbeHelpers.GetDictionaryValue(tags, "composer");
|
|
|
if (!string.IsNullOrWhiteSpace(composer))
|
|
|
{
|
|
|
foreach (var person in Split(composer, false))
|
|
|
{
|
|
|
- peoples.Add(new BaseItemPerson { Name = person, Type = PersonType.Composer });
|
|
|
+ people.Add(new BaseItemPerson { Name = person, Type = PersonType.Composer });
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1091,7 +1139,7 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|
|
{
|
|
|
foreach (var person in Split(conductor, false))
|
|
|
{
|
|
|
- peoples.Add(new BaseItemPerson { Name = person, Type = PersonType.Conductor });
|
|
|
+ people.Add(new BaseItemPerson { Name = person, Type = PersonType.Conductor });
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1100,46 +1148,21 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|
|
{
|
|
|
foreach (var person in Split(lyricist, false))
|
|
|
{
|
|
|
- peoples.Add(new BaseItemPerson { Name = person, Type = PersonType.Lyricist });
|
|
|
+ people.Add(new BaseItemPerson { Name = person, Type = PersonType.Lyricist });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Check for writer some music is tagged that way as alternative to composer/lyricist
|
|
|
var writer = FFProbeHelpers.GetDictionaryValue(tags, "writer");
|
|
|
-
|
|
|
if (!string.IsNullOrWhiteSpace(writer))
|
|
|
{
|
|
|
foreach (var person in Split(writer, false))
|
|
|
{
|
|
|
- peoples.Add(new BaseItemPerson { Name = person, Type = PersonType.Writer });
|
|
|
+ people.Add(new BaseItemPerson { Name = person, Type = PersonType.Writer });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- audio.People = peoples.ToArray();
|
|
|
- audio.Album = FFProbeHelpers.GetDictionaryValue(tags, "album");
|
|
|
-
|
|
|
- var artists = FFProbeHelpers.GetDictionaryValue(tags, "artists");
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(artists))
|
|
|
- {
|
|
|
- audio.Artists = SplitArtists(artists, new[] { '/', ';' }, false)
|
|
|
- .DistinctNames()
|
|
|
- .ToArray();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var artist = FFProbeHelpers.GetDictionaryValue(tags, "artist");
|
|
|
- if (string.IsNullOrWhiteSpace(artist))
|
|
|
- {
|
|
|
- audio.Artists = Array.Empty<string>();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- audio.Artists = SplitArtists(artist, _nameDelimiters, true)
|
|
|
- .DistinctNames()
|
|
|
- .ToArray();
|
|
|
- }
|
|
|
- }
|
|
|
+ audio.People = people.ToArray();
|
|
|
|
|
|
var albumArtist = FFProbeHelpers.GetDictionaryValue(tags, "albumartist");
|
|
|
if (string.IsNullOrWhiteSpace(albumArtist))
|
|
@@ -1174,12 +1197,6 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|
|
// Disc number
|
|
|
audio.ParentIndexNumber = GetDictionaryDiscValue(tags, "disc");
|
|
|
|
|
|
- // If we don't have a ProductionYear try and get it from PremiereDate
|
|
|
- if (audio.PremiereDate.HasValue && !audio.ProductionYear.HasValue)
|
|
|
- {
|
|
|
- audio.ProductionYear = audio.PremiereDate.Value.ToLocalTime().Year;
|
|
|
- }
|
|
|
-
|
|
|
// There's several values in tags may or may not be present
|
|
|
FetchStudios(audio, tags, "organization");
|
|
|
FetchStudios(audio, tags, "ensemble");
|