public bool CanExecute(string userName, string fullCommandText)
        {
            // TODO: Check the cooldown on the image descriptor

            // Match the regular expression pattern against a text string.
            var imageCheck     = _UrlCheck.Match(fullCommandText);
            var instagramCheck = _InstagramCheck.Match(fullCommandText);

            if (imageCheck.Captures.Count == 0 && !instagramCheck.Success)
            {
                return(false);
            }

            if (imageCheck.Captures.Count != 0)
            {
                this.ImageUrl = imageCheck.Captures[0].Value;
            }
            if (instagramCheck.Captures.Count != 0)
            {
                this.Provider = ImageProviders.Instagram;
                this.ImageUrl = HandleInstagram(instagramCheck).GetAwaiter().GetResult();
                return(!string.IsNullOrEmpty(this.ImageUrl));
            }

            return((!ImageUrl.Contains('#') && imageCheck.Captures.Count > 0) && ValidImageType(ImageUrl).GetAwaiter().GetResult());

            async Task <bool> ValidImageType(string url)
            {
                HttpResponseMessage response;

                using (var client = _ClientFactory.CreateClient("ImageDescriptor"))
                {
                    try
                    {
                        var request = new HttpRequestMessage
                        {
                            Method     = HttpMethod.Head,
                            RequestUri = new Uri(url)
                        };
                        response = await client.SendAsync(request, cancellationToken : CancellationToken.None);

                        response.EnsureSuccessStatusCode();
                    }
                    catch
                    {
                        return(false);
                    }

                    return(response.Content.Headers.ContentType.MediaType.ToLowerInvariant().StartsWith("image/"));
                }
            }
        }
Exemplo n.º 2
0
    public static IImageProvider GetImageProvider(ImageProviders provider)
    {
        switch (provider)
        {
        case ImageProviders.FileSystem:
            return(new FSImageProvider());

        case ImageProviders.Azure:
            return(new AzureImageProvider);

        default:
            throw new Exception("Invalid image provider");
        }
    }
        public static void AddImageProvider <T>(string basePath) where T : ImageProviderBase
        {
            if (string.IsNullOrEmpty(basePath))
            {
                throw new ArgumentException("Base path may not be null or empty. Use SetDefaultImageProvider<T> instead.");
            }
            if (ImageProviders.ContainsKey(basePath))
            {
                throw new ArgumentException("Base path already exists in collection.");
            }

            var objectCreator = ObjectCreation.GetCreator <T, ImageProviderBase>();

            ImageProviders.Add(basePath, objectCreator);
        }