diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 5f606a06bf..8d03678042 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -244,7 +244,13 @@ namespace MediaBrowser.Model.Configuration
///
/// The width of the min movie poster.
public int MinMoviePosterWidth { get; set; }
-
+
+ ///
+ /// Gets or sets a value indicating whether [enable people prefix sub folders].
+ ///
+ /// true if [enable people prefix sub folders]; otherwise, false.
+ public bool EnablePeoplePrefixSubFolders { get; set; }
+
///
/// Initializes a new instance of the class.
///
diff --git a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
index f48ef4c26a..4a5db1d81a 100644
--- a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
+++ b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
@@ -205,7 +205,7 @@ namespace MediaBrowser.Providers.Movies
string url = string.Format(@"http://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(person.Name), MovieDbProvider.ApiKey);
PersonSearchResults searchResult = null;
- using (Stream json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
@@ -231,15 +231,11 @@ namespace MediaBrowser.Providers.Movies
{
var personDataPath = GetPersonDataPath(ConfigurationManager.ApplicationPaths, id);
- Directory.CreateDirectory(personDataPath);
-
- var files = Directory.EnumerateFiles(personDataPath, "*.json", SearchOption.TopDirectoryOnly)
- .Select(Path.GetFileName)
- .ToList();
+ var file = Path.Combine(personDataPath, DataFileName);
// Only download if not already there
// The prescan task will take care of updates so we don't need to re-download here
- if (!files.Contains(DataFileName, StringComparer.OrdinalIgnoreCase))
+ if (!File.Exists(file))
{
await DownloadPersonInfo(id, cancellationToken).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index b632792f64..59ae9b7340 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -703,7 +703,21 @@ namespace MediaBrowser.Server.Implementations.Library
var validFilename = FileSystem.GetValidFilename(name);
- var key = Path.Combine(path, validFilename);
+ string subFolderPrefix = null;
+
+ if (typeof(T) == typeof(Person) && ConfigurationManager.Configuration.EnablePeoplePrefixSubFolders)
+ {
+ subFolderPrefix = validFilename.Substring(0, 1);
+
+ if (string.IsNullOrWhiteSpace(subFolderPrefix))
+ {
+ subFolderPrefix = "0";
+ }
+ }
+
+ var key = string.IsNullOrEmpty(subFolderPrefix) ?
+ Path.Combine(path, validFilename) :
+ Path.Combine(path, subFolderPrefix, validFilename);
BaseItem obj;