瀏覽代碼

Merge pull request #1512 from MediaBrowser/dev

Dev
Luke 9 年之前
父節點
當前提交
6eaf10679e

+ 5 - 0
MediaBrowser.Api/Playback/Progressive/VideoService.cs

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

+ 1 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

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

+ 2 - 0
MediaBrowser.Controller/Entities/InternalItemsQuery.cs

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

+ 7 - 0
MediaBrowser.Controller/Library/ILibraryManager.cs

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

+ 1 - 9
MediaBrowser.Providers/Folders/DefaultImageProvider.cs

@@ -25,8 +25,7 @@ namespace MediaBrowser.Providers.Folders
         {
             return new List<ImageType>
             {
-                ImageType.Primary,
-                ImageType.Thumb
+                ImageType.Primary
             };
         }
 
@@ -57,13 +56,6 @@ namespace MediaBrowser.Providers.Folders
                           ProviderName = Name,
                           Url = url,
                           Type = ImageType.Primary
-                     },
-
-                     new RemoteImageInfo
-                     {
-                          ProviderName = Name,
-                          Url = url,
-                          Type = ImageType.Thumb
                      }
                 });
             }

+ 1 - 1
MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs

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

+ 23 - 0
MediaBrowser.Server.Implementations/Library/LibraryManager.cs

@@ -788,6 +788,29 @@ namespace MediaBrowser.Server.Implementations.Library
             return _userRootFolder;
         }
 
+        public BaseItem FindByPath(string path)
+        {
+            var query = new InternalItemsQuery
+            {
+                Path = path
+            };
+
+            // Only use the database result if there's exactly one item, otherwise we run the risk of returning old data that hasn't been cleaned yet.
+            var items = GetItemIds(query).Select(GetItemById).Where(i => i != null).ToArray();
+
+            if (items.Length == 1)
+            {
+                return items[0];
+            }
+
+            if (items.Length == 0)
+            {
+                return null;
+            }
+            
+            return RootFolder.FindByPath(path);
+        }
+
         /// <summary>
         /// Gets a Person
         /// </summary>

+ 7 - 0
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -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 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 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;
             }
 
+            if (!string.IsNullOrWhiteSpace(query.Path))
+            {
+                whereClauses.Add("Path=@Path");
+                cmd.Parameters.Add(cmd, "@Path", DbType.String).Value = query.Path;
+            }
+
             if (query.MinEndDate.HasValue)
             {
                 whereClauses.Add("EndDate>=@MinEndDate");

+ 2 - 2
MediaBrowser.Server.Implementations/Sync/SyncHelper.cs

@@ -10,11 +10,11 @@ namespace MediaBrowser.Server.Implementations.Sync
             {
                 if (string.Equals(quality, "medium", StringComparison.OrdinalIgnoreCase))
                 {
-                    profileBitrate = Math.Min(Convert.ToInt32(profileBitrate.Value * .7), 4000000);
+                    profileBitrate = Math.Min(profileBitrate.Value, 4000000);
                 }
                 else if (string.Equals(quality, "low", StringComparison.OrdinalIgnoreCase))
                 {
-                    profileBitrate = Math.Min(Convert.ToInt32(profileBitrate.Value * .5), 1500000);
+                    profileBitrate = Math.Min(profileBitrate.Value, 1500000);
                 }
             }