using UnityEngine; using Guru; using NUnit.Framework; namespace Guru.Editor { using System.IO; using UnityEditor; using Guru.LitJson; public class EditorGuruServiceIO { private static readonly string SourceConfigFileName = "guru-service"; private const string LocalServicesConfigPath = "Guru/Resources"; private const string SourceConfigExtension = ".json"; private const string LocalConfigExtension = ".txt"; private static string DefaultFilePath = Path.GetFullPath(Path.Combine(Application.dataPath, $"{SourceConfigFileName}{SourceConfigExtension}")); internal static string SourceServiceFilePath = ""; /// /// 加载配置 /// /// public static GuruServicesConfig LoadConfig() { var a = AssetDatabase.FindAssets($"*{SourceConfigFileName}* t:TextAsset", new []{"Assets"}); if (a == null || a.Length == 0) { Debug.Log($"--- Can't find guru-services file"); } else { var p = AssetDatabase.GUIDToAssetPath(a[0]); var fp = Path.GetFullPath(p); if (File.Exists(fp)) SourceServiceFilePath = fp; var t = AssetDatabase.LoadAssetAtPath(p); // Debug.Log($"--- find services file:{p} \n{t.text}"); return JsonMapper.ToObject(t.text); } return null; } /// /// 保存配置 /// /// internal static void SaveConfig(GuruServicesConfig config = null) { if (config == null) { config = new GuruServicesConfig(); } var jw = new JsonWriter() { PrettyPrint = true, }; JsonMapper.ToJson(config, jw); var json = jw.ToString(); if (string.IsNullOrEmpty(SourceServiceFilePath)) SourceServiceFilePath = DefaultFilePath; File.WriteAllText(SourceServiceFilePath, json); Debug.Log($"Save config to {SourceServiceFilePath}"); } /// /// 创建空配置 /// /// internal static GuruServicesConfig CreateEmpty() { var cfg = new GuruServicesConfig(); cfg.version = 0; cfg.app_settings = new GuruAppSettings(); cfg.ad_settings = new GuruAdSettings(); cfg.adjust_settings = new GuruAdjustSettings(); cfg.fb_settings = new GuruFbSettings(); return cfg; } [Test] public static void Test_SaveConfig() { var cfg = CreateEmpty(); SaveConfig(cfg); } public static void DeployLocalServiceFile() { var deployPath = Path.Combine(Application.dataPath, LocalServicesConfigPath); if(!Directory.Exists(deployPath)) Directory.CreateDirectory(deployPath); var path = Path.Combine(deployPath, $"{GuruSDK.ServicesConfigKey}{LocalConfigExtension}"); var config = LoadConfig(); var from = SourceServiceFilePath; if (string.IsNullOrEmpty(from) || !File.Exists(from)) // 文件不存在 { return; } if (null != config) { if (File.Exists(path)) File.Delete(path); Debug.Log($" --- setup {GuruSDK.ServicesConfigKey} to local resources."); File.Copy(from, path); } } } }