コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }