diff --git a/src/NzbDrone.Core/MediaFiles/CueSheetService.cs b/src/NzbDrone.Core/MediaFiles/CueSheetService.cs index 5c55a53c9..efc54a771 100644 --- a/src/NzbDrone.Core/MediaFiles/CueSheetService.cs +++ b/src/NzbDrone.Core/MediaFiles/CueSheetService.cs @@ -107,7 +107,7 @@ namespace NzbDrone.Core.MediaFiles var cueSheetInfos = new List(); foreach (var cueFile in cueFiles) { - var cueSheetInfo = GetCueSheetInfo(cueFile, mediaFileList); + var cueSheetInfo = GetCueSheetInfo(cueFile, mediaFileList, itemInfo.DetectCueFileEncoding); if (idOverrides != null) { cueSheetInfo.IdOverrides = idOverrides; @@ -246,19 +246,26 @@ namespace NzbDrone.Core.MediaFiles return title; } - private CueSheet LoadCueSheet(IFileInfo fileInfo) + private CueSheet LoadCueSheet(IFileInfo fileInfo, bool detectCueFileEncoding) { using (var fs = fileInfo.OpenRead()) { 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) { - 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 cueSheet = ParseLines(lines); @@ -425,10 +432,10 @@ namespace NzbDrone.Core.MediaFiles return null; } - private CueSheetInfo GetCueSheetInfo(IFileInfo cueFile, List musicFiles) + private CueSheetInfo GetCueSheetInfo(IFileInfo cueFile, List musicFiles, bool detectCueFileEncoding) { var cueSheetInfo = new CueSheetInfo(); - var cueSheet = LoadCueSheet(cueFile); + var cueSheet = LoadCueSheet(cueFile, detectCueFileEncoding); if (cueSheet == null) { return cueSheetInfo; diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index 2a157d828..ecdcfb41e 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -102,6 +102,7 @@ namespace NzbDrone.Core.MediaFiles var decisions = new List>(); + itemInfo.DetectCueFileEncoding = false; decisions.AddRange(_cueSheetService.GetImportDecisions(ref mediaFileList, null, itemInfo, config)); decisions.AddRange(_importDecisionMaker.GetImportDecisions(mediaFileList, null, itemInfo, config)); diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs index df7b1a19c..9c5fb332e 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/ImportDecisionMaker.cs @@ -35,6 +35,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport public DownloadClientItem DownloadClientItem { get; set; } public ParsedAlbumInfo ParsedAlbumInfo { get; set; } public List CueSheetInfos { get; set; } = new List(); + public bool DetectCueFileEncoding { get; set; } } public class ImportDecisionMakerConfig diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs index 37efd9a96..ce7de7519 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs @@ -174,6 +174,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual { DownloadClientItem = downloadClientItem, ParsedAlbumInfo = Parser.Parser.ParseAlbumTitle(albumTitle), + DetectCueFileEncoding = true, }; var config = new ImportDecisionMakerConfig @@ -251,6 +252,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual AlbumRelease = group.First().Release }; + itemInfo.DetectCueFileEncoding = true; var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, idOverride, itemInfo, config); if (audioFiles.Count > 0) {