/// <inheritdoc/>
        public override bool ApplyDatabaseChanges(StructuredContentHelper helper, StructuredContentChanges changes, RockContext rockContext)
        {
            var imageChanges = changes.GetData <ImageChangeData>();

            if (imageChanges == null)
            {
                return(false);
            }

            var addedBinaryFileIds   = imageChanges?.NewFileIds?.Except(imageChanges.OldFileIds)?.ToList();
            var removedBinaryFileIds = imageChanges?.OldFileIds?.Except(imageChanges.NewFileIds)?.ToList();

            bool needSave          = false;
            var  binaryFileService = new BinaryFileService(rockContext);

            // If there are any newly added binary files then mark them as
            // permanent so they will persist in the database.
            if (addedBinaryFileIds != null && addedBinaryFileIds.Count > 0)
            {
                var filesToAdd = binaryFileService.Queryable()
                                 .Where(b => addedBinaryFileIds.Contains(b.Id))
                                 .ToList();

                filesToAdd.ForEach(b => b.IsTemporary = false);
                needSave = true;
            }

            // If there are any removed binary files then mark them as temporary
            // so they will be later removed by the cleanup job.
            if (removedBinaryFileIds != null && removedBinaryFileIds.Count > 0)
            {
                var filesToRemove = binaryFileService.Queryable()
                                    .Where(b => removedBinaryFileIds.Contains(b.Id))
                                    .ToList();

                filesToRemove.ForEach(b => b.IsTemporary = true);
                needSave = true;
            }

            return(needSave);
        }
        /// <inheritdoc/>
        protected override void DetectBlockChanges(ImageData newData, ImageData oldData, StructuredContentChanges changes)
        {
            var imageChanges = changes.GetData <ImageChangeData>();

            if (imageChanges == null)
            {
                imageChanges = new ImageChangeData();
                changes.AddOrReplaceData(imageChanges);
            }

            // If the new data has a file identifier then store it for later review.
            if (newData?.File?.FileId != null)
            {
                imageChanges.NewFileIds.Add(newData.File.FileId.Value);
            }

            // If the old data has a file identifier then store it for alter review.
            if (oldData?.File?.FileId != null)
            {
                imageChanges.OldFileIds.Add(oldData.File.FileId.Value);
            }
        }