/// <summary>Called when the item is saving.</summary>
        protected void OnItemSaving(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull((object)args, "args");

            // Do not run rules when installting Sitecore packages
            if (Sitecore.Context.Job?.Name == "Install")
            {
                return;
            }

            // Do not run rules when publishing
            if (!Settings.Rules.ItemEventHandlers.RunDuringPublishing && PublishHelper.IsPublishing())
            {
                return;
            }

            Item obj = Event.ExtractParameter(args, 0) as Item;

            if (obj == null)
            {
                return;
            }

            this.RunItemSavingRules(obj);
        }
        protected void OnItemSaved(object sender, EventArgs args)
        {
            if (args == null || LinkDisabler.IsActive || !Settings.LinkDatabase.UpdateDuringPublish && PublishHelper.IsPublishing())
            {
                return;
            }

            Item item = Event.ExtractParameter(args, 0) as Item;

            Assert.IsNotNull(item, "No item in parameters");


            var imageTemplateIDs = new ID[] { Sitecore.TemplateIDs.Image, Sitecore.TemplateIDs.UnversionedImage, Sitecore.TemplateIDs.VersionedImage };
            var templateItem     = TemplateManager.GetTemplate(item);

            foreach (var templateID in imageTemplateIDs)
            {
                if (IsDerived(templateItem, templateID))
                {
                    var command = new OptimizeImageCommand();
                    command.StartProcess(new object[] { new Item[] { item } });
                    break;
                }
            }
        }