using Ghost.Core; using Ghost.Editor.Core.AssetHandle; namespace Ghost.Editor.Core.Contracts; public interface IAssetService { DirectoryInfo? AssetsDirectory { get; } // Lifecycle Task RefreshAsync(CancellationToken token = default); // Dirty tracking void MarkDirty(Guid assetGuid); bool IsDirty(Guid assetGuid); Guid[] GetDirtyAssets(); void ClearDirty(Guid assetGuid); void ClearAllDirty(); void SetAutoRefresh(bool enabled); // Path <-> GUID lookup Result PathToGuid(string assetPath); Result GuidToPath(Guid guid); // Asset loading Result LoadAsset(Guid guid) where T : Asset; Result LoadAssetAtPath(string assetPath) where T : Asset; void UnloadAsset(Guid guid); void UnloadAllAssets(); bool IsAssetLoaded(Guid guid); (int currentSize, int maxSize) GetCacheStats(); Result SaveImportedAsset(Guid guid, T assetData) where T : Asset; // Asset tags ValueTask>> GetAssetTagsAsync(Guid guid, CancellationToken token = default); ValueTask SetAssetTagsAsync(Guid guid, List tags, CancellationToken token = default); // Asset search Task> FindAssetsByNameAsync(string namePattern, CancellationToken token = default); Task> FindAssetsByTagAsync(string tag, CancellationToken token = default); IReadOnlyDictionary GetAllAssets(); // Asset file operations ValueTask CreateAssetAsync(string assetPath, ReadOnlyMemory content, CancellationToken token = default); ValueTask CreateAssetAsync(string assetPath, CancellationToken token = default); ValueTask DeleteAssetAsync(Guid guid, CancellationToken token = default); ValueTask DeleteAssetAsync(string assetPath, CancellationToken token = default); ValueTask MoveAssetAsync(Guid guid, string newPath, CancellationToken token = default); ValueTask MoveAssetAsync(string oldPath, string newPath, CancellationToken token = default); ValueTask> CopyAssetAsync(Guid guid, string newPath, CancellationToken token = default); ValueTask> CopyAssetAsync(string sourcePath, string destPath, CancellationToken token = default); Result MarkDirtyAsync(Guid guid, CancellationToken token = default); Task ImportDirtyAssetsAsync(CancellationToken token = default); // Importer management Type? GetImporterType(string extension); Dictionary GetAllImporters(); ValueTask> ExportAssetAsync(string assetPath, T assetData, CancellationToken token = default) where T : class; // Asset opening void OpenAsset(string path); }