From 2da4ef2a01093c7f3f05530ec5da5b606f1989ba Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 1 Oct 2013 15:25:12 -0400 Subject: [PATCH] limit knowledge of lnk files --- MediaBrowser.Api/Library/LibraryHelpers.cs | 15 +++++++++------ MediaBrowser.Controller/IO/FileSystem.cs | 5 ++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/MediaBrowser.Api/Library/LibraryHelpers.cs b/MediaBrowser.Api/Library/LibraryHelpers.cs index 72cff4560a..4837c64d79 100644 --- a/MediaBrowser.Api/Library/LibraryHelpers.cs +++ b/MediaBrowser.Api/Library/LibraryHelpers.cs @@ -12,6 +12,9 @@ namespace MediaBrowser.Api.Library /// public static class LibraryHelpers { + private const string ShortcutFileExtension = ".lnk"; + private const string ShortcutFileSearch = "*.lnk"; + /// /// Adds the virtual folder. /// @@ -118,7 +121,7 @@ namespace MediaBrowser.Api.Library throw new DirectoryNotFoundException(string.Format("The media collection {0} does not exist", virtualFolderName)); } - var shortcut = Directory.EnumerateFiles(path, "*.lnk", SearchOption.AllDirectories).FirstOrDefault(f => FileSystem.ResolveShortcut(f).Equals(mediaPath, StringComparison.OrdinalIgnoreCase)); + var shortcut = Directory.EnumerateFiles(path, ShortcutFileSearch, SearchOption.AllDirectories).FirstOrDefault(f => FileSystem.ResolveShortcut(f).Equals(mediaPath, StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(shortcut)) { @@ -161,12 +164,12 @@ namespace MediaBrowser.Api.Library var shortcutFilename = Path.GetFileNameWithoutExtension(path); - var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ".lnk"); + var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension); while (File.Exists(lnk)) { shortcutFilename += "1"; - lnk = Path.Combine(virtualFolderPath, shortcutFilename + ".lnk"); + lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension); } FileSystem.CreateShortcut(lnk, path); @@ -181,7 +184,7 @@ namespace MediaBrowser.Api.Library /// private static void ValidateNewMediaPath(string currentViewRootFolderPath, string mediaPath, IServerApplicationPaths appPaths) { - var duplicate = Directory.EnumerateFiles(appPaths.RootFolderPath, "*.lnk", SearchOption.AllDirectories) + var duplicate = Directory.EnumerateFiles(appPaths.RootFolderPath, ShortcutFileSearch, SearchOption.AllDirectories) .Select(FileSystem.ResolveShortcut) .FirstOrDefault(p => !IsNewPathValid(mediaPath, p, false)); @@ -192,7 +195,7 @@ namespace MediaBrowser.Api.Library // Don't allow duplicate sub-paths within the same user library, or it will result in duplicate items // See comments in IsNewPathValid - duplicate = Directory.EnumerateFiles(currentViewRootFolderPath, "*.lnk", SearchOption.AllDirectories) + duplicate = Directory.EnumerateFiles(currentViewRootFolderPath, ShortcutFileSearch, SearchOption.AllDirectories) .Select(FileSystem.ResolveShortcut) .FirstOrDefault(p => !IsNewPathValid(mediaPath, p, true)); @@ -202,7 +205,7 @@ namespace MediaBrowser.Api.Library } // Make sure the current root folder doesn't already have a shortcut to the same path - duplicate = Directory.EnumerateFiles(currentViewRootFolderPath, "*.lnk", SearchOption.AllDirectories) + duplicate = Directory.EnumerateFiles(currentViewRootFolderPath, ShortcutFileSearch, SearchOption.AllDirectories) .Select(FileSystem.ResolveShortcut) .FirstOrDefault(p => mediaPath.Equals(p, StringComparison.OrdinalIgnoreCase)); diff --git a/MediaBrowser.Controller/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs index 0879ea8a4b..56b1be6b59 100644 --- a/MediaBrowser.Controller/IO/FileSystem.cs +++ b/MediaBrowser.Controller/IO/FileSystem.cs @@ -247,7 +247,10 @@ namespace MediaBrowser.Controller.IO } } - public class WindowsShortcut + /// + /// Adapted from http://stackoverflow.com/questions/309495/windows-shortcut-lnk-parser-in-java + /// + internal class WindowsShortcut { public bool IsDirectory { get; private set; } public bool IsLocal { get; private set; }