mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-14 02:26:55 -07:00
Fixed #3692
This commit is contained in:
parent
157d173a44
commit
86937d2a1c
4 changed files with 118 additions and 13 deletions
|
@ -44,7 +44,13 @@ namespace Ombi.Api.Plex.Models
|
|||
public string grandparentTheme { get; set; }
|
||||
public string chapterSource { get; set; }
|
||||
public Medium[] Media { get; set; }
|
||||
public PlexGuids[] Guid { get; set; }
|
||||
// public Director[] Director { get; set; }
|
||||
// public Writer[] Writer { get; set; }
|
||||
}
|
||||
|
||||
public class PlexGuids
|
||||
{
|
||||
public string Id { get; set; }
|
||||
}
|
||||
}
|
|
@ -41,6 +41,37 @@ namespace Ombi.Helpers.Tests
|
|||
yield return new TestCaseData("com.plexapp.agents.agent47://456822/999/999?lang=en", ProviderIdType.TvDb).Returns("456822").SetName("Unknown TvDb agent, large episode and season");
|
||||
yield return new TestCaseData("com.plexapp.agents.xbmcnfotv://153021/2/1?lang=xn", ProviderIdType.TvDb).Returns("153021").SetName("xmbc agent, tv episode");
|
||||
yield return new TestCaseData("com.plexapp.agents.xbmcnfotv://153021?lang=xn", ProviderIdType.TvDb).Returns("153021").SetName("xmbc agent, tv show");
|
||||
yield return new TestCaseData("tmdb://610201", ProviderIdType.MovieDb).Returns("610201").SetName("Themoviedb new plex format");
|
||||
}
|
||||
}
|
||||
|
||||
[TestCaseSource(nameof(ProviderIdGuidDataV2))]
|
||||
public void GetProviderIdsFromMetadataTests(string guidInput, ProviderId expected)
|
||||
{
|
||||
var param = guidInput.Split('|', StringSplitOptions.RemoveEmptyEntries);
|
||||
var result = PlexHelper.GetProviderIdsFromMetadata(param);
|
||||
|
||||
Assert.AreEqual(expected.ImdbId, result.ImdbId);
|
||||
Assert.AreEqual(expected.TheMovieDb, result.TheMovieDb);
|
||||
Assert.AreEqual(expected.TheTvDb, result.TheTvDb);
|
||||
}
|
||||
|
||||
public static IEnumerable<TestCaseData> ProviderIdGuidDataV2
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return new TestCaseData("plex://movie/5e1632df2d4d84003e48e54e|imdb://tt9178402|tmdb://610201", new ProviderId { ImdbId = "tt9178402", TheMovieDb = "610201" }).SetName("V2 Regular Plex Id");
|
||||
yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|imdb://tt0119567|tmdb://330", new ProviderId { ImdbId = "tt0119567", TheMovieDb = "330" }).SetName("V2 Regular Plex Id Another");
|
||||
yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|imdb://tt0119567", new ProviderId { ImdbId = "tt0119567" }).SetName("V2 Regular Plex Id Single Imdb");
|
||||
yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|tmdb://330", new ProviderId { TheMovieDb = "330" }).SetName("V2 Regular Plex Id Single Tmdb");
|
||||
yield return new TestCaseData("com.plexapp.agents.thetvdb://269586/2/8?lang=en", new ProviderId { TheTvDb = "269586" }).SetName("V2 Regular TvDb Id");
|
||||
yield return new TestCaseData("com.plexapp.agents.themoviedb://390043?lang=en", new ProviderId { TheMovieDb = "390043" }).SetName("V2 Regular MovieDb Id");
|
||||
yield return new TestCaseData("com.plexapp.agents.imdb://tt2543164?lang=en", new ProviderId { ImdbId = "tt2543164" }).SetName("V2 Regular Imdb Id");
|
||||
yield return new TestCaseData("com.plexapp.agents.agent47://tt2543456?lang=en", new ProviderId { ImdbId = "tt2543456" }).SetName("V2 Unknown IMDB agent");
|
||||
yield return new TestCaseData("com.plexapp.agents.agent47://456822/1/1?lang=en", new ProviderId { TheTvDb = "456822" }).SetName("V2 Unknown TvDb agent");
|
||||
yield return new TestCaseData("com.plexapp.agents.agent47://456822/999/999?lang=en", new ProviderId { TheTvDb = "456822" }).SetName("V2 Unknown TvDb agent, large episode and season");
|
||||
yield return new TestCaseData("com.plexapp.agents.xbmcnfotv://153021/2/1?lang=xn", new ProviderId { TheTvDb = "153021" }).SetName("V2 xmbc agent, tv episode");
|
||||
yield return new TestCaseData("com.plexapp.agents.xbmcnfotv://153021?lang=xn", new ProviderId { TheTvDb = "153021" }).SetName("V2 xmbc agent, tv show");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ namespace Ombi.Helpers
|
|||
//com.plexapp.agents.thetvdb://269586/2/8?lang=en
|
||||
//com.plexapp.agents.themoviedb://390043?lang=en
|
||||
//com.plexapp.agents.imdb://tt2543164?lang=en
|
||||
//plex://movie/5e1632df2d4d84003e48e54e
|
||||
// https://github.com/tidusjar/Ombi/issues/3277
|
||||
if (string.IsNullOrEmpty(guid))
|
||||
{
|
||||
|
@ -57,7 +58,7 @@ namespace Ombi.Helpers
|
|||
TheTvDb = guidSplit[1]
|
||||
};
|
||||
}
|
||||
if (guid.Contains("themoviedb", CompareOptions.IgnoreCase))
|
||||
if (guid.Contains("themoviedb", CompareOptions.IgnoreCase) || guid.Contains("tmdb", CompareOptions.IgnoreCase))
|
||||
{
|
||||
return new ProviderId
|
||||
{
|
||||
|
@ -71,6 +72,13 @@ namespace Ombi.Helpers
|
|||
ImdbId = guidSplit[1]
|
||||
};
|
||||
}
|
||||
if (guid.Contains("plex://", CompareOptions.IgnoreCase))
|
||||
{
|
||||
return new ProviderId
|
||||
{
|
||||
Plex = true
|
||||
};
|
||||
}
|
||||
|
||||
var imdbRegex = new Regex(ImdbMatchExpression, RegexOptions.Compiled);
|
||||
var tvdbRegex = new Regex(TvDbIdMatchExpression, RegexOptions.Compiled);
|
||||
|
@ -102,6 +110,37 @@ namespace Ombi.Helpers
|
|||
$"https://app.plex.tv/web/app#!/server/{machineId}/details?key=library%2Fmetadata%2F{mediaId}";
|
||||
return url;
|
||||
}
|
||||
|
||||
public static ProviderId GetProviderIdsFromMetadata(params string[] guids)
|
||||
{
|
||||
var providerIds = new ProviderId();
|
||||
foreach (var guid in guids)
|
||||
{
|
||||
var provider = GetProviderIdFromPlexGuid(guid);
|
||||
if (provider.Type == ProviderType.Plex)
|
||||
{
|
||||
// There are more guids!
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (provider.Type)
|
||||
{
|
||||
case ProviderType.ImdbId:
|
||||
providerIds.ImdbId = provider.ImdbId;
|
||||
break;
|
||||
case ProviderType.TheMovieDbId:
|
||||
providerIds.TheMovieDb = provider.TheMovieDb;
|
||||
break;
|
||||
case ProviderType.TvDbId:
|
||||
providerIds.TheTvDb = provider.TheTvDb;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(provider.Type));
|
||||
}
|
||||
}
|
||||
|
||||
return providerIds;
|
||||
}
|
||||
}
|
||||
|
||||
public class ProviderId
|
||||
|
@ -109,6 +148,7 @@ namespace Ombi.Helpers
|
|||
public string TheTvDb { get; set; }
|
||||
public string TheMovieDb { get; set; }
|
||||
public string ImdbId { get; set; }
|
||||
public bool Plex { get; set; }
|
||||
|
||||
public ProviderType Type
|
||||
{
|
||||
|
@ -126,6 +166,10 @@ namespace Ombi.Helpers
|
|||
{
|
||||
return ProviderType.TvDbId;
|
||||
}
|
||||
if (Plex)
|
||||
{
|
||||
return ProviderType.Plex;
|
||||
}
|
||||
return ProviderType.ImdbId;
|
||||
}
|
||||
}
|
||||
|
@ -135,6 +179,7 @@ namespace Ombi.Helpers
|
|||
{
|
||||
ImdbId,
|
||||
TheMovieDbId,
|
||||
TvDbId
|
||||
TvDbId,
|
||||
Plex
|
||||
}
|
||||
}
|
|
@ -281,9 +281,21 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
Logger.LogDebug("Adding movie {0}", movie.title);
|
||||
var metaData = await PlexApi.GetMetadata(servers.PlexAuthToken, servers.FullUri,
|
||||
movie.ratingKey);
|
||||
var providerIds = PlexHelper.GetProviderIdFromPlexGuid(metaData.MediaContainer.Metadata
|
||||
.FirstOrDefault()
|
||||
.guid);
|
||||
|
||||
var meta = metaData.MediaContainer.Metadata.FirstOrDefault();
|
||||
var guids = new List<string>
|
||||
{
|
||||
meta.guid
|
||||
};
|
||||
if (meta.Guid != null)
|
||||
{
|
||||
foreach (var g in meta.Guid)
|
||||
{
|
||||
guids.Add(g.Id);
|
||||
}
|
||||
}
|
||||
|
||||
var providerIds = PlexHelper.GetProviderIdsFromMetadata(guids.ToArray());
|
||||
|
||||
var item = new PlexServerContent
|
||||
{
|
||||
|
@ -296,15 +308,15 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
Seasons = new List<PlexSeasonsContent>(),
|
||||
Quality = movie.Media?.FirstOrDefault()?.videoResolution ?? string.Empty
|
||||
};
|
||||
if (providerIds.Type == ProviderType.ImdbId)
|
||||
if (providerIds.ImdbId.HasValue())
|
||||
{
|
||||
item.ImdbId = providerIds.ImdbId;
|
||||
}
|
||||
if (providerIds.Type == ProviderType.TheMovieDbId)
|
||||
if (providerIds.TheMovieDb.HasValue())
|
||||
{
|
||||
item.TheMovieDbId = providerIds.TheMovieDb;
|
||||
}
|
||||
if (providerIds.Type == ProviderType.TvDbId)
|
||||
if (providerIds.TheTvDb.HasValue())
|
||||
{
|
||||
item.TvDbId = providerIds.TheTvDb;
|
||||
}
|
||||
|
@ -563,20 +575,31 @@ namespace Ombi.Schedule.Jobs.Plex
|
|||
|
||||
private static void GetProviderIds(PlexMetadata showMetadata, PlexServerContent existingContent)
|
||||
{
|
||||
var metadata = showMetadata.MediaContainer.Metadata.FirstOrDefault();
|
||||
var guids = new List<string>
|
||||
{
|
||||
metadata.guid
|
||||
};
|
||||
if (metadata.Guid != null)
|
||||
{
|
||||
foreach (var g in metadata.Guid)
|
||||
{
|
||||
guids.Add(g.Id);
|
||||
}
|
||||
}
|
||||
var providerIds =
|
||||
PlexHelper.GetProviderIdFromPlexGuid(showMetadata.MediaContainer.Metadata.FirstOrDefault()
|
||||
.guid);
|
||||
if (providerIds.Type == ProviderType.ImdbId)
|
||||
PlexHelper.GetProviderIdsFromMetadata(guids.ToArray());
|
||||
if (providerIds.ImdbId.HasValue())
|
||||
{
|
||||
existingContent.ImdbId = providerIds.ImdbId;
|
||||
}
|
||||
|
||||
if (providerIds.Type == ProviderType.TheMovieDbId)
|
||||
if (providerIds.TheMovieDb.HasValue())
|
||||
{
|
||||
existingContent.TheMovieDbId = providerIds.TheMovieDb;
|
||||
}
|
||||
|
||||
if (providerIds.Type == ProviderType.TvDbId)
|
||||
if (providerIds.TheTvDb.HasValue())
|
||||
{
|
||||
existingContent.TvDbId = providerIds.TheTvDb;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue