Only detect the .cue file encoding for the manual import service.

(cherry picked from commit a3ccf87b01f071e2bf9db89e4248c730226d059c)
(cherry picked from commit e1ab63906ac4761e0ae2ebfe040854f335f46476)
pull/4200/head
zhangdoa 4 months ago
parent a7ab35fa14
commit a581e64cd3

@ -107,7 +107,7 @@ namespace NzbDrone.Core.MediaFiles
var cueSheetInfos = new List<CueSheetInfo>(); var cueSheetInfos = new List<CueSheetInfo>();
foreach (var cueFile in cueFiles) foreach (var cueFile in cueFiles)
{ {
var cueSheetInfo = GetCueSheetInfo(cueFile, mediaFileList); var cueSheetInfo = GetCueSheetInfo(cueFile, mediaFileList, itemInfo.DetectCueFileEncoding);
if (idOverrides != null) if (idOverrides != null)
{ {
cueSheetInfo.IdOverrides = idOverrides; cueSheetInfo.IdOverrides = idOverrides;
@ -246,19 +246,26 @@ namespace NzbDrone.Core.MediaFiles
return title; return title;
} }
private CueSheet LoadCueSheet(IFileInfo fileInfo) private CueSheet LoadCueSheet(IFileInfo fileInfo, bool detectCueFileEncoding)
{ {
using (var fs = fileInfo.OpenRead()) using (var fs = fileInfo.OpenRead())
{ {
var bytes = new byte[fileInfo.Length]; var bytes = new byte[fileInfo.Length];
var result = CharsetDetector.DetectFromFile(fileInfo.FullName); // or pass FileInfo
var encoding = result.Detected.Encoding;
_logger.Debug("Detected encoding {0} for {1}", encoding.WebName, fileInfo.FullName);
string content;
while (fs.Read(bytes, 0, bytes.Length) > 0) while (fs.Read(bytes, 0, bytes.Length) > 0)
{ {
content = encoding.GetString(bytes); string content;
if (detectCueFileEncoding)
{
var result = CharsetDetector.DetectFromFile(fileInfo.FullName); // or pass FileInfo
var encoding = result.Detected.Encoding;
_logger.Debug("Detected encoding {0} for {1}", encoding.WebName, fileInfo.FullName);
content = encoding.GetString(bytes);
}
else
{
content = Encoding.UTF8.GetString(bytes);
}
var lines = content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); var lines = content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
var cueSheet = ParseLines(lines); var cueSheet = ParseLines(lines);
@ -425,10 +432,10 @@ namespace NzbDrone.Core.MediaFiles
return null; return null;
} }
private CueSheetInfo GetCueSheetInfo(IFileInfo cueFile, List<IFileInfo> musicFiles) private CueSheetInfo GetCueSheetInfo(IFileInfo cueFile, List<IFileInfo> musicFiles, bool detectCueFileEncoding)
{ {
var cueSheetInfo = new CueSheetInfo(); var cueSheetInfo = new CueSheetInfo();
var cueSheet = LoadCueSheet(cueFile); var cueSheet = LoadCueSheet(cueFile, detectCueFileEncoding);
if (cueSheet == null) if (cueSheet == null)
{ {
return cueSheetInfo; return cueSheetInfo;

@ -102,6 +102,7 @@ namespace NzbDrone.Core.MediaFiles
var decisions = new List<ImportDecision<LocalTrack>>(); var decisions = new List<ImportDecision<LocalTrack>>();
itemInfo.DetectCueFileEncoding = false;
decisions.AddRange(_cueSheetService.GetImportDecisions(ref mediaFileList, null, itemInfo, config)); decisions.AddRange(_cueSheetService.GetImportDecisions(ref mediaFileList, null, itemInfo, config));
decisions.AddRange(_importDecisionMaker.GetImportDecisions(mediaFileList, null, itemInfo, config)); decisions.AddRange(_importDecisionMaker.GetImportDecisions(mediaFileList, null, itemInfo, config));

@ -35,6 +35,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport
public DownloadClientItem DownloadClientItem { get; set; } public DownloadClientItem DownloadClientItem { get; set; }
public ParsedAlbumInfo ParsedAlbumInfo { get; set; } public ParsedAlbumInfo ParsedAlbumInfo { get; set; }
public List<CueSheetInfo> CueSheetInfos { get; set; } = new List<CueSheetInfo>(); public List<CueSheetInfo> CueSheetInfos { get; set; } = new List<CueSheetInfo>();
public bool DetectCueFileEncoding { get; set; }
} }
public class ImportDecisionMakerConfig public class ImportDecisionMakerConfig

@ -174,6 +174,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
{ {
DownloadClientItem = downloadClientItem, DownloadClientItem = downloadClientItem,
ParsedAlbumInfo = Parser.Parser.ParseAlbumTitle(albumTitle), ParsedAlbumInfo = Parser.Parser.ParseAlbumTitle(albumTitle),
DetectCueFileEncoding = true,
}; };
var config = new ImportDecisionMakerConfig var config = new ImportDecisionMakerConfig
@ -251,6 +252,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
AlbumRelease = group.First().Release AlbumRelease = group.First().Release
}; };
itemInfo.DetectCueFileEncoding = true;
var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, idOverride, itemInfo, config); var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, idOverride, itemInfo, config);
if (audioFiles.Count > 0) if (audioFiles.Count > 0)
{ {

Loading…
Cancel
Save