mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-27 10:58:44 +01:00
Moved Movies into the main project
This commit is contained in:
parent
1fc7f8bd2d
commit
2884df296c
@@ -57,6 +57,10 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Providers\Movies\MovieProviderFromXml.cs" />
|
||||
<Compile Include="Providers\Movies\MovieSpecialFeaturesProvider.cs" />
|
||||
<Compile Include="Resolvers\Movies\BoxSetResolver.cs" />
|
||||
<Compile Include="Resolvers\Movies\MovieResolver.cs" />
|
||||
<Compile Include="ServerApplicationPaths.cs" />
|
||||
<Compile Include="Library\ItemResolveEventArgs.cs" />
|
||||
<Compile Include="FFMpeg\FFProbe.cs" />
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Xml;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Entities.Movies;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers.Movies
|
||||
{
|
||||
[Export(typeof(BaseMetadataProvider))]
|
||||
public class MovieProviderFromXml : BaseMetadataProvider
|
||||
{
|
||||
public override bool Supports(BaseEntity item)
|
||||
{
|
||||
return item is Movie;
|
||||
}
|
||||
|
||||
public override MetadataProviderPriority Priority
|
||||
{
|
||||
get { return MetadataProviderPriority.First; }
|
||||
}
|
||||
|
||||
public override async Task FetchAsync(BaseEntity item, ItemResolveEventArgs args)
|
||||
{
|
||||
await Task.Run(() => { Fetch(item, args); }).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void Fetch(BaseEntity item, ItemResolveEventArgs args)
|
||||
{
|
||||
if (args.ContainsFile("movie.xml"))
|
||||
{
|
||||
new BaseItemXmlParser<Movie>().Fetch(item as Movie, Path.Combine(args.Path, "movie.xml"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Entities.Movies;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers.Movies
|
||||
{
|
||||
[Export(typeof(BaseMetadataProvider))]
|
||||
public class MovieSpecialFeaturesProvider : BaseMetadataProvider
|
||||
{
|
||||
public override bool Supports(BaseEntity item)
|
||||
{
|
||||
return item is Movie;
|
||||
}
|
||||
|
||||
public override MetadataProviderPriority Priority
|
||||
{
|
||||
get { return MetadataProviderPriority.First; }
|
||||
}
|
||||
|
||||
public async override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args)
|
||||
{
|
||||
if (args.ContainsFolder("specials"))
|
||||
{
|
||||
List<Video> items = new List<Video>();
|
||||
|
||||
foreach (WIN32_FIND_DATA file in FileData.GetFileSystemEntries(Path.Combine(args.Path, "specials"), "*"))
|
||||
{
|
||||
Video video = await Kernel.Instance.ItemController.GetItem(file.Path, fileInfo: file).ConfigureAwait(false) as Video;
|
||||
|
||||
if (video != null)
|
||||
{
|
||||
items.Add(video);
|
||||
}
|
||||
}
|
||||
|
||||
(item as Movie).SpecialFeatures = items;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
28
MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs
Normal file
28
MediaBrowser.Controller/Resolvers/Movies/BoxSetResolver.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities.Movies;
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.IO;
|
||||
|
||||
namespace MediaBrowser.Controller.Resolvers.Movies
|
||||
{
|
||||
[Export(typeof(IBaseItemResolver))]
|
||||
public class BoxSetResolver : BaseFolderResolver<BoxSet>
|
||||
{
|
||||
protected override BoxSet Resolve(ItemResolveEventArgs args)
|
||||
{
|
||||
// It's a boxset if all of the following conditions are met:
|
||||
// Is a Directory
|
||||
// Contains [boxset] in the path
|
||||
if (args.IsDirectory)
|
||||
{
|
||||
if (Path.GetFileName(args.Path).IndexOf("[boxset]", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
return new BoxSet();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
90
MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs
Normal file
90
MediaBrowser.Controller/Resolvers/Movies/MovieResolver.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Entities.Movies;
|
||||
using System.ComponentModel.Composition;
|
||||
|
||||
namespace MediaBrowser.Controller.Resolvers.Movies
|
||||
{
|
||||
[Export(typeof(IBaseItemResolver))]
|
||||
public class MovieResolver : BaseVideoResolver<Movie>
|
||||
{
|
||||
protected override Movie Resolve(ItemResolveEventArgs args)
|
||||
{
|
||||
// Must be a directory and under a 'Movies' VF
|
||||
if (args.IsDirectory)
|
||||
{
|
||||
// If the parent is not a boxset, the only other allowed parent type is Folder
|
||||
if (!(args.Parent is BoxSet))
|
||||
{
|
||||
if (args.Parent != null && args.Parent.GetType() != typeof(Folder))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Optimization to avoid running all these tests against VF's
|
||||
if (args.Parent != null && args.Parent.IsRoot)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Return a movie if the video resolver finds something in the folder
|
||||
return GetMovie(args);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected override void SetInitialItemValues(Movie item, ItemResolveEventArgs args)
|
||||
{
|
||||
base.SetInitialItemValues(item, args);
|
||||
|
||||
SetProviderIdFromPath(item);
|
||||
}
|
||||
|
||||
private void SetProviderIdFromPath(Movie item)
|
||||
{
|
||||
string srch = "[tmdbid=";
|
||||
int index = item.Path.IndexOf(srch, System.StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
string id = item.Path.Substring(index + srch.Length);
|
||||
|
||||
id = id.Substring(0, id.IndexOf(']'));
|
||||
|
||||
item.SetProviderId(MetadataProviders.Tmdb, id);
|
||||
}
|
||||
}
|
||||
|
||||
private Movie GetMovie(ItemResolveEventArgs args)
|
||||
{
|
||||
// Loop through each child file/folder and see if we find a video
|
||||
for (var i = 0; i < args.FileSystemChildren.Length; i++)
|
||||
{
|
||||
var child = args.FileSystemChildren[i];
|
||||
|
||||
ItemResolveEventArgs childArgs = new ItemResolveEventArgs()
|
||||
{
|
||||
FileInfo = child,
|
||||
FileSystemChildren = new WIN32_FIND_DATA[] { },
|
||||
Path = child.Path
|
||||
};
|
||||
|
||||
var item = base.Resolve(childArgs);
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
return new Movie()
|
||||
{
|
||||
Path = item.Path,
|
||||
VideoType = item.VideoType
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user