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();
}
}