/// <summary> /// Removes the media file. /// </summary> public async Task RemoveAsync(RemoveMediaRequestVM vm, ClaimsPrincipal principal) { var media = await _db.Media .Include(x => x.Tags) .GetAsync(x => x.Id == vm.Id && x.IsDeleted == false, "Медиа-файл не найден"); var prevState = await RequestUpdateAsync(vm.Id); var changeset = await GetChangesetAsync(prevState, null, vm.Id, principal, null); _db.Changes.Add(changeset); if (vm.RemoveFile) { var user = await _userMgr.GetUserAsync(principal, "Пользователь не найден"); var canRemove = await _userMgr.IsInRoleAsync(user, nameof(UserRole.Admin)); if (canRemove) { foreach (var size in new [] { MediaSize.Original, MediaSize.Large, MediaSize.Medium }) // sic! leaving the .sm thumb { File.Delete(_env.GetMediaPath(media, size)); } } } media.IsDeleted = true; await ClearCacheAsync(media); }
/// <summary> /// Checks if the changeset can be reverted. /// </summary> private bool CanRevert(Changeset chg) { var chgType = GetChangeType(chg); if (chgType == ChangesetType.Created || chgType == ChangesetType.Restored) { return(false); } if (chg.EditedMedia != null) { // if the file has been removed completely, revert is impossible var file = _env.GetMediaPath(chg.EditedMedia); return(File.Exists(file)); } return(true); }