diff --git a/src/NzbDrone.Core/Lidarr.Core.csproj b/src/NzbDrone.Core/Lidarr.Core.csproj
index 436a2404f..42e82a293 100644
--- a/src/NzbDrone.Core/Lidarr.Core.csproj
+++ b/src/NzbDrone.Core/Lidarr.Core.csproj
@@ -29,6 +29,7 @@
+
diff --git a/src/NzbDrone.Core/MediaFiles/CueSheetService.cs b/src/NzbDrone.Core/MediaFiles/CueSheetService.cs
index 7517a7769..28a8f160b 100644
--- a/src/NzbDrone.Core/MediaFiles/CueSheetService.cs
+++ b/src/NzbDrone.Core/MediaFiles/CueSheetService.cs
@@ -3,12 +3,13 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Abstractions;
using System.Linq;
-using System.Text;
using System.Text.RegularExpressions;
+using NLog;
using NzbDrone.Core.MediaFiles.TrackImport;
using NzbDrone.Core.Music;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;
+using UtfUnknown;
namespace NzbDrone.Core.MediaFiles
{
@@ -22,13 +23,14 @@ namespace NzbDrone.Core.MediaFiles
public interface ICueSheetService
{
- List> GetImportDecisions(ref List mediaFileList, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config);
+ List> GetImportDecisions(ref List mediaFileList, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config);
}
public class CueSheetService : ICueSheetService
{
private readonly IParsingService _parsingService;
private readonly IMakeImportDecision _importDecisionMaker;
+ private readonly Logger _logger;
private static string _FileKey = "FILE";
private static string _TrackKey = "TRACK";
@@ -40,13 +42,15 @@ namespace NzbDrone.Core.MediaFiles
private static string _TitleKey = "TITLE";
public CueSheetService(IParsingService parsingService,
- IMakeImportDecision importDecisionMaker)
+ IMakeImportDecision importDecisionMaker,
+ Logger logger)
{
_parsingService = parsingService;
_importDecisionMaker = importDecisionMaker;
+ _logger = logger;
}
- public List> GetImportDecisions(ref List mediaFileList, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config)
+ public List> GetImportDecisions(ref List mediaFileList, IdentificationOverrides idOverrides, ImportDecisionMakerInfo itemInfo, ImportDecisionMakerConfig config)
{
var decisions = new List>();
var cueFiles = mediaFileList.Where(x => x.Extension.Equals(".cue")).ToList();
@@ -60,6 +64,10 @@ namespace NzbDrone.Core.MediaFiles
foreach (var cueFile in cueFiles)
{
var cueSheetInfo = GetCueSheetInfo(cueFile, mediaFileList);
+ if (idOverrides != null)
+ {
+ cueSheetInfo.IdOverrides = idOverrides;
+ }
var addedCueSheetInfo = cueSheetInfos.Find(existingCueSheetInfo => existingCueSheetInfo.CueSheet.DiscID == cueSheetInfo.CueSheet.DiscID);
if (addedCueSheetInfo == null)
@@ -161,7 +169,10 @@ namespace NzbDrone.Core.MediaFiles
using (var fs = fileInfo.OpenRead())
{
var bytes = new byte[fileInfo.Length];
- var encoding = new UTF8Encoding(true);
+ 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)
{
@@ -369,6 +380,8 @@ namespace NzbDrone.Core.MediaFiles
return cueSheetInfo;
}
+ cueSheetInfo.IdOverrides.Artist = artistFromCue;
+
var parsedAlbumInfo = new ParsedAlbumInfo
{
AlbumTitle = cueSheet.Title,
diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs
index 3504b619b..2a157d828 100644
--- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs
+++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs
@@ -102,7 +102,7 @@ namespace NzbDrone.Core.MediaFiles
var decisions = new List>();
- decisions.AddRange(_cueSheetService.GetImportDecisions(ref mediaFileList, itemInfo, config));
+ decisions.AddRange(_cueSheetService.GetImportDecisions(ref mediaFileList, null, itemInfo, config));
decisions.AddRange(_importDecisionMaker.GetImportDecisions(mediaFileList, null, itemInfo, config));
decisionsStopwatch.Stop();
diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs
index ad0f0f68c..37efd9a96 100644
--- a/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs
+++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Manual/ManualImportService.cs
@@ -185,7 +185,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
AddNewArtists = false
};
- var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, itemInfo, config);
+ var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, null, itemInfo, config);
if (!audioFiles.Empty())
{
decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFiles, idOverrides, itemInfo, config));
@@ -251,7 +251,7 @@ namespace NzbDrone.Core.MediaFiles.TrackImport.Manual
AlbumRelease = group.First().Release
};
- var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, itemInfo, config);
+ var decisions = _cueSheetService.GetImportDecisions(ref audioFiles, idOverride, itemInfo, config);
if (audioFiles.Count > 0)
{
decisions.AddRange(_importDecisionMaker.GetImportDecisions(audioFiles, idOverride, itemInfo, config));