update setting of file attributes

This commit is contained in:
Luke Pulverenti 2017-05-12 00:54:19 -04:00
parent fa132ada88
commit 1991da85af
7 changed files with 75 additions and 62 deletions

View File

@ -518,6 +518,49 @@ namespace Emby.Common.Implementations.IO
} }
} }
public void SetAttributes(string path, bool isHidden, bool isReadOnly)
{
if (_sharpCifsFileSystem.IsEnabledForPath(path))
{
_sharpCifsFileSystem.SetAttributes(path, isHidden, isReadOnly);
return;
}
var info = GetFileInfo(path);
if (!info.Exists)
{
return;
}
if (info.IsReadOnly == isReadOnly && info.IsHidden == isHidden)
{
return;
}
var attributes = File.GetAttributes(path);
if (isReadOnly)
{
attributes = attributes | FileAttributes.ReadOnly;
}
else
{
attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly);
}
if (isHidden)
{
attributes = attributes | FileAttributes.Hidden;
}
else
{
attributes = RemoveAttribute(attributes, FileAttributes.Hidden);
}
File.SetAttributes(path, attributes);
}
private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
{ {
return attributes & ~attributesToRemove; return attributes & ~attributesToRemove;
@ -690,20 +733,7 @@ namespace Emby.Common.Implementations.IO
return; return;
} }
var fileInfo = GetFileInfo(path); SetAttributes(path, false, false);
if (fileInfo.Exists)
{
if (fileInfo.IsHidden)
{
SetHidden(path, false);
}
if (fileInfo.IsReadOnly)
{
SetReadOnly(path, false);
}
}
File.Delete(path); File.Delete(path);
} }

View File

@ -218,13 +218,9 @@ namespace MediaBrowser.LocalMetadata.Savers
{ {
if (file.IsHidden) if (file.IsHidden)
{ {
FileSystem.SetHidden(path, false);
wasHidden = true; wasHidden = true;
} }
if (file.IsReadOnly) FileSystem.SetAttributes(path, false, false);
{
FileSystem.SetReadOnly(path, false);
}
} }
using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))

View File

@ -313,7 +313,8 @@ namespace MediaBrowser.Model.IO
IEnumerable<string> GetFileSystemEntryPaths(string path, bool recursive = false); IEnumerable<string> GetFileSystemEntryPaths(string path, bool recursive = false);
void SetHidden(string path, bool isHidden); void SetHidden(string path, bool isHidden);
void SetReadOnly(string path, bool isHidden); void SetReadOnly(string path, bool readOnly);
void SetAttributes(string path, bool isHidden, bool readOnly);
char DirectorySeparatorChar { get; } char DirectorySeparatorChar { get; }

View File

@ -166,7 +166,7 @@ namespace MediaBrowser.Providers.Manager
{ {
var currentPath = currentImagePath; var currentPath = currentImagePath;
_logger.Debug("Deleting previous image {0}", currentPath); _logger.Info("Deleting previous image {0}", currentPath);
_libraryMonitor.ReportFileSystemChangeBeginning(currentPath); _libraryMonitor.ReportFileSystemChangeBeginning(currentPath);
@ -236,7 +236,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>Task.</returns> /// <returns>Task.</returns>
private async Task SaveImageToLocation(Stream source, string path, CancellationToken cancellationToken) private async Task SaveImageToLocation(Stream source, string path, CancellationToken cancellationToken)
{ {
_logger.Debug("Saving image to {0}", path); _logger.Info("Saving image to {0}", path);
var parentFolder = _fileSystem.GetDirectoryName(path); var parentFolder = _fileSystem.GetDirectoryName(path);
@ -249,31 +249,16 @@ namespace MediaBrowser.Providers.Manager
_fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path));
// If the file is currently hidden we'll have to remove that or the save will fail _fileSystem.SetAttributes(path, false, false);
var file = _fileSystem.GetFileInfo(path);
// This will fail if the file is hidden using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, FileOpenOptions.Asynchronous))
if (file.Exists)
{ {
if (file.IsHidden) await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
{
_fileSystem.SetHidden(file.FullName, false);
}
if (file.IsReadOnly)
{
_fileSystem.SetReadOnly(path, false);
}
}
using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken)
.ConfigureAwait(false);
} }
if (_config.Configuration.SaveMetadataHidden) if (_config.Configuration.SaveMetadataHidden)
{ {
_fileSystem.SetHidden(file.FullName, true); _fileSystem.SetHidden(path, true);
} }
} }
finally finally

View File

@ -72,8 +72,7 @@ namespace MediaBrowser.Providers.Omdb
var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb); var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb);
var baseUrl = await OmdbProvider.GetOmdbBaseUrl(cancellationToken).ConfigureAwait(false); var urlQuery = "plot=full&r=json";
var url = baseUrl + "/?plot=full&r=json";
if (type == "episode" && episodeSearchInfo != null) if (type == "episode" && episodeSearchInfo != null)
{ {
episodeSearchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out imdbId); episodeSearchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out imdbId);
@ -94,23 +93,23 @@ namespace MediaBrowser.Providers.Omdb
{ {
if (year.HasValue) if (year.HasValue)
{ {
url += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture); urlQuery += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture);
} }
// &s means search and returns a list of results as opposed to t // &s means search and returns a list of results as opposed to t
if (isSearch) if (isSearch)
{ {
url += "&s=" + WebUtility.UrlEncode(name); urlQuery += "&s=" + WebUtility.UrlEncode(name);
} }
else else
{ {
url += "&t=" + WebUtility.UrlEncode(name); urlQuery += "&t=" + WebUtility.UrlEncode(name);
} }
url += "&type=" + type; urlQuery += "&type=" + type;
} }
else else
{ {
url += "&i=" + imdbId; urlQuery += "&i=" + imdbId;
isSearch = false; isSearch = false;
} }
@ -118,14 +117,16 @@ namespace MediaBrowser.Providers.Omdb
{ {
if (searchInfo.IndexNumber.HasValue) if (searchInfo.IndexNumber.HasValue)
{ {
url += string.Format(CultureInfo.InvariantCulture, "&Episode={0}", searchInfo.IndexNumber); urlQuery += string.Format(CultureInfo.InvariantCulture, "&Episode={0}", searchInfo.IndexNumber);
} }
if (searchInfo.ParentIndexNumber.HasValue) if (searchInfo.ParentIndexNumber.HasValue)
{ {
url += string.Format(CultureInfo.InvariantCulture, "&Season={0}", searchInfo.ParentIndexNumber); urlQuery += string.Format(CultureInfo.InvariantCulture, "&Season={0}", searchInfo.ParentIndexNumber);
} }
} }
var url = await OmdbProvider.GetOmdbUrl(urlQuery, cancellationToken).ConfigureAwait(false);
using (var stream = await OmdbProvider.GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) using (var stream = await OmdbProvider.GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false))
{ {
var resultList = new List<SearchResult>(); var resultList = new List<SearchResult>();

View File

@ -265,9 +265,16 @@ namespace MediaBrowser.Providers.Omdb
return false; return false;
} }
public static async Task<string> GetOmdbBaseUrl(CancellationToken cancellationToken) public static async Task<string> GetOmdbUrl(string query, CancellationToken cancellationToken)
{ {
return "https://www.omdbapi.com"; var url = "https://www.omdbapi.com?apikey=fe53f97e";
if (!string.IsNullOrWhiteSpace(query))
{
url += "&" + query;
}
return url;
} }
private async Task<string> EnsureItemInfo(string imdbId, CancellationToken cancellationToken) private async Task<string> EnsureItemInfo(string imdbId, CancellationToken cancellationToken)
@ -292,8 +299,7 @@ namespace MediaBrowser.Providers.Omdb
} }
} }
var baseUrl = await GetOmdbBaseUrl(cancellationToken).ConfigureAwait(false); var url = await GetOmdbUrl(string.Format("i={0}&plot=full&tomatoes=true&r=json", imdbParam), cancellationToken).ConfigureAwait(false);
var url = string.Format(baseUrl + "/?i={0}&plot=full&tomatoes=true&r=json", imdbParam);
using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false))
{ {
@ -327,8 +333,7 @@ namespace MediaBrowser.Providers.Omdb
} }
} }
var baseUrl = await GetOmdbBaseUrl(cancellationToken).ConfigureAwait(false); var url = await GetOmdbUrl(string.Format("i={0}&season={1}&detail=full", imdbParam, seasonId), cancellationToken).ConfigureAwait(false);
var url = string.Format(baseUrl + "/?i={0}&season={1}&detail=full", imdbParam, seasonId);
using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false)) using (var stream = await GetOmdbResponse(_httpClient, url, cancellationToken).ConfigureAwait(false))
{ {

View File

@ -220,14 +220,9 @@ namespace MediaBrowser.XbmcMetadata.Savers
{ {
if (file.IsHidden) if (file.IsHidden)
{ {
FileSystem.SetHidden(path, false);
wasHidden = true; wasHidden = true;
} }
if (file.IsReadOnly) FileSystem.SetAttributes(path, false, false);
{
FileSystem.SetReadOnly(path, false);
}
} }
using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))