BetterCms.Module.MediaManager.Services.DefaultMediaImageService.RemoveImageWithFiles C# (CSharp) Method

RemoveImageWithFiles() public method

Removes an image related files from the storage.
public RemoveImageWithFiles ( System.Guid mediaImageId, int version, bool doNotCheckVersion = false, bool originalWasNotUploaded = false ) : void
mediaImageId System.Guid The media image id.
version int The version.
doNotCheckVersion bool
originalWasNotUploaded bool
return void
        public void RemoveImageWithFiles(Guid mediaImageId, int version, bool doNotCheckVersion = false, bool originalWasNotUploaded = false)
        {
            var removeImageFileTasks = new List<Task>();
            var image = repository.AsQueryable<MediaImage>()
                          .Where(f => f.Id == mediaImageId)
                          .Select(f => new
                                           {
                                               IsUploaded = f.IsUploaded,
                                               FileUri = f.FileUri,
                                               IsOriginalUploaded = f.IsOriginalUploaded,
                                               OriginalUri = f.OriginalUri,
                                               IsThumbnailUploaded = f.IsThumbnailUploaded,
                                               ThumbnailUri = f.ThumbnailUri
                                           })
                          .FirstOrDefault();

            if (image == null)
            {
                throw new CmsException(string.Format("Image not found by given id={0}", mediaImageId));
            }

            try
            {
                if (image.IsUploaded.HasValue && image.IsUploaded.Value)
                {
                    removeImageFileTasks.Add(
                        new Task(
                            () =>
                                { storageService.RemoveObject(image.FileUri); }));
                }

                if (image.IsOriginalUploaded.HasValue && image.IsOriginalUploaded.Value && !originalWasNotUploaded)
                {
                    removeImageFileTasks.Add(
                        new Task(
                            () =>
                                { storageService.RemoveObject(image.OriginalUri); }));
                }

                if (image.IsThumbnailUploaded.HasValue && image.IsThumbnailUploaded.Value)
                {
                    removeImageFileTasks.Add(
                        new Task(
                            () =>
                                { storageService.RemoveObject(image.ThumbnailUri); }));
                }

                if (removeImageFileTasks.Count > 0)
                {
                    Task.Factory.ContinueWhenAll(
                        removeImageFileTasks.ToArray(),
                        result =>
                        {
                            // TODO: add functionality to remove folder if it is empty
                        });

                    removeImageFileTasks.ForEach(task => task.Start());
                }
            }
            finally
            {
                if (doNotCheckVersion)
                {
                    var media = repository.AsQueryable<MediaImage>().FirstOrDefault(f => f.Id == mediaImageId);
                    var archivedImage = RevertChanges(media);
                    if (archivedImage != null)
                    {
                        repository.Delete(archivedImage);
                    }
                }
                else
                {
                    //var media = repository.AsQueryable<MediaImage>().FirstOrDefault(f => f.Id == mediaImageId);
                    //var archivedImage = RevertChanges(media);
                    repository.Delete<MediaImage>(mediaImageId, version);
                }
                unitOfWork.Commit();
            }
        }