From c614ba470559501e68cf55866adff7b12b7a7716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Fri, 13 Dec 2024 10:25:16 +0800 Subject: [PATCH] fix #402 --- .../Operation/ClearAllCacheFilesOperation.cs | 2 +- .../ClearCacheFilesByTagsOperaiton.cs | 120 ++++++++++++++++ .../ClearCacheFilesByTagsOperaiton.cs.meta} | 2 +- .../ClearUnusedCacheFilesOperation.cs | 2 +- .../DefaultBuildinFileSystem.cs | 8 +- .../DefaultCacheFileSystem.cs | 36 +++-- .../DefaultEditorFileSystem.cs | 10 +- .../DefaultWebRemoteFileSystem.cs | 10 +- .../DefaultWebServerFileSystem.cs | 10 +- .../Runtime/FileSystem/EFileClearMode.cs | 25 ++++ ...eration.cs.meta => EFileClearMode.cs.meta} | 2 +- .../FileSystem/Interface/IFileSystem.cs | 9 +- .../FSClearAllBundleFilesOperation.cs | 21 --- .../FSClearCacheBundleFilesOperation.cs | 32 +++++ .../FSClearCacheBundleFilesOperation.cs.meta} | 2 +- .../FSClearUnusedBundleFilesOperation.cs | 21 --- .../ResourcePackage/Interface/IPlayMode.cs | 9 +- ...n.cs => ClearCacheBundleFilesOperation.cs} | 57 ++++---- .../ClearCacheBundleFilesOperation.cs.meta} | 2 +- .../ClearUnusedBundleFilesOperation.cs | 131 ------------------ .../PlayMode/EditorSimulateModeImpl.cs | 11 +- .../PlayMode/HostPlayModeImpl.cs | 11 +- .../PlayMode/OfflinePlayModeImpl.cs | 11 +- .../PlayMode/WebPlayModeImpl.cs | 11 +- .../ResourcePackage/ResourcePackage.cs | 16 ++- 25 files changed, 268 insertions(+), 303 deletions(-) create mode 100644 Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs rename Assets/YooAsset/Runtime/{ResourcePackage/Operation/ClearAllBundleFilesOperation.cs.meta => FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs.meta} (83%) create mode 100644 Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs rename Assets/YooAsset/Runtime/FileSystem/{Operation/FSClearAllBundleFilesOperation.cs.meta => EFileClearMode.cs.meta} (83%) delete mode 100644 Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs create mode 100644 Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs rename Assets/YooAsset/Runtime/{ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs.meta => FileSystem/Operation/FSClearCacheBundleFilesOperation.cs.meta} (83%) delete mode 100644 Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{ClearAllBundleFilesOperation.cs => ClearCacheBundleFilesOperation.cs} (54%) rename Assets/YooAsset/Runtime/{FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs.meta => ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs.meta} (83%) delete mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearAllCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearAllCacheFilesOperation.cs index 24b96fe3..67eb1d6a 100644 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearAllCacheFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearAllCacheFilesOperation.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace YooAsset { - internal sealed class ClearAllCacheFilesOperation : FSClearAllBundleFilesOperation + internal sealed class ClearAllCacheFilesOperation : FSClearCacheBundleFilesOperation { private enum ESteps { diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs new file mode 100644 index 00000000..66a6ad5c --- /dev/null +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs @@ -0,0 +1,120 @@ +using System.Collections.Generic; + +namespace YooAsset +{ + internal class ClearCacheFilesByTagsOperaiton : FSClearCacheBundleFilesOperation + { + private enum ESteps + { + None, + CheckArgs, + GetTagsCacheFiles, + ClearTagsCacheFiles, + Done, + } + + private readonly ICacheSystem _cacheSystem; + private readonly PackageManifest _manifest; + private readonly object _clearParam; + private string[] _tags; + private List _clearBundleGUIDs; + private int _clearFileTotalCount = 0; + private ESteps _steps = ESteps.None; + + internal ClearCacheFilesByTagsOperaiton(ICacheSystem cacheSystem, PackageManifest manifest, object clearParam) + { + _cacheSystem = cacheSystem; + _manifest = manifest; + _clearParam = clearParam; + } + internal override void InternalOnStart() + { + _steps = ESteps.CheckArgs; + } + internal override void InternalOnUpdate() + { + if (_steps == ESteps.None || _steps == ESteps.Done) + return; + + if (_steps == ESteps.CheckArgs) + { + if (_clearParam == null) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Clear param is null !"; + return; + } + + if (_clearParam is string) + { + _tags = new string[] { _clearParam as string }; + } + else if (_clearParam is List) + { + var tempList = _clearParam as List; + _tags = tempList.ToArray(); + } + else if (_clearParam is string[]) + { + _tags = _clearParam as string[]; + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"Invalid clear param : {_clearParam.GetType().FullName}"; + return; + } + + _steps = ESteps.GetTagsCacheFiles; + } + + if (_steps == ESteps.GetTagsCacheFiles) + { + _clearBundleGUIDs = GetTagsBundleGUIDs(); + _clearFileTotalCount = _clearBundleGUIDs.Count; + _steps = ESteps.ClearTagsCacheFiles; + } + + if (_steps == ESteps.ClearTagsCacheFiles) + { + for (int i = _clearBundleGUIDs.Count - 1; i >= 0; i--) + { + string bundleGUID = _clearBundleGUIDs[i]; + _cacheSystem.DeleteCacheFile(bundleGUID); + _clearBundleGUIDs.RemoveAt(i); + if (OperationSystem.IsBusy) + break; + } + + if (_clearFileTotalCount == 0) + Progress = 1.0f; + else + Progress = 1.0f - (_clearBundleGUIDs.Count / _clearFileTotalCount); + + if (_clearBundleGUIDs.Count == 0) + { + _steps = ESteps.Done; + Status = EOperationStatus.Succeed; + } + } + } + private List GetTagsBundleGUIDs() + { + var allBundleGUIDs = _cacheSystem.GetAllCachedBundleGUIDs(); + List result = new List(allBundleGUIDs.Count); + foreach (var bundleGUID in allBundleGUIDs) + { + if (_manifest.TryGetPackageBundleByBundleGUID(bundleGUID, out PackageBundle bundle)) + { + if (bundle.HasTag(_tags)) + { + result.Add(bundleGUID); + } + } + } + return result; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs.meta similarity index 83% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs.meta rename to Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs.meta index 302fb64f..36dff9df 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs.meta +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearCacheFilesByTagsOperaiton.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4f25029d71d0d8c4dad70987bda364bf +guid: c42345c14a903274fb160a813ee174dc MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearUnusedCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearUnusedCacheFilesOperation.cs index cf1939d3..e4743c70 100644 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearUnusedCacheFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/ClearUnusedCacheFilesOperation.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace YooAsset { - internal sealed class ClearUnusedCacheFilesOperation : FSClearUnusedBundleFilesOperation + internal sealed class ClearUnusedCacheFilesOperation : FSClearCacheBundleFilesOperation { private enum ESteps { diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs index a995cc57..97890425 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs @@ -97,13 +97,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() + public virtual FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam) { - return _unpackFileSystem.ClearAllBundleFilesAsync(); - } - public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) - { - return _unpackFileSystem.ClearUnusedBundleFilesAsync(manifest); + return _unpackFileSystem.ClearCacheBundleFilesAsync(manifest, clearMode, clearParam); } public virtual FSDownloadFileOperation DownloadFileAsync(PackageBundle bundle, DownloadParam param) { diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs index 5267449b..59c997ce 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs @@ -111,17 +111,33 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() + public virtual FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam) { - var operation = new ClearAllCacheFilesOperation(this); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) - { - var operation = new ClearUnusedCacheFilesOperation(this, manifest); - OperationSystem.StartOperation(PackageName, operation); - return operation; + if(clearMode == EFileClearMode.ClearAllBundleFiles.ToString()) + { + var operation = new ClearAllCacheFilesOperation(this); + OperationSystem.StartOperation(PackageName, operation); + return operation; + } + else if(clearMode == EFileClearMode.ClearUnusedBundleFiles.ToString()) + { + var operation = new ClearUnusedCacheFilesOperation(this, manifest); + OperationSystem.StartOperation(PackageName, operation); + return operation; + } + else if(clearMode == EFileClearMode.ClearBundleFilesByTags.ToString()) + { + var operation = new ClearCacheFilesByTagsOperaiton(this, manifest, clearParam); + OperationSystem.StartOperation(PackageName, operation); + return operation; + } + else + { + string error = $"Invalid clear mode : {clearMode}"; + var operation = new FSClearCacheBundleFilesCompleteOperation(error); + OperationSystem.StartOperation(PackageName, operation); + return operation; + } } public virtual FSDownloadFileOperation DownloadFileAsync(PackageBundle bundle, DownloadParam param) { diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs index 0e17481f..329fe313 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs @@ -69,15 +69,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() + public virtual FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam) { - var operation = new FSClearAllBundleFilesCompleteOperation(); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) - { - var operation = new FSClearUnusedBundleFilesCompleteOperation(); + var operation = new FSClearCacheBundleFilesCompleteOperation(null); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs index 038e856a..fc69cd6e 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs @@ -71,15 +71,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() + public virtual FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam) { - var operation = new FSClearAllBundleFilesCompleteOperation(); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) - { - var operation = new FSClearUnusedBundleFilesCompleteOperation(); + var operation = new FSClearCacheBundleFilesCompleteOperation(null); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs index 24c4a819..2cdfde80 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs @@ -80,15 +80,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() + public virtual FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam) { - var operation = new FSClearAllBundleFilesCompleteOperation(); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) - { - var operation = new FSClearUnusedBundleFilesCompleteOperation(); + var operation = new FSClearCacheBundleFilesCompleteOperation(null); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs b/Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs new file mode 100644 index 00000000..f4a132e5 --- /dev/null +++ b/Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs @@ -0,0 +1,25 @@ + +namespace YooAsset +{ + /// + /// 文件清理方式 + /// + public enum EFileClearMode + { + /// + /// 清理所有文件 + /// + ClearAllBundleFiles = 1, + + /// + /// 清理未在使用的文件 + /// + ClearUnusedBundleFiles = 2, + + /// + /// 清理指定标签的文件 + /// 说明:需要指定参数,可选:string, string[], List + /// + ClearBundleFilesByTags = 3, + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs.meta similarity index 83% rename from Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs.meta rename to Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs.meta index e39f22d8..1d00a02f 100644 --- a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs.meta +++ b/Assets/YooAsset/Runtime/FileSystem/EFileClearMode.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e9fe9171073a87746a7393f7d1fcb924 +guid: 2930435fc2ba91c4ba511260b9d119d3 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs index a7b52b28..8eec9c87 100644 --- a/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs @@ -35,14 +35,9 @@ namespace YooAsset FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout); /// - /// 清空所有的文件 + /// 清理缓存文件 /// - FSClearAllBundleFilesOperation ClearAllBundleFilesAsync(); - - /// - /// 清空未使用的文件 - /// - FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest); + FSClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(PackageManifest manifest, string clearMode, object clearParam); /// /// 下载远端文件 diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs deleted file mode 100644 index 0a8b93fd..00000000 --- a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearAllBundleFilesOperation.cs +++ /dev/null @@ -1,21 +0,0 @@ - -namespace YooAsset -{ - internal abstract class FSClearAllBundleFilesOperation : AsyncOperationBase - { - } - - internal sealed class FSClearAllBundleFilesCompleteOperation : FSClearAllBundleFilesOperation - { - internal FSClearAllBundleFilesCompleteOperation() - { - } - internal override void InternalOnStart() - { - Status = EOperationStatus.Succeed; - } - internal override void InternalOnUpdate() - { - } - } -} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs new file mode 100644 index 00000000..e32538a4 --- /dev/null +++ b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs @@ -0,0 +1,32 @@ + +namespace YooAsset +{ + internal abstract class FSClearCacheBundleFilesOperation : AsyncOperationBase + { + } + + internal sealed class FSClearCacheBundleFilesCompleteOperation : FSClearCacheBundleFilesOperation + { + private readonly string _error; + + internal FSClearCacheBundleFilesCompleteOperation(string error) + { + _error = error; + } + internal override void InternalOnStart() + { + if (string.IsNullOrEmpty(_error)) + { + Status = EOperationStatus.Succeed; + } + else + { + Status = EOperationStatus.Failed; + Error = _error; + } + } + internal override void InternalOnUpdate() + { + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs.meta similarity index 83% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs.meta rename to Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs.meta index a0bb9234..2ad7ee02 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs.meta +++ b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheBundleFilesOperation.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 39028a4006030f1469b636b0c8b3805a +guid: b39545a4da23ce34abdf8da069198426 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs deleted file mode 100644 index 2fd73dfb..00000000 --- a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs +++ /dev/null @@ -1,21 +0,0 @@ - -namespace YooAsset -{ - internal abstract class FSClearUnusedBundleFilesOperation : AsyncOperationBase - { - } - - internal sealed class FSClearUnusedBundleFilesCompleteOperation : FSClearUnusedBundleFilesOperation - { - internal FSClearUnusedBundleFilesCompleteOperation() - { - } - internal override void InternalOnStart() - { - Status = EOperationStatus.Succeed; - } - internal override void InternalOnUpdate() - { - } - } -} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs index a526e5f9..3339d526 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs @@ -29,14 +29,9 @@ namespace YooAsset PreDownloadContentOperation PreDownloadContentAsync(string packageVersion, int timeout); /// - /// 清空所有文件 + /// 清理缓存文件 /// - ClearAllBundleFilesOperation ClearAllBundleFilesAsync(); - - /// - /// 清空未使用的文件 - /// - ClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(); + ClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(string clearMode, object clearParam); // 下载相关 ResourceDownloaderOperation CreateResourceDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout); diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs similarity index 54% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs index 3a06b68b..d17035bf 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearAllBundleFilesOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs @@ -1,13 +1,10 @@  namespace YooAsset { - /// - /// 清理所有文件 - /// - public abstract class ClearAllBundleFilesOperation : AsyncOperationBase + public abstract class ClearCacheBundleFilesOperation : AsyncOperationBase { } - internal sealed class ClearAllBundleFilesImplOperation : ClearAllBundleFilesOperation + internal sealed class ClearCacheBundleFilesImplOperation : ClearCacheBundleFilesOperation { private enum ESteps { @@ -22,17 +19,21 @@ namespace YooAsset private readonly IFileSystem _fileSystemA; private readonly IFileSystem _fileSystemB; private readonly IFileSystem _fileSystemC; - private FSClearAllBundleFilesOperation _clearAllBundleFilesOpA; - private FSClearAllBundleFilesOperation _clearAllBundleFilesOpB; - private FSClearAllBundleFilesOperation _clearAllBundleFilesOpC; + private readonly string _clearMode; + private readonly object _clearParam; + private FSClearCacheBundleFilesOperation _clearCacheBundleFilesOpA; + private FSClearCacheBundleFilesOperation _clearCacheBundleFilesOpB; + private FSClearCacheBundleFilesOperation _clearCacheBundleFilesOpC; private ESteps _steps = ESteps.None; - - internal ClearAllBundleFilesImplOperation(IPlayMode impl, IFileSystem fileSystemA, IFileSystem fileSystemB, IFileSystem fileSystemC) + + internal ClearCacheBundleFilesImplOperation(IPlayMode impl, IFileSystem fileSystemA, IFileSystem fileSystemB, IFileSystem fileSystemC, string clearMode, object clearParam) { _impl = impl; _fileSystemA = fileSystemA; _fileSystemB = fileSystemB; _fileSystemC = fileSystemC; + _clearMode = clearMode; + _clearParam = clearParam; } internal override void InternalOnStart() { @@ -51,14 +52,14 @@ namespace YooAsset return; } - if (_clearAllBundleFilesOpA == null) - _clearAllBundleFilesOpA = _fileSystemA.ClearAllBundleFilesAsync(); + if (_clearCacheBundleFilesOpA == null) + _clearCacheBundleFilesOpA = _fileSystemA.ClearCacheBundleFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam); - Progress = _clearAllBundleFilesOpA.Progress; - if (_clearAllBundleFilesOpA.IsDone == false) + Progress = _clearCacheBundleFilesOpA.Progress; + if (_clearCacheBundleFilesOpA.IsDone == false) return; - if (_clearAllBundleFilesOpA.Status == EOperationStatus.Succeed) + if (_clearCacheBundleFilesOpA.Status == EOperationStatus.Succeed) { _steps = ESteps.ClearFileSystemB; } @@ -66,7 +67,7 @@ namespace YooAsset { _steps = ESteps.Done; Status = EOperationStatus.Failed; - Error = _clearAllBundleFilesOpA.Error; + Error = _clearCacheBundleFilesOpA.Error; } } @@ -78,14 +79,14 @@ namespace YooAsset return; } - if (_clearAllBundleFilesOpB == null) - _clearAllBundleFilesOpB = _fileSystemB.ClearAllBundleFilesAsync(); + if (_clearCacheBundleFilesOpB == null) + _clearCacheBundleFilesOpB = _fileSystemB.ClearCacheBundleFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam); - Progress = _clearAllBundleFilesOpB.Progress; - if (_clearAllBundleFilesOpB.IsDone == false) + Progress = _clearCacheBundleFilesOpB.Progress; + if (_clearCacheBundleFilesOpB.IsDone == false) return; - if (_clearAllBundleFilesOpB.Status == EOperationStatus.Succeed) + if (_clearCacheBundleFilesOpB.Status == EOperationStatus.Succeed) { _steps = ESteps.ClearFileSystemC; } @@ -93,7 +94,7 @@ namespace YooAsset { _steps = ESteps.Done; Status = EOperationStatus.Failed; - Error = _clearAllBundleFilesOpB.Error; + Error = _clearCacheBundleFilesOpB.Error; } } @@ -106,14 +107,14 @@ namespace YooAsset return; } - if (_clearAllBundleFilesOpC == null) - _clearAllBundleFilesOpC = _fileSystemC.ClearAllBundleFilesAsync(); + if (_clearCacheBundleFilesOpC == null) + _clearCacheBundleFilesOpC = _fileSystemC.ClearCacheBundleFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam); - Progress = _clearAllBundleFilesOpC.Progress; - if (_clearAllBundleFilesOpC.IsDone == false) + Progress = _clearCacheBundleFilesOpC.Progress; + if (_clearCacheBundleFilesOpC.IsDone == false) return; - if (_clearAllBundleFilesOpC.Status == EOperationStatus.Succeed) + if (_clearCacheBundleFilesOpC.Status == EOperationStatus.Succeed) { _steps = ESteps.Done; Status = EOperationStatus.Succeed; @@ -122,7 +123,7 @@ namespace YooAsset { _steps = ESteps.Done; Status = EOperationStatus.Failed; - Error = _clearAllBundleFilesOpC.Error; + Error = _clearCacheBundleFilesOpC.Error; } } } diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs.meta similarity index 83% rename from Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs.meta rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs.meta index a29a42d1..24a798f4 100644 --- a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearUnusedBundleFilesOperation.cs.meta +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheBundleFilesOperation.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 857423cdfd4f9184eab094be01c62480 +guid: 37b4e645f7a679f4fa978c55329ee01a MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs deleted file mode 100644 index 10e7782f..00000000 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearUnusedBundleFilesOperation.cs +++ /dev/null @@ -1,131 +0,0 @@ - -namespace YooAsset -{ - /// - /// 清理未使用的文件 - /// - public abstract class ClearUnusedBundleFilesOperation : AsyncOperationBase - { - } - internal sealed class ClearUnusedBundleFilesImplOperation : ClearUnusedBundleFilesOperation - { - private enum ESteps - { - None, - ClearFileSystemA, - ClearFileSystemB, - ClearFileSystemC, - Done, - } - - private readonly IPlayMode _impl; - private readonly IFileSystem _fileSystemA; - private readonly IFileSystem _fileSystemB; - private readonly IFileSystem _fileSystemC; - private FSClearUnusedBundleFilesOperation _clearUnusedBundleFilesOpA; - private FSClearUnusedBundleFilesOperation _clearUnusedBundleFilesOpB; - private FSClearUnusedBundleFilesOperation _clearUnusedBundleFilesOpC; - private ESteps _steps = ESteps.None; - - internal ClearUnusedBundleFilesImplOperation(IPlayMode impl, IFileSystem fileSystemA, IFileSystem fileSystemB, IFileSystem fileSystemC) - { - _impl = impl; - _fileSystemA = fileSystemA; - _fileSystemB = fileSystemB; - _fileSystemC = fileSystemC; - } - internal override void InternalOnStart() - { - _steps = ESteps.ClearFileSystemA; - } - internal override void InternalOnUpdate() - { - if (_steps == ESteps.None || _steps == ESteps.Done) - return; - - if (_steps == ESteps.ClearFileSystemA) - { - if (_fileSystemA == null) - { - _steps = ESteps.ClearFileSystemB; - return; - } - - if (_clearUnusedBundleFilesOpA == null) - _clearUnusedBundleFilesOpA = _fileSystemA.ClearUnusedBundleFilesAsync(_impl.ActiveManifest); - - Progress = _clearUnusedBundleFilesOpA.Progress; - if (_clearUnusedBundleFilesOpA.IsDone == false) - return; - - if (_clearUnusedBundleFilesOpA.Status == EOperationStatus.Succeed) - { - _steps = ESteps.ClearFileSystemB; - } - else - { - _steps = ESteps.Done; - Status = EOperationStatus.Failed; - Error = _clearUnusedBundleFilesOpA.Error; - } - } - - if (_steps == ESteps.ClearFileSystemB) - { - if (_fileSystemB == null) - { - _steps = ESteps.ClearFileSystemC; - return; - } - - if (_clearUnusedBundleFilesOpB == null) - _clearUnusedBundleFilesOpB = _fileSystemB.ClearUnusedBundleFilesAsync(_impl.ActiveManifest); - - Progress = _clearUnusedBundleFilesOpB.Progress; - if (_clearUnusedBundleFilesOpB.IsDone == false) - return; - - if (_clearUnusedBundleFilesOpB.Status == EOperationStatus.Succeed) - { - _steps = ESteps.ClearFileSystemC; - - } - else - { - _steps = ESteps.Done; - Status = EOperationStatus.Failed; - Error = _clearUnusedBundleFilesOpB.Error; - } - } - - if (_steps == ESteps.ClearFileSystemC) - { - if (_fileSystemC == null) - { - _steps = ESteps.Done; - Status = EOperationStatus.Succeed; - return; - } - - if (_clearUnusedBundleFilesOpC == null) - _clearUnusedBundleFilesOpC = _fileSystemC.ClearUnusedBundleFilesAsync(_impl.ActiveManifest); - - Progress = _clearUnusedBundleFilesOpC.Progress; - if (_clearUnusedBundleFilesOpC.IsDone == false) - return; - - if (_clearUnusedBundleFilesOpC.Status == EOperationStatus.Succeed) - { - _steps = ESteps.Done; - Status = EOperationStatus.Succeed; - } - else - { - _steps = ESteps.Done; - Status = EOperationStatus.Failed; - Error = _clearUnusedBundleFilesOpC.Error; - } - } - } - } -} diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs index 51f81680..aec77f30 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs @@ -52,16 +52,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - - ClearAllBundleFilesOperation IPlayMode.ClearAllBundleFilesAsync() + ClearCacheBundleFilesOperation IPlayMode.ClearCacheBundleFilesAsync(string clearMode, object clearParam) { - var operation = new ClearAllBundleFilesImplOperation(this, EditorFileSystem, null, null); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - ClearUnusedBundleFilesOperation IPlayMode.ClearUnusedBundleFilesAsync() - { - var operation = new ClearUnusedBundleFilesImplOperation(this, EditorFileSystem, null, null); + var operation = new ClearCacheBundleFilesImplOperation(this, EditorFileSystem, null, null, clearMode, clearParam); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs index 1e89e51e..24d4af23 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs @@ -56,16 +56,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - - ClearAllBundleFilesOperation IPlayMode.ClearAllBundleFilesAsync() + ClearCacheBundleFilesOperation IPlayMode.ClearCacheBundleFilesAsync(string clearMode, object clearParam) { - var operation = new ClearAllBundleFilesImplOperation(this, BuildinFileSystem, CacheFileSystem, null); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - ClearUnusedBundleFilesOperation IPlayMode.ClearUnusedBundleFilesAsync() - { - var operation = new ClearUnusedBundleFilesImplOperation(this, BuildinFileSystem, CacheFileSystem, null); + var operation = new ClearCacheBundleFilesImplOperation(this, BuildinFileSystem, CacheFileSystem, null, clearMode, clearParam); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs index 7f8d1a85..b4ff238e 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs @@ -52,16 +52,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - - ClearAllBundleFilesOperation IPlayMode.ClearAllBundleFilesAsync() + ClearCacheBundleFilesOperation IPlayMode.ClearCacheBundleFilesAsync(string clearMode, object clearParam) { - var operation = new ClearAllBundleFilesImplOperation(this, BuildinFileSystem, null, null); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - ClearUnusedBundleFilesOperation IPlayMode.ClearUnusedBundleFilesAsync() - { - var operation = new ClearUnusedBundleFilesImplOperation(this, BuildinFileSystem, null, null); + var operation = new ClearCacheBundleFilesImplOperation(this, BuildinFileSystem, null, null, clearMode, clearParam); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs index 1cb8a0be..72e7a415 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs @@ -74,16 +74,9 @@ namespace YooAsset OperationSystem.StartOperation(PackageName, operation); return operation; } - - ClearAllBundleFilesOperation IPlayMode.ClearAllBundleFilesAsync() + ClearCacheBundleFilesOperation IPlayMode.ClearCacheBundleFilesAsync(string clearMode, object clearParam) { - var operation = new ClearAllBundleFilesImplOperation(this, WebServerFileSystem, WebRemoteFileSystem, null); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - ClearUnusedBundleFilesOperation IPlayMode.ClearUnusedBundleFilesAsync() - { - var operation = new ClearUnusedBundleFilesImplOperation(this, WebServerFileSystem, WebRemoteFileSystem, null); + var operation = new ClearCacheBundleFilesImplOperation(this, WebServerFileSystem, WebRemoteFileSystem, null, clearMode, clearParam); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index bac85108..e215da0e 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -236,21 +236,25 @@ namespace YooAsset } /// - /// 清理文件系统所有的资源文件 + /// 清理缓存文件 /// - public ClearAllBundleFilesOperation ClearAllBundleFilesAsync() + /// 清理方式 + /// 执行参数 + public ClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(EFileClearMode clearMode, object clearParam = null) { DebugCheckInitialize(); - return _playModeImpl.ClearAllBundleFilesAsync(); + return _playModeImpl.ClearCacheBundleFilesAsync(clearMode.ToString(), clearParam); } /// - /// 清理文件系统未使用的资源文件 + /// 清理缓存文件 /// - public ClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync() + /// 清理方式 + /// 执行参数 + public ClearCacheBundleFilesOperation ClearCacheBundleFilesAsync(string clearMode, object clearParam = null) { DebugCheckInitialize(); - return _playModeImpl.ClearUnusedBundleFilesAsync(); + return _playModeImpl.ClearCacheBundleFilesAsync(clearMode, clearParam); } ///