Explorar o código

support samsung dlna bookmarks

Luke Pulverenti %!s(int64=8) %!d(string=hai) anos
pai
achega
5765b51680

+ 3 - 3
Emby.Dlna/ContentDirectory/ControlHandler.cs

@@ -268,7 +268,7 @@ namespace Emby.Dlna.ContentDirectory
                     }
                     else
                     {
-                        _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, item, null, null, deviceId, filter);
+                        _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, item, user, null, null, deviceId, filter);
                     }
 
                     provided++;
@@ -294,7 +294,7 @@ namespace Emby.Dlna.ContentDirectory
                         }
                         else
                         {
-                            _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, childItem, item, serverItem.StubType, deviceId, filter);
+                            _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, childItem, user, item, serverItem.StubType, deviceId, filter);
                         }
                     }
                 }
@@ -390,7 +390,7 @@ namespace Emby.Dlna.ContentDirectory
                     }
                     else
                     {
-                        _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, i, item, serverItem.StubType, deviceId, filter);
+                        _didlBuilder.WriteItemElement(_config.GetDlnaConfiguration(), writer, i, user, item, serverItem.StubType, deviceId, filter);
                     }
                 }
 

+ 43 - 15
Emby.Dlna/Didl/DidlBuilder.cs

@@ -61,7 +61,7 @@ namespace Emby.Dlna.Didl
             _user = user;
         }
 
-        public string GetItemDidl(DlnaOptions options, BaseItem item, BaseItem context, string deviceId, Filter filter, StreamInfo streamInfo)
+        public string GetItemDidl(DlnaOptions options, BaseItem item, User user, BaseItem context, string deviceId, Filter filter, StreamInfo streamInfo)
         {
             var settings = new XmlWriterSettings
             {
@@ -86,7 +86,7 @@ namespace Emby.Dlna.Didl
 
                 WriteXmlRootAttributes(_profile, writer);
 
-                WriteItemElement(options, writer, item, context, null, deviceId, filter, streamInfo);
+                WriteItemElement(options, writer, item, user, context, null, deviceId, filter, streamInfo);
 
                 writer.WriteFullEndElement();
                 //writer.WriteEndDocument();
@@ -111,7 +111,15 @@ namespace Emby.Dlna.Didl
             }
         }
 
-        public void WriteItemElement(DlnaOptions options, XmlWriter writer, BaseItem item, BaseItem context, StubType? contextStubType, string deviceId, Filter filter, StreamInfo streamInfo = null)
+        public void WriteItemElement(DlnaOptions options, 
+            XmlWriter writer, 
+            BaseItem item, 
+            User user,
+            BaseItem context, 
+            StubType? contextStubType, 
+            string deviceId, 
+            Filter filter, 
+            StreamInfo streamInfo = null)
         {
             var clientId = GetClientId(item, null);
 
@@ -135,7 +143,7 @@ namespace Emby.Dlna.Didl
 
             AddGeneralProperties(item, null, context, writer, filter);
 
-            //AddBookmarkInfo(item, user, element);
+            AddSamsungBookmarkInfo(item, user, writer);
 
             // refID?
             // storeAttribute(itemNode, object, ClassProperties.REF_ID, false);
@@ -555,17 +563,37 @@ namespace Emby.Dlna.Didl
             writer.WriteFullEndElement();
         }
 
-        //private void AddBookmarkInfo(BaseItem item, User user, XmlElement element)
-        //{
-        //    var userdata = _userDataManager.GetUserData(user.Id, item.GetUserDataKey());
-
-        //    if (userdata.PlaybackPositionTicks > 0)
-        //    {
-        //        var dcmInfo = element.OwnerDocument.CreateElement("sec", "dcmInfo", NS_SEC);
-        //        dcmInfo.InnerText = string.Format("BM={0}", Convert.ToInt32(TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds).ToString(_usCulture));
-        //        element.AppendChild(dcmInfo);
-        //    }
-        //}
+        private void AddSamsungBookmarkInfo(BaseItem item, User user, XmlWriter writer)
+        {
+            if (!item.SupportsPositionTicksResume || item is Folder)
+            {
+                return;
+            }
+
+            XmlAttribute secAttribute = null;
+            foreach (var attribute in _profile.XmlRootAttributes)
+            {
+                if (string.Equals(attribute.Name, "xmlns:sec", StringComparison.OrdinalIgnoreCase))
+                {
+                    secAttribute = attribute;
+                    break;
+                }
+            }
+
+            // Not a samsung device
+            if (secAttribute == null)
+            {
+                return;
+            }
+
+            var userdata = _userDataManager.GetUserData(user.Id, item);
+
+            if (userdata.PlaybackPositionTicks > 0)
+            {
+                var elementValue = string.Format("BM={0}", Convert.ToInt32(TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds).ToString(_usCulture));
+                AddValue(writer, "sec", "dcmInfo", elementValue, secAttribute.Value);
+            }
+        }
 
         /// <summary>
         /// Adds fields used by both items and folders

+ 1 - 1
Emby.Dlna/PlayTo/PlayToController.cs

@@ -493,7 +493,7 @@ namespace Emby.Dlna.PlayTo
             playlistItem.StreamUrl = playlistItem.StreamInfo.ToDlnaUrl(_serverAddress, _accessToken);
 
             var itemXml = new DidlBuilder(profile, user, _imageProcessor, _serverAddress, _accessToken, _userDataManager, _localization, _mediaSourceManager, _logger, _libraryManager, _mediaEncoder)
-                .GetItemDidl(_config.GetDlnaConfiguration(), item, null, _session.DeviceId, new Filter(), playlistItem.StreamInfo);
+                .GetItemDidl(_config.GetDlnaConfiguration(), item, user, null, _session.DeviceId, new Filter(), playlistItem.StreamInfo);
 
             playlistItem.Didl = itemXml;