aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Miguel Almánzar <ruisu15@gmail.com>2013-06-27 23:27:32 -0400
committerLuis Miguel Almánzar <ruisu15@gmail.com>2013-06-27 23:27:32 -0400
commit7418a247cab3211418c5d603f59ed4843bb7c886 (patch)
treec81fc75eb0e362986deabbfd245d72479b247ffa
parent8879240fc1128f6da99a985b68aef46a940a7ab7 (diff)
Fixes #308 - Parse GuestStars roles
-rw-r--r--MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs30
1 files changed, 24 insertions, 6 deletions
diff --git a/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs
index ddc7c8e7d..eb79075ff 100644
--- a/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Text.RegularExpressions;
using System.Xml.Linq;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
@@ -313,9 +314,17 @@ namespace MediaBrowser.Providers.TV
if (actors != null)
{
// Sometimes tvdb actors have leading spaces
- foreach (var person in actors.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries)
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .Select(str => new PersonInfo {Type = PersonType.GuestStar, Name = str.Trim()}))
+ var persons = Regex.Matches(actors, @"([^|()]|\([^)]*\)*)+")
+ .Cast<Match>()
+ .Select(m => m.Value).Where(i => !string.IsNullOrWhiteSpace(i) && !string.IsNullOrEmpty(i));
+ foreach (var person in persons.Select(str => {
+ var nameGroup = str.Split(new[] {'('}, 2, StringSplitOptions.RemoveEmptyEntries);
+ var name = nameGroup[0].Trim();
+ var roles = nameGroup.Count() > 1 ? nameGroup[1].Trim() : null;
+ if (roles != null)
+ roles = roles.EndsWith(")") ? roles.Substring(0, roles.Length - 1) : roles;
+ return new PersonInfo {Type = PersonType.GuestStar, Name = name, Role = roles};
+ }))
{
episode.AddPerson(person);
}
@@ -325,9 +334,18 @@ namespace MediaBrowser.Providers.TV
var extraActors = xmlDocument.SafeGetString("//GuestStars");
if (extraActors == null) continue;
// Sometimes tvdb actors have leading spaces
- foreach (var person in extraActors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .Select(str => new PersonInfo { Type = PersonType.GuestStar, Name = str.Trim() }).Where(person => !episode.People.Any(x=>x.Type == person.Type && x.Name == person.Name)))
+ var persons = Regex.Matches(extraActors, @"([^|()]|\([^)]*\)*)+")
+ .Cast<Match>()
+ .Select(m => m.Value).Where(i => !string.IsNullOrWhiteSpace(i) && !string.IsNullOrEmpty(i));
+ foreach (var person in persons.Select(str => {
+ var nameGroup = str.Split(new[] {'('}, 2, StringSplitOptions.RemoveEmptyEntries);
+ var name = nameGroup[0].Trim();
+ var roles = nameGroup.Count() > 1 ? nameGroup[1].Trim() : null;
+ if (roles != null)
+ roles = roles.EndsWith(")") ? roles.Substring(0, roles.Length - 1) : roles;
+ return new PersonInfo {Type = PersonType.GuestStar, Name = name, Role = roles};
+ }).Where(person => !episode.People.Any(x => x.Type == person.Type && x.Name == person.Name))
+ )
{
episode.AddPerson(person);
}