diff --git a/NfoMetadata.Tests/HelperTests.cs b/NfoMetadata.Tests/HelperTests.cs new file mode 100644 index 0000000..68f40e5 --- /dev/null +++ b/NfoMetadata.Tests/HelperTests.cs @@ -0,0 +1,160 @@ +using System.Collections; +using System.Linq; + +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +using NUnit.Framework; + +namespace NfoMetadata.Tests +{ + public class HelperTests + { + private class TestItem : Video + { + } + + [OneTimeSetUp] + public void OneTimeSetup() + { + BaseItem.MediaSourceManager = new TestMediaSourceManager(); + BaseItem.FileSystem = new TestFileSystem(); + } + + [SetUp] + public void Setup() + { + } + + public static IEnumerable SavePathTestCases_MKV + { + get + { + #region MKV (not mix folder) + + yield return + new TestCaseData( + MediaContainer.Mkv.ToString(), + @"C:\Video\Movies\9 (2009)\9 (2009) - BluRay 1080p DTS x264-Group.mkv", + false, + false + ) + .Returns(new[] + { + (@"C:\Video\Movies\9 (2009)", "9 (2009) - BluRay 1080p DTS x264-Group.nfo"), + (@"C:\Video\Movies\9 (2009)", "movie.nfo") + }); + + yield return + new TestCaseData( + MediaContainer.Mkv.ToString(), + @"C:\Video\Movies\9 (2009)\9 (2009) - BluRay 1080p DTS x264-Group.mkv", + false, + true + ) + .Returns(new[] + { + (@"C:\Video\Movies\9 (2009)", "movie.nfo"), + (@"C:\Video\Movies\9 (2009)", "9 (2009) - BluRay 1080p DTS x264-Group.nfo") + }); + + #endregion + + #region MKV (Mixed Folder) + + yield return + new TestCaseData( + MediaContainer.Mkv.ToString(), + @"C:\Video\Movies\9 (2009)\9 (2009) - BluRay 1080p DTS x264-Group.mkv", + true, + false + ) + .Returns(new[] + { + (@"C:\Video\Movies\9 (2009)", "9 (2009) - BluRay 1080p DTS x264-Group.nfo") + }); + + yield return + new TestCaseData( + MediaContainer.Mkv.ToString(), + @"C:\Video\Movies\9 (2009)\9 (2009) - BluRay 1080p DTS x264-Group.mkv", + true, + true + ) + .Returns(new[] + { + (@"C:\Video\Movies\9 (2009)", "9 (2009) - BluRay 1080p DTS x264-Group.nfo") + }); + + #endregion + } + } + + public static IEnumerable SavePathTestCases_DVD + { + get + { + #region Dvd + + yield return + new TestCaseData( + MediaContainer.Dvd.ToString(), + @"C:\Video\Movies\Léon (1994)", + false, + false + ) + .Returns(new[] + { + (@"C:\Video\Movies\Léon (1994)\VIDEO_TS", "VIDEO_TS.nfo"), + (@"C:\Video\Movies\Léon (1994)", "Léon (1994).nfo") + }); + + #endregion + } + } + + public static IEnumerable SavePathTestCases_BluRay + { + get + { + #region BluRay + + yield return + new TestCaseData( + MediaContainer.Bluray.ToString(), + @"E:\Movies\Movies\Alien (1979)", + false, + false + ) + .Returns(new[] + { + (@"E:\Movies\Movies\Alien (1979)\BDMV", "index.nfo"), + (@"E:\Movies\Movies\Alien (1979)", "Alien (1979).nfo") + }); + + #endregion + } + } + + [TestCaseSource(nameof(SavePathTestCases_MKV))] + [TestCaseSource(nameof(SavePathTestCases_DVD))] + [TestCaseSource(nameof(SavePathTestCases_BluRay))] + public (string, string)[] Validate_File_SavePaths(string container, string path, bool isInMixedFolder, bool preferMovieNfo) + { + var itemInfo = new ItemInfo(new TestItem + { + Container = container, + Path = path, + IsInMixedFolder = isInMixedFolder, + }); + + var actual = Helpers + .GetMovieSavePaths(itemInfo, new Configuration.XbmcMetadataOptions { PreferMovieNfo = preferMovieNfo }) + .ToArray(); + + return actual; + } + } +} diff --git a/NfoMetadata.Tests/NfoMetadata.Tests.csproj b/NfoMetadata.Tests/NfoMetadata.Tests.csproj new file mode 100644 index 0000000..65eedaf --- /dev/null +++ b/NfoMetadata.Tests/NfoMetadata.Tests.csproj @@ -0,0 +1,26 @@ + + + + net8.0 + false + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/NfoMetadata.Tests/TestFileSystem.cs b/NfoMetadata.Tests/TestFileSystem.cs new file mode 100644 index 0000000..6d43e26 --- /dev/null +++ b/NfoMetadata.Tests/TestFileSystem.cs @@ -0,0 +1,414 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +using MediaBrowser.Model.IO; + +namespace NfoMetadata.Tests +{ + public class TestFileSystem : IFileSystem + { + public string GetDirectoryName(string path) + { + return Path.GetDirectoryName(path); + } + + #region Not Implemented + + public string DefaultDirectory => throw new NotImplementedException(); + + public IEnumerable CommonFolders => throw new NotImplementedException(); + + public char DirectorySeparatorChar => throw new NotImplementedException(); + + public bool AreEqual(ReadOnlySpan path1, ReadOnlySpan path2) + { + throw new NotImplementedException(); + } + + public bool AreEqual(string path1, string path2) + { + throw new NotImplementedException(); + } + + public bool ContainsSubPath(ReadOnlySpan parentPath, ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public bool ContainsSubPath(string parentPath, string path) + { + throw new NotImplementedException(); + } + + public void CopyFile(string source, string target, bool overwrite) + { + throw new NotImplementedException(); + } + + public void CreateDirectory(string path) + { + throw new NotImplementedException(); + } + + public void DeleteDirectory(string path, bool recursive) + { + throw new NotImplementedException(); + } + + public void DeleteDirectory(string path, bool recursive, bool sendToRecycleBin) + { + throw new NotImplementedException(); + } + + public void DeleteFile(string path) + { + throw new NotImplementedException(); + } + + public void DeleteFile(string path, bool sendToRecycleBin) + { + throw new NotImplementedException(); + } + + public bool DirectoryExists(string path) + { + throw new NotImplementedException(); + } + + public bool DirectoryExists(string path, FileSystemCredentials credentials) + { + throw new NotImplementedException(); + } + + public bool FileExists(string path) + { + throw new NotImplementedException(); + } + + public bool FileExists(string path, FileSystemCredentials credentials) + { + throw new NotImplementedException(); + } + + public DateTimeOffset GetCreationTimeUtc(FileSystemMetadata info) + { + throw new NotImplementedException(); + } + + public DateTimeOffset GetCreationTimeUtc(string path) + { + throw new NotImplementedException(); + } + + public IEnumerable GetDirectories(string path, bool recursive = false) + { + throw new NotImplementedException(); + } + + public FileSystemMetadata GetDirectoryInfo(string path) + { + throw new NotImplementedException(); + } + + public FileSystemMetadata GetDirectoryInfo(string path, FileSystemCredentials credentials) + { + throw new NotImplementedException(); + } + + public ReadOnlySpan GetDirectoryName(ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public IEnumerable GetDirectoryPaths(string path, bool recursive = false) + { + throw new NotImplementedException(); + } + + public DriveInfo GetDriveInfo(string path) + { + throw new NotImplementedException(); + } + + public List GetDrives() + { + throw new NotImplementedException(); + } + + public FileSystemMetadata GetFileInfo(string path) + { + throw new NotImplementedException(); + } + + public string GetFileNameWithoutExtension(FileSystemMetadata info) + { + throw new NotImplementedException(); + } + + public ReadOnlySpan GetFileNameWithoutExtension(ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public string GetFileNameWithoutExtension(string path) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFilePaths(string path, bool recursive = false) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFilePaths(string path, string[] extensions, bool enableCaseSensitiveExtensions, bool recursive) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFiles(string path, bool recursive = false) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFiles(string path, string[] extensions, bool enableCaseSensitiveExtensions, bool recursive) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, bool isAsync = false) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, bool isAsync = false) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions, long preAllocationSize) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions, long preAllocationSize) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, int bufferSize, FileOpenOptions fileOpenOptions) + { + throw new NotImplementedException(); + } + + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, int bufferSize, FileOpenOptions fileOpenOptions, long preAllocationSize) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFileSystemEntries(string path, bool recursive = false, FileSystemCredentials credentials = null) + { + throw new NotImplementedException(); + } + + public IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false) + { + throw new NotImplementedException(); + } + + public FileSystemMetadata GetFileSystemInfo(string path) + { + throw new NotImplementedException(); + } + + public string GetFullPath(string path) + { + throw new NotImplementedException(); + } + + public DateTimeOffset GetLastWriteTimeUtc(FileSystemMetadata info) + { + throw new NotImplementedException(); + } + + public DateTimeOffset GetLastWriteTimeUtc(string path) + { + throw new NotImplementedException(); + } + + public DateTimeOffset GetLastWriteTimeUtc(string path, bool fileExists) + { + throw new NotImplementedException(); + } + + public string GetValidFilename(string filename) + { + throw new NotImplementedException(); + } + + public bool IsPathFile(ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public bool IsRootPath(ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public ReadOnlySpan MakeAbsolutePath(ReadOnlySpan folderPath, ReadOnlySpan filePath) + { + throw new NotImplementedException(); + } + + public void MoveDirectory(string source, string target) + { + throw new NotImplementedException(); + } + + public void MoveFile(string source, string target, bool overwrite) + { + throw new NotImplementedException(); + } + + public void MoveFile(string source, string target) + { + throw new NotImplementedException(); + } + + public List NormalizeDuplicates(FileSystemMetadata[] paths, bool checkSubPaths) + { + throw new NotImplementedException(); + } + + public ReadOnlySpan NormalizePath(ReadOnlySpan path) + { + throw new NotImplementedException(); + } + + public string NormalizePath(string path) + { + throw new NotImplementedException(); + } + + public Stream OpenRead(string path) + { + throw new NotImplementedException(); + } + + public Task ReadAllBytesAsync(string path, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public string[] ReadAllLines(string path) + { + throw new NotImplementedException(); + } + + public Task ReadAllLinesAsync(string path, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public string ReadAllText(string path) + { + throw new NotImplementedException(); + } + + public Task ReadAllTextAsync(string path, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public Task ReadAllTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public void SetAttributes(string path, bool isHidden, bool readOnly) + { + throw new NotImplementedException(); + } + + public void SetExecutable(string path) + { + throw new NotImplementedException(); + } + + public void SetHidden(string path, bool isHidden) + { + throw new NotImplementedException(); + } + + public void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc) + { + throw new NotImplementedException(); + } + + public void SetReadOnly(string path, bool readOnly) + { + throw new NotImplementedException(); + } + + public bool SupportsPathNatively(string path) + { + throw new NotImplementedException(); + } + + public void SwapFiles(string file1, string file2) + { + throw new NotImplementedException(); + } + + public void WriteAllBytes(string path, byte[] bytes) + { + throw new NotImplementedException(); + } + + public Task WriteAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public void WriteAllLines(string path, IEnumerable lines) + { + throw new NotImplementedException(); + } + + public void WriteAllText(string path, string text) + { + throw new NotImplementedException(); + } + + public void WriteAllText(string path, string text, Encoding encoding) + { + throw new NotImplementedException(); + } + + public Task WriteAllTextAsync(string path, string text, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public Task WriteAllTextAsync(string path, string text, Encoding encoding, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/NfoMetadata.Tests/TestMediaSourceManager.cs b/NfoMetadata.Tests/TestMediaSourceManager.cs new file mode 100644 index 0000000..b191cb9 --- /dev/null +++ b/NfoMetadata.Tests/TestMediaSourceManager.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Persistence; +using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.MediaInfo; + +namespace NfoMetadata.Tests +{ + public class TestMediaSourceManager : IMediaSourceManager + { + public MediaProtocol GetPathProtocol(ReadOnlySpan path) + { + return MediaBrowser.Model.MediaInfo.MediaProtocol.File; + } + + #region Not Implemented + + public Task AddMediaInfoWithProbe(MediaSourceInfo mediaSource, bool isAudio, bool addProbeDelay, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task AddMediaInfoWithProbeSafe(MediaSourceInfo mediaSource, bool isAudio, bool addProbeDelay, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public void AddParts(IEnumerable providers) + { + throw new NotImplementedException(); + } + + public Task CloseLiveStream(string id) + { + throw new NotImplementedException(); + } + + public ILiveStream GetLiveStreamInfo(string id) + { + throw new NotImplementedException(); + } + + public ILiveStream GetLiveStreamInfoByUniqueId(string uniqueId) + { + throw new NotImplementedException(); + } + + public MediaSourceInfo GetLiveStreamMediaSource(string id) + { + throw new NotImplementedException(); + } + + public Task GetMediaSource(BaseItem item, string mediaSourceId, string liveStreamId, bool enablePathSubstitution, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public List GetMediaStreams(BaseItem item) + { + throw new NotImplementedException(); + } + + public List GetMediaStreams(long itemId) + { + throw new NotImplementedException(); + } + + public List GetMediaStreams(MediaStreamQuery query) + { + throw new NotImplementedException(); + } + + public Task> GetPlayackMediaSources(BaseItem item, User user, bool allowMediaProbe, bool enablePathSubstitution, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task> GetPlayackMediaSources(BaseItem item, User user, bool allowMediaProbe, string probeMediaSourceId, bool enablePathSubstitution, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task> GetPlayackMediaSources(BaseItem item, User user, bool allowMediaProbe, string probeMediaSourceId, bool enablePathSubstitution, DeviceProfile deviceProfile, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public List GetStaticMediaSources(BaseItem item, bool enablePathSubstitution, DeviceProfile deviceProfile, User user = null) + { + throw new NotImplementedException(); + } + + public List GetStaticMediaSources(BaseItem item, bool enableAlternateMediaSources, bool enablePathSubstitution, LibraryOptions libraryOptions, DeviceProfile deviceProfile, User user = null) + { + throw new NotImplementedException(); + } + + public void NormalizeMediaStreams(List streams) + { + throw new NotImplementedException(); + } + + public Task OpenLiveStream(LiveStreamRequest request, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task> OpenLiveStreamInternal(LiveStreamRequest request, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public void SetDefaultAudioAndSubtitleStreamIndexes(BaseItem item, MediaSourceInfo[] sources, User user) + { + throw new NotImplementedException(); + } + + public bool SupportsDirectStream(ReadOnlySpan path, MediaProtocol protocol) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/NfoMetadata.sln b/NfoMetadata.sln index b3aade6..7479f6e 100644 --- a/NfoMetadata.sln +++ b/NfoMetadata.sln @@ -1,9 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2050 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NfoMetadata", "NfoMetadata\NfoMetadata.csproj", "{1568FFA3-51D7-4AE2-9047-75D73297B006}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NfoMetadata", "NfoMetadata\NfoMetadata.csproj", "{1568FFA3-51D7-4AE2-9047-75D73297B006}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NfoMetadata.Tests", "NfoMetadata.Tests\NfoMetadata.Tests.csproj", "{0ECBCBF5-FFD8-4EC2-A9BC-22D43AE4ECDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,6 +17,8 @@ Global {1568FFA3-51D7-4AE2-9047-75D73297B006}.Debug|Any CPU.Build.0 = Debug|Any CPU {1568FFA3-51D7-4AE2-9047-75D73297B006}.Release|Any CPU.ActiveCfg = Release|Any CPU {1568FFA3-51D7-4AE2-9047-75D73297B006}.Release|Any CPU.Build.0 = Release|Any CPU + {0ECBCBF5-FFD8-4EC2-A9BC-22D43AE4ECDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0ECBCBF5-FFD8-4EC2-A9BC-22D43AE4ECDE}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/NfoMetadata/Configuration/XbmcMetadataOptions.cs b/NfoMetadata/Configuration/XbmcMetadataOptions.cs index 2aead34..489a948 100644 --- a/NfoMetadata/Configuration/XbmcMetadataOptions.cs +++ b/NfoMetadata/Configuration/XbmcMetadataOptions.cs @@ -8,5 +8,7 @@ public class XbmcMetadataOptions public string ReleaseDateFormat { get; set; } = "yyyy-MM-dd"; public bool SaveImagePathsInNfoFiles { get; set; } + + public bool PreferMovieNfo { get; set; } } } diff --git a/NfoMetadata/Configuration/nfo.html b/NfoMetadata/Configuration/nfo.html index f792e65..1d9ded0 100644 --- a/NfoMetadata/Configuration/nfo.html +++ b/NfoMetadata/Configuration/nfo.html @@ -31,6 +31,13 @@
${LabelKodiMetadataEnableExtraThumbsHelp}
+
+ +
${LabelKodiMetadataPreferMovieNfoHelp}
+
diff --git a/NfoMetadata/Configuration/nfo.js b/NfoMetadata/Configuration/nfo.js index 7da4fe9..fb10ecf 100644 --- a/NfoMetadata/Configuration/nfo.js +++ b/NfoMetadata/Configuration/nfo.js @@ -18,6 +18,7 @@ page.querySelector('.chkSaveImagePaths').checked = config.SaveImagePathsInNfoFiles; page.querySelector('.chkEnableExtraThumbs').checked = config.EnableExtraThumbsDuplication; + page.querySelector('.chkPreferMovieNfo').checked = config.PreferMovieNfo; loading.hide(); }); @@ -38,6 +39,7 @@ config.SaveImagePathsInNfoFiles = form.querySelector('.chkSaveImagePaths').checked; config.EnableExtraThumbsDuplication = form.querySelector('.chkEnableExtraThumbs').checked; + config.PreferMovieNfo = form.querySelector('.chkPreferMovieNfo').checked; ApiClient.updateNamedConfiguration("xbmcmetadata", config).then(Dashboard.processServerConfigurationUpdateResult); }); diff --git a/NfoMetadata/Helpers.cs b/NfoMetadata/Helpers.cs index 9f75818..5a3d140 100644 --- a/NfoMetadata/Helpers.cs +++ b/NfoMetadata/Helpers.cs @@ -1,38 +1,32 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using NfoMetadata.Savers; +using System; +using System.Collections.Generic; using System.IO; -using System.Threading; -using System.Threading.Tasks; +using System.Linq; + +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; + +using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; -using MediaBrowser.Model.Configuration; -using System; + +using NfoMetadata.Configuration; namespace NfoMetadata { public static class Helpers { - public static FileSystemMetadata GetFileInfo(IDirectoryService directoryService, string directory, string filename) + public static FileSystemMetadata GetFileInfo(IFileSystem fileSystem, string directory, string filename) { if (directory == null || filename == null) - { return null; - } try { - var entries = directoryService.GetFileSystemEntries(directory); - - foreach (var file in entries) - { - if (!file.IsDirectory) - { - if (string.Equals(filename, file.Name, StringComparison.OrdinalIgnoreCase)) - { - return file; - } - } - } + var item = fileSystem + .GetFileSystemEntries(directory) + .FirstOrDefault(file => !file.IsDirectory && string.Equals(filename, file.Name, StringComparison.OrdinalIgnoreCase)); + + return item; } catch (DirectoryNotFoundException) { @@ -41,5 +35,38 @@ public static FileSystemMetadata GetFileInfo(IDirectoryService directoryService, return null; } + + public static IEnumerable<(string Directory, string FileName)> GetMovieSavePaths(ItemInfo item, XbmcMetadataOptions options) + { + var container = item.Container.AsSpan(); + var path = item.ContainingFolderPath; + + if (container.Equals(MediaContainer.Dvd.Span, StringComparison.OrdinalIgnoreCase)) + { + yield return (Path.Combine(path, "VIDEO_TS"), "VIDEO_TS.nfo"); + yield return (path, Path.GetFileName(path) + ".nfo"); + yield break; + } + + if (container.Equals(MediaContainer.Bluray.Span, StringComparison.OrdinalIgnoreCase)) + { + yield return (Path.Combine(path, "BDMV"), "index.nfo"); + yield return (path, Path.GetFileName(path) + ".nfo"); + yield break; + } + + path = item.Path; + + if (string.IsNullOrEmpty(path) || BaseItem.MediaSourceManager.GetPathProtocol(path.AsSpan()) != MediaBrowser.Model.MediaInfo.MediaProtocol.File) + yield break; + + if (options.PreferMovieNfo && !item.IsInMixedFolder) + yield return (item.ContainingFolderPath, "movie.nfo"); + + yield return (item.ContainingFolderPath, Path.GetFileNameWithoutExtension(path) + ".nfo"); + + if (!options.PreferMovieNfo && !item.IsInMixedFolder) + yield return (item.ContainingFolderPath, "movie.nfo"); + } } } diff --git a/NfoMetadata/NfoMetadata.csproj b/NfoMetadata/NfoMetadata.csproj index 474816a..d523f8f 100644 --- a/NfoMetadata/NfoMetadata.csproj +++ b/NfoMetadata/NfoMetadata.csproj @@ -95,8 +95,12 @@ - + + + + + \ No newline at end of file diff --git a/NfoMetadata/Providers/BaseNfoProvider.cs b/NfoMetadata/Providers/BaseNfoProvider.cs index 700061f..0472c64 100644 --- a/NfoMetadata/Providers/BaseNfoProvider.cs +++ b/NfoMetadata/Providers/BaseNfoProvider.cs @@ -19,7 +19,7 @@ public async Task> GetMetadata(ItemInfo info, LibraryOptions l { var result = new MetadataResult(); - var file = GetXmlFile(info, libraryOptions, directoryService); + var file = GetXmlFile(info, libraryOptions); if (file == null) { @@ -51,7 +51,7 @@ public async Task>> GetMultipleMetadata(ItemInfo info, Li { var result = new List>(); - var file = GetXmlFile(info, libraryOptions, directoryService); + var file = GetXmlFile(info, libraryOptions); if (file == null) { @@ -88,11 +88,11 @@ protected BaseNfoProvider(IFileSystem fileSystem) FileSystem = fileSystem; } - protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService); + protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions); public bool HasChanged(BaseItem item, LibraryOptions libraryOptions, IDirectoryService directoryService) { - var file = GetXmlFile(new ItemInfo(item), libraryOptions, directoryService); + var file = GetXmlFile(new ItemInfo(item), libraryOptions); if (file == null) { diff --git a/NfoMetadata/Providers/BaseVideoNfoProvider.cs b/NfoMetadata/Providers/BaseVideoNfoProvider.cs index 7fc1ae1..3f98a0e 100644 --- a/NfoMetadata/Providers/BaseVideoNfoProvider.cs +++ b/NfoMetadata/Providers/BaseVideoNfoProvider.cs @@ -1,17 +1,20 @@ -using MediaBrowser.Common.Configuration; +using System.Linq; + +using System.Threading; +using System.Threading.Tasks; + +using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Logging; -using NfoMetadata.Parsers; -using NfoMetadata.Savers; -using System.Linq; -using System.Threading; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; -using System.Threading.Tasks; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Configuration; +using NfoMetadata.Parsers; +using NfoMetadata.Configuration; + namespace NfoMetadata.Providers { public class BaseVideoNfoProvider : BaseNfoProvider @@ -35,6 +38,7 @@ protected override async Task Fetch(MetadataResult result, string path, Cance { Item = result.Item }; + await new MovieNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(tmpItem, path, cancellationToken).ConfigureAwait(false); result.Item = (T)tmpItem.Item; @@ -46,9 +50,14 @@ protected override async Task Fetch(MetadataResult result, string path, Cance } } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { - return MovieNfoSaver.GetMovieNfo(info, directoryService); + var options = _config.GetNfoConfiguration(); + var file = Helpers.GetMovieSavePaths(info, options) + .Select(pathInfo => Helpers.GetFileInfo(FileSystem, pathInfo.Directory, pathInfo.FileName)) + .FirstOrDefault(f => f != null); + + return file; } } } \ No newline at end of file diff --git a/NfoMetadata/Providers/CollectionNfoProvider.cs b/NfoMetadata/Providers/CollectionNfoProvider.cs index ac7a974..faa654a 100644 --- a/NfoMetadata/Providers/CollectionNfoProvider.cs +++ b/NfoMetadata/Providers/CollectionNfoProvider.cs @@ -1,15 +1,12 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Configuration; -using System.IO; using NfoMetadata.Parsers; namespace NfoMetadata.Providers @@ -33,9 +30,9 @@ protected override Task Fetch(MetadataResult result, string path, Cancel return new CollectionNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { - return Helpers.GetFileInfo(directoryService, info.GetInternalMetadataPath(), "collection.nfo"); + return Helpers.GetFileInfo(FileSystem, info.GetInternalMetadataPath(), "collection.nfo"); } } } diff --git a/NfoMetadata/Providers/EpisodeNfoProvider.cs b/NfoMetadata/Providers/EpisodeNfoProvider.cs index 572ef6f..a17a290 100644 --- a/NfoMetadata/Providers/EpisodeNfoProvider.cs +++ b/NfoMetadata/Providers/EpisodeNfoProvider.cs @@ -38,7 +38,7 @@ protected override Task Fetch(MetadataResult result, string path, Cance return new EpisodeNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { var path = info.Path; @@ -49,7 +49,7 @@ protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions l path = Path.ChangeExtension(path, ".nfo"); - return directoryService.GetFile(path); + return FileSystem.GetFileInfo(path); } } } diff --git a/NfoMetadata/Providers/GameNfoProvider.cs b/NfoMetadata/Providers/GameNfoProvider.cs index b5b6522..d154332 100644 --- a/NfoMetadata/Providers/GameNfoProvider.cs +++ b/NfoMetadata/Providers/GameNfoProvider.cs @@ -1,15 +1,15 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Configuration; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; + using NfoMetadata.Parsers; + using System; -using System.Collections.Generic; using System.IO; -using System.Text; using System.Threading.Tasks; using System.Threading; @@ -34,7 +34,7 @@ protected override Task Fetch(MetadataResult result, string path, Cancella return new GameNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { var path = info.Path; @@ -45,7 +45,7 @@ protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions l path = Path.ChangeExtension(path, ".nfo"); - return directoryService.GetFile(path); + return FileSystem.GetFileInfo(path); } } } diff --git a/NfoMetadata/Providers/PersonNfoProvider.cs b/NfoMetadata/Providers/PersonNfoProvider.cs index d233252..5724176 100644 --- a/NfoMetadata/Providers/PersonNfoProvider.cs +++ b/NfoMetadata/Providers/PersonNfoProvider.cs @@ -1,15 +1,12 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Configuration; -using System.IO; using NfoMetadata.Parsers; namespace NfoMetadata.Providers @@ -33,9 +30,9 @@ protected override Task Fetch(MetadataResult result, string path, Cancel return new BaseNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { - return Helpers.GetFileInfo(directoryService, info.GetInternalMetadataPath(), "person.nfo"); + return Helpers.GetFileInfo(FileSystem, info.GetInternalMetadataPath(), "person.nfo"); } } } diff --git a/NfoMetadata/Providers/SeasonNfoProvider.cs b/NfoMetadata/Providers/SeasonNfoProvider.cs index 17849de..4e28eb5 100644 --- a/NfoMetadata/Providers/SeasonNfoProvider.cs +++ b/NfoMetadata/Providers/SeasonNfoProvider.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; using NfoMetadata.Parsers; -using System.IO; using System.Threading; using MediaBrowser.Model.IO; using System.Threading.Tasks; @@ -32,7 +31,7 @@ protected override Task Fetch(MetadataResult result, string path, Cancel return new SeasonNfoParser(_logger, _config, _providerManager, FileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { var path = info.Path; @@ -41,7 +40,7 @@ protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions l return null; } - return Helpers.GetFileInfo(directoryService, path, "season.nfo"); + return Helpers.GetFileInfo(FileSystem, path, "season.nfo"); } } } diff --git a/NfoMetadata/Providers/SeriesNfoProvider.cs b/NfoMetadata/Providers/SeriesNfoProvider.cs index 88bb49e..b32d885 100644 --- a/NfoMetadata/Providers/SeriesNfoProvider.cs +++ b/NfoMetadata/Providers/SeriesNfoProvider.cs @@ -32,9 +32,9 @@ protected override Task Fetch(MetadataResult result, string path, Cancel return new SeriesNfoParser(_logger, _config, _providerManager, _fileSystem).Fetch(result, path, cancellationToken); } - protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions, IDirectoryService directoryService) + protected override FileSystemMetadata GetXmlFile(ItemInfo info, LibraryOptions libraryOptions) { - return Helpers.GetFileInfo(directoryService, info.Path, "tvshow.nfo"); + return Helpers.GetFileInfo(FileSystem, info.Path, "tvshow.nfo"); } } } diff --git a/NfoMetadata/Savers/BaseNfoSaver.cs b/NfoMetadata/Savers/BaseNfoSaver.cs index 956c800..c068058 100644 --- a/NfoMetadata/Savers/BaseNfoSaver.cs +++ b/NfoMetadata/Savers/BaseNfoSaver.cs @@ -1,15 +1,4 @@ -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; -using NfoMetadata.Configuration; -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -19,8 +8,20 @@ using System.Threading; using System.Threading.Tasks; using System.Xml; + +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; + +using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; +using NfoMetadata.Configuration; + namespace NfoMetadata.Savers { public abstract class BaseNfoSaver : IMetadataSaver @@ -1043,7 +1044,7 @@ private void AddCustomTags(string path, List xmlTagsUsed, XmlWriter writ { reader.MoveToContent(); } - catch (Exception ex) + catch /*(Exception ex)*/ { //logger.ErrorException("Error reading existing xml tags from {0}.", ex, path); return; diff --git a/NfoMetadata/Savers/MovieNfoSaver.cs b/NfoMetadata/Savers/MovieNfoSaver.cs index d82cbba..87e31aa 100644 --- a/NfoMetadata/Savers/MovieNfoSaver.cs +++ b/NfoMetadata/Savers/MovieNfoSaver.cs @@ -1,19 +1,18 @@ -using MediaBrowser.Controller.Configuration; +using System.Xml; +using System.Linq; +using System.Collections.Generic; + +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; -using System.Collections.Generic; -using System.IO; -using System; -using System.Xml; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Configuration; -using NfoMetadata.Providers; + using NfoMetadata.Configuration; namespace NfoMetadata.Savers @@ -26,136 +25,36 @@ public MovieNfoSaver(IFileSystem fileSystem, ILibraryMonitor libraryMonitor, ISe protected override string GetSavePath(BaseItem item, LibraryOptions libraryOptions) { - var paths = GetMovieSavePaths(new ItemInfo(item), FileSystem); - return paths.Count == 0 ? null : paths[0]; - } - - public static FileSystemMetadata GetMovieNfo(ItemInfo item, IDirectoryService directoryService) - { - var container = item.Container.AsSpan(); - - var isDvd = container.Equals(MediaContainer.Dvd.Span, StringComparison.OrdinalIgnoreCase); - var isBluray = container.Equals(MediaContainer.Bluray.Span, StringComparison.OrdinalIgnoreCase); - - if (isDvd) - { - var path = item.ContainingFolderPath; - - var file = Helpers.GetFileInfo(directoryService, Path.Combine(path, "VIDEO_TS"), "VIDEO_TS.nfo"); - if (file != null) - { - return file; - } - } - else if (isBluray) - { - var path = item.ContainingFolderPath; - - var file = Helpers.GetFileInfo(directoryService, Path.Combine(path, "BDMV"), "index.nfo"); - if (file != null) - { - return file; - } - } + var options = ConfigurationManager.GetNfoConfiguration(); + var paths = Helpers.GetMovieSavePaths(new ItemInfo(item), options); - if (isDvd || isBluray) + // Attempt to save back to whatever file we found, without considering the order. If we do not + // find a file, then we use the preferred location. + using (var enumerator = paths.GetEnumerator()) { - var path = item.ContainingFolderPath; - - var file = Helpers.GetFileInfo(directoryService, path, Path.GetFileName(path) + ".nfo"); - if (file != null) - { - return file; - } - } - else - { - var path = item.Path; - - if (string.IsNullOrEmpty(path) || BaseItem.MediaSourceManager.GetPathProtocol(path.AsSpan()) != MediaBrowser.Model.MediaInfo.MediaProtocol.File) - { - return null; - } - - // http://kodi.wiki/view/NFO_files/Movies - // movie.nfo will override all and any .nfo files in the same folder as the media files if you use the "Use foldernames for lookups" setting. If you don't, then moviename.nfo is used - //if (!item.IsInMixedFolder && item.ItemType == typeof(Movie)) - //{ - // list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo")); - //} - - var file = directoryService.GetFile(Path.ChangeExtension(path, ".nfo")); - if (file != null) + if (enumerator.MoveNext()) { - return file; - } + // Hold on to the first, this will be our fallback if we do not find a file + var first = enumerator.Current; - if (!item.IsInMixedFolder) - { - file = Helpers.GetFileInfo(directoryService, item.ContainingFolderPath, "movie.nfo"); - if (file != null) + do { - return file; - } - } - } - - return null; - } - - public static List GetMovieSavePaths(ItemInfo item, IFileSystem fileSystem) - { - var list = new List(); - - var container = item.Container.AsSpan(); - - var isDvd = container.Equals(MediaContainer.Dvd.Span, StringComparison.OrdinalIgnoreCase); - var isBluray = container.Equals(MediaContainer.Bluray.Span, StringComparison.OrdinalIgnoreCase); - - if (isDvd) - { - var path = item.ContainingFolderPath; - - list.Add(Path.Combine(path, "VIDEO_TS", "VIDEO_TS.nfo")); - } - else if (isBluray) - { - var path = item.ContainingFolderPath; - - list.Add(Path.Combine(path, "BDMV", "index.nfo")); - } - - if (isDvd || isBluray) - { - var path = item.ContainingFolderPath; - - list.Add(Path.Combine(path, Path.GetFileName(path) + ".nfo")); - } - else - { - var path = item.Path; + var current = enumerator.Current; + var file = Helpers.GetFileInfo(FileSystem, current.Directory, current.FileName); - if (string.IsNullOrEmpty(path) || BaseItem.MediaSourceManager.GetPathProtocol(path.AsSpan()) != MediaBrowser.Model.MediaInfo.MediaProtocol.File) - { - return list; - } - - // http://kodi.wiki/view/NFO_files/Movies - // movie.nfo will override all and any .nfo files in the same folder as the media files if you use the "Use foldernames for lookups" setting. If you don't, then moviename.nfo is used - //if (!item.IsInMixedFolder && item.ItemType == typeof(Movie)) - //{ - // list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo")); - //} - - list.Add(Path.ChangeExtension(path, ".nfo")); + if (file != null) + return file.FullName; + } + while (enumerator.MoveNext()); - if (!item.IsInMixedFolder) - { - list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo")); + // If we did not find a file, then return the first path + return System.IO.Path.Combine(first.Directory, first.FileName); } } - return list; + // This is not expected to happen, but if it does, throw an exception. It means that GetMovieSavePaths + // has a serious problem. + throw new System.Exception("Could not determine save path"); } protected override string GetRootElementName(BaseItem item) diff --git a/NfoMetadata/strings/ar.json b/NfoMetadata/strings/ar.json index 8a341ac..074d1a2 100644 --- a/NfoMetadata/strings/ar.json +++ b/NfoMetadata/strings/ar.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u062a\u0641\u0639\u064a\u0644 \u0625\u0628\u062f\u0627\u0644 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0641\u0639\u0644 \u0625\u0628\u062f\u0627\u0644 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0645\u0633\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u0631 \u0645\u0633\u062a\u062e\u062f\u0645\u0627\u064b \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0625\u0628\u062f\u0627\u0644 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0627\u0644\u062e\u0627\u062f\u0645.", "LabelKodiMetadataEnableExtraThumbs": "\u0625\u0646\u0633\u062e extrafanart \u0625\u0644\u0649 extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u0639\u0646\u062f \u0625\u0646\u0632\u0627\u0644 \u0627\u0644\u0635\u0648\u0631 \u0628\u0625\u0645\u0643\u0627\u0646 \u062d\u0641\u0638\u0647\u0627 \u0625\u0644\u0649 extrafanart \u0648 extrathumbs \u0644\u062a\u0643\u0648\u0646 \u0645\u062a\u0648\u0627\u0641\u0642\u0629 \u0645\u0639 \u0645\u0638\u0627\u0647\u0631 Kodi \u0628\u0623\u0642\u0635\u0649 \u062d\u062f." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u0639\u0646\u062f \u0625\u0646\u0632\u0627\u0644 \u0627\u0644\u0635\u0648\u0631 \u0628\u0625\u0645\u0643\u0627\u0646 \u062d\u0641\u0638\u0647\u0627 \u0625\u0644\u0649 extrafanart \u0648 extrathumbs \u0644\u062a\u0643\u0648\u0646 \u0645\u062a\u0648\u0627\u0641\u0642\u0629 \u0645\u0639 \u0645\u0638\u0627\u0647\u0631 Kodi \u0628\u0623\u0642\u0635\u0649 \u062d\u062f.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/bg-BG.json b/NfoMetadata/strings/bg-BG.json index a24aa48..5015027 100644 --- a/NfoMetadata/strings/bg-BG.json +++ b/NfoMetadata/strings/bg-BG.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this." + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/ca.json b/NfoMetadata/strings/ca.json index 8e8ddff..1bb3838 100644 --- a/NfoMetadata/strings/ca.json +++ b/NfoMetadata/strings/ca.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Habilita la substituci\u00f3 de directoris", "LabelKodiMetadataEnablePathSubstitutionHelp": "Habilita la substituci\u00f3 de directoris emprant les opcions de substituci\u00f3 de directoris del servidor.", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this." + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/cs.json b/NfoMetadata/strings/cs.json index 69138a9..ae5d3ac 100644 --- a/NfoMetadata/strings/cs.json +++ b/NfoMetadata/strings/cs.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Povolit nahrazen\u00ed adres\u00e1\u0159ov\u00fdch cest", "LabelKodiMetadataEnablePathSubstitutionHelp": "Umo\u017en\u00ed nahrazen\u00ed cesty k obr\u00e1zk\u016fm pomoc\u00ed nastaven\u00e9 cesty serveru pro nahrazen\u00ed cest.", "LabelKodiMetadataEnableExtraThumbs": "Kop\u00edrovat extrafanart do extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Sta\u017een\u00e9 obr\u00e1zky mohou b\u00fdt ulo\u017eeny do obou extrafanart a extrathumbs. Pro zaji\u0161t\u011bn\u00ed maxim\u00e1ln\u00ed kompatibility se vzhledem Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "Sta\u017een\u00e9 obr\u00e1zky mohou b\u00fdt ulo\u017eeny do obou extrafanart a extrathumbs. Pro zaji\u0161t\u011bn\u00ed maxim\u00e1ln\u00ed kompatibility se vzhledem Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/da.json b/NfoMetadata/strings/da.json index 596354e..5692a5b 100644 --- a/NfoMetadata/strings/da.json +++ b/NfoMetadata/strings/da.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Aktiver stisubstitution", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiverer stisubstitution for billedstier med serverens stisubstitutionsindstillinger.", "LabelKodiMetadataEnableExtraThumbs": "kopier extrafanart til extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ved hentning af billeder, kan de gemmes i b\u00e5de extrafanart og extrathumbs. Dette giver maksimal Kodi skin kompatibilitet." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ved hentning af billeder, kan de gemmes i b\u00e5de extrafanart og extrathumbs. Dette giver maksimal Kodi skin kompatibilitet.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/de.json b/NfoMetadata/strings/de.json index 1b9f75a..8f5b0e8 100644 --- a/NfoMetadata/strings/de.json +++ b/NfoMetadata/strings/de.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Pfadersetzung aktivieren", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiviert die Pfadersetzung f\u00fcr Bildpfade durch Nutzung der Pfadersetzungseinstellungen des Servers", "LabelKodiMetadataEnableExtraThumbs": "Extrafanart in Extrathumbs kopieren", - "LabelKodiMetadataEnableExtraThumbsHelp": "Beim Herunterladen von Bildern k\u00f6nnen diese bei Bedarf sowohl in extrafanart als auch in extrathumbs gespeichert werden. Dies wird nur empfohlen, wenn du andere Software verwendest, die dies erfordert." + "LabelKodiMetadataEnableExtraThumbsHelp": "Beim Herunterladen von Bildern k\u00f6nnen diese bei Bedarf sowohl in extrafanart als auch in extrathumbs gespeichert werden. Dies wird nur empfohlen, wenn du andere Software verwendest, die dies erfordert.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/el.json b/NfoMetadata/strings/el.json index b70f999..4c448d7 100644 --- a/NfoMetadata/strings/el.json +++ b/NfoMetadata/strings/el.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c5\u03c0\u03bf\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae\u03c2", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0395\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ce\u03bd \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ce\u03bd\u03c4\u03b1\u03c2 \u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c5\u03c0\u03bf\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae\u03c2 \u03c4\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae.", "LabelKodiMetadataEnableExtraThumbs": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae extrafanart \u03c3\u03b5 extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u038c\u03c4\u03b1\u03bd \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03b6\u03b5\u03c4\u03b5 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bd \u03bd\u03b1 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03bf\u03cd\u03bd \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 extrafanart \u03b1\u03bb\u03bb\u03ac \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 extrathumbs \u03b3\u03b9\u03b1 \u03bc\u03ad\u03b3\u03b9\u03c3\u03c4\u03b7 \u03c3\u03c5\u03bc\u03b2\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03bc\u03b5 \u03c4\u03bf \u03b8\u03ad\u03bc\u03b1 \u03c4\u03bf\u03c5 Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u038c\u03c4\u03b1\u03bd \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03b6\u03b5\u03c4\u03b5 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bd \u03bd\u03b1 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03bf\u03cd\u03bd \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 extrafanart \u03b1\u03bb\u03bb\u03ac \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 extrathumbs \u03b3\u03b9\u03b1 \u03bc\u03ad\u03b3\u03b9\u03c3\u03c4\u03b7 \u03c3\u03c5\u03bc\u03b2\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03bc\u03b5 \u03c4\u03bf \u03b8\u03ad\u03bc\u03b1 \u03c4\u03bf\u03c5 Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/en-GB.json b/NfoMetadata/strings/en-GB.json index 08b922a..57aeaac 100644 --- a/NfoMetadata/strings/en-GB.json +++ b/NfoMetadata/strings/en-GB.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility." + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/en-US.json b/NfoMetadata/strings/en-US.json index 714b44f..e9245d7 100644 --- a/NfoMetadata/strings/en-US.json +++ b/NfoMetadata/strings/en-US.json @@ -1,13 +1,15 @@ -{ - "HeaderKodiMetadataHelp": "To enable or disable Nfo metadata files, edit a library in Emby library setup and locate the metadata savers section. Changes to metadata settings will only apply to new content added to your library. To apply the changes to existing titles, you'll need to refresh their metadata manually.", - "LabelKodiMetadataUser": "Save user watch data to nfo's for", - "LabelKodiMetadataUserHelp": "Enable this to save watch data to Nfo files for other applications to utilize.", - "LabelKodiMetadataDateFormat": "Release date format", - "LabelKodiMetadataDateFormatHelp": "All dates within nfo's will be read and written to using this format.", - "LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files", - "LabelKodiMetadataSaveImagePathsHelp": "This is only recommended if you have other software using the nfo files that requires this.", - "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", - "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this." -} +{ + "HeaderKodiMetadataHelp": "To enable or disable Nfo metadata files, edit a library in Emby library setup and locate the metadata savers section. Changes to metadata settings will only apply to new content added to your library. To apply the changes to existing titles, you'll need to refresh their metadata manually.", + "LabelKodiMetadataUser": "Save user watch data to nfo's for", + "LabelKodiMetadataUserHelp": "Enable this to save watch data to Nfo files for other applications to utilize.", + "LabelKodiMetadataDateFormat": "Release date format", + "LabelKodiMetadataDateFormatHelp": "All dates within nfo's will be read and written to using this format.", + "LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files", + "LabelKodiMetadataSaveImagePathsHelp": "This is only recommended if you have other software using the nfo files that requires this.", + "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", + "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" +} \ No newline at end of file diff --git a/NfoMetadata/strings/es-MX.json b/NfoMetadata/strings/es-MX.json index 139fc58..cf7b2c3 100644 --- a/NfoMetadata/strings/es-MX.json +++ b/NfoMetadata/strings/es-MX.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Habilitar sustituci\u00f3n de ruta", "LabelKodiMetadataEnablePathSubstitutionHelp": "Habilita la sustituci\u00f3n de rutas de im\u00e1genes usando la configuraci\u00f3n de sustituci\u00f3n de rutas del servidor.", "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart en extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes pueden ser almacenadas tanto en extrafanart como extrathumb si es necesario. Solo se recomienda si tiene otro alg\u00fan software que lo requiera." + "LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes pueden ser almacenadas tanto en extrafanart como extrathumb si es necesario. Solo se recomienda si tiene otro alg\u00fan software que lo requiera.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/es.json b/NfoMetadata/strings/es.json index fd45c70..b58cabf 100644 --- a/NfoMetadata/strings/es.json +++ b/NfoMetadata/strings/es.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Habilitar rutas de sustituci\u00f3n", "LabelKodiMetadataEnablePathSubstitutionHelp": "Permite la sustituci\u00f3n de las rutas de im\u00e1genes utilizando la configuraci\u00f3n de rutas de sustituci\u00f3n en las opciones del servidor.", "LabelKodiMetadataEnableExtraThumbs": "Copiar fanart extra en vistas previas extras", - "LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descarguen im\u00e1genes pueden ser guardadas tanto en extrafanart como en extrathumbs para maximizar la compatibilidad con los temas de Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descarguen im\u00e1genes pueden ser guardadas tanto en extrafanart como en extrathumbs para maximizar la compatibilidad con los temas de Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/et-EE.json b/NfoMetadata/strings/et-EE.json index b45d3e5..0a3bccc 100644 --- a/NfoMetadata/strings/et-EE.json +++ b/NfoMetadata/strings/et-EE.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Luba varuasukoht", "LabelKodiMetadataEnablePathSubstitutionHelp": "Lubab piltide tagavara asukoha kasutades serveri varuasukoha s\u00e4tteid.", "LabelKodiMetadataEnableExtraThumbs": "Kopeeri extrafanart extrathumbs-faili", - "LabelKodiMetadataEnableExtraThumbsHelp": "Piltide allalaadimisel saab neid Kodi kujunduse \u00fchilduvuse huvides salvestada nii extrafanart- kui extrathumbs-failidena" + "LabelKodiMetadataEnableExtraThumbsHelp": "Piltide allalaadimisel saab neid Kodi kujunduse \u00fchilduvuse huvides salvestada nii extrafanart- kui extrathumbs-failidena", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/fa.json b/NfoMetadata/strings/fa.json index b9a4835..5d48267 100644 --- a/NfoMetadata/strings/fa.json +++ b/NfoMetadata/strings/fa.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u062a\u0639\u0648\u06cc\u0636 \u0645\u0633\u06cc\u0631 \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062a\u0639\u0648\u06cc\u0636 \u0645\u0633\u06cc\u0631 \u0633\u0631\u0648\u0631 \u060c \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0645\u0633\u06cc\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0631\u0627 \u0641\u0639\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f.", "LabelKodiMetadataEnableExtraThumbs": "extrafanart \u0631\u0627 \u062f\u0631 \u0645\u0648\u0627\u0631\u062f \u0627\u0636\u0627\u0641\u06cc \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u060c \u0628\u0631\u0627\u06cc \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0627 \u067e\u0648\u0633\u062a Kodi \u060c \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a extrafanart \u0648 extrathumbs \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f.\n" + "LabelKodiMetadataEnableExtraThumbsHelp": "\u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u060c \u0628\u0631\u0627\u06cc \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0627 \u067e\u0648\u0633\u062a Kodi \u060c \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a extrafanart \u0648 extrathumbs \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f.\n", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/fi.json b/NfoMetadata/strings/fi.json index feb1376..7344669 100644 --- a/NfoMetadata/strings/fi.json +++ b/NfoMetadata/strings/fi.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "K\u00e4yt\u00e4 polun korvausta", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktivoi kuvien polkujen korvauksen k\u00e4ytt\u00e4en palvelimen polun korvaus asetuksia.", "LabelKodiMetadataEnableExtraThumbs": "Kopioi extrafanart (tausta) -kuvat extrathumbs (pienkuvat) -kansioon", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ladatut kuvat voidaan tarvittaessa tallentaa sek\u00e4 extrafanart (taustat), ett\u00e4 extrathumbs (pienkuvat) -kansioihin. T\u00e4m\u00e4 on suositeltavaa vain silloin, kun ei k\u00e4ytet\u00e4 muita t\u00e4t\u00e4 tarvitsevia sovelluksia." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ladatut kuvat voidaan tarvittaessa tallentaa sek\u00e4 extrafanart (taustat), ett\u00e4 extrathumbs (pienkuvat) -kansioihin. T\u00e4m\u00e4 on suositeltavaa vain silloin, kun ei k\u00e4ytet\u00e4 muita t\u00e4t\u00e4 tarvitsevia sovelluksia.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/fr-CA.json b/NfoMetadata/strings/fr-CA.json index 12ad6c9..ffbd122 100644 --- a/NfoMetadata/strings/fr-CA.json +++ b/NfoMetadata/strings/fr-CA.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Activer la substitution des chemins", "LabelKodiMetadataEnablePathSubstitutionHelp": "Active la substitution du chemin des images en utilisant les param\u00e8tres de substitution des chemins du serveur.", "LabelKodiMetadataEnableExtraThumbs": "Copier les extrafanart dans les extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Pendant le t\u00e9l\u00e9chargement, les images peuvent \u00eatre enregistr\u00e9es en tant qu'extrafanart et extrathumbs pour am\u00e9liorer la compatibilit\u00e9 avec le skin Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "Pendant le t\u00e9l\u00e9chargement, les images peuvent \u00eatre enregistr\u00e9es en tant qu'extrafanart et extrathumbs pour am\u00e9liorer la compatibilit\u00e9 avec le skin Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/fr.json b/NfoMetadata/strings/fr.json index 0a2ec76..008ddc2 100644 --- a/NfoMetadata/strings/fr.json +++ b/NfoMetadata/strings/fr.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Activer la substitution des chemins", "LabelKodiMetadataEnablePathSubstitutionHelp": "Active la substitution du chemin des images en utilisant les param\u00e8tres de substitution des chemins du serveur.", "LabelKodiMetadataEnableExtraThumbs": "Copier les extrafanart dans les extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Lors du t\u00e9l\u00e9chargement d'images, elles peuvent \u00eatre enregistr\u00e9es dans extrafanart et extrathumbs si n\u00e9cessaire. Ceci n'est recommand\u00e9 que si vous avez d'autres logiciels qui l'exigent." + "LabelKodiMetadataEnableExtraThumbsHelp": "Lors du t\u00e9l\u00e9chargement d'images, elles peuvent \u00eatre enregistr\u00e9es dans extrafanart et extrathumbs si n\u00e9cessaire. Ceci n'est recommand\u00e9 que si vous avez d'autres logiciels qui l'exigent.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/he.json b/NfoMetadata/strings/he.json index 160b15c..d276877 100644 --- a/NfoMetadata/strings/he.json +++ b/NfoMetadata/strings/he.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u05d0\u05e4\u05e9\u05e8 \u05d4\u05d7\u05dc\u05e4\u05ea \u05e0\u05ea\u05d9\u05d1", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u05de\u05d0\u05e4\u05e9\u05e8 \u05d4\u05d7\u05dc\u05e4\u05ea \u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05e9\u05dc \u05e0\u05ea\u05d9\u05d1\u05d9 \u05ea\u05de\u05d5\u05e0\u05d4 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d4\u05d7\u05dc\u05e4\u05ea \u05d4\u05e0\u05ea\u05d9\u05d1 \u05e9\u05dc \u05d4\u05e9\u05e8\u05ea.", "LabelKodiMetadataEnableExtraThumbs": "\u05d4\u05e2\u05ea\u05e7 \u05d0\u05ea extrafanart \u05dcextrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u05d1\u05e2\u05ea \u05d4\u05d5\u05e8\u05d3\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05e0\u05d9\u05ea\u05df \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05d5\u05ea\u05df \u05d1-extrafanart \u05d5\u05d1-extrathumbs \u05d1\u05de\u05d9\u05d3\u05ea \u05d4\u05e6\u05d5\u05e8\u05da. \u05d6\u05d4 \u05de\u05d5\u05de\u05dc\u05e5 \u05e8\u05e7 \u05d0\u05dd \u05d9\u05e9 \u05dc\u05da \u05ea\u05d5\u05db\u05e0\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05d3\u05d5\u05e8\u05e9\u05ea \u05d6\u05d0\u05ea." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u05d1\u05e2\u05ea \u05d4\u05d5\u05e8\u05d3\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05e0\u05d9\u05ea\u05df \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05d5\u05ea\u05df \u05d1-extrafanart \u05d5\u05d1-extrathumbs \u05d1\u05de\u05d9\u05d3\u05ea \u05d4\u05e6\u05d5\u05e8\u05da. \u05d6\u05d4 \u05de\u05d5\u05de\u05dc\u05e5 \u05e8\u05e7 \u05d0\u05dd \u05d9\u05e9 \u05dc\u05da \u05ea\u05d5\u05db\u05e0\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05d3\u05d5\u05e8\u05e9\u05ea \u05d6\u05d0\u05ea.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/hr.json b/NfoMetadata/strings/hr.json index c362599..17875af 100644 --- a/NfoMetadata/strings/hr.json +++ b/NfoMetadata/strings/hr.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Omogu\u010di zamjensku putanju", "LabelKodiMetadataEnablePathSubstitutionHelp": "Omogu\u0107uje zamjensku putanju putanje slika koriste\u0107i serverskih postavka zamjenske putanje.", "LabelKodiMetadataEnableExtraThumbs": "Kopiraj ekstra fanart u ekstra sli\u010dicu", - "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja slike mogu biti spremljene u oba ekstra fanart i pomo\u0107nim sli\u010dicama za maksimalnu kompatibilnosti Kodi korisni\u010dkog su\u010delja." + "LabelKodiMetadataEnableExtraThumbsHelp": "Prilikom preuzimanja slike mogu biti spremljene u oba ekstra fanart i pomo\u0107nim sli\u010dicama za maksimalnu kompatibilnosti Kodi korisni\u010dkog su\u010delja.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/hu.json b/NfoMetadata/strings/hu.json index dda38cd..06bc585 100644 --- a/NfoMetadata/strings/hu.json +++ b/NfoMetadata/strings/hu.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "El\u00e9r\u00e9si \u00fatvonal cser\u00e9j\u00e9nek enged\u00e9lyez\u00e9se", "LabelKodiMetadataEnablePathSubstitutionHelp": "A k\u00e9pek el\u00e9r\u00e9si \u00fatvonal cser\u00e9j\u00e9nek enged\u00e9lyez\u00e9se felhaszn\u00e1lva a szerver el\u00e9r\u00e9si \u00fatvonal csere konfigur\u00e1ci\u00f3j\u00e1t.", "LabelKodiMetadataEnableExtraThumbs": "A extrafanart m\u00e1sol\u00e1sa az extrathumbs -ba.", - "LabelKodiMetadataEnableExtraThumbsHelp": "A k\u00e9pek let\u00f6lt\u00e9sekor lehet\u0151s\u00e9g van azokat mind a extrafanart -ba \u00e9s az extrathumbs -ba is menteni egy\u00fattal a maxim\u00e1lis Kodi kin\u00e9zeti kompabilit\u00e1shoz." + "LabelKodiMetadataEnableExtraThumbsHelp": "A k\u00e9pek let\u00f6lt\u00e9sekor lehet\u0151s\u00e9g van azokat mind a extrafanart -ba \u00e9s az extrathumbs -ba is menteni egy\u00fattal a maxim\u00e1lis Kodi kin\u00e9zeti kompabilit\u00e1shoz.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/it.json b/NfoMetadata/strings/it.json index 47728fd..47e023d 100644 --- a/NfoMetadata/strings/it.json +++ b/NfoMetadata/strings/it.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Abilita sostituzione di percorso", "LabelKodiMetadataEnablePathSubstitutionHelp": "Consente percorso sostituzione dei percorsi delle immagini utilizzando le impostazioni di sostituzione percorso del server.", "LabelKodiMetadataEnableExtraThumbs": "Copia extrafanart in extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Le immagine scaricate posso essere salvate sia in extrafanart che in extrathumbs se necessario. Questo \u00e8 consigliato solo se hai altri software che le richiedono." + "LabelKodiMetadataEnableExtraThumbsHelp": "Le immagine scaricate posso essere salvate sia in extrafanart che in extrathumbs se necessario. Questo \u00e8 consigliato solo se hai altri software che le richiedono.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/ja.json b/NfoMetadata/strings/ja.json index 3d41ab3..84a4be1 100644 --- a/NfoMetadata/strings/ja.json +++ b/NfoMetadata/strings/ja.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u30d1\u30b9\u306e\u7f6e\u63db\u3092\u6709\u52b9\u306b\u3059\u308b", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u30b5\u30fc\u30d0\u306e\u30d1\u30b9\u7f6e\u63db\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u3066\u753b\u50cf\u30d1\u30b9\u306e\u30d1\u30b9\u7f6e\u63db\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002", "LabelKodiMetadataEnableExtraThumbs": "\u30a8\u30af\u30b9\u30c8\u30e9\u30d5\u30a1\u30f3\u30a2\u30fc\u30c8\u3092\u30a8\u30af\u30b9\u30c8\u30e9\u30b5\u30e0\u30cd\u30a4\u30eb\u306b\u30b3\u30d4\u30fc\u3059\u308b", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u753b\u50cf\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u3001Kodi \u306e\u30b9\u30ad\u30f3\u306e\u4e92\u63db\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u30a8\u30af\u30b9\u30c8\u30e9\u30d5\u30a1\u30f3\u30a2\u30fc\u30c8\u3068\u30a8\u30af\u30b9\u30c8\u30e9\u30b5\u30e0\u30cd\u30a4\u30eb\u306e\u4e21\u65b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002" + "LabelKodiMetadataEnableExtraThumbsHelp": "\u753b\u50cf\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u3001Kodi \u306e\u30b9\u30ad\u30f3\u306e\u4e92\u63db\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u30a8\u30af\u30b9\u30c8\u30e9\u30d5\u30a1\u30f3\u30a2\u30fc\u30c8\u3068\u30a8\u30af\u30b9\u30c8\u30e9\u30b5\u30e0\u30cd\u30a4\u30eb\u306e\u4e21\u65b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/kk.json b/NfoMetadata/strings/kk.json index 5010b93..c804db9 100644 --- a/NfoMetadata/strings/kk.json +++ b/NfoMetadata/strings/kk.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u0416\u043e\u043b \u0430\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443\u0434\u044b \u049b\u043e\u0441\u0443", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u0436\u043e\u043b \u0430\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443 \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043f \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456\u04a3 \u0436\u043e\u043b \u0430\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u0430\u0434\u044b.", "LabelKodiMetadataEnableExtraThumbs": "\u04d8\u0434\u0435\u043f\u043a\u0456 extrafanart \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0456\u043d extrathumbs \u0456\u0448\u0456\u043d\u0435 \u043a\u04e9\u0448\u0456\u0440\u0443", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0436\u04af\u043a\u0442\u0435\u0433\u0435\u043d \u043a\u0435\u0437\u0434\u0435, \u043e\u043b\u0430\u0440 Kodi \u049b\u0430\u0431\u044b\u0493\u044b\u043c\u0435\u043d \u0435\u04a3 \u0436\u043e\u0493\u0430\u0440\u044b \u0441\u0438\u044b\u0441\u044b\u043c\u0434\u044b\u0493\u044b \u04af\u0448\u0456\u043d extrafanart \u0436\u04d9\u043d\u0435 extrathumbs \u0435\u043a\u0435\u0443\u0456\u043d\u0434\u0435 \u0441\u0430\u049b\u0442\u0430\u043b\u0430\u0434\u044b." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0436\u04af\u043a\u0442\u0435\u0433\u0435\u043d \u043a\u0435\u0437\u0434\u0435, \u043e\u043b\u0430\u0440 Kodi \u049b\u0430\u0431\u044b\u0493\u044b\u043c\u0435\u043d \u0435\u04a3 \u0436\u043e\u0493\u0430\u0440\u044b \u0441\u0438\u044b\u0441\u044b\u043c\u0434\u044b\u0493\u044b \u04af\u0448\u0456\u043d extrafanart \u0436\u04d9\u043d\u0435 extrathumbs \u0435\u043a\u0435\u0443\u0456\u043d\u0434\u0435 \u0441\u0430\u049b\u0442\u0430\u043b\u0430\u0434\u044b.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/ko.json b/NfoMetadata/strings/ko.json index 7f6c348..71def2a 100644 --- a/NfoMetadata/strings/ko.json +++ b/NfoMetadata/strings/ko.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\uacbd\ub85c \ub300\uccb4 \uc0ac\uc6a9", "LabelKodiMetadataEnablePathSubstitutionHelp": "\uc11c\ubc84\uc758 \uacbd\ub85c \ub300\uccb4 \uc124\uc815\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc774\ubbf8\uc9c0 \uacbd\ub85c\uc758 \uacbd\ub85c \ub300\uccb4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.", "LabelKodiMetadataEnableExtraThumbs": "extrafanart\ub97c extrathumbs\uc5d0 \ubcf5\uc0ac\ud558\uc2ed\uc2dc\uc624.", - "LabelKodiMetadataEnableExtraThumbsHelp": "\uc774\ubbf8\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc \ud560 \ub54c \ucd5c\ub300 Kodi \uc2a4\ud0a8 \ud638\ud658\uc131\uc744 \uc704\ud574 extrafanart \ubc0f extrathumbs\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "LabelKodiMetadataEnableExtraThumbsHelp": "\uc774\ubbf8\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc \ud560 \ub54c \ucd5c\ub300 Kodi \uc2a4\ud0a8 \ud638\ud658\uc131\uc744 \uc704\ud574 extrafanart \ubc0f extrathumbs\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/lt-LT.json b/NfoMetadata/strings/lt-LT.json index 92fad8b..fef670b 100644 --- a/NfoMetadata/strings/lt-LT.json +++ b/NfoMetadata/strings/lt-LT.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Leisti keli\u0173 pakeitimus", "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this." + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs if needed. This is only recommended if you have other software that requires this.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/nb.json b/NfoMetadata/strings/nb.json index da409c0..5113ae3 100644 --- a/NfoMetadata/strings/nb.json +++ b/NfoMetadata/strings/nb.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Aktiver sti erstatter", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiverer sti erstatning av bilde stier ved hjelp av serverens sti erstatter innstillinger.", "LabelKodiMetadataEnableExtraThumbs": "kopier extrafanart inn til extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ved nedlasting av bilder kan de bli lagret inn til b\u00e5de extrafanart og extrathumbs for maksimum Kodi skin kompabilitet." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ved nedlasting av bilder kan de bli lagret inn til b\u00e5de extrafanart og extrathumbs for maksimum Kodi skin kompabilitet.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/nl.json b/NfoMetadata/strings/nl.json index 4ad4443..133f6f9 100644 --- a/NfoMetadata/strings/nl.json +++ b/NfoMetadata/strings/nl.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Pad vervanging inschakelen", "LabelKodiMetadataEnablePathSubstitutionHelp": "Stelt pad vervanging in voor afbeeldingspaden en maakt gebruik van de Pad Vervangen instellingen van de server.", "LabelKodiMetadataEnableExtraThumbs": "Kopieer extrafanart naar extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Gedownloade afbeeldingen kunnen direct in extrafanart en extrathumbs opgeslagen worden voor maximale Kodi skin compatibiliteit." + "LabelKodiMetadataEnableExtraThumbsHelp": "Gedownloade afbeeldingen kunnen direct in extrafanart en extrathumbs opgeslagen worden voor maximale Kodi skin compatibiliteit.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/pl.json b/NfoMetadata/strings/pl.json index 08f8f15..01c8926 100644 --- a/NfoMetadata/strings/pl.json +++ b/NfoMetadata/strings/pl.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Aktywuj mapowanie folder\u00f3w", "LabelKodiMetadataEnablePathSubstitutionHelp": "Umo\u017cliwia mapowanie folder\u00f3w obraz\u00f3w przy u\u017cyciu ustawie\u0144 mapowania serwera.", "LabelKodiMetadataEnableExtraThumbs": "Kopiuj obrazy z folderu \"extrafanart\" do folderu \"extrathumbs\"", - "LabelKodiMetadataEnableExtraThumbsHelp": "Pobrane obrazy mog\u0105 by\u0107 zapisane zar\u00f3wno w folderze \"extrafanart\" jak i \"extrathumbs\". Jest to zalecane tylko wtedy, gdy masz inne oprogramowanie, kt\u00f3re tego wymaga." + "LabelKodiMetadataEnableExtraThumbsHelp": "Pobrane obrazy mog\u0105 by\u0107 zapisane zar\u00f3wno w folderze \"extrafanart\" jak i \"extrathumbs\". Jest to zalecane tylko wtedy, gdy masz inne oprogramowanie, kt\u00f3re tego wymaga.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/pt-BR.json b/NfoMetadata/strings/pt-BR.json index 9b2fb54..407dd10 100644 --- a/NfoMetadata/strings/pt-BR.json +++ b/NfoMetadata/strings/pt-BR.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Ativar substitui\u00e7\u00e3o de local", "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substitui\u00e7\u00e3o do local das imagens usando as op\u00e7\u00f5es de substitui\u00e7\u00e3o de caminho no servidor.", "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart para extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ao fazer download das imagens, elas podem ser salvas em ambas extrafanart e extrathumbs caso necess\u00e1rio. Isto s\u00f3 \u00e9 recomendado se voc\u00ea tiver outro software que necessite disto." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ao fazer download das imagens, elas podem ser salvas em ambas extrafanart e extrathumbs caso necess\u00e1rio. Isto s\u00f3 \u00e9 recomendado se voc\u00ea tiver outro software que necessite disto.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/pt-PT.json b/NfoMetadata/strings/pt-PT.json index f5d1f34..2f9d131 100644 --- a/NfoMetadata/strings/pt-PT.json +++ b/NfoMetadata/strings/pt-PT.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Ativar substitui\u00e7\u00e3o de local", "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substitui\u00e7\u00e3o do local das imagens usando as op\u00e7\u00f5es de substitui\u00e7\u00e3o de caminho no servidor.", "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart para extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ao fazer download das imagens, elas podem ser salvas em ambas extrafanart e extrathumbs para uma maior compatibilidade com as skins do Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ao fazer download das imagens, elas podem ser salvas em ambas extrafanart e extrathumbs para uma maior compatibilidade com as skins do Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/ru.json b/NfoMetadata/strings/ru.json index 55255cb..abce7f5 100644 --- a/NfoMetadata/strings/ru.json +++ b/NfoMetadata/strings/ru.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0443\u0442\u0435\u0439", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0412\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0443\u0442\u0435\u0439 \u043a \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0443\u0442\u0435\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", "LabelKodiMetadataEnableExtraThumbs": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c extrafanart \u0432\u043d\u0443\u0442\u0440\u044c extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u0432 extrafanart, \u0442\u0430\u043a \u0438 \u0432 extrathumbs \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 Kodi." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u0432 extrafanart, \u0442\u0430\u043a \u0438 \u0432 extrathumbs \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 Kodi.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/sk.json b/NfoMetadata/strings/sk.json index 4d3960b..818a7b7 100644 --- a/NfoMetadata/strings/sk.json +++ b/NfoMetadata/strings/sk.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Povoli\u0165 nahradenie adres\u00e1rovej cesty", "LabelKodiMetadataEnablePathSubstitutionHelp": "Povo\u013euje nahradenie cesty k obr\u00e1zkom pomocou nastavenej cesty servera pre nahradenie cesty.", "LabelKodiMetadataEnableExtraThumbs": "Kop\u00edrova\u0165 extrafanart do extrathumb", - "LabelKodiMetadataEnableExtraThumbsHelp": "Pri s\u0165ahovan\u00ed obr\u00e1zkov ich mo\u017eno v pr\u00edpade potreby ulo\u017ei\u0165 do extrafanart aj extrathumbs. Toto sa odpor\u00fa\u010da iba vtedy, ak m\u00e1te in\u00fd softv\u00e9r, ktor\u00fd to vy\u017eaduje." + "LabelKodiMetadataEnableExtraThumbsHelp": "Pri s\u0165ahovan\u00ed obr\u00e1zkov ich mo\u017eno v pr\u00edpade potreby ulo\u017ei\u0165 do extrafanart aj extrathumbs. Toto sa odpor\u00fa\u010da iba vtedy, ak m\u00e1te in\u00fd softv\u00e9r, ktor\u00fd to vy\u017eaduje.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/sl-SI.json b/NfoMetadata/strings/sl-SI.json index 40500c0..f12b80e 100644 --- a/NfoMetadata/strings/sl-SI.json +++ b/NfoMetadata/strings/sl-SI.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Omogo\u010di zamenjavo poti", "LabelKodiMetadataEnablePathSubstitutionHelp": "Omogo\u010da zamenjavo poti slikovnih poti z uporabo nastavitev zamenjave poti stre\u017enika.", "LabelKodiMetadataEnableExtraThumbs": "Kopiraj extrafanart v extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ko prena\u0161ate slike, jih lahko po potrebi shranite v extrafanart in extrathumbs. To je priporo\u010dljivo le, \u010de imate drugo programsko opremo, ki to zahteva." + "LabelKodiMetadataEnableExtraThumbsHelp": "Ko prena\u0161ate slike, jih lahko po potrebi shranite v extrafanart in extrathumbs. To je priporo\u010dljivo le, \u010de imate drugo programsko opremo, ki to zahteva.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/sv.json b/NfoMetadata/strings/sv.json index b133504..b433a9f 100644 --- a/NfoMetadata/strings/sv.json +++ b/NfoMetadata/strings/sv.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Aktivera s\u00f6kv\u00e4gsutbyte", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiverar utbyte av s\u00f6kv\u00e4gar till bilder enligt serverns inst\u00e4llningar f\u00f6r delad n\u00e4tverksmapp.", "LabelKodiMetadataEnableExtraThumbs": "Kopiera extrafanart till extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "N\u00e4r bilder laddas ned kan de sparas i b\u00e5de extrafanart och extrathumbs om det beh\u00f6vs. Detta rekommenderas endast om du har annan programvara som kr\u00e4ver detta." + "LabelKodiMetadataEnableExtraThumbsHelp": "N\u00e4r bilder laddas ned kan de sparas i b\u00e5de extrafanart och extrathumbs om det beh\u00f6vs. Detta rekommenderas endast om du har annan programvara som kr\u00e4ver detta.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/tr.json b/NfoMetadata/strings/tr.json index 78811b2..a970ff5 100644 --- a/NfoMetadata/strings/tr.json +++ b/NfoMetadata/strings/tr.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "Klas\u00f6r yolu de\u011fi\u015ftirmeyi etkinle\u015ftir", "LabelKodiMetadataEnablePathSubstitutionHelp": "Sunucunun klas\u00f6r yol de\u011fi\u015ftirme ayarlar\u0131n\u0131 kullanarak resim klas\u00f6r yollar\u0131n\u0131n de\u011fi\u015ftirilmesini etkinle\u015ftirir.", "LabelKodiMetadataEnableExtraThumbs": "Extrafanart'\u0131 ekstrathumbs i\u00e7ine kopyala", - "LabelKodiMetadataEnableExtraThumbsHelp": "G\u00f6r\u00fcnt\u00fcler indirilirken, gerekirse hem extrafanart hem de extrathumbs i\u00e7ine kaydedilebilirler. Bu sadece ba\u015fka bir yaz\u0131l\u0131m taraf\u0131ndan gerekiyorsa tavsiye edilir." + "LabelKodiMetadataEnableExtraThumbsHelp": "G\u00f6r\u00fcnt\u00fcler indirilirken, gerekirse hem extrafanart hem de extrathumbs i\u00e7ine kaydedilebilirler. Bu sadece ba\u015fka bir yaz\u0131l\u0131m taraf\u0131ndan gerekiyorsa tavsiye edilir.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/uk.json b/NfoMetadata/strings/uk.json index 43e06bb..202abd4 100644 --- a/NfoMetadata/strings/uk.json +++ b/NfoMetadata/strings/uk.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0437\u0430\u043c\u0456\u043d\u0443 \u0448\u043b\u044f\u0445\u0443", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u0414\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0437\u0430\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0448\u043b\u044f\u0445\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0448\u043b\u044f\u0445\u043e\u043c \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432 \u0437\u0430\u043c\u0456\u043d\u0438 \u0448\u043b\u044f\u0445\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", "LabelKodiMetadataEnableExtraThumbs": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 extrafanart \u0434\u043e extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u041f\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0432\u043e\u043d\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u044f\u043a \u0443 extrafanart, \u0442\u0430\u043a \u0456 \u0432 extrathumbs, \u044f\u043a\u0449\u043e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0454\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u0435 \u0437\u0430 \u043d\u0430\u044f\u0432\u043d\u043e\u0441\u0442\u0456 \u0456\u043d\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043c\u0430\u0433\u0430\u0454." + "LabelKodiMetadataEnableExtraThumbsHelp": "\u041f\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0432\u043e\u043d\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u044f\u043a \u0443 extrafanart, \u0442\u0430\u043a \u0456 \u0432 extrathumbs, \u044f\u043a\u0449\u043e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0454\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u0435 \u0437\u0430 \u043d\u0430\u044f\u0432\u043d\u043e\u0441\u0442\u0456 \u0456\u043d\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0446\u044c\u043e\u0433\u043e \u0432\u0438\u043c\u0430\u0433\u0430\u0454.", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/zh-CN.json b/NfoMetadata/strings/zh-CN.json index d482e9a..2434cd5 100644 --- a/NfoMetadata/strings/zh-CN.json +++ b/NfoMetadata/strings/zh-CN.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u542f\u7528\u8def\u5f84\u66ff\u6362", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u4f7f\u7528\u670d\u52a1\u5668\u7684\u8def\u5f84\u66ff\u6362\u8bbe\u7f6e\u542f\u7528\u56fe\u50cf\u8def\u5f84\u7684\u8def\u5f84\u66ff\u6362\u3002", "LabelKodiMetadataEnableExtraThumbs": "\u5c06 extrafanart \u590d\u5236\u5230 extrathumbs \u4e2d", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u4e0b\u8f7d\u56fe\u50cf\u65f6\uff0c\u5982\u679c\u9700\u8981\uff0c\u53ef\u4ee5\u5c06\u5b83\u4eec\u4fdd\u5b58\u5230 extrafanart \u548c extrathumbs \u6587\u4ef6\u5939\u4e2d\u3002\u4ec5\u5f53\u60a8\u6709\u5176\u4ed6\u9700\u8981\u6b64\u529f\u80fd\u7684\u8f6f\u4ef6\u65f6\u624d\u5efa\u8bae\u8fd9\u6837\u505a\u3002" + "LabelKodiMetadataEnableExtraThumbsHelp": "\u4e0b\u8f7d\u56fe\u50cf\u65f6\uff0c\u5982\u679c\u9700\u8981\uff0c\u53ef\u4ee5\u5c06\u5b83\u4eec\u4fdd\u5b58\u5230 extrafanart \u548c extrathumbs \u6587\u4ef6\u5939\u4e2d\u3002\u4ec5\u5f53\u60a8\u6709\u5176\u4ed6\u9700\u8981\u6b64\u529f\u80fd\u7684\u8f6f\u4ef6\u65f6\u624d\u5efa\u8bae\u8fd9\u6837\u505a\u3002", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/zh-HK.json b/NfoMetadata/strings/zh-HK.json index 3d521c2..6c092ec 100644 --- a/NfoMetadata/strings/zh-HK.json +++ b/NfoMetadata/strings/zh-HK.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u555f\u7528\u8def\u5f91\u66ff\u63db", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u5141\u8a31\u5716\u50cf\u7684\u8def\u5f91\u66ff\u63db\u4f7f\u7528\u670d\u52d9\u5668\u7684\u8def\u5f91\u66ff\u63db\u8a2d\u7f6e\u3002", "LabelKodiMetadataEnableExtraThumbs": "\u5c07\u540c\u4eba\u756b\u8907\u88fd\u5230Extrathumbs\u6587\u4ef6\u593e\u4e2d", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u70ba\u4e86\u6700\u5927\u5316\u517c\u5bb9 Kodi \u9020\u578b\uff0c\u4e0b\u8f09\u7684\u5716\u7247\u540c\u6642\u4fdd\u5b58\u5728 extrafanart \u548c extrathumbs \u6587\u4ef6\u593e\u4e2d\u3002" + "LabelKodiMetadataEnableExtraThumbsHelp": "\u70ba\u4e86\u6700\u5927\u5316\u517c\u5bb9 Kodi \u9020\u578b\uff0c\u4e0b\u8f09\u7684\u5716\u7247\u540c\u6642\u4fdd\u5b58\u5728 extrafanart \u548c extrathumbs \u6587\u4ef6\u593e\u4e2d\u3002", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file diff --git a/NfoMetadata/strings/zh-TW.json b/NfoMetadata/strings/zh-TW.json index 6d58f3c..4ba47ff 100644 --- a/NfoMetadata/strings/zh-TW.json +++ b/NfoMetadata/strings/zh-TW.json @@ -9,5 +9,7 @@ "LabelKodiMetadataEnablePathSubstitution": "\u555f\u7528\u8def\u5f91\u66ff\u63db", "LabelKodiMetadataEnablePathSubstitutionHelp": "\u555f\u7528\u8def\u5f91\u66ff\u63db\uff0c\u5716\u50cf\u8def\u5f91\u4f7f\u7528\u4f3a\u670d\u5668\u8def\u5f91\u66ff\u63db\u8a2d\u5b9a\u3002", "LabelKodiMetadataEnableExtraThumbs": "\u8907\u88fd extrafanart \u5230 extrathumbs \u8cc7\u6599\u593e", - "LabelKodiMetadataEnableExtraThumbsHelp": "\u70ba\u4e86\u6700\u5927\u5316\u76f8\u5bb9 Kodi \u9762\u677f\uff0c\u4e0b\u8f09\u7684\u5716\u50cf\u540c\u6642\u5132\u5b58\u5728 extrafanart \u548c extrathumbs \u8cc7\u6599\u593e\u4e2d\u3002" + "LabelKodiMetadataEnableExtraThumbsHelp": "\u70ba\u4e86\u6700\u5927\u5316\u76f8\u5bb9 Kodi \u9762\u677f\uff0c\u4e0b\u8f09\u7684\u5716\u50cf\u540c\u6642\u5132\u5b58\u5728 extrafanart \u548c extrathumbs \u8cc7\u6599\u593e\u4e2d\u3002", + "LabelKodiMetadataPreferMovieNfo": "Prefer movie.nfo", + "LabelKodiMetadataPreferMovieNfoHelp": "Read and save movie info as movie.nfo instead of \"movie name\".nfo" } \ No newline at end of file