예제 #1
0
        public OptimizeWaitResult SendToKrakenForCompression(Item currentItem)
        {
            var client  = new RestClient(ImageCompressionSettings.GetConversionApiEndpoint());
            var request = CreateUploadRequest(currentItem, client);

            client.Timeout = 300000;

            try
            {
                var response = client.Execute <OptimizeWaitResult>(request);
                var content  = response.Content;

                if (response.StatusCode != System.Net.HttpStatusCode.OK && response.StatusCode != System.Net.HttpStatusCode.Created)
                {
                    Diagnostics.Log.Info(message: $"Image Upload failed {response.StatusCode} | response content: {response.Content}", owner: this);
                    ShouldContinue = false;
                    return(null);
                }

                if (response.Data != null && string.IsNullOrEmpty(response.Data.KrakedUrl))
                {
                    return(null);
                }

                Diagnostics.Log.Info(message: $"Image Uploaded to Tiny PNG {response.Data.KrakedUrl}", owner: this);

                return(response.Data);
            }
            catch (Exception ex)
            {
                Diagnostics.Log.Error(REMOTE_ERROR, ex);
                TinyPngApiGateway.RecordError(currentItem, ex.Message);
            }
            return(null);
        }
예제 #2
0
        public virtual string DownloadImage(MediaItem currentItem, ImageUpload img)
        {
            var client = new RestClient(img.Location);

            client.Authenticator = new HttpBasicAuthenticator("Api", ImageCompressionSettings.GetApiEndpointKey());

            var request = new RestRequest(Method.GET);

            request.AddHeader("Cache-Control", "no-cache");
            request.AddHeader("Accept", "*/*");
            client.Timeout = 300000;

            try
            {
                byte [] responseData = client.DownloadData(request);
                string  sizeBefore   = currentItem.InnerItem.Fields["Size"].Value;
                UpdateImageFile(currentItem, responseData);
                string sizeAfter = currentItem.InnerItem.Fields["Size"].Value;
                UpdateImageInformation(currentItem, sizeBefore, sizeAfter, ImageCompressionConstants.Messages.OPTIMISED_BY, ImageCompressionSettings.GetInformationField());
            }
            catch (Exception ex)
            {
                Diagnostics.Log.Error(TIMY_CONNETION_ERROR, ex);
                RecordError(currentItem, ex.Message);
            }
            return("API ISSUE");
        }
예제 #3
0
        private void CheckForConversionSync()
        {
            if (!ImageCompressionSettings.IsImageConversionScheduledTaskEnabled())
            {
                return;
            }

            var imageConversionService = ServiceLocator.ServiceProvider.GetService <IImageNextGenFormatService>();

            Diagnostics.Log.Info("Commencing the Image Conversion task", this);
            foreach (var result in GetUnprocessedImages(ImageCompressionConstants.Messages.OPTIMISED_BY_KRAKEN))
            {
                try
                {
                    if (result.Name == "__Standard Values")
                    {
                        continue;
                    }
                    Sitecore.Diagnostics.Log.Info($"STARTED - Image Conversion task processing {result.ID} - {result.Name}", this);
                    imageConversionService.ConvertImage(result);
                    Sitecore.Diagnostics.Log.Info($"COMPLETED - Image Conversion task processing {result.ID} - {result.Name}", this);
                }
                catch (Exception ex)
                {
                    Sitecore.Diagnostics.Log.Error($"FAILED - Image Conversion task {result.ID} - {result.Name} - {ex.Message} \n\r {ex.InnerException}", this);
                }

                if (!imageConversionService.ShouldContinue)
                {
                    return;
                }
            }
        }
예제 #4
0
        public UserRequest BuildRequestObject()
        {
            var ApiKey    = ImageCompressionSettings.GetConversionApiEndpointKey();
            var ApiSecret = ImageCompressionSettings.GetConversionApiSecret();

            var requestObj = new UserRequest();

            requestObj.Authentication.ApiKey    = ApiKey;
            requestObj.Authentication.ApiSecret = ApiSecret;
            requestObj.WebP  = true;
            requestObj.Lossy = true;
            requestObj.Wait  = true;
            return(requestObj);
        }
예제 #5
0
        /// <summary>
        /// Queries the state of the command.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns>The state of the command.</returns>
        public override CommandState QueryState(CommandContext context)
        {
            Assert.ArgumentNotNull(context, "context");

            if (!ImageCompressionSettings.IsImageConversionButtonEnabled())
            {
                return(CommandState.Hidden);
            }

            if (context.Items.Length != 1 || !ImageCompressionSettings.IsImage(context.Items[0]))
            {
                return(CommandState.Hidden);
            }

            var item = context.Items[0];

            return(CommandState.Enabled);
        }
예제 #6
0
        public override void Execute(CommandContext context)
        {
            if (context.Items.Length != 1)
            {
                return;
            }

            if (!ImageCompressionSettings.IsImageCompressionButtonEnabled())
            {
                return;
            }

            var currentItem = context.Items[0];

            currentItem.Editing.BeginEdit();
            _imageConversionService.ConvertImage(currentItem);
            currentItem.Editing.EndEdit();
        }
예제 #7
0
        public virtual ImageUpload SendToTinyForCompression(Item currentItem)
        {
            var client = new RestClient(ImageCompressionSettings.GetApiEndpoint());

            client.Authenticator = new HttpBasicAuthenticator("Api", ImageCompressionSettings.GetApiEndpointKey());
            var request = CreateUploadRequest(currentItem, client);

            client.Timeout = 300000;

            try
            {
                var response = client.Execute <ImageUpload>(request);
                var content  = response.Content;

                if (response.StatusCode != System.Net.HttpStatusCode.OK && response.StatusCode != System.Net.HttpStatusCode.Created)
                {
                    Sitecore.Diagnostics.Log.Info($"Image Upload failed {response.StatusCode} | response content: {response.Content}", this);
                    ShouldContinue = false;
                    return(null);
                }

                response.Data.Location = GetHeader(response, LOCATON_RESPONSE);

                if (string.IsNullOrEmpty(response.Data.Location))
                {
                    return(null);
                }

                Diagnostics.Log.Info($"Image Uploaded to Tiny PNG {response.Data.Location} | Compression count so far: {GetHeader(response, COMPRESSION_COUNT)}", this);

                return(response.Data);
            }
            catch (Exception ex)
            {
                Diagnostics.Log.Error(REMOTE_ERROR, ex);
                RecordError(currentItem, ex.Message);
            }
            return(null);
        }
예제 #8
0
        /// <summary>
        /// Requires the following field to be patched in: <field fieldName="_templates"                 returnType="string"      type="Sitecore.ContentSearch.ComputedFields.AllTemplates, Sitecore.ContentSearch" deep="true" includeStandardTemplate="false" />
        /// </summary>
        /// <param name="index">The search index to search within.</param>
        /// <returns></returns>
        protected IEnumerable <Item> GetUnprocessedImages(string marker)
        {
            using (var searchContext = ContentSearchManager.GetIndex(ImageCompressionConstants.GlobalSettings.Index.Master).CreateSearchContext())
            {
                var imageResults = searchContext.GetQueryable <AllTemplatesSearchResultItem>().Where(x =>
                                                                                                     x.TemplateId == ImageCompressionConstants.TemplateIDs.UnversionedImageTemplateId ||
                                                                                                     x.TemplateId == (ImageCompressionConstants.TemplateIDs.UnversionedJpegImageTemplateId) ||
                                                                                                     x.TemplateId == (ImageCompressionConstants.TemplateIDs.VersionedImageTemplateId) ||
                                                                                                     x.TemplateId == (ImageCompressionConstants.TemplateIDs.VersionedJpegImageTemplateId)
                                                                                                     );
                if (!imageResults.Any())
                {
                    return(new List <Item>());
                }

                var sitecoreItems = imageResults.Select(x => x.GetItem()).ToList()
                                    .Where(y => !y.Fields[ImageCompressionSettings.GetInformationField()].Value.Contains(marker));
                var results = sitecoreItems.ToList();

                Diagnostics.Log.Info($"Found {results.Count} images", this);

                return(results);
            }
        }
예제 #9
0
        public string DownloadImage(MediaItem currentItem, OptimizeWaitResult img)
        {
            var client = new RestClient(img.KrakedUrl);

            var request = new RestRequest(Method.GET);

            request.AddHeader("Cache-Control", "no-cache");
            request.AddHeader("Accept", "*/*");
            client.Timeout = 300000;

            try
            {
                byte [] responseData = client.DownloadData(request);
                string  sizeBefore   = currentItem.InnerItem.Fields["Size"].Value;
                UpdateImageFile(currentItem, responseData);
                string sizeAfter = responseData.Length.ToString();
                TinyPngApiGateway.UpdateImageInformation(currentItem, sizeBefore, sizeAfter, ImageCompressionConstants.Messages.OPTIMISED_BY_KRAKEN, ImageCompressionSettings.GetConversionInformationField());
            }
            catch (Exception ex)
            {
                Diagnostics.Log.Error(TIMY_CONNETION_ERROR, ex);
                TinyPngApiGateway.RecordError(currentItem, ex.Message);
            }
            return("API ISSUE");
        }
예제 #10
0
 public static void RecordError(MediaItem currentItem, string message)
 {
     currentItem.InnerItem.Editing.BeginEdit();
     currentItem.InnerItem.Fields[ImageCompressionSettings.GetInformationField()].Value = message;
     currentItem.InnerItem.Editing.EndEdit();
 }