mirror of
https://github.com/Sonarr/Sonarr
synced 2026-05-08 13:01:10 +02:00
Default to und for audio streams with no language tag
This commit is contained in:
parent
91c8d9fa50
commit
b3e815e341
5 changed files with 79 additions and 14 deletions
|
|
@ -23,7 +23,10 @@ function MediaInfo(props: MediaInfoProps) {
|
|||
|
||||
if (key === 'audioStreams') {
|
||||
return value.map((audioStream, index) => {
|
||||
const language = getLanguageName(audioStream.language);
|
||||
const language =
|
||||
audioStream.language === 'und'
|
||||
? translate('Unknown')
|
||||
: getLanguageName(audioStream.language);
|
||||
|
||||
let line = `${language}`;
|
||||
|
||||
|
|
|
|||
|
|
@ -97,6 +97,63 @@ public void should_convert_non_empty_media_info()
|
|||
mediainfo.SubtitleStreams.Select(s => s.Language).Should().BeEquivalentTo("eng", "ger", "rum");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_non_empty_media_info_with_empty_audio_languages()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("EpisodeFiles").Row(new
|
||||
{
|
||||
SeriesId = 1,
|
||||
SeasonNumber = 1,
|
||||
RelativePath = "Season 01/S01E05.mkv",
|
||||
Size = 125.Megabytes(),
|
||||
DateAdded = DateTime.UtcNow,
|
||||
OriginalFilePath = "Series.Title.S01E05.720p.HDTV.x265-Sonarr.mkv",
|
||||
ReleaseGroup = "Sonarr",
|
||||
Quality = new QualityModel(Quality.HDTV720p).ToJson(),
|
||||
Languages = "[1]",
|
||||
MediaInfo = new
|
||||
{
|
||||
AudioFormat = "truehd",
|
||||
AudioCodecID = "[0][0][0][0]",
|
||||
AudioProfile = "Dolby TrueHD + Dolby Atmos",
|
||||
AudioBitrate = 224000,
|
||||
AudioChannels = 2,
|
||||
AudioChannelPositions = "stereo",
|
||||
AudioLanguages = new List<string>(),
|
||||
Subtitles = new List<string> { "ger", "eng", "rum" },
|
||||
ScanType = "Progressive",
|
||||
SchemaRevision = 13
|
||||
}.ToJson()
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<EpisodeFile225>("SELECT \"Id\", \"RelativePath\", \"MediaInfo\" FROM \"EpisodeFiles\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
|
||||
var mediainfo = items.First().MediaInfo;
|
||||
|
||||
mediainfo.AudioFormat.Should().BeNull();
|
||||
mediainfo.AudioCodecID.Should().BeNull();
|
||||
mediainfo.AudioProfile.Should().BeNull();
|
||||
mediainfo.AudioBitrate.Should().BeNull();
|
||||
mediainfo.AudioChannels.Should().BeNull();
|
||||
mediainfo.AudioChannelPositions.Should().BeNull();
|
||||
|
||||
mediainfo.AudioStreams.First().Format.Should().Be("truehd");
|
||||
mediainfo.AudioStreams.First().CodecId.Should().Be("[0][0][0][0]");
|
||||
mediainfo.AudioStreams.First().Profile.Should().Be("Dolby TrueHD + Dolby Atmos");
|
||||
mediainfo.AudioStreams.First().Bitrate.Should().Be(224000);
|
||||
mediainfo.AudioStreams.First().Channels.Should().Be(2);
|
||||
mediainfo.AudioStreams.First().ChannelPositions.Should().Be("stereo");
|
||||
mediainfo.AudioStreams.First().Language.Should().Be("und");
|
||||
|
||||
mediainfo.AudioStreams.Select(s => s.Language).Should().BeEquivalentTo("und");
|
||||
mediainfo.SubtitleStreams.Select(s => s.Language).Should().BeEquivalentTo("eng", "ger", "rum");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_to_null_on_invalid_media_info()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -126,13 +126,19 @@ private static List<MediaInfoAudioStream225> MigrateAudioStreams(MediaInfo224 ol
|
|||
{
|
||||
Language = language,
|
||||
})
|
||||
.ToList();
|
||||
audioStreams?.FirstOrDefault()?.Format = old.AudioFormat;
|
||||
audioStreams?.FirstOrDefault()?.CodecId = old.AudioCodecID;
|
||||
audioStreams?.FirstOrDefault()?.Profile = old.AudioProfile;
|
||||
audioStreams?.FirstOrDefault()?.Bitrate = old.AudioBitrate;
|
||||
audioStreams?.FirstOrDefault()?.Channels = old.AudioChannels;
|
||||
audioStreams?.FirstOrDefault()?.ChannelPositions = old.AudioChannelPositions;
|
||||
.ToList() ?? [];
|
||||
|
||||
if (audioStreams.Count == 0)
|
||||
{
|
||||
audioStreams.Add(new MediaInfoAudioStream225 { Language = "und" });
|
||||
}
|
||||
|
||||
audioStreams.FirstOrDefault()?.Format = old.AudioFormat;
|
||||
audioStreams.FirstOrDefault()?.CodecId = old.AudioCodecID;
|
||||
audioStreams.FirstOrDefault()?.Profile = old.AudioProfile;
|
||||
audioStreams.FirstOrDefault()?.Bitrate = old.AudioBitrate;
|
||||
audioStreams.FirstOrDefault()?.Channels = old.AudioChannels;
|
||||
audioStreams.FirstOrDefault()?.ChannelPositions = old.AudioChannelPositions;
|
||||
|
||||
return audioStreams;
|
||||
}
|
||||
|
|
@ -144,7 +150,7 @@ private static List<MediaInfoSubtitleStream225> MigrateSubtitleStreams(MediaInfo
|
|||
{
|
||||
Language = language,
|
||||
})
|
||||
.ToList();
|
||||
.ToList() ?? [];
|
||||
|
||||
return subtitleStreams;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public static decimal FormatAudioChannels(MediaInfoAudioStreamModel audioStream)
|
|||
|
||||
public static string FormatAudioCodec(MediaInfoAudioStreamModel audioStream, string sceneName)
|
||||
{
|
||||
if (audioStream.Format == null)
|
||||
if (audioStream?.Format == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
|
@ -155,7 +155,7 @@ public static string FormatAudioCodec(MediaInfoAudioStreamModel audioStream, str
|
|||
|
||||
public static string FormatVideoCodec(MediaInfoModel mediaInfo, string sceneName)
|
||||
{
|
||||
if (mediaInfo.VideoFormat == null)
|
||||
if (mediaInfo?.VideoFormat == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
|
@ -270,7 +270,7 @@ public static string FormatVideoCodec(MediaInfoModel mediaInfo, string sceneName
|
|||
|
||||
private static decimal? FormatAudioChannelsFromAudioChannelPositions(MediaInfoAudioStreamModel audioStream)
|
||||
{
|
||||
if (audioStream.ChannelPositions == null)
|
||||
if (audioStream?.ChannelPositions == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,13 +85,12 @@ public MediaInfoModel GetMediaInfo(string filename)
|
|||
mediaInfoModel.RawStreamData = string.Concat(analysis.OutputData);
|
||||
|
||||
mediaInfoModel.AudioStreams = analysis.AudioStreams?
|
||||
.Where(stream => stream.Language.IsNotNullOrWhiteSpace())
|
||||
.OrderBy(stream => stream.Index)
|
||||
.Select(stream =>
|
||||
{
|
||||
var model = new MediaInfoAudioStreamModel
|
||||
{
|
||||
Language = stream.Language,
|
||||
Language = stream.Language.IsNotNullOrWhiteSpace() ? stream.Language : "und",
|
||||
Format = stream.CodecName,
|
||||
CodecId = stream.CodecTagString,
|
||||
Profile = stream.Profile,
|
||||
|
|
|
|||
Loading…
Reference in a new issue