From 96c1ceaa29d101de5c61d8d3690d8cb1dede0ff0 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 2 Sep 2014 22:08:08 -0700 Subject: [PATCH] Fixed: Set permissions on new metadata files (mono) --- .../MediaFiles/EpisodeFileMovingService.cs | 1 - src/NzbDrone.Core/MetaData/MetadataService.cs | 43 ++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs index bda2122f4..0a6087aef 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs @@ -7,7 +7,6 @@ using NzbDrone.Common; using NzbDrone.Common.Disk; using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnvironmentInfo; -using NzbDrone.Common.Exceptions; using NzbDrone.Core.Configuration; using NzbDrone.Core.Organizer; using NzbDrone.Core.Parser.Model; diff --git a/src/NzbDrone.Core/MetaData/MetadataService.cs b/src/NzbDrone.Core/MetaData/MetadataService.cs index 64f0836bf..80d1d01d0 100644 --- a/src/NzbDrone.Core/MetaData/MetadataService.cs +++ b/src/NzbDrone.Core/MetaData/MetadataService.cs @@ -7,6 +7,7 @@ using NLog; using NzbDrone.Common; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles; @@ -29,6 +30,7 @@ namespace NzbDrone.Core.Metadata private readonly IEpisodeService _episodeService; private readonly IDiskProvider _diskProvider; private readonly IHttpProvider _httpProvider; + private readonly IConfigService _configService; private readonly IEventAggregator _eventAggregator; private readonly Logger _logger; @@ -39,6 +41,7 @@ namespace NzbDrone.Core.Metadata IEpisodeService episodeService, IDiskProvider diskProvider, IHttpProvider httpProvider, + IConfigService configService, IEventAggregator eventAggregator, Logger logger) { @@ -49,6 +52,7 @@ namespace NzbDrone.Core.Metadata _episodeService = episodeService; _diskProvider = diskProvider; _httpProvider = httpProvider; + _configService = configService; _eventAggregator = eventAggregator; _logger = logger; } @@ -156,11 +160,13 @@ namespace NzbDrone.Core.Metadata return null; } - _logger.Debug("Writing Series Metadata to: {0}", seriesMetadata.RelativePath); - _diskProvider.WriteAllText(seriesMetadata.RelativePath, seriesMetadata.Contents); + var fullPath = Path.Combine(series.Path, seriesMetadata.RelativePath); + + _logger.Debug("Writing Series Metadata to: {0}", fullPath); + SaveMetadataFile(fullPath, seriesMetadata.Contents); metadata.Hash = hash; - metadata.RelativePath = series.Path.GetRelativePath(seriesMetadata.RelativePath); + metadata.RelativePath = seriesMetadata.RelativePath; return metadata; } @@ -207,7 +213,7 @@ namespace NzbDrone.Core.Metadata } _logger.Debug("Writing Episode Metadata to: {0}", fullPath); - _diskProvider.WriteAllText(fullPath, episodeMetadata.Contents); + SaveMetadataFile(fullPath, episodeMetadata.Contents); metadata.Hash = hash; @@ -326,11 +332,12 @@ namespace NzbDrone.Core.Metadata return result; } - private void DownloadImage(Series series, string url, string path) + private void DownloadImage(Series series, String url, String path) { try { _httpProvider.DownloadFile(url, path); + SetFilePermissions(path); } catch (WebException e) { @@ -341,5 +348,31 @@ namespace NzbDrone.Core.Metadata _logger.ErrorException("Couldn't download image " + url + " for " + series, e); } } + + private void SaveMetadataFile(String path, String contents) + { + _diskProvider.WriteAllText(path, contents); + SetFilePermissions(path); + } + + private void SetFilePermissions(String path) + { + if (!_configService.SetPermissionsLinux) + { + return; + } + + try + { + _diskProvider.SetPermissions(path, _configService.FileChmod, _configService.ChownUser, _configService.ChownGroup); + } + + catch (Exception ex) + { + + _logger.WarnException("Unable to apply permissions to: " + path, ex); + _logger.DebugException(ex.Message, ex); + } + } } }