Example #1
0
        public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
        {
            var result = new List <RemoteSearchResult>();

            if (searchInfo == null || string.IsNullOrEmpty(Plugin.Instance.Configuration.MetadataAPIToken))
            {
                return(result);
            }

            var curID = searchInfo.Name.GetAttributeValue("theporndbid");

            if (string.IsNullOrEmpty(curID))
            {
                searchInfo.ProviderIds.TryGetValue(this.Name, out curID);
            }

            if (!string.IsNullOrEmpty(curID))
            {
                var sceneData = new MetadataResult <Movie>()
                {
                    HasMetadata = false,
                    Item        = new Movie(),
                    People      = new List <PersonInfo>(),
                };

                var sceneImages = new List <RemoteImageInfo>();

                try
                {
                    sceneData = await MetadataAPI.SceneUpdate(curID, cancellationToken).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    Logger.Error($"Update error: \"{e}\"");
                }

                try
                {
                    sceneImages = (List <RemoteImageInfo>) await MetadataAPI.SceneImages(curID, cancellationToken).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    Logger.Error($"GetImages error: \"{e}\"");
                }

                if (sceneData.HasMetadata)
                {
                    result.Add(new RemoteSearchResult
                    {
                        ProviderIds  = { { Plugin.Instance.Name, curID } },
                        Name         = sceneData.Item.Name,
                        ImageUrl     = sceneImages?.Where(o => o.Type == ImageType.Primary).FirstOrDefault()?.Url,
                        PremiereDate = sceneData.Item.PremiereDate,
                    });

                    return(result);
                }
            }

            if (string.IsNullOrEmpty(searchInfo.Name))
            {
                return(result);
            }

            string searchTitle = searchInfo.Name,
                   oshash      = string.Empty;

#if __EMBY__
#else
            if (!string.IsNullOrEmpty(searchInfo.Path) && Plugin.Instance.Configuration.UseFilePath)
            {
                searchTitle = searchInfo.Path;
            }

            if (!string.IsNullOrEmpty(searchInfo.Path) && Plugin.Instance.Configuration.UseOSHash)
            {
                oshash = OpenSubtitlesHash.ComputeHash(searchInfo.Path);
            }
#endif

            try
            {
                result = await MetadataAPI.SceneSearch(searchTitle, oshash, cancellationToken).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                Logger.Error($"Search error: \"{e}\"");
            }

            if (result.Any())
            {
                foreach (var scene in result)
                {
                    if (scene.PremiereDate.HasValue)
                    {
                        scene.ProductionYear = scene.PremiereDate.Value.Year;
                    }
                }
            }

            return(result);
        }