Пример #1
0
        private bool IsEnabled(MetadataOptions options, ImageType type, IHasImages item)
        {
            if (type == ImageType.Backdrop)
            {
                if (item.LockedFields.Contains(MetadataFields.Backdrops))
                {
                    return(false);
                }
            }
            else if (type == ImageType.Screenshot)
            {
                if (item.LockedFields.Contains(MetadataFields.Screenshots))
                {
                    return(false);
                }
            }
            else
            {
                if (item.LockedFields.Contains(MetadataFields.Images))
                {
                    return(false);
                }
            }

            return(options.IsEnabled(type));
        }
Пример #2
0
        private int GetConfiguredOrder(IMetadataProvider provider, MetadataOptions options)
        {
            // See if there's a user-defined order
            if (provider is ILocalMetadataProvider)
            {
                var index = Array.IndexOf(options.LocalMetadataReaderOrder, provider.Name);

                if (index != -1)
                {
                    return(index);
                }
            }

            // See if there's a user-defined order
            if (provider is IRemoteMetadataProvider)
            {
                var index = Array.IndexOf(options.MetadataFetcherOrder, provider.Name);

                if (index != -1)
                {
                    return(index);
                }
            }

            // Not configured. Just return some high number to put it at the end.
            return(100);
        }
Пример #3
0
        private void AddMetadataPlugins <T>(List <MetadataPlugin> list, T item, MetadataOptions options)
            where T : IHasMetadata
        {
            var providers = GetMetadataProvidersInternal <T>(item, options, true, false).ToList();

            // Locals
            list.AddRange(providers.Where(i => (i is ILocalMetadataProvider)).Select(i => new MetadataPlugin
            {
                Name = i.Name,
                Type = MetadataPluginType.LocalMetadataProvider
            }));

            if (item.IsInternetMetadataEnabled())
            {
                // Fetchers
                list.AddRange(providers.Where(i => (i is IRemoteMetadataProvider)).Select(i => new MetadataPlugin
                {
                    Name = i.Name,
                    Type = MetadataPluginType.MetadataFetcher
                }));
            }

            if (item.IsSaveLocalMetadataEnabled())
            {
                // Savers
                list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit, true)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
                {
                    Name = i.Name,
                    Type = MetadataPluginType.MetadataSaver
                }));
            }
        }
        public static void Run()
        {
            // ExStart:1
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // Open Workbook metadata
            MetadataOptions  options = new MetadataOptions(MetadataType.DocumentProperties);
            WorkbookMetadata meta    = new WorkbookMetadata(dataDir + "Sample1.xlsx", options);

            // Set some properties
            meta.CustomDocumentProperties.Add("test", "test");

            // Save the metadata info
            meta.Save(dataDir + "Sample2.out.xlsx");

            // Open the workbook
            Workbook w = new Workbook(dataDir + "Sample2.out.xlsx");

            // Read document property
            Console.WriteLine(w.CustomDocumentProperties["test"]);

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
            // ExEnd:1
        }
Пример #5
0
 /// <summary>
 /// Creates a new instance of <see cref="MetaModel"/>.
 /// </summary>
 /// <param name="options">The options to use.</param>
 /// <param name="canonicalUri">The optional canonical URI of the page.</param>
 /// <param name="hostName">The optional host name.</param>
 /// <param name="description">The optional page description.</param>
 /// <param name="imageUri">The optional image URI.</param>
 /// <param name="imageAltText">The optional image alternate text.</param>
 /// <param name="robots">The optional robots value.</param>
 /// <param name="title">The optional page title.</param>
 /// <returns>
 /// The created instance of <see cref="MetaModel"/>.
 /// </returns>
 public static MetaModel Create(
     MetadataOptions options,
     string canonicalUri = null,
     string hostName = null,
     string description = null,
     string imageUri = null,
     string imageAltText = null,
     string robots = null,
     string title = null)
 {
     return new MetaModel()
     {
         Author = options.Author.Name,
         Bitcoin = options.Author.Bitcoin,
         CanonicalUri = canonicalUri ?? string.Empty,
         Description = description ?? options.Description,
         FacebookApp = options?.SocialMedia?.Facebook,
         FacebookProfile = options?.Author?.SocialMedia?.Facebook,
         HostName = options.Domain,
         ImageUri = imageUri ?? options.Image ?? string.Empty,
         ImageAltText = imageAltText ?? options.Name,
         Keywords = options.Keywords ?? "alexa,london travel",
         Robots = robots ?? options.Robots,
         SiteName = options.Name ?? "London Travel is an Amazon Alexa skill for checking the status for travel in London.",
         SiteType = options.Type ?? "website",
         Title = $"{title} - {options.Name}",
         TwitterCard = "summary",
         TwitterHandle = options?.Author?.SocialMedia?.Twitter,
     };
 }
        public static void Run()
        {
            //Source directory
            string sourceDir = RunExamples.Get_SourceDirectory();

            //Output directory
            string outputDir = RunExamples.Get_OutputDirectory();

            // Open Workbook metadata
            MetadataOptions  options = new MetadataOptions(MetadataType.DocumentProperties);
            WorkbookMetadata meta    = new WorkbookMetadata(sourceDir + "sampleUsingWorkbookMetadata.xlsx", options);

            // Set some properties
            meta.CustomDocumentProperties.Add("MyTest", "This is My Test");

            // Save the metadata info
            meta.Save(outputDir + "outputUsingWorkbookMetadata.xlsx");

            // Open the workbook
            Workbook w = new Workbook(outputDir + "outputUsingWorkbookMetadata.xlsx");

            // Read document property
            Console.WriteLine("Metadata Custom Property MyTest: " + w.CustomDocumentProperties["MyTest"]);

            Console.WriteLine("UsingWorkbookMetadata executed successfully.");
        }
Пример #7
0
        /// <summary>
        /// Refreshes from provider.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="provider">The provider.</param>
        /// <param name="refreshOptions">The refresh options.</param>
        /// <param name="savedOptions">The saved options.</param>
        /// <param name="downloadedImages">The downloaded images.</param>
        /// <param name="result">The result.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task.</returns>
        private async Task RefreshFromProvider(IHasImages item,
                                               IDynamicImageProvider provider,
                                               ImageRefreshOptions refreshOptions,
                                               MetadataOptions savedOptions,
                                               ICollection <ImageType> downloadedImages,
                                               RefreshResult result,
                                               CancellationToken cancellationToken)
        {
            try
            {
                var images = provider.GetSupportedImages(item);

                foreach (var imageType in images)
                {
                    if (!savedOptions.IsEnabled(imageType))
                    {
                        continue;
                    }

                    if (!item.HasImage(imageType) || (refreshOptions.IsReplacingImage(imageType) && !downloadedImages.Contains(imageType)))
                    {
                        _logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name);

                        var response = await provider.GetImage(item, imageType, cancellationToken).ConfigureAwait(false);

                        if (response.HasImage)
                        {
                            if (!string.IsNullOrEmpty(response.Path))
                            {
                                var mimeType = "image/" + Path.GetExtension(response.Path).TrimStart('.').ToLower();

                                var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, true);

                                await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                            }
                            else
                            {
                                var mimeType = "image/" + response.Format.ToString().ToLower();

                                await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                            }

                            downloadedImages.Add(imageType);
                            result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
                        }
                    }
                }
            }
            catch (OperationCanceledException)
            {
                throw;
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
                result.Status       = ProviderRefreshStatus.CompletedWithErrors;
                _logger.ErrorException("Error in {0}", ex, provider.Name);
            }
        }
        /// <summary>
        /// Registers the metadata middleware into the HTTP pipeline.
        /// </summary>
        /// <param name="app">The application builder</param>
        /// <param name="options">The middleware options</param>
        /// <returns>The builder after changes</returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IApplicationBuilder UseMetadata(this IApplicationBuilder app, MetadataOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            return(app.UseMetadata(Options.Create(options)));
        }
Пример #9
0
        public void TestMetadataOptions()
        {
            var options = new MetadataOptions();

            Assert.AreEqual(0, options.Depth);
            Assert.AreEqual(0, options.LongEntries);
            Assert.IsNull(options.MaxSize);

            Assert.Throws <ArgumentOutOfRangeException> (() => options.Depth = 500);
        }
Пример #10
0
        public static void MetaModel_Create_Handles_Null_Author()
        {
            // Arrange
            var options = new MetadataOptions();

            // Act
            MetaModel actual = MetaModel.Create(options);

            // Assert
            actual.ShouldNotBeNull();
        }
        public R4FhirSpecificationProviderTests()
        {
            var dataClient = Substitute.For <IFhirDataClient>();

            var metadataOptions = new MetadataOptions();

            dataClient.Search(metadataOptions)
            .ReturnsForAnyArgs(x => TestDataProvider.GetBundleFromFile(TestDataConstants.MetadataFile));

            _r4FhirSpecificationProvider = new R4FhirSpecificationProvider(dataClient, _nullR4FhirSpecificationProviderLogger);
        }
Пример #12
0
        /// <summary>
        /// Creates a new instance of <see cref="MetaModel"/>.
        /// </summary>
        /// <param name="options">The options to use.</param>
        /// <param name="canonicalUri">The optional canonical URI of the page.</param>
        /// <param name="hostName">The optional host name.</param>
        /// <param name="description">The optional page description.</param>
        /// <param name="imageUri">The optional image URI.</param>
        /// <param name="imageAltText">The optional image alternate text.</param>
        /// <param name="robots">The optional robots value.</param>
        /// <param name="title">The optional page title.</param>
        /// <returns>
        /// The created instance of <see cref="MetaModel"/>.
        /// </returns>
        public static MetaModel Create(
            MetadataOptions?options,
            string?canonicalUri = null,
            string?hostName     = null,
            string?description  = null,
            string?imageUri     = null,
            string?imageAltText = null,
            string?robots       = null,
            string?title        = null)
        {
            if (options == null)
            {
                options = new MetadataOptions();
            }

            var model = new MetaModel();

            if (options != null)
            {
                if (options.Author != null)
                {
                    model.Author  = options.Author.Name;
                    model.Bitcoin = options.Author.Bitcoin;

                    if (options.Author.SocialMedia != null)
                    {
                        model.FacebookProfile = options.Author.SocialMedia.Facebook;
                        model.TwitterHandle   = options.Author.SocialMedia.Twitter;
                    }
                }

                model.CanonicalUri = canonicalUri ?? string.Empty;
                model.Description  = description ?? options.Description;
                model.FacebookApp  = options.SocialMedia?.Facebook;
                model.HostName     = hostName ?? options.Domain;
                model.ImageUri     = imageUri ?? options.Image ?? string.Empty;
                model.ImageAltText = imageAltText ?? options.Name;
                model.Keywords     = options.Keywords ?? "alexa,london travel";
                model.Robots       = robots ?? options.Robots;
                model.SiteName     = options.Name ?? "London Travel is an Amazon Alexa skill for checking the status for travel in London.";
                model.SiteType     = options.Type ?? "website";
                model.Title        = $"{title} - {model.SiteName}";
                model.TwitterCard  = "summary";

                model.Reviews = BuildReviews();
            }

            return(model);
        }
Пример #13
0
        /// <summary>
        /// Determines if an item already contains the given images
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="images">The images.</param>
        /// <param name="savedOptions">The saved options.</param>
        /// <param name="backdropLimit">The backdrop limit.</param>
        /// <param name="screenshotLimit">The screenshot limit.</param>
        /// <returns><c>true</c> if the specified item contains images; otherwise, <c>false</c>.</returns>
        private bool ContainsImages(BaseItem item, List<ImageType> images, MetadataOptions savedOptions, int backdropLimit, int screenshotLimit)
        {
            if (_singularImages.Any(i => images.Contains(i) && !HasImage(item, i) && savedOptions.GetLimit(i) > 0))
            {
                return false;
            }

            if (images.Contains(ImageType.Backdrop) && item.GetImages(ImageType.Backdrop).Count() < backdropLimit)
            {
                return false;
            }

            if (images.Contains(ImageType.Screenshot) && item.GetImages(ImageType.Screenshot).Count() < screenshotLimit)
            {
                return false;
            }

            return true;
        }
Пример #14
0
        public static IMvcBuilder AddIdServerMetadata(this IMvcBuilder builder, Action <MetadataOptions> optionsBuilder)
        {
            //Build the options each time they are requested, this will not happen that much
            builder.Services.AddScoped <MetadataOptions>(s =>
            {
                var options = new MetadataOptions();

                if (optionsBuilder != null)
                {
                    optionsBuilder.Invoke(options);
                }

                return(options);
            });

            builder.AddApplicationPart(typeof(MetadataServiceExtensions).Assembly);

            return(builder);
        }
Пример #15
0
        private bool CanRefresh(IImageProvider provider, IHasImages item, MetadataOptions options, bool includeDisabled)
        {
            if (!includeDisabled)
            {
                // If locked only allow local providers
                if (item.IsLocked && !(provider is ILocalImageProvider))
                {
                    return(false);
                }

                if (provider is IRemoteImageProvider || provider is IDynamicImageProvider)
                {
                    if (Array.IndexOf(options.DisabledImageFetchers, provider.Name) != -1)
                    {
                        return(false);
                    }

                    if (provider is IRemoteImageProvider)
                    {
                        if (!ConfigurationManager.Configuration.EnableInternetProviders)
                        {
                            return(false);
                        }
                    }
                }
            }

            if (!item.SupportsLocalMetadata && provider is ILocalImageProvider)
            {
                return(false);
            }

            try
            {
                return(provider.Supports(item));
            }
            catch (Exception ex)
            {
                _logger.ErrorException("{0} failed in Supports for type {1}", ex, provider.GetType().Name, item.GetType().Name);
                return(false);
            }
        }
Пример #16
0
        private MetadataOptions GetMetadataOptions(Type type, ServerConfiguration config)
        {
            var options = config.MetadataOptions
                          .FirstOrDefault(i => string.Equals(i.ItemType, type.Name, StringComparison.OrdinalIgnoreCase));

            if (options == null)
            {
                var list = config.MetadataOptions.ToList();

                options = new MetadataOptions
                {
                    ItemType = type.Name
                };

                list.Add(options);

                config.MetadataOptions = list.ToArray();
            }

            return(options);
        }
Пример #17
0
        private bool CanRefresh(IMetadataProvider provider, IHasMetadata item, MetadataOptions options, bool includeDisabled)
        {
            if (!includeDisabled)
            {
                // If locked only allow local providers
                if (item.IsLocked && !(provider is ILocalMetadataProvider) && !(provider is IForcedProvider))
                {
                    return(false);
                }

                if (provider is IRemoteMetadataProvider)
                {
                    if (!ConfigurationManager.Configuration.EnableInternetProviders)
                    {
                        return(false);
                    }

                    if (Array.IndexOf(options.DisabledMetadataFetchers, provider.Name) != -1)
                    {
                        return(false);
                    }
                }
            }

            if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider)
            {
                return(false);
            }

            // If this restriction is ever lifted, movie xml providers will have to be updated to prevent owned items like trailers from reading those files
            if (item.IsOwnedItem)
            {
                if (provider is ILocalMetadataProvider || provider is IRemoteMetadataProvider)
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #18
0
        private bool CanRefresh(IImageProvider provider, IHasMetadata item, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled)
        {
            if (!includeDisabled)
            {
                // If locked only allow local providers
                if (item.IsLocked && !(provider is ILocalImageProvider))
                {
                    if (refreshOptions.ImageRefreshMode != ImageRefreshMode.FullRefresh)
                    {
                        return(false);
                    }
                }

                if (provider is IRemoteImageProvider || provider is IDynamicImageProvider)
                {
                    if (Array.IndexOf(options.DisabledImageFetchers, provider.Name) != -1)
                    {
                        return(false);
                    }

                    if (provider is IRemoteImageProvider)
                    {
                        if (!refreshOptions.ForceEnableInternetMetadata && !item.IsInternetMetadataEnabled())
                        {
                            return(false);
                        }
                    }
                }
            }

            try
            {
                return(provider.Supports(item));
            }
            catch (Exception ex)
            {
                _logger.ErrorException("{0} failed in Supports for type {1}", ex, provider.GetType().Name, item.GetType().Name);
                return(false);
            }
        }
        public MetadataOptions GetMetadataOptions()
        {
            MetadataOptions options = new MetadataOptions();

            // Copy Json Metdata Options
            options.SaveJsonFlags =
                (JsonTrimWhiteSpace     ? DicomDataSetSaveJsonFlags.TrimWhiteSpace   : DicomDataSetSaveJsonFlags.None) |
                (JsonWriteKeyword       ? DicomDataSetSaveJsonFlags.WriteKeyword     : DicomDataSetSaveJsonFlags.None) |
                (JsonMinify             ? DicomDataSetSaveJsonFlags.Minify           : DicomDataSetSaveJsonFlags.None) |
                (JsonIgnoreBinaryData   ? DicomDataSetSaveJsonFlags.IgnoreBinaryData : DicomDataSetSaveJsonFlags.None);

            options.StoreJson = JsonStore;

            // Copy XML MetadataOptions
            options.SaveXmlFlags =
                (XmlTrimWhiteSpace      ? DicomDataSetSaveXmlFlags.TrimWhiteSpace       : DicomDataSetSaveXmlFlags.None) |
                (XmlFullEndStatement    ? DicomDataSetSaveXmlFlags.WriteFullEndElement  : DicomDataSetSaveXmlFlags.None) |
                (XmlIgnoreBinaryData    ? DicomDataSetSaveXmlFlags.IgnoreBinaryData     : DicomDataSetSaveXmlFlags.None);

            options.StoreXml = XmlStore;

            return(options);
        }
Пример #20
0
        private IEnumerable <IImageProvider> GetImageProviders(IHasImages item, MetadataOptions options, bool includeDisabled)
        {
            // Avoid implicitly captured closure
            var currentOptions = options;

            return(ImageProviders.Where(i => CanRefresh(i, item, options, includeDisabled))
                   .OrderBy(i =>
            {
                // See if there's a user-defined order
                if (!(i is ILocalImageProvider))
                {
                    var index = Array.IndexOf(currentOptions.ImageFetcherOrder, i.Name);

                    if (index != -1)
                    {
                        return index;
                    }
                }

                // Not configured. Just return some high number to put it at the end.
                return 100;
            })
                   .ThenBy(GetOrder));
        }
        public static void Main(string[] args)
        {
            // The path to the documents directory.
            string dataDir = Aspose.Cells.Examples.Utils.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // Open Workbook metadata
            MetadataOptions options = new MetadataOptions(MetadataType.DocumentProperties);
            WorkbookMetadata meta = new WorkbookMetadata(dataDir + "Sample1.xlsx", options);

            // Set some properties
            meta.CustomDocumentProperties.Add("test", "test");

            // Save the metadata info
            meta.Save(dataDir + "Sample2.xlsx");

            // Open the workbook
            Workbook w = new Workbook(dataDir+ "Sample2.xlsx");

            // Read document property
            Console.WriteLine(w.CustomDocumentProperties["test"]);

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
Пример #22
0
        public void EnableMetadataItems(bool enable, MetadataOptions options)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke((MethodInvoker) delegate
                {
                    EnableMetadataItems(enable, options);
                });
                return;
            }

            // Json
            checkBoxJsonStore.Enabled            = enable;
            checkBoxJsonTrimWhiteSpace.Enabled   = enable;
            checkBoxJsonWriteKeyword.Enabled     = enable;
            checkBoxJsonMinify.Enabled           = enable;
            checkBoxJsonIgnoreBinaryData.Enabled = enable;

            buttonJsonDeleteAll.Enabled       = enable;
            buttonJsonGenerateAll.Enabled     = enable;
            buttonJsonGenerateMissing.Enabled = enable;
            buttonJsonStopGenerate.Visible    = !enable && options.StoreJson;

            // xml
            checkBoxXmlStore.Enabled            = enable;
            checkBoxXmlTrimWhiteSpace.Enabled   = enable;
            checkBoxXmlFullEndStatement.Enabled = enable;
            checkBoxXmlIgnoreBinaryData.Enabled = enable;

            buttonXmlDeleteAll.Enabled       = enable;
            buttonXmlGenerateAll.Enabled     = enable;
            buttonXmlGenerateMissing.Enabled = enable;
            buttonXmlStopGenerate.Visible    = !enable && options.StoreXml;

            ClearMetadataStatus();
        }
Пример #23
0
        private IEnumerable <IMetadataProvider <T> > GetMetadataProvidersInternal <T>(IHasMetadata item, MetadataOptions options, bool includeDisabled)
            where T : IHasMetadata
        {
            // Avoid implicitly captured closure
            var currentOptions = options;

            return(_metadataProviders.OfType <IMetadataProvider <T> >()
                   .Where(i => CanRefresh(i, item, currentOptions, includeDisabled))
                   .OrderBy(i => GetConfiguredOrder(i, options))
                   .ThenBy(GetDefaultOrder));
        }
Пример #24
0
        private void AddMetadataPlugins <T>(List <MetadataPlugin> list, T item, LibraryOptions libraryOptions, MetadataOptions options)
            where T : BaseItem
        {
            var providers = GetMetadataProvidersInternal <T>(item, libraryOptions, options, true, true).ToList();

            // Locals
            list.AddRange(providers.Where(i => i is ILocalMetadataProvider).Select(i => new MetadataPlugin
            {
                Name = i.Name,
                Type = MetadataPluginType.LocalMetadataProvider
            }));

            // Fetchers
            list.AddRange(providers.Where(i => i is IRemoteMetadataProvider).Select(i => new MetadataPlugin
            {
                Name = i.Name,
                Type = MetadataPluginType.MetadataFetcher
            }));

            // Savers
            list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, libraryOptions, ItemUpdateType.MetadataEdit, true)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
            {
                Name = i.Name,
                Type = MetadataPluginType.MetadataSaver
            }));
        }
Пример #25
0
        private int GetConfiguredOrder(BaseItem item, IMetadataProvider provider, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions)
        {
            // See if there's a user-defined order
            if (provider is ILocalMetadataProvider)
            {
                var configuredOrder = libraryOptions.LocalMetadataReaderOrder ?? globalMetadataOptions.LocalMetadataReaderOrder;

                var index = Array.IndexOf(configuredOrder, provider.Name);

                if (index != -1)
                {
                    return(index);
                }
            }

            // See if there's a user-defined order
            if (provider is IRemoteMetadataProvider)
            {
                var typeOptions      = libraryOptions.GetTypeOptions(item.GetType().Name);
                var typeFetcherOrder = typeOptions?.MetadataFetcherOrder;

                var fetcherOrder = typeFetcherOrder ?? globalMetadataOptions.MetadataFetcherOrder;

                var index = Array.IndexOf(fetcherOrder, provider.Name);

                if (index != -1)
                {
                    return(index);
                }
            }

            // Not configured. Just return some high number to put it at the end.
            return(100);
        }
Пример #26
0
        private IEnumerable <IMetadataProvider <T> > GetMetadataProvidersInternal <T>(BaseItem item, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions, bool includeDisabled, bool forceEnableInternetMetadata)
            where T : BaseItem
        {
            // Avoid implicitly captured closure
            var currentOptions = globalMetadataOptions;

            return(_metadataProviders.OfType <IMetadataProvider <T> >()
                   .Where(i => CanRefresh(i, item, libraryOptions, includeDisabled, forceEnableInternetMetadata))
                   .OrderBy(i => GetConfiguredOrder(item, i, libraryOptions, globalMetadataOptions))
                   .ThenBy(GetDefaultOrder));
        }
Пример #27
0
        private IEnumerable <IImageProvider> GetImageProviders(BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled)
        {
            // Avoid implicitly captured closure
            var currentOptions = options;

            var typeOptions      = libraryOptions.GetTypeOptions(item.GetType().Name);
            var typeFetcherOrder = typeOptions?.ImageFetcherOrder;

            return(ImageProviders.Where(i => CanRefresh(i, item, libraryOptions, refreshOptions, includeDisabled))
                   .OrderBy(i =>
            {
                // See if there's a user-defined order
                if (!(i is ILocalImageProvider))
                {
                    var fetcherOrder = typeFetcherOrder ?? currentOptions.ImageFetcherOrder;
                    var index = Array.IndexOf(fetcherOrder, i.Name);

                    if (index != -1)
                    {
                        return index;
                    }
                }

                // Not configured. Just return some high number to put it at the end.
                return 100;
            })
                   .ThenBy(GetOrder));
        }
Пример #28
0
        private bool CanRefresh(IImageProvider provider, BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled)
        {
            if (!includeDisabled)
            {
                // If locked only allow local providers
                if (item.IsLocked && !(provider is ILocalImageProvider))
                {
                    if (refreshOptions.ImageRefreshMode != MetadataRefreshMode.FullRefresh)
                    {
                        return(false);
                    }
                }

                if (provider is IRemoteImageProvider || provider is IDynamicImageProvider)
                {
                    if (!item.IsImageFetcherEnabled(libraryOptions, provider.Name))
                    {
                        return(false);
                    }
                }
            }

            try
            {
                return(provider.Supports(item));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "{0} failed in Supports for type {1}", provider.GetType().Name, item.GetType().Name);
                return(false);
            }
        }
Пример #29
0
        private bool CanRefresh(IMetadataProvider provider, BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, bool includeDisabled, bool forceEnableInternetMetadata)
        {
            if (!includeDisabled)
            {
                // If locked only allow local providers
                if (item.IsLocked && !(provider is ILocalMetadataProvider) && !(provider is IForcedProvider))
                {
                    return(false);
                }

                if (provider is IRemoteMetadataProvider)
                {
                    if (!forceEnableInternetMetadata && !item.IsMetadataFetcherEnabled(libraryOptions, provider.Name))
                    {
                        return(false);
                    }
                }
            }

            if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider)
            {
                return(false);
            }

            // If this restriction is ever lifted, movie xml providers will have to be updated to prevent owned items like trailers from reading those files
            if (!item.OwnerId.Equals(Guid.Empty))
            {
                if (provider is ILocalMetadataProvider || provider is IRemoteMetadataProvider)
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #30
0
        public async Task<RefreshResult> RefreshImages(BaseItem item, LibraryOptions libraryOptions, List<IImageProvider> providers, ImageRefreshOptions refreshOptions, MetadataOptions savedOptions, CancellationToken cancellationToken)
        {
            if (refreshOptions.IsReplacingImage(ImageType.Backdrop))
            {
                ClearImages(item, ImageType.Backdrop);
            }
            if (refreshOptions.IsReplacingImage(ImageType.Screenshot))
            {
                ClearImages(item, ImageType.Screenshot);
            }

            var result = new RefreshResult { UpdateType = ItemUpdateType.None };

            var providerIds = new List<Guid>();

            // In order to avoid duplicates, only download these if there are none already
            var backdropLimit = savedOptions.GetLimit(ImageType.Backdrop);
            var screenshotLimit = savedOptions.GetLimit(ImageType.Screenshot);
            var downloadedImages = new List<ImageType>();

            foreach (var provider in providers)
            {
                var remoteProvider = provider as IRemoteImageProvider;

                if (remoteProvider != null)
                {
                    await RefreshFromProvider(item, libraryOptions, remoteProvider, refreshOptions, savedOptions, backdropLimit, screenshotLimit, downloadedImages, result, cancellationToken).ConfigureAwait(false);
                    providerIds.Add(provider.GetType().FullName.GetMD5());
                    continue;
                }

                var dynamicImageProvider = provider as IDynamicImageProvider;

                if (dynamicImageProvider != null)
                {
                    await RefreshFromProvider(item, dynamicImageProvider, refreshOptions, savedOptions, downloadedImages, result, cancellationToken).ConfigureAwait(false);
                    providerIds.Add(provider.GetType().FullName.GetMD5());
                }
            }

            result.Providers = providerIds;

            return result;
        }
Пример #31
0
 private bool IsEnabled(MetadataOptions options, ImageType type, BaseItem item)
 {
     return options.IsEnabled(type);
 }
Пример #32
0
		/// <summary>
		/// Gets the specified metadata.
		/// </summary>
		/// <remarks>
		/// Gets the specified metadata.
		/// </remarks>
		/// <returns>The requested metadata.</returns>
		/// <param name="options">The metadata options.</param>
		/// <param name="tags">The metadata tags.</param>
		/// <param name="cancellationToken">The cancellation token.</param>
		/// <exception cref="System.ArgumentNullException">
		/// <para><paramref name="options"/> is <c>null</c>.</para>
		/// <para>-or-</para>
		/// <para><paramref name="tags"/> is <c>null</c>.</para>
		/// </exception>
		/// <exception cref="System.ObjectDisposedException">
		/// The <see cref="ImapClient"/> has been disposed.
		/// </exception>
		/// <exception cref="ServiceNotConnectedException">
		/// The <see cref="ImapClient"/> is not connected.
		/// </exception>
		/// <exception cref="ServiceNotAuthenticatedException">
		/// The <see cref="ImapClient"/> is not authenticated.
		/// </exception>
		/// <exception cref="System.NotSupportedException">
		/// The IMAP server does not support the METADATA extension.
		/// </exception>
		/// <exception cref="System.OperationCanceledException">
		/// The operation was canceled via the cancellation token.
		/// </exception>
		/// <exception cref="System.IO.IOException">
		/// An I/O error occurred.
		/// </exception>
		/// <exception cref="ImapProtocolException">
		/// The server's response contained unexpected tokens.
		/// </exception>
		/// <exception cref="ImapCommandException">
		/// The server replied with a NO or BAD response.
		/// </exception>
		public override MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default (CancellationToken))
		{
			if (options == null)
				throw new ArgumentNullException (nameof (options));

			if (tags == null)
				throw new ArgumentNullException (nameof (tags));

			CheckState (false, false);

			if ((Engine.Capabilities & ImapCapabilities.Metadata) == 0)
				throw new NotSupportedException ("The IMAP server does not support the METADATA extension.");

			var command = new StringBuilder ("GETMETADATA %F");
			var args = new List<object> ();
			bool hasOptions = false;

			if (options.MaxSize.HasValue || options.Depth != 0) {
				command.Append (" (");
				if (options.MaxSize.HasValue)
					command.AppendFormat ("MAXSIZE {0} ", options.MaxSize.Value);
				if (options.Depth > 0)
					command.AppendFormat ("DEPTH {0} ", options.Depth == int.MaxValue ? "infinity" : "1");
				command[command.Length - 1] = ')';
				command.Append (' ');
				hasOptions = true;
			}

			args.Add (this);

			int startIndex = command.Length;
			foreach (var tag in tags) {
				command.Append (" %S");
				args.Add (tag.Id);
			}

			if (hasOptions) {
				command[startIndex] = '(';
				command.Append (')');
			}

			command.Append ("\r\n");

			if (args.Count == 1)
				return new MetadataCollection ();

			var ic = new ImapCommand (Engine, cancellationToken, null, command.ToString (), args.ToArray ());
			ic.RegisterUntaggedHandler ("METADATA", ImapUtils.ParseMetadata);
			ic.UserData = new MetadataCollection ();
			options.LongEntries = 0;

			Engine.QueueCommand (ic);
			Engine.Wait (ic);

			ProcessResponseCodes (ic, null);

			if (ic.Response != ImapCommandResponse.Ok)
				throw ImapCommandException.Create ("GETMETADATA", ic);

			if (ic.RespCodes.Count > 0 && ic.RespCodes[ic.RespCodes.Count - 1].Type == ImapResponseCodeType.Metadata) {
				var metadata = (MetadataResponseCode) ic.RespCodes[ic.RespCodes.Count - 1];

				if (metadata.SubType == MetadataResponseCodeSubType.LongEntries)
					options.LongEntries = metadata.Value;
			}

			return (MetadataCollection) ic.UserData;
		}