瀏覽代碼

store person sort order in xml

Luke Pulverenti 11 年之前
父節點
當前提交
6ee94ee1a2

+ 16 - 2
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1198,6 +1198,7 @@ namespace MediaBrowser.Controller.Entities
                 if (existing != null)
                 {
                     existing.Type = PersonType.GuestStar;
+                    existing.SortOrder = person.SortOrder ?? existing.SortOrder;
                     return;
                 }
             }
@@ -1214,16 +1215,29 @@ namespace MediaBrowser.Controller.Entities
                 else
                 {
                     // Was there, if no role and we have one - fill it in
-                    if (string.IsNullOrWhiteSpace(existing.Role) && !string.IsNullOrWhiteSpace(person.Role)) existing.Role = person.Role;
+                    if (string.IsNullOrWhiteSpace(existing.Role) && !string.IsNullOrWhiteSpace(person.Role))
+                    {
+                        existing.Role = person.Role;
+                    }
+
+                    existing.SortOrder = person.SortOrder ?? existing.SortOrder;
                 }
             }
             else
             {
+                var existing = People.FirstOrDefault(p =>
+                            string.Equals(p.Name, person.Name, StringComparison.OrdinalIgnoreCase) &&
+                            string.Equals(p.Type, person.Type, StringComparison.OrdinalIgnoreCase));
+
                 // Check for dupes based on the combination of Name and Type
-                if (!People.Any(p => string.Equals(p.Name, person.Name, StringComparison.OrdinalIgnoreCase) && string.Equals(p.Type, person.Type, StringComparison.OrdinalIgnoreCase)))
+                if (existing == null)
                 {
                     People.Add(person);
                 }
+                else
+                {
+                    existing.SortOrder = person.SortOrder ?? existing.SortOrder;
+                }
             }
         }
 

+ 16 - 1
MediaBrowser.Controller/Providers/BaseItemXmlParser.cs

@@ -1075,6 +1075,7 @@ namespace MediaBrowser.Controller.Providers
             var names = new List<string>();
             var type = "Actor";  // If type is not specified assume actor
             var role = string.Empty;
+            int? sortOrder = null;
 
             reader.MoveToContent();
 
@@ -1109,6 +1110,20 @@ namespace MediaBrowser.Controller.Providers
                                 }
                                 break;
                             }
+                        case "SortOrder":
+                            {
+                                var val = reader.ReadElementContentAsString();
+
+                                if (!string.IsNullOrWhiteSpace(val))
+                                {
+                                    int intVal;
+                                    if (int.TryParse(val, NumberStyles.Integer, _usCulture, out intVal))
+                                    {
+                                        sortOrder = intVal;
+                                    }
+                                }
+                                break;
+                            }
 
                         default:
                             reader.Skip();
@@ -1117,7 +1132,7 @@ namespace MediaBrowser.Controller.Providers
                 }
             }
 
-            return names.Select(n => new PersonInfo { Name = n.Trim(), Role = role, Type = type });
+            return names.Select(n => new PersonInfo { Name = n.Trim(), Role = role, Type = type, SortOrder = sortOrder });
         }
 
         /// <summary>

+ 6 - 0
MediaBrowser.Providers/Savers/XmlSaverHelpers.cs

@@ -463,6 +463,12 @@ namespace MediaBrowser.Providers.Savers
                     builder.Append("<Name>" + SecurityElement.Escape(person.Name) + "</Name>");
                     builder.Append("<Type>" + SecurityElement.Escape(person.Type) + "</Type>");
                     builder.Append("<Role>" + SecurityElement.Escape(person.Role) + "</Role>");
+
+                    if (person.SortOrder.HasValue)
+                    {
+                        builder.Append("<SortOrder>" + SecurityElement.Escape(person.SortOrder.Value.ToString(UsCulture)) + "</SortOrder>");
+                    }
+
                     builder.Append("</Person>");
                 }