public static async Task <List <RemoteImageInfo> > GetActorPhotos(string name, CancellationToken cancellationToken) { var tasks = new Dictionary <string, Task <string> >(); var imageList = new List <RemoteImageInfo>(); if (string.IsNullOrEmpty(name)) { return(imageList); } Logger.Info($"Searching actor images for \"{name}\""); tasks.Add("AdultDVDEmpire", GetFromAdultDVDEmpire(name, cancellationToken)); tasks.Add("Boobpedia", GetFromBoobpedia(name, cancellationToken)); tasks.Add("Babepedia", GetFromBabepedia(name, cancellationToken)); tasks.Add("IAFD", GetFromIAFD(name, cancellationToken)); var splitedName = name.Split(); if (Plugin.Instance.Configuration.JAVActorNamingStyle == JAVActorNamingStyle.JapaneseStyle && splitedName.Length > 1) { var nameReversed = string.Join(" ", splitedName.Reverse()); tasks.Add("Boobpedia 2", GetFromBoobpedia(nameReversed, cancellationToken)); tasks.Add("Babepedia 2", GetFromBabepedia(nameReversed, cancellationToken)); tasks.Add("IAFD 2", GetFromIAFD(nameReversed, cancellationToken)); } try { await Task.WhenAll(tasks.Values).ConfigureAwait(false); } catch (Exception e) { Logger.Info($"GetActorPhotos error: \"{e.Message}\""); Logger.Error(e.ToString()); await Analitycs.Send(name, null, null, null, null, null, e, cancellationToken).ConfigureAwait(false); } finally { foreach (var image in tasks) { var res = image.Value.Result; if (!string.IsNullOrEmpty(res) && !imageList.Where(o => o.Url == res).Any()) { imageList.Add(new RemoteImageInfo { ProviderName = image.Key, Url = res, }); } } } return(imageList); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(PersonLookupInfo searchInfo, CancellationToken cancellationToken) { var result = new List <RemoteSearchResult>(); if (searchInfo == null) { return(result); } var providerList = new List <string> { "Freeones" }; foreach (var siteName in providerList) { var title = $"{siteName} {searchInfo.Name}"; var site = Helper.GetSiteFromTitle(title); string actorName = Helper.GetClearTitle(title, site.siteName); Logger.Info($"site: {site.siteNum[0]}:{site.siteNum[1]} ({site.siteName})"); Logger.Info($"actorName: {actorName}"); var provider = Helper.GetActorProviderBySiteID(site.siteNum[0]); if (provider != null) { Logger.Info($"provider: {provider}"); try { result = await provider.Search(site.siteNum, actorName, cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"Actor Search error: \"{e}\""); await Analitycs.Send(title, site.siteNum, site.siteName, actorName, null, provider.ToString(), e, cancellationToken).ConfigureAwait(false); } if (result.Any()) { foreach (var scene in result) { scene.ProviderIds[this.Name] = $"{site.siteNum[0]}#{site.siteNum[1]}#" + scene.ProviderIds[this.Name]; scene.Name = scene.Name.Trim(); } result = result.OrderByDescending(o => 100 - LevenshteinDistance.Calculate(searchInfo.Name, o.Name, StringComparison.OrdinalIgnoreCase)).ToList(); } break; } } return(result); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) #endif { var images = new List <RemoteImageInfo>(); if (item == null) { return(images); } if (!item.ProviderIds.TryGetValue(this.Name, out var externalID)) { return(images); } var curID = externalID.Split('#'); if (curID.Length < 3) { return(images); } var siteNum = new int[2] { int.Parse(curID[0], CultureInfo.InvariantCulture), int.Parse(curID[1], CultureInfo.InvariantCulture) }; var provider = Helper.GetProviderBySiteID(siteNum[0]); if (provider != null) { try { images = (List <RemoteImageInfo>) await provider.GetImages(siteNum, curID.Skip(2).ToArray(), item, cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Info($"GetImages error: \"{e.Message}\""); Logger.Error(e.ToString()); await Analitycs.Send(string.Join("#", curID.Skip(2)), siteNum, Helper.GetSearchSiteName(siteNum), null, null, null, e, cancellationToken).ConfigureAwait(false); } images = await ImageHelper.GetImagesSizeAndValidate(images, cancellationToken).ConfigureAwait(false); } return(images); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) #endif { var images = new List <RemoteImageInfo>(); if (item == null) { return(images); } images = await GetActorPhotos(item.Name, cancellationToken).ConfigureAwait(false); if (item.ProviderIds.TryGetValue(this.Name, out var externalID)) { var curID = externalID.Split('#'); if (curID.Length > 2) { var siteNum = new int[2] { int.Parse(curID[0], CultureInfo.InvariantCulture), int.Parse(curID[1], CultureInfo.InvariantCulture) }; var sceneID = item.ProviderIds; if (sceneID.ContainsKey(this.Name)) { var provider = Helper.GetActorProviderBySiteID(siteNum[0]); if (provider != null) { var imgs = new List <RemoteImageInfo>(); try { imgs = (List <RemoteImageInfo>) await provider.GetImages(siteNum, curID.Skip(2).ToArray(), item, cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"GetImages error: \"{e}\""); await Analitycs.Send(string.Join("#", curID.Skip(2)), siteNum, Helper.GetSearchSiteName(siteNum), null, null, null, e, cancellationToken).ConfigureAwait(false); } finally { if (imgs.Any()) { images.AddRange(imgs); } } } } } } images = await ImageHelper.GetImagesSizeAndValidate(images, cancellationToken).ConfigureAwait(false); if (images.Any()) { foreach (var img in images) { if (string.IsNullOrEmpty(img.ProviderName)) { img.ProviderName = this.Name; } } images = images.OrderByDescending(o => o.Height).ToList(); } return(images); }
public async Task <MetadataResult <Person> > GetMetadata(PersonLookupInfo info, CancellationToken cancellationToken) { var result = new MetadataResult <Person>() { HasMetadata = false, Item = new Person(), }; if (info == null) { return(result); } string[] curID = null; var sceneID = info.ProviderIds; if (sceneID.TryGetValue(this.Name, out var externalID)) { curID = externalID.Split('#'); } if ((!sceneID.ContainsKey(this.Name) || curID == null || curID.Length < 3) && !Plugin.Instance.Configuration.DisableAutoIdentify) { var searchResults = await this.GetSearchResults(info, cancellationToken).ConfigureAwait(false); if (searchResults.Any()) { sceneID = searchResults.First().ProviderIds; sceneID.TryGetValue(this.Name, out externalID); curID = externalID.Split('#'); } } if (curID == null) { return(result); } var siteNum = new int[2] { int.Parse(curID[0], CultureInfo.InvariantCulture), int.Parse(curID[1], CultureInfo.InvariantCulture) }; var provider = Helper.GetActorProviderBySiteID(siteNum[0]); if (provider != null) { Logger.Info($"PhoenixAdult Actor ID: {externalID}"); try { result = await provider.Update(siteNum, curID.Skip(2).ToArray(), cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"Actor Update error: \"{e}\""); await Analitycs.Send(externalID, null, null, info.Name, null, provider.ToString(), e, cancellationToken).ConfigureAwait(false); } if (!string.IsNullOrEmpty(result.Item.ExternalId)) { result.HasMetadata = true; result.Item.ProviderIds.Update(this.Name, sceneID[this.Name]); result.Item.ProviderIds.Update(this.Name + "URL", result.Item.ExternalId); result.Item.OriginalTitle = WebUtility.HtmlDecode(result.Item.OriginalTitle); var aliases = result.Item.OriginalTitle.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var newAliases = new List <string>(); foreach (var name in aliases) { var actorName = name.Trim(); if (!string.IsNullOrEmpty(actorName) && !newAliases.Contains(actorName, StringComparer.Ordinal)) { newAliases.Add(actorName); } } var bornPlaceList = new List <string>(); if (result.Item.ProductionLocations.Any()) { foreach (var bornPlace in result.Item.ProductionLocations[0].Split(",")) { var location = bornPlace.Trim(); if (!string.IsNullOrEmpty(location)) { bornPlaceList.Add(location); } } } result.Item.ProductionLocations = new string[] { string.Join(", ", bornPlaceList) }; if (!newAliases.Contains(info.Name, StringComparer.OrdinalIgnoreCase)) { result.HasMetadata = false; } result.Item.OriginalTitle = string.Join(", ", newAliases); if (!string.IsNullOrEmpty(result.Item.Overview)) { result.Item.Overview = HttpUtility.HtmlDecode(result.Item.Overview).Trim(); } if (result.Item.PremiereDate.HasValue) { result.Item.ProductionYear = result.Item.PremiereDate.Value.Year; } } } return(result); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken) { var result = new List <RemoteSearchResult>(); if (searchInfo == null || string.IsNullOrEmpty(searchInfo.Name)) { return(result); } Logger.Info($"searchInfo.Name: {searchInfo.Name}"); var title = Helper.ReplaceAbbrieviation(searchInfo.Name); var site = Helper.GetSiteFromTitle(title); if (site.siteNum == null) { string newTitle; if (!string.IsNullOrEmpty(Plugin.Instance.Configuration.DefaultSiteName)) { newTitle = $"{Plugin.Instance.Configuration.DefaultSiteName} {searchInfo.Name}"; } else { newTitle = Helper.GetSiteNameFromTitle(searchInfo.Name); } if (!string.IsNullOrEmpty(newTitle) && !newTitle.Equals(searchInfo.Name, StringComparison.OrdinalIgnoreCase)) { Logger.Info($"newTitle: {newTitle}"); title = Helper.ReplaceAbbrieviation(newTitle); site = Helper.GetSiteFromTitle(title); } if (site.siteNum == null) { return(result); } } string searchTitle = Helper.GetClearTitle(title, site.siteName), searchDate = string.Empty; DateTime?searchDateObj; var titleAfterDate = Helper.GetDateFromTitle(searchTitle); searchTitle = titleAfterDate.searchTitle; searchDateObj = titleAfterDate.searchDateObj; if (searchDateObj.HasValue) { searchDate = searchDateObj.Value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } else { if (searchInfo.PremiereDate.HasValue) { #if __EMBY__ searchDateObj = searchInfo.PremiereDate.Value.DateTime; #else searchDateObj = searchInfo.PremiereDate.Value; #endif searchDate = searchInfo.PremiereDate.Value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } } if (string.IsNullOrEmpty(searchTitle)) { return(result); } Logger.Info($"site: {site.siteNum[0]}:{site.siteNum[1]} ({site.siteName})"); Logger.Info($"searchTitle: {searchTitle}"); Logger.Info($"searchDate: {searchDate}"); var provider = Helper.GetProviderBySiteID(site.siteNum[0]); if (provider != null) { Logger.Info($"provider: {provider}"); try { result = await provider.Search(site.siteNum, searchTitle, searchDateObj, cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"Search error: \"{e}\""); await Analitycs.Send(searchInfo.Name, site.siteNum, site.siteName, searchTitle, searchDateObj, provider.ToString(), e, cancellationToken).ConfigureAwait(false); } if (result.Any()) { foreach (var scene in result) { scene.ProviderIds[this.Name] = $"{site.siteNum[0]}#{site.siteNum[1]}#" + scene.ProviderIds[this.Name]; scene.Name = scene.Name.Trim(); if (scene.PremiereDate.HasValue) { scene.ProductionYear = scene.PremiereDate.Value.Year; } } if (result.Any(scene => scene.IndexNumber.HasValue)) { result = result.OrderByDescending(o => o.IndexNumber.HasValue).ThenByDescending(o => o.IndexNumber).ToList(); } else if (!string.IsNullOrEmpty(searchDate) && result.All(o => o.PremiereDate.HasValue) && result.Any(o => o.PremiereDate.Value != searchDateObj)) { result = result.OrderBy(o => Math.Abs((searchDateObj - o.PremiereDate).Value.TotalDays)).ToList(); } else { result = result.OrderByDescending(o => 100 - LevenshteinDistance.Calculate(searchTitle, o.Name, StringComparison.OrdinalIgnoreCase)).ToList(); } } } return(result); }
public async Task <MetadataResult <Movie> > GetMetadata(MovieInfo info, CancellationToken cancellationToken) { var result = new MetadataResult <Movie> { HasMetadata = false, Item = new Movie(), }; if (info == null) { return(result); } DateTime?premiereDateObj = null; if (info.PremiereDate.HasValue) { #if __EMBY__ premiereDateObj = info.PremiereDate.Value.DateTime; #else premiereDateObj = info.PremiereDate.Value; #endif } string[] curID = null; var sceneID = info.ProviderIds; if (sceneID.TryGetValue(this.Name, out var externalID)) { curID = externalID.Split('#'); } if ((!sceneID.ContainsKey(this.Name) || curID == null || curID.Length < 3) && !Plugin.Instance.Configuration.DisableAutoIdentify) { var searchResults = await this.GetSearchResults(info, cancellationToken).ConfigureAwait(false); if (searchResults.Any()) { var first = searchResults.First(); sceneID = first.ProviderIds; sceneID.TryGetValue(this.Name, out externalID); curID = externalID.Split('#'); if (first.PremiereDate.HasValue) { #if __EMBY__ premiereDateObj = first.PremiereDate.Value.DateTime; #else premiereDateObj = first.PremiereDate.Value; #endif } } } if (curID == null) { return(result); } var siteNum = new int[2] { int.Parse(curID[0], CultureInfo.InvariantCulture), int.Parse(curID[1], CultureInfo.InvariantCulture) }; var provider = Helper.GetProviderBySiteID(siteNum[0]); if (provider != null) { Logger.Info($"PhoenixAdult ID: {externalID}"); try { result = await provider.Update(siteNum, curID.Skip(2).ToArray(), cancellationToken).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"Update error: \"{e}\""); await Analitycs.Send(string.Join("#", curID.Skip(2)), siteNum, Helper.GetSearchSiteName(siteNum), info.Name, premiereDateObj, provider.ToString(), e, cancellationToken).ConfigureAwait(false); } if (!string.IsNullOrEmpty(result.Item.Name)) { result.HasMetadata = true; result.Item.OfficialRating = "XXX"; result.Item.ProviderIds.Update(this.Name, sceneID[this.Name]); result.Item.Name = HttpUtility.HtmlDecode(result.Item.Name).Trim(); if (!string.IsNullOrEmpty(result.Item.Overview)) { result.Item.Overview = HttpUtility.HtmlDecode(result.Item.Overview).Trim(); } var newStudios = new List <string>(); foreach (var studio in result.Item.Studios) { var studioName = studio.Trim(); studioName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(studioName); if (!newStudios.Contains(studioName)) { newStudios.Add(studioName); } } result.Item.Studios = newStudios.ToArray(); if (!result.Item.PremiereDate.HasValue) { result.Item.PremiereDate = premiereDateObj; } if (result.Item.PremiereDate.HasValue) { result.Item.ProductionYear = result.Item.PremiereDate.Value.Year; } if (result.People != null && result.People.Any()) { result.People = Actors.Cleanup(result); } if (result.Item.Genres != null && result.Item.Genres.Any()) { result.Item.Genres = Genres.Cleanup(result.Item.Genres, result.Item.Name, result.People); } if (!string.IsNullOrEmpty(result.Item.ExternalId)) { result.Item.ProviderIds.Update(this.Name + "URL", result.Item.ExternalId); } } } return(result); }