From d4532c38568a13f8228eee0d82fb36b952fe5576 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Sat, 11 Apr 2015 13:28:37 +0200 Subject: [PATCH] Fixed: MediaInfo now also works on linux with unicode filenames. --- .../MediaInfo/VideoFileInfoReader.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs index aba34f9c6..1b8b625ee 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs @@ -1,9 +1,11 @@ using System; +using System.Globalization; using System.IO; +using System.Text; using MediaInfoLib; using NLog; using NzbDrone.Common.Disk; -using System.Globalization; +using NzbDrone.Common.EnvironmentInfo; namespace NzbDrone.Core.MediaFiles.MediaInfo { @@ -39,7 +41,19 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo _logger.Debug("Getting media info from {0}", filename); mediaInfo.Option("ParseSpeed", "0.2"); - int open = mediaInfo.Open(filename); + + int open; + if (OsInfo.IsWindows) + { + open = mediaInfo.Open(filename); + } + else + { + // On non-Windows the wrapper uses the ansi library methods, which libmediainfo converts internally to unicode from multibyte (utf8). + // To avoid building MediaInfoDotNet ourselves we simply trick the wrapper to send utf8 strings instead of ansi. + var utf8filename = Encoding.Default.GetString(Encoding.UTF8.GetBytes(filename)); + open = mediaInfo.Open(utf8filename); + } if (open != 0) { @@ -108,6 +122,10 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo return mediaInfoModel; } + else + { + _logger.Warn("Unable to open media info from file: " + filename); + } } catch (DllNotFoundException ex) {