Ejemplo n.º 1
0
        /// <summary>
        /// 按类别清理文件
        /// </summary>
        /// <param name="tag">文件类别</param>
        /// <param name="repository"></param>
        /// <returns></returns>
        private async Task CleanFilesWithTagAsync(FileTag tag, IFileInfoRepository repository)
        {
            List <Domain.AggregatesModel.FileInfoAggregate.FileInfo> notUsedFileInfos;

            switch (tag)
            {
            case FileTag.App:
            case FileTag.AppOriginal:
            case FileTag.AppThumbnail:
                notUsedFileInfos = await repository.GetNotUsedAppImagesAsync(tag);

                break;

            case FileTag.AppVideo:
                notUsedFileInfos = await repository.GetNotUsedAppVideosAsync(tag);

                break;

            case FileTag.Chat:
            case FileTag.ChatThumbnail:
            case FileTag.ChatVideo:
                // 删除早于距当前时间超过任务执行间隔的聊天文件
                var oldestTime = DateTime.UtcNow.AddHours(-_chatCleanSettings.IntervalHours);
                notUsedFileInfos = await repository.GetAllChatFileInfosAsync(oldestTime);

                break;

            default:
                return;
            }

            notUsedFileInfos.ForEach(fi =>
            {
                var delResult = false;

                // 由于聊天文件是统一删除,因此如果类别是聊天中的任意一种,则删除所有聊天文件
                // app内文件按传入类别删除
                if (tag == FileTag.Chat || tag == FileTag.ChatThumbnail || tag == FileTag.ChatVideo)
                {
                    delResult = DeleteFile(fi.Name, FileTag.Chat) && DeleteFile(fi.Name, FileTag.ChatThumbnail) && DeleteFile(fi.Name, FileTag.ChatVideo);
                }
                else
                {
                    delResult = DeleteFile(fi.Name, tag);
                }

                // 如果删除文件成功则删除数据库数据
                if (delResult)
                {
                    repository.Remove(fi);
                }
            });
        }