optimize FindByPath

This commit is contained in:
Luke Pulverenti 2016-03-01 14:39:46 -05:00
parent 177cc41e3d
commit 076a07a546
7 changed files with 40 additions and 2 deletions

View File

@ -148,6 +148,11 @@ namespace MediaBrowser.Api.Playback.Progressive
args += " -bsf:v h264_mp4toannexb"; args += " -bsf:v h264_mp4toannexb";
} }
if (state.RunTimeTicks.HasValue && state.VideoRequest.CopyTimestamps)
{
args += " -copyts -avoid_negative_ts disabled -start_at_zero";
}
return args; return args;
} }

View File

@ -1359,7 +1359,7 @@ namespace MediaBrowser.Controller.Entities
{ {
if (!string.IsNullOrEmpty(info.Path)) if (!string.IsNullOrEmpty(info.Path))
{ {
var itemByPath = LibraryManager.RootFolder.FindByPath(info.Path); var itemByPath = LibraryManager.FindByPath(info.Path);
if (itemByPath == null) if (itemByPath == null)
{ {

View File

@ -45,6 +45,8 @@ namespace MediaBrowser.Controller.Entities
public string NameLessThan { get; set; } public string NameLessThan { get; set; }
public string NameContains { get; set; } public string NameContains { get; set; }
public string Path { get; set; }
public string Person { get; set; } public string Person { get; set; }
public string[] PersonIds { get; set; } public string[] PersonIds { get; set; }
public string[] ItemIds { get; set; } public string[] ItemIds { get; set; }

View File

@ -56,6 +56,13 @@ namespace MediaBrowser.Controller.Library
/// <returns>Task{Person}.</returns> /// <returns>Task{Person}.</returns>
Person GetPerson(string name); Person GetPerson(string name);
/// <summary>
/// Finds the by path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>BaseItem.</returns>
BaseItem FindByPath(string path);
/// <summary> /// <summary>
/// Gets the artist. /// Gets the artist.
/// </summary> /// </summary>

View File

@ -664,7 +664,7 @@ namespace MediaBrowser.Server.Implementations.IO
while (item == null && !string.IsNullOrEmpty(path)) while (item == null && !string.IsNullOrEmpty(path))
{ {
item = LibraryManager.RootFolder.FindByPath(path); item = LibraryManager.FindByPath(path);
path = Path.GetDirectoryName(path); path = Path.GetDirectoryName(path);
} }

View File

@ -788,6 +788,23 @@ namespace MediaBrowser.Server.Implementations.Library
return _userRootFolder; return _userRootFolder;
} }
public BaseItem FindByPath(string path)
{
var query = new InternalItemsQuery
{
Path = path
};
var items = GetItemIds(query).Select(GetItemById).Where(i => i != null).ToArray();
if (items.Length == 1)
{
return items[0];
}
return RootFolder.FindByPath(path);
}
/// <summary> /// <summary>
/// Gets a Person /// Gets a Person
/// </summary> /// </summary>

View File

@ -130,6 +130,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
"create table if not exists TypedBaseItems (guid GUID primary key, type TEXT, data BLOB, ParentId GUID)", "create table if not exists TypedBaseItems (guid GUID primary key, type TEXT, data BLOB, ParentId GUID)",
"create index if not exists idx_TypedBaseItems on TypedBaseItems(guid)", "create index if not exists idx_TypedBaseItems on TypedBaseItems(guid)",
"create index if not exists idx_PathTypedBaseItems on TypedBaseItems(Path)",
"create index if not exists idx_ParentIdTypedBaseItems on TypedBaseItems(ParentId)", "create index if not exists idx_ParentIdTypedBaseItems on TypedBaseItems(ParentId)",
"create table if not exists AncestorIds (ItemId GUID, AncestorId GUID, AncestorIdText TEXT, PRIMARY KEY (ItemId, AncestorId))", "create table if not exists AncestorIds (ItemId GUID, AncestorId GUID, AncestorIdText TEXT, PRIMARY KEY (ItemId, AncestorId))",
@ -1804,6 +1805,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = query.ParentId.Value; cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = query.ParentId.Value;
} }
if (!string.IsNullOrWhiteSpace(query.Path))
{
whereClauses.Add("Path=@Path");
cmd.Parameters.Add(cmd, "@Path", DbType.String).Value = query.Path;
}
if (query.MinEndDate.HasValue) if (query.MinEndDate.HasValue)
{ {
whereClauses.Add("EndDate>=@MinEndDate"); whereClauses.Add("EndDate>=@MinEndDate");