You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.7 KiB
72 lines
2.7 KiB
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using NLog;
|
|
using NzbDrone.Common.Extensions;
|
|
using NzbDrone.Core.Download;
|
|
using NzbDrone.Core.Extras.Subtitles;
|
|
using NzbDrone.Core.Parser;
|
|
using NzbDrone.Core.Parser.Model;
|
|
|
|
namespace NzbDrone.Core.MediaFiles.EpisodeImport.Aggregation.Aggregators
|
|
{
|
|
public class AggregateSubtitleInfo : IAggregateLocalEpisode
|
|
{
|
|
public int Order => 2;
|
|
|
|
private readonly Logger _logger;
|
|
|
|
public AggregateSubtitleInfo(Logger logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
public LocalEpisode Aggregate(LocalEpisode localEpisode, DownloadClientItem downloadClientItem)
|
|
{
|
|
var path = localEpisode.Path;
|
|
var isSubtitleFile = SubtitleFileExtensions.Extensions.Contains(Path.GetExtension(path));
|
|
|
|
if (!isSubtitleFile)
|
|
{
|
|
return localEpisode;
|
|
}
|
|
|
|
if (localEpisode.Episodes.Empty())
|
|
{
|
|
return localEpisode;
|
|
}
|
|
|
|
var firstEpisode = localEpisode.Episodes.First();
|
|
var episodeFile = firstEpisode.EpisodeFile.Value;
|
|
localEpisode.SubtitleInfo = CleanSubtitleTitleInfo(episodeFile, path);
|
|
|
|
return localEpisode;
|
|
}
|
|
|
|
public SubtitleTitleInfo CleanSubtitleTitleInfo(EpisodeFile episodeFile, string path)
|
|
{
|
|
var subtitleTitleInfo = LanguageParser.ParseSubtitleLanguageInformation(path);
|
|
|
|
var episodeFileTitle = Path.GetFileNameWithoutExtension(episodeFile.RelativePath);
|
|
var originalEpisodeFileTitle = Path.GetFileNameWithoutExtension(episodeFile.OriginalFilePath) ?? string.Empty;
|
|
|
|
if (subtitleTitleInfo.TitleFirst && (episodeFileTitle.Contains(subtitleTitleInfo.RawTitle, StringComparison.OrdinalIgnoreCase) || originalEpisodeFileTitle.Contains(subtitleTitleInfo.RawTitle, StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
_logger.Debug("Subtitle title '{0}' is in episode file title '{1}'. Removing from subtitle title.", subtitleTitleInfo.RawTitle, episodeFileTitle);
|
|
|
|
subtitleTitleInfo = LanguageParser.ParseBasicSubtitle(path);
|
|
}
|
|
|
|
var cleanedTags = subtitleTitleInfo.LanguageTags.Where(t => !episodeFileTitle.Contains(t, StringComparison.OrdinalIgnoreCase)).ToList();
|
|
|
|
if (cleanedTags.Count != subtitleTitleInfo.LanguageTags.Count)
|
|
{
|
|
_logger.Debug("Removed language tags '{0}' from subtitle title '{1}'.", string.Join(", ", subtitleTitleInfo.LanguageTags.Except(cleanedTags)), subtitleTitleInfo.RawTitle);
|
|
subtitleTitleInfo.LanguageTags = cleanedTags;
|
|
}
|
|
|
|
return subtitleTitleInfo;
|
|
}
|
|
}
|
|
}
|