aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Providers')
-rw-r--r--MediaBrowser.Controller/Providers/BaseItemXmlParser.cs12
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs5
-rw-r--r--MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/LocalMetadataResult.cs18
-rw-r--r--MediaBrowser.Controller/Providers/MetadataResult.cs53
5 files changed, 62 insertions, 28 deletions
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index c1a4fa765..383d0881e 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -74,6 +74,8 @@ namespace MediaBrowser.Controller.Providers
/// <param name="cancellationToken">The cancellation token.</param>
private void Fetch(MetadataResult<T> item, string metadataFile, XmlReaderSettings settings, Encoding encoding, CancellationToken cancellationToken)
{
+ item.ResetPeople();
+
using (var streamReader = new StreamReader(metadataFile, encoding))
{
// Use XmlReader for best performance
@@ -492,7 +494,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(itemResult.People, p);
+ itemResult.AddPerson(p);
}
break;
}
@@ -504,7 +506,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(itemResult.People, p);
+ itemResult.AddPerson(p);
}
break;
}
@@ -529,7 +531,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(itemResult.People, p);
+ itemResult.AddPerson(p);
}
}
break;
@@ -543,7 +545,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(itemResult.People, p);
+ itemResult.AddPerson(p);
}
break;
}
@@ -1156,7 +1158,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(item.People, person);
+ item.AddPerson(person);
}
}
break;
diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs
index 9e549dcf3..79ffb0d01 100644
--- a/MediaBrowser.Controller/Providers/DirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/DirectoryService.cs
@@ -58,8 +58,9 @@ namespace MediaBrowser.Controller.Providers
try
{
- var list = new DirectoryInfo(path)
- .EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly);
+ // using EnumerateFileSystemInfos doesn't handle reparse points (symlinks)
+ var list = new DirectoryInfo(path).EnumerateDirectories("*", SearchOption.TopDirectoryOnly)
+ .Concat<FileSystemInfo>(new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly));
// Seeing dupes on some users file system for some reason
foreach (var item in list)
diff --git a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs
index 3a8ef7325..28a535310 100644
--- a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs
@@ -18,7 +18,7 @@ namespace MediaBrowser.Controller.Providers
/// <param name="directoryService">The directory service.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{MetadataResult{`0}}.</returns>
- Task<LocalMetadataResult<TItemType>> GetMetadata(ItemInfo info,
+ Task<MetadataResult<TItemType>> GetMetadata(ItemInfo info,
IDirectoryService directoryService,
CancellationToken cancellationToken);
}
diff --git a/MediaBrowser.Controller/Providers/LocalMetadataResult.cs b/MediaBrowser.Controller/Providers/LocalMetadataResult.cs
deleted file mode 100644
index 76b7a3136..000000000
--- a/MediaBrowser.Controller/Providers/LocalMetadataResult.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Controller.Providers
-{
- public class LocalMetadataResult<T> : MetadataResult<T>
- where T : IHasMetadata
- {
- public List<LocalImageInfo> Images { get; set; }
- public List<UserItemData> UserDataLIst { get; set; }
-
- public LocalMetadataResult()
- {
- Images = new List<LocalImageInfo>();
- UserDataLIst = new List<UserItemData>();
- }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/MetadataResult.cs b/MediaBrowser.Controller/Providers/MetadataResult.cs
index a18dd83e8..17175f91c 100644
--- a/MediaBrowser.Controller/Providers/MetadataResult.cs
+++ b/MediaBrowser.Controller/Providers/MetadataResult.cs
@@ -1,18 +1,67 @@
using MediaBrowser.Controller.Entities;
+using System;
using System.Collections.Generic;
+using System.Linq;
namespace MediaBrowser.Controller.Providers
{
public class MetadataResult<T>
{
+ public List<LocalImageInfo> Images { get; set; }
+ public List<UserItemData> UserDataList { get; set; }
+
+ public MetadataResult()
+ {
+ Images = new List<LocalImageInfo>();
+ }
+
public List<PersonInfo> People { get; set; }
public bool HasMetadata { get; set; }
public T Item { get; set; }
- public MetadataResult()
+ public void AddPerson(PersonInfo p)
{
- People = new List<PersonInfo>();
+ if (People == null)
+ {
+ People = new List<PersonInfo>();
+ }
+
+ PeopleHelper.AddPerson(People, p);
+ }
+
+ /// <summary>
+ /// Not only does this clear, but initializes the list so that services can differentiate between a null list and zero people
+ /// </summary>
+ public void ResetPeople()
+ {
+ if (People == null)
+ {
+ People = new List<PersonInfo>();
+ }
+ People.Clear();
+ }
+
+ public UserItemData GetOrAddUserData(string userId)
+ {
+ if (UserDataList == null)
+ {
+ UserDataList = new List<UserItemData>();
+ }
+
+ var userData = UserDataList.FirstOrDefault(i => string.Equals(userId, i.UserId.ToString("N"), StringComparison.OrdinalIgnoreCase));
+
+ if (userData == null)
+ {
+ userData = new UserItemData()
+ {
+ UserId = new Guid(userId)
+ };
+
+ UserDataList.Add(userData);
+ }
+
+ return userData;
}
}
} \ No newline at end of file