using System.Collections.Generic; using Crowdin.Plugin.Models; using Crowdin.Plugin.Models.Settings; using UnityEditor; using UnityEngine; namespace Crowdin.Plugin.Server_API.Helpers { using Api; using Plugin.Helpers; using Models; using ScriptableObjects; using Serializable.Language; public static class SettingsHelper { private const string SettingsName = "CrowdinSettings"; private static readonly string SettingsPath = $"Crowdin/{SettingsName}"; private static readonly string FullSettingsPath = $"{FolderHelper.resourcesDirectory}/{SettingsName}.asset"; private static ICrowdinSettings Settings { get; set; } static SettingsHelper() { TryCreateSettingsObj(); } public static void TryCreateSettingsObj() { FolderHelper.TryCreateFolders(); if (!IsLoadSettings()) { TryLoadSettings(); } if (IsLoadSettings()) { return; } var asset = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(asset, FullSettingsPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); TryLoadSettings(); } public static void TryLoadSettings() { var settings = Resources.Load(SettingsPath); if (settings == null) return; Settings = settings; EditorUtility.SetDirty(settings); } public static bool IsLoadSettings() { return !(Settings is null); } public static void SetProjectId(int projectId) { Settings.ProjectId = projectId; } public static void SetProjectType(ProjectType projectType) { Settings.ProjectType = projectType; } public static void SetUpdateOptionIndex(int updateOptionIndex) { Settings.UpdateOptionIndex = updateOptionIndex; } public static void SetDomain(string organizationDomain) { Settings.OrganizationDomain = organizationDomain; } public static void SetToken(string token) { Settings.Token = token; } public static void SetSourceLang(string lang) { Settings.LanguageData.sourceLanguage = lang; } public static void SetLanguageScheme(List languageItems) { Settings.LanguageData.languageItems = languageItems; } public static bool GetToggleStatus_PreserveEntryIdsOnImport() { return Settings.PreserveEntryIdsOnImport; } public static void SetToggleStatus_PreserveEntryIdsOnImport(bool newStatus) { Settings.PreserveEntryIdsOnImport = newStatus; } private static bool _flagAutoApproveImported = false; public static void SetAutoApproveImported(bool autoApproveImported) { _flagAutoApproveImported = autoApproveImported; } public static bool GetAutoApproveImported() { return _flagAutoApproveImported; } public static string GetToken() { return Settings.Token; } public static string GetOrganizationDomain() { return Settings.OrganizationDomain; } public static bool IsProjectEnterprise() { return !string.IsNullOrWhiteSpace(GetOrganizationDomain()); } public static int GetProjectId() { return Settings.ProjectId > 0 ? Settings.ProjectId : -1; } public static bool IsProjectSelected() { return Settings.ProjectId > 0; } public static ProjectType GetProjectType() { return Settings.ProjectType; } public static int GetUpdateOptionIndex() { return Settings.UpdateOptionIndex; } public static int GetProjectIndex() { return Settings.ProjectIndexInList; } public static void SetProjectIndex(int index) { Settings.ProjectIndexInList = index; } public static string GetTargetLanguage() { return Settings.LanguageData.targetLanguage; } public static string GetSourceLanguage() { return Settings.LanguageData.sourceLanguage; } public static List GetLanguageScheme() { return Settings.LanguageData.languageItems; } public static TablesSelection GetStringTablesSelection() { return Settings.StringTablesSelection; } public static TablesSelection GetAssetTablesSelection() { return Settings.AssetTablesSelection; } public static List GetBranchesList() { return Settings.Branches; } public static int TryGetProjectId() { return Settings.ProjectId; } public static string GetBaseUri(string folder = "projects") { return $"{GetDomain()}{folder}"; } public static string GetUri(string methodId, int projectId) { return projectId > 0 ? $"{GetBaseUri()}/{projectId}/{methodId}" : string.Empty; } public static void TrySaveSettings(IReadOnlyDictionary> targetLanguages, string sourceLanguage, string token, string orgDomain, int projectId, int index, ProjectType projectType) { if (token is null) return; TryLoadSettings(); if (!IsLoadSettings()) TryCreateSettingsObj(); SetToken(token); SetDomain(orgDomain); SetProjectId(projectId); SetProjectType(projectType); SetProjectIndex(index); TrySaveLanguageScheme(targetLanguages, sourceLanguage, projectId); AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); } private static void TrySaveLanguageScheme(IReadOnlyDictionary> targetLanguages, string sourceLanguage, int projectId) { if (!targetLanguages.ContainsKey(projectId)) return; var scheme = new List(); for (var i = 0; i < targetLanguages[projectId].Count; i++) { var languageData = targetLanguages[projectId][i]; scheme.Add(new LanguageItem { langType = languageData.id, collumPos = i + 2, locale = languageData.locale, twoLettersCode = languageData.twoLettersCode }); } if (sourceLanguage.Length > 0) SetSourceLang(sourceLanguage); if (scheme.Count > 0) SetLanguageScheme(scheme); } private static string GetDomain() { TryLoadSettings(); if (Settings is null) return "https://crowdin.com/api/v2/"; return !string.IsNullOrEmpty(Settings.OrganizationDomain) ? $"https://{Settings.OrganizationDomain}.crowdin.com/api/v2/" : "https://crowdin.com/api/v2/"; } } }