using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Crowdin.Plugin.Server_API.Helpers { using Serializable.Directories; using Services; public static class DirectoriesHelper { public const string RootDirectoryName = "unity-plugin"; public const string RootDirectoryTitle = "Unity integration"; public static Task EnsureRootDirectoryAsync(CancellationToken cancellationToken) { return EnsureDirectoryAsync(RootDirectoryName, RootDirectoryTitle, parentDirectoryId: 0, cancellationToken); } public static async Task EnsureDirectoryAsync(string name, string title, int parentDirectoryId, CancellationToken cancellationToken) { Dictionary created = await EnsureDirectoriesAsync( new List<(string name, string title)> { (name, title) }, parentDirectoryId, cancellationToken); return created[name]; } public static async Task> EnsureDirectoriesAsync( List<(string name, string title)> directoryNames, int parentDirectoryId, CancellationToken cancellationToken) { var service = new DirectoriesApiService(); List existingDirectories = await service.ListDirectories(parentDirectoryId, filter: null, cancellationToken); var result = new Dictionary(); var missingDirectories = new List<(string name, string title)>(); foreach ((string name, string title) in directoryNames) { DirectoryObj found = existingDirectories.FirstOrDefault(data => data.name == name); if (found != null) { result[name] = found.id; } else { missingDirectories.Add((name, title)); } } foreach (var newDirectory in missingDirectories) { AddRootDirectoryQueryData queryData = parentDirectoryId is 0 ? new AddRootDirectoryQueryData { name = newDirectory.name, title = newDirectory.title, exportPattern = $"/localization/%locale%/{newDirectory.name}/%file_name%" } : new AddDirectoryQueryData { directoryId = parentDirectoryId, name = newDirectory.name, title = newDirectory.title, exportPattern = $"/localization/%locale%/{newDirectory.name}/%file_name%" }; DirectoryObj added = await service.AddDirectory(queryData, cancellationToken); result[added.name] = added.id; } return result; } } }