Fix tvdb guest stars loop

This commit is contained in:
Claus Vium 2019-08-15 14:54:22 +02:00
parent 685e9e4f58
commit f4a99beb16

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Net;
@ -193,24 +194,43 @@ namespace MediaBrowser.Providers.TV.TheTVDB
});
}
foreach (var person in episode.GuestStars)
// GuestStars is a weird list of names and roles
// Example:
// 1: Some Actor (Role1
// 2: Role2
// 3: Role3)
// 4: Another Actor (Role1
// ...
for (var i = 0; i < episode.GuestStars.Length; ++i)
{
var index = person.IndexOf('(');
string role = null;
var name = person;
var currentActor = episode.GuestStars[i];
var roleStartIndex = currentActor.IndexOf('(');
if (index != -1)
var roles = new List<string> {currentActor.Substring(roleStartIndex + 1)};
var name = currentActor.Substring(0, roleStartIndex).Trim();
// Fetch all roles
for (var j = i + 1; j < episode.GuestStars.Length; ++j)
{
role = person.Substring(index + 1).Trim().TrimEnd(')');
var currentRole = episode.GuestStars[j];
var roleEndIndex = currentRole.IndexOf(')');
name = person.Substring(0, index).Trim();
if (roleEndIndex != -1)
{
roles.Add(currentRole.TrimEnd(')'));
// Update the outer index (keep in mind it adds 1 after the iteration)
i = j;
break;
}
roles.Add(currentRole);
}
result.AddPerson(new PersonInfo
{
Type = PersonType.GuestStar,
Name = name,
Role = role
Role = string.Join(", ", roles)
});
}