mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 06:17:14 -04:00
initial support of multiple movies in folder
This commit is contained in:
parent
612b7e55d2
commit
e934783b95
@ -47,7 +47,7 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||||||
|
|
||||||
// Must have a parent to have special features
|
// Must have a parent to have special features
|
||||||
// In other words, it must be part of the Parent/Child tree
|
// In other words, it must be part of the Parent/Child tree
|
||||||
if (LocationType == LocationType.FileSystem && Parent != null)
|
if (LocationType == LocationType.FileSystem && Parent != null && !IsInMixedFolder)
|
||||||
{
|
{
|
||||||
specialFeaturesChanged = await RefreshSpecialFeatures(cancellationToken, forceSave, forceRefresh, allowSlowProviders).ConfigureAwait(false);
|
specialFeaturesChanged = await RefreshSpecialFeatures(cancellationToken, forceSave, forceRefresh, allowSlowProviders).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,8 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetPlayableStreamFiles(Path);
|
return GetPlayableStreamFiles(Path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsInMixedFolder { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should be overridden to return the proper folder where metadata lives
|
/// Should be overridden to return the proper folder where metadata lives
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -86,6 +88,11 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
if (IsInMixedFolder)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return VideoType == VideoType.VideoFile || VideoType == VideoType.Iso || IsMultiPart;
|
return VideoType == VideoType.VideoFile || VideoType == VideoType.Iso || IsMultiPart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,9 +95,11 @@ namespace MediaBrowser.Providers.Savers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XmlSaverHelpers.AddMediaInfo((Video)item, builder);
|
var video = (Video)item;
|
||||||
|
|
||||||
XmlSaverHelpers.AddChapters((Video)item, builder, _itemRepository);
|
XmlSaverHelpers.AddMediaInfo(video, builder);
|
||||||
|
|
||||||
|
XmlSaverHelpers.AddChapters(video, builder, _itemRepository);
|
||||||
|
|
||||||
builder.Append("</Title>");
|
builder.Append("</Title>");
|
||||||
|
|
||||||
@ -117,9 +119,11 @@ namespace MediaBrowser.Providers.Savers
|
|||||||
|
|
||||||
public string GetSavePath(BaseItem item)
|
public string GetSavePath(BaseItem item)
|
||||||
{
|
{
|
||||||
return item.ResolveArgs.IsDirectory ?
|
var video = (Video)item;
|
||||||
Path.Combine(item.MetaLocation, "movie.xml") :
|
|
||||||
Path.ChangeExtension(item.Path, ".xml");
|
return video.IsInMixedFolder ?
|
||||||
|
Path.ChangeExtension(item.Path, ".xml") :
|
||||||
|
Path.Combine(item.MetaLocation, "movie.xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
|
|||||||
|
|
||||||
var collectionType = args.Parent == null ? null : _libraryManager.FindCollectionType(args.Parent);
|
var collectionType = args.Parent == null ? null : _libraryManager.FindCollectionType(args.Parent);
|
||||||
|
|
||||||
|
// Find movies with their own folders
|
||||||
if (isDirectory)
|
if (isDirectory)
|
||||||
{
|
{
|
||||||
if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1 ||
|
if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||||
@ -115,7 +116,41 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
|
|||||||
return FindMovie<Movie>(args.Path, args.FileSystemChildren);
|
return FindMovie<Movie>(args.Path, args.FileSystemChildren);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
// Find movies that are mixed in the same folder
|
||||||
|
if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||||
|
string.Equals(collectionType, CollectionType.Trailers, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return ResolveVideo<Trailer>(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
Video item = null;
|
||||||
|
|
||||||
|
if (args.Path.IndexOf("[musicvideos]", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||||
|
string.Equals(collectionType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
item = ResolveVideo<MusicVideo>(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.Path.IndexOf("[adultvideos]", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||||
|
string.Equals(collectionType, CollectionType.AdultVideos, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
item = ResolveVideo<AdultVideo>(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// To find a movie file, the collection type must be movies or boxsets
|
||||||
|
// Otherwise we'll consider it a plain video and let the video resolver handle it
|
||||||
|
if (string.Equals(collectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
string.Equals(collectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
item = ResolveVideo<Movie>(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
item.IsInMixedFolder = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -238,9 +238,29 @@ namespace MediaBrowser.Server.Implementations.Providers
|
|||||||
|
|
||||||
filename += "." + extension.ToLower();
|
filename += "." + extension.ToLower();
|
||||||
|
|
||||||
var path = (saveLocally && !string.IsNullOrEmpty(item.MetaLocation)) ?
|
string path = null;
|
||||||
Path.Combine(item.MetaLocation, filename) :
|
|
||||||
_remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id, filename);
|
if (saveLocally)
|
||||||
|
{
|
||||||
|
var video = item as Video;
|
||||||
|
|
||||||
|
if (video != null && video.IsInMixedFolder)
|
||||||
|
{
|
||||||
|
var folder = Path.GetDirectoryName(video.Path);
|
||||||
|
|
||||||
|
path = Path.Combine(folder, Path.GetFileNameWithoutExtension(video.Path) + "-" + filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(path) && !string.IsNullOrEmpty(item.MetaLocation))
|
||||||
|
{
|
||||||
|
path = Path.Combine(item.MetaLocation, filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(path))
|
||||||
|
{
|
||||||
|
path = _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id, filename);
|
||||||
|
}
|
||||||
|
|
||||||
var parentPath = Path.GetDirectoryName(path);
|
var parentPath = Path.GetDirectoryName(path);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user