using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace UnityEditor.AddressableAssets.Settings { internal interface ICcdFolder<T> where T : class { void GetChildren(DirectoryInfo startDirectory); } internal class CcdBuildDataFolder : ICcdFolder<CcdEnvironmentFolder> { public string Name; public string Location; public List<CcdEnvironmentFolder> Environments = new List<CcdEnvironmentFolder>(); public void GetChildren(DirectoryInfo startDirectory) { var envDirs = startDirectory.GetDirectories().Where(d => !d.Attributes.HasFlag(FileAttributes.Hidden)); foreach (var dir in envDirs) { var envFolder = new CcdEnvironmentFolder(); envFolder.Name = dir.Name; envFolder.Location = dir.FullName; envFolder.GetChildren(dir); Environments.Add(envFolder); } } } internal class CcdEnvironmentFolder : ICcdFolder<CcdBucketFolder> { public string Name; public string Location; public List<CcdBucketFolder> Buckets = new List<CcdBucketFolder>(); public void GetChildren(DirectoryInfo startDirectory) { var bucketDirs = startDirectory.GetDirectories().Where(d => !d.Attributes.HasFlag(FileAttributes.Hidden)); foreach (var dir in bucketDirs) { var bucketFolder = new CcdBucketFolder(); bucketFolder.Name = dir.Name; bucketFolder.Location = dir.FullName; bucketFolder.GetChildren(dir); Buckets.Add(bucketFolder); } } } internal class CcdBucketFolder : ICcdFolder<CcdBadgeFolder> { public string Name; public string Location; public List<CcdBadgeFolder> Badges = new List<CcdBadgeFolder>(); public void GetChildren(DirectoryInfo startDirectory) { var badgeDirs = startDirectory.GetDirectories().Where(d => !d.Attributes.HasFlag(FileAttributes.Hidden)); foreach (var dir in badgeDirs) { var badgeFolder = new CcdBadgeFolder(); badgeFolder.Name = dir.Name; badgeFolder.Location = dir.FullName; badgeFolder.GetChildren(dir); Badges.Add(badgeFolder); } } } internal class CcdBadgeFolder : ICcdFolder<FileInfo> { public string Name; public string Location; public List<FileInfo> Files = new List<FileInfo>(); public void GetChildren(DirectoryInfo startDirectory) { Files = startDirectory.GetFiles().Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)).ToList(); } } }