aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-01 13:42:07 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-01 13:42:07 -0500
commitc48458f215bd5ea1da3ef3636f801a4652e77aa0 (patch)
tree9572d1f4ca5aaeb0214f1febbf6d0fce49375ff1
parentdc8fb33a1f5ad474fed88d58a19c1098c68b815f (diff)
parentcbf1bca2ea25c63bd10d167f170cc10bb23e2496 (diff)
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Conflicts: SharedVersion.cs
-rw-r--r--MediaBrowser.Api/PackageReviewService.cs2
-rw-r--r--MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs2
-rw-r--r--MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs2
-rw-r--r--MediaBrowser.Common.Implementations/Updates/InstallationManager.cs2
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs115
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs3
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs2
-rw-r--r--MediaBrowser.Controller/Library/ILibraryManager.cs60
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs28
-rw-r--r--MediaBrowser.Dlna/Images/people48.jpgbin0 -> 1101 bytes
-rw-r--r--MediaBrowser.Dlna/Images/people48.pngbin0 -> 688 bytes
-rw-r--r--MediaBrowser.Dlna/Images/people480.jpgbin0 -> 8691 bytes
-rw-r--r--MediaBrowser.Dlna/Images/people480.pngbin0 -> 6351 bytes
-rw-r--r--MediaBrowser.Dlna/MediaBrowser.Dlna.csproj8
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs2
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs108
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs2
22 files changed, 176 insertions, 170 deletions
diff --git a/MediaBrowser.Api/PackageReviewService.cs b/MediaBrowser.Api/PackageReviewService.cs
index c4cf1eac3..ce366ccd4 100644
--- a/MediaBrowser.Api/PackageReviewService.cs
+++ b/MediaBrowser.Api/PackageReviewService.cs
@@ -102,7 +102,7 @@ namespace MediaBrowser.Api
private readonly IHttpClient _httpClient;
private readonly INetworkManager _netManager;
private readonly IJsonSerializer _serializer;
- private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
+ private const string MbAdminUrl = "https://www.mb3admin.com/admin/";
public PackageReviewService(IHttpClient client, INetworkManager net, IJsonSerializer serializer)
{
diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
index 78b0b1389..89d00b87d 100644
--- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
+++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
@@ -135,7 +135,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
request.Referer = options.Referer;
}
- request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
+ //request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
return request;
}
diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
index 8da3006a3..dfdf61016 100644
--- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
+++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
@@ -17,7 +17,7 @@ namespace MediaBrowser.Common.Implementations.Security
/// </summary>
public class PluginSecurityManager : ISecurityManager
{
- private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
+ private const string MbAdminUrl = "https://www.mb3admin.com/admin/";
private const string MBValidateUrl = MbAdminUrl + "service/registration/validate";
diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
index 275e75188..0a8ce012f 100644
--- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
+++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs
@@ -172,7 +172,7 @@ namespace MediaBrowser.Common.Implementations.Updates
}
private Tuple<List<PackageInfo>, DateTime> _lastPackageListResult;
- private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
+ private const string MbAdminUrl = "https://www.mb3admin.com/admin/";
/// <summary>
/// Gets all available packages.
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index c78409847..ca08cf1a1 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -603,118 +603,6 @@ namespace MediaBrowser.Controller.Entities
}
/// <summary>
- /// Loads local trailers from the file system
- /// </summary>
- /// <returns>List{Video}.</returns>
- private IEnumerable<Trailer> LoadLocalTrailers(List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
- {
- var files = fileSystemChildren.OfType<DirectoryInfo>()
- .Where(i => string.Equals(i.Name, TrailerFolderName, StringComparison.OrdinalIgnoreCase))
- .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
- .ToList();
-
- var extraTypes = new List<ExtraType> { ExtraType.Trailer };
- var suffixes = ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
- .Select(i => i.Key)
- .ToList();
-
- files.AddRange(fileSystemChildren.OfType<FileInfo>()
- .Where(i =>
- {
- var nameEithoutExtension = FileSystem.GetFileNameWithoutExtension(i);
-
- if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
-
- return !string.Equals(Path, i.FullName, StringComparison.OrdinalIgnoreCase);
- }));
-
- return LibraryManager.ResolvePaths<Trailer>(files, directoryService, null).Select(video =>
- {
- // Try to retrieve it from the db. If we don't find it, use the resolved version
- var dbItem = LibraryManager.GetItemById(video.Id) as Trailer;
-
- if (dbItem != null)
- {
- video = dbItem;
- }
-
- if (video != null)
- {
- video.ExtraType = ExtraType.Trailer;
- }
-
- return video;
-
- // Sort them so that the list can be easily compared for changes
- }).OrderBy(i => i.Path).ToList();
- }
-
- protected IEnumerable<Video> LoadSpecialFeatures(List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
- {
- var files = fileSystemChildren.OfType<DirectoryInfo>()
- .Where(i => string.Equals(i.Name, "extras", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "specials", StringComparison.OrdinalIgnoreCase))
- .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
- .ToList();
-
- var extraTypes = new List<ExtraType> { ExtraType.BehindTheScenes, ExtraType.DeletedScene, ExtraType.Interview, ExtraType.Sample, ExtraType.Scene, ExtraType.Clip };
- var suffixes = ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
- .Select(i => i.Key)
- .ToList();
-
- files.AddRange(fileSystemChildren.OfType<FileInfo>()
- .Where(i =>
- {
- var nameEithoutExtension = FileSystem.GetFileNameWithoutExtension(i);
-
- if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
-
- return !string.Equals(Path, i.FullName, StringComparison.OrdinalIgnoreCase);
- }));
-
- return LibraryManager.ResolvePaths<Video>(files, directoryService, null).Select(video =>
- {
- // Try to retrieve it from the db. If we don't find it, use the resolved version
- var dbItem = LibraryManager.GetItemById(video.Id) as Video;
-
- if (dbItem != null)
- {
- video = dbItem;
- }
-
- if (video != null)
- {
- SetExtraTypeFromFilename(video);
- }
-
- return video;
-
- // Sort them so that the list can be easily compared for changes
- }).OrderBy(i => i.Path).ToList();
- }
-
- private void SetExtraTypeFromFilename(Video item)
- {
- var name = System.IO.Path.GetFileNameWithoutExtension(item.Path) ?? string.Empty;
-
- foreach (var suffix in ExtraSuffixes)
- {
- if (name.EndsWith(suffix.Key, StringComparison.OrdinalIgnoreCase))
- {
- item.ExtraType = suffix.Value;
- return;
- }
- }
-
- item.ExtraType = ExtraType.Clip;
- }
-
- /// <summary>
/// Loads the theme songs.
/// </summary>
/// <returns>List{Audio.Audio}.</returns>
@@ -879,7 +767,8 @@ namespace MediaBrowser.Controller.Entities
private async Task<bool> RefreshLocalTrailers(IHasTrailers item, MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
- var newItems = LoadLocalTrailers(fileSystemChildren, options.DirectoryService).ToList();
+ var newItems = LibraryManager.FindTrailers(this, fileSystemChildren, options.DirectoryService).ToList();
+
var newItemIds = newItems.Select(i => i.Id).ToList();
var itemsChanged = !item.LocalTrailerIds.SequenceEqual(newItemIds);
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 0e712dc45..ad90027de 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.Progress;
+using MediaBrowser.Common.Progress;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 686abdaf5..4ac3ed77f 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -119,7 +119,7 @@ namespace MediaBrowser.Controller.Entities.Movies
private async Task<bool> RefreshSpecialFeatures(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
{
- var newItems = LoadSpecialFeatures(fileSystemChildren, options.DirectoryService).ToList();
+ var newItems = LibraryManager.FindExtras(this, fileSystemChildren, options.DirectoryService).ToList();
var newItemIds = newItems.Select(i => i.Id).ToList();
var itemsChanged = !SpecialFeatureIds.SequenceEqual(newItemIds);
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index 10fee05a9..0b2df9974 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -230,46 +230,6 @@ namespace MediaBrowser.Controller.Library
BaseItem RetrieveItem(Guid id);
/// <summary>
- /// Validates the artists.
- /// </summary>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <param name="progress">The progress.</param>
- /// <returns>Task.</returns>
- Task ValidateArtists(CancellationToken cancellationToken, IProgress<double> progress);
-
- /// <summary>
- /// Validates the music genres.
- /// </summary>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <param name="progress">The progress.</param>
- /// <returns>Task.</returns>
- Task ValidateMusicGenres(CancellationToken cancellationToken, IProgress<double> progress);
-
- /// <summary>
- /// Validates the game genres.
- /// </summary>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <param name="progress">The progress.</param>
- /// <returns>Task.</returns>
- Task ValidateGameGenres(CancellationToken cancellationToken, IProgress<double> progress);
-
- /// <summary>
- /// Validates the genres.
- /// </summary>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <param name="progress">The progress.</param>
- /// <returns>Task.</returns>
- Task ValidateGenres(CancellationToken cancellationToken, IProgress<double> progress);
-
- /// <summary>
- /// Validates the studios.
- /// </summary>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <param name="progress">The progress.</param>
- /// <returns>Task.</returns>
- Task ValidateStudios(CancellationToken cancellationToken, IProgress<double> progress);
-
- /// <summary>
/// Occurs when [item added].
/// </summary>
event EventHandler<ItemChangeEventArgs> ItemAdded;
@@ -422,5 +382,25 @@ namespace MediaBrowser.Controller.Library
/// <param name="type">The type.</param>
/// <returns>Guid.</returns>
Guid GetNewItemId(string key, Type type);
+
+ /// <summary>
+ /// Finds the trailers.
+ /// </summary>
+ /// <param name="owner">The owner.</param>
+ /// <param name="fileSystemChildren">The file system children.</param>
+ /// <param name="directoryService">The directory service.</param>
+ /// <returns>IEnumerable&lt;Trailer&gt;.</returns>
+ IEnumerable<Trailer> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren,
+ IDirectoryService directoryService);
+
+ /// <summary>
+ /// Finds the extras.
+ /// </summary>
+ /// <param name="owner">The owner.</param>
+ /// <param name="fileSystemChildren">The file system children.</param>
+ /// <param name="directoryService">The directory service.</param>
+ /// <returns>IEnumerable&lt;Video&gt;.</returns>
+ IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemInfo> fileSystemChildren,
+ IDirectoryService directoryService);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
index 5d5d24b1c..bdb1c4cbf 100644
--- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs
+++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
@@ -111,7 +111,7 @@ namespace MediaBrowser.Dlna.Didl
}
}
- AddCover(item, element);
+ AddCover(item, null, element);
return element;
}
@@ -469,7 +469,7 @@ namespace MediaBrowser.Dlna.Didl
AddCommonFields(folder, stubType, null, container, filter);
- AddCover(folder, container);
+ AddCover(folder, stubType, container);
return container;
}
@@ -750,8 +750,14 @@ namespace MediaBrowser.Dlna.Didl
}
}
- private void AddCover(BaseItem item, XmlElement element)
+ private void AddCover(BaseItem item, StubType? stubType, XmlElement element)
{
+ if (stubType.HasValue && stubType.Value == StubType.People)
+ {
+ AddEmbeddedImageAsCover("people", element);
+ return;
+ }
+
var imageInfo = GetImageInfo(item);
if (imageInfo == null)
@@ -810,6 +816,22 @@ namespace MediaBrowser.Dlna.Didl
}
}
+ private void AddEmbeddedImageAsCover(string name, XmlElement element)
+ {
+ var result = element.OwnerDocument;
+
+ var icon = result.CreateElement("upnp", "albumArtURI", NS_UPNP);
+ var profile = result.CreateAttribute("dlna", "profileID", NS_DLNA);
+ profile.InnerText = _profile.AlbumArtPn;
+ icon.SetAttributeNode(profile);
+ icon.InnerText = _serverAddress + "/Dlna/icons/people480.jpg";
+ element.AppendChild(icon);
+
+ icon = result.CreateElement("upnp", "icon", NS_UPNP);
+ icon.InnerText = _serverAddress + "/Dlna/icons/people48.jpg";
+ element.AppendChild(icon);
+ }
+
private void AddImageResElement(BaseItem item,
XmlElement element,
int maxWidth,
diff --git a/MediaBrowser.Dlna/Images/people48.jpg b/MediaBrowser.Dlna/Images/people48.jpg
new file mode 100644
index 000000000..06f49a8a2
--- /dev/null
+++ b/MediaBrowser.Dlna/Images/people48.jpg
Binary files differ
diff --git a/MediaBrowser.Dlna/Images/people48.png b/MediaBrowser.Dlna/Images/people48.png
new file mode 100644
index 000000000..7f846373f
--- /dev/null
+++ b/MediaBrowser.Dlna/Images/people48.png
Binary files differ
diff --git a/MediaBrowser.Dlna/Images/people480.jpg b/MediaBrowser.Dlna/Images/people480.jpg
new file mode 100644
index 000000000..5b7821634
--- /dev/null
+++ b/MediaBrowser.Dlna/Images/people480.jpg
Binary files differ
diff --git a/MediaBrowser.Dlna/Images/people480.png b/MediaBrowser.Dlna/Images/people480.png
new file mode 100644
index 000000000..6d9a668d4
--- /dev/null
+++ b/MediaBrowser.Dlna/Images/people480.png
Binary files differ
diff --git a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
index cff668b47..ece3da2dc 100644
--- a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
+++ b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj
@@ -198,6 +198,14 @@
<ItemGroup>
<EmbeddedResource Include="Profiles\Xml\Popcorn Hour.xml" />
</ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Images\people48.jpg" />
+ <EmbeddedResource Include="Images\people48.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Images\people480.jpg" />
+ <EmbeddedResource Include="Images\people480.png" />
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs
index d5b7f5b36..dba93cbd4 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs
@@ -18,7 +18,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
{
public class RemoteNotifications : IServerEntryPoint
{
- private const string Url = "http://www.mb3admin.com/admin/service/MB3ServerNotifications.json";
+ private const string Url = "https://www.mb3admin.com/admin/service/MB3ServerNotifications.json";
private Timer _timer;
private readonly IHttpClient _httpClient;
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
index 36ba55828..b7bb482e0 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
@@ -12,7 +12,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly IApplicationHost _applicationHost;
private readonly INetworkManager _networkManager;
private readonly IHttpClient _httpClient;
- private const string MbAdminUrl = "http://www.mb3admin.com/admin/";
+ private const string MbAdminUrl = "https://www.mb3admin.com/admin/";
public UsageReporter(IApplicationHost applicationHost, INetworkManager networkManager, IHttpClient httpClient)
{
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 81751545c..dfddae24d 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -1736,5 +1736,113 @@ namespace MediaBrowser.Server.Implementations.Library
return new List<FileSystemInfo>();
}
+
+ public IEnumerable<Trailer> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
+ {
+ var files = fileSystemChildren.OfType<DirectoryInfo>()
+ .Where(i => string.Equals(i.Name, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase))
+ .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
+ .ToList();
+
+ var extraTypes = new List<ExtraType> { ExtraType.Trailer };
+ var suffixes = BaseItem.ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
+ .Select(i => i.Key)
+ .ToList();
+
+ files.AddRange(fileSystemChildren.OfType<FileInfo>()
+ .Where(i =>
+ {
+ var nameEithoutExtension = _fileSystem.GetFileNameWithoutExtension(i);
+
+ if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
+ {
+ return false;
+ }
+
+ return !string.Equals(owner.Path, i.FullName, StringComparison.OrdinalIgnoreCase);
+ }));
+
+ return ResolvePaths<Trailer>(files, directoryService, null).Select(video =>
+ {
+ // Try to retrieve it from the db. If we don't find it, use the resolved version
+ var dbItem = GetItemById(video.Id) as Trailer;
+
+ if (dbItem != null)
+ {
+ video = dbItem;
+ }
+
+ if (video != null)
+ {
+ video.ExtraType = ExtraType.Trailer;
+ }
+
+ return video;
+
+ // Sort them so that the list can be easily compared for changes
+ }).OrderBy(i => i.Path).ToList();
+ }
+
+ public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
+ {
+ var files = fileSystemChildren.OfType<DirectoryInfo>()
+ .Where(i => string.Equals(i.Name, "extras", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "specials", StringComparison.OrdinalIgnoreCase))
+ .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
+ .ToList();
+
+ var extraTypes = new List<ExtraType> { ExtraType.BehindTheScenes, ExtraType.DeletedScene, ExtraType.Interview, ExtraType.Sample, ExtraType.Scene, ExtraType.Clip };
+ var suffixes = BaseItem.ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
+ .Select(i => i.Key)
+ .ToList();
+
+ files.AddRange(fileSystemChildren.OfType<FileInfo>()
+ .Where(i =>
+ {
+ var nameEithoutExtension = _fileSystem.GetFileNameWithoutExtension(i);
+
+ if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
+ {
+ return false;
+ }
+
+ return !string.Equals(owner.Path, i.FullName, StringComparison.OrdinalIgnoreCase);
+ }));
+
+ return ResolvePaths<Video>(files, directoryService, null).Select(video =>
+ {
+ // Try to retrieve it from the db. If we don't find it, use the resolved version
+ var dbItem = GetItemById(video.Id) as Video;
+
+ if (dbItem != null)
+ {
+ video = dbItem;
+ }
+
+ if (video != null)
+ {
+ SetExtraTypeFromFilename(video);
+ }
+
+ return video;
+
+ // Sort them so that the list can be easily compared for changes
+ }).OrderBy(i => i.Path).ToList();
+ }
+
+ private void SetExtraTypeFromFilename(Video item)
+ {
+ var name = System.IO.Path.GetFileNameWithoutExtension(item.Path) ?? string.Empty;
+
+ foreach (var suffix in BaseItem.ExtraSuffixes)
+ {
+ if (name.EndsWith(suffix.Key, StringComparison.OrdinalIgnoreCase))
+ {
+ item.ExtraType = suffix.Value;
+ return;
+ }
+ }
+
+ item.ExtraType = ExtraType.Clip;
+ }
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs
index 575ffec14..60116ac61 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs
@@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return _libraryManager.ValidateArtists(cancellationToken, progress);
+ return ((LibraryManager)_libraryManager).ValidateArtists(cancellationToken, progress);
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs
index 097e94216..ae6c863a7 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresPostScanTask.cs
@@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return _libraryManager.ValidateGameGenres(cancellationToken, progress);
+ return ((LibraryManager)_libraryManager).ValidateGameGenres(cancellationToken, progress);
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs
index d7add8574..f1d0ef370 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GenresPostScanTask.cs
@@ -29,7 +29,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return _libraryManager.ValidateGenres(cancellationToken, progress);
+ return ((LibraryManager)_libraryManager).ValidateGenres(cancellationToken, progress);
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs
index da378228a..280dd90f4 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs
@@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return _libraryManager.ValidateMusicGenres(cancellationToken, progress);
+ return ((LibraryManager)_libraryManager).ValidateMusicGenres(cancellationToken, progress);
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs
index a3a8b8678..0f998b070 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/StudiosPostScanTask.cs
@@ -32,7 +32,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return _libraryManager.ValidateStudios(cancellationToken, progress);
+ return ((LibraryManager)_libraryManager).ValidateStudios(cancellationToken, progress);
}
}
}