update setting of file attributes
This commit is contained in:
parent
fa132ada88
commit
1991da85af
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user