update: 更新API
							parent
							
								
									5bc24e3443
								
							
						
					
					
						commit
						74acbe841b
					
				| 
						 | 
					@ -10,12 +10,15 @@ namespace Guru.Editor
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public class EditorGuruServiceIO
 | 
					    public class EditorGuruServiceIO
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private static readonly string DefaultFileName = "guru-service";
 | 
					        private static readonly string SourceConfigFileName = "guru-service";
 | 
				
			||||||
 | 
					        private const string LocalServicesConfigPath = "Guru/Resoures";
 | 
				
			||||||
 | 
					        private const string SourceConfigExtension = ".json";
 | 
				
			||||||
 | 
					        private const string LocalConfigExtension = ".txt";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static string DefaultFilePath =
 | 
					        private static string DefaultFilePath =
 | 
				
			||||||
            Path.GetFullPath(Path.Combine(Application.dataPath, $"{DefaultFileName}.json"));
 | 
					            Path.GetFullPath(Path.Combine(Application.dataPath, $"{SourceConfigFileName}{SourceConfigExtension}"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static string EmbededServiceFilePath = "";
 | 
					        internal static string SourceServiceFilePath = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 加载配置
 | 
					        /// 加载配置
 | 
				
			||||||
| 
						 | 
					@ -23,7 +26,8 @@ namespace Guru.Editor
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public static GuruServicesConfig LoadConfig()
 | 
					        public static GuruServicesConfig LoadConfig()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var a = AssetDatabase.FindAssets($"*{DefaultFileName}* t:TextAsset");
 | 
					            var a = AssetDatabase.FindAssets($"*{SourceConfigFileName}* t:TextAsset",
 | 
				
			||||||
 | 
					                new string[] { Application.dataPath });
 | 
				
			||||||
            if (a == null || a.Length == 0)
 | 
					            if (a == null || a.Length == 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Debug.Log($"<color=orange>--- Can't ind guru-services file</color>");
 | 
					                Debug.Log($"<color=orange>--- Can't ind guru-services file</color>");
 | 
				
			||||||
| 
						 | 
					@ -32,7 +36,7 @@ namespace Guru.Editor
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var p = AssetDatabase.GUIDToAssetPath(a[0]);
 | 
					                var p = AssetDatabase.GUIDToAssetPath(a[0]);
 | 
				
			||||||
                var fp = Path.GetFullPath(p);
 | 
					                var fp = Path.GetFullPath(p);
 | 
				
			||||||
                if (File.Exists(fp)) EmbededServiceFilePath = fp;
 | 
					                if (File.Exists(fp)) SourceServiceFilePath = fp;
 | 
				
			||||||
                var t = AssetDatabase.LoadAssetAtPath<TextAsset>(p);
 | 
					                var t = AssetDatabase.LoadAssetAtPath<TextAsset>(p);
 | 
				
			||||||
                // Debug.Log($"<color=#88ff00>--- find services file:{p} \n{t.text}</color>");
 | 
					                // Debug.Log($"<color=#88ff00>--- find services file:{p} \n{t.text}</color>");
 | 
				
			||||||
                return JsonMapper.ToObject<GuruServicesConfig>(t.text);
 | 
					                return JsonMapper.ToObject<GuruServicesConfig>(t.text);
 | 
				
			||||||
| 
						 | 
					@ -59,9 +63,9 @@ namespace Guru.Editor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var json = jw.ToString();
 | 
					            var json = jw.ToString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (string.IsNullOrEmpty(EmbededServiceFilePath)) EmbededServiceFilePath = DefaultFilePath;
 | 
					            if (string.IsNullOrEmpty(SourceServiceFilePath)) SourceServiceFilePath = DefaultFilePath;
 | 
				
			||||||
            File.WriteAllText(EmbededServiceFilePath, json);
 | 
					            File.WriteAllText(SourceServiceFilePath, json);
 | 
				
			||||||
            Debug.Log($"Save config to {EmbededServiceFilePath}");
 | 
					            Debug.Log($"Save config to {SourceServiceFilePath}");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					@ -88,14 +92,14 @@ namespace Guru.Editor
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static void DeployAppServiceFile()
 | 
					        public static void DeployLocalServiceFile()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var streamingPath = Application.streamingAssetsPath;
 | 
					            var deployPath = Path.Combine(Application.dataPath, LocalServicesConfigPath);
 | 
				
			||||||
            if(!Directory.Exists(streamingPath)) Directory.CreateDirectory(streamingPath);
 | 
					            if(!Directory.Exists(deployPath)) Directory.CreateDirectory(deployPath);
 | 
				
			||||||
            var path = Path.Combine(streamingPath, $"{GuruSDK.ServicesConfigKey}.{GuruSDK.ServicesConfigExtension}");
 | 
					            var path = Path.Combine(deployPath, $"{GuruSDK.ServicesConfigKey}.{LocalConfigExtension}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var config = LoadConfig();
 | 
					            var config = LoadConfig();
 | 
				
			||||||
            var from = EmbededServiceFilePath;
 | 
					            var from = SourceServiceFilePath;
 | 
				
			||||||
            if (string.IsNullOrEmpty(from) || !File.Exists(from)) // 文件不存在
 | 
					            if (string.IsNullOrEmpty(from) || !File.Exists(from)) // 文件不存在
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ namespace Guru.Editor
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        static BoostOnLoad()
 | 
					        static BoostOnLoad()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            EditorGuruServiceIO.DeployAppServiceFile();
 | 
					            EditorGuruServiceIO.DeployLocalServiceFile();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -473,7 +473,7 @@ namespace Guru.Editor
 | 
				
			||||||
            ApplyMods();
 | 
					            ApplyMods();
 | 
				
			||||||
            EditorUtility.DisplayCancelableProgressBar(barTitle, "All Mods is done", 0.8f);  
 | 
					            EditorUtility.DisplayCancelableProgressBar(barTitle, "All Mods is done", 0.8f);  
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            EditorGuruServiceIO.DeployAppServiceFile(); // 部署文件
 | 
					            EditorGuruServiceIO.DeployLocalServiceFile(); // 部署文件
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            AssetDatabase.SaveAssets();
 | 
					            AssetDatabase.SaveAssets();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using UnityEngine.Networking;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Guru
 | 
					namespace Guru
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    using System;
 | 
					    using System;
 | 
				
			||||||
| 
						 | 
					@ -24,6 +26,7 @@ namespace Guru
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //-------------- data ---------------
 | 
					        //-------------- data ---------------
 | 
				
			||||||
 | 
					        public string uid = "";
 | 
				
			||||||
        public int b_level = 0;
 | 
					        public int b_level = 0;
 | 
				
			||||||
        public int b_play = 0;
 | 
					        public int b_play = 0;
 | 
				
			||||||
        public int buy_count = 0;
 | 
					        public int buy_count = 0;
 | 
				
			||||||
| 
						 | 
					@ -38,7 +41,11 @@ namespace Guru
 | 
				
			||||||
                if(_successLevel == null) InitProperties();
 | 
					                if(_successLevel == null) InitProperties();
 | 
				
			||||||
                return _successLevel.Value;
 | 
					                return _successLevel.Value;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            set => _successLevel.Value = value;
 | 
					            set
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(_successLevel == null) InitProperties();
 | 
				
			||||||
 | 
					                _successLevel.Value = value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public int TotalPlayedCount
 | 
					        public int TotalPlayedCount
 | 
				
			||||||
| 
						 | 
					@ -48,7 +55,11 @@ namespace Guru
 | 
				
			||||||
                if(_totalPlayed == null) InitProperties();
 | 
					                if(_totalPlayed == null) InitProperties();
 | 
				
			||||||
                return _totalPlayed.Value;
 | 
					                return _totalPlayed.Value;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            set => _totalPlayed.Value = value;
 | 
					            set
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(_totalPlayed == null) InitProperties();
 | 
				
			||||||
 | 
					                _totalPlayed.Value = value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public int PurchasedCount
 | 
					        public int PurchasedCount
 | 
				
			||||||
| 
						 | 
					@ -58,7 +69,25 @@ namespace Guru
 | 
				
			||||||
                if(_purchasedCount == null) InitProperties();
 | 
					                if(_purchasedCount == null) InitProperties();
 | 
				
			||||||
                return _purchasedCount.Value;
 | 
					                return _purchasedCount.Value;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            set => _purchasedCount.Value = value;
 | 
					            set
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(_purchasedCount == null) InitProperties();
 | 
				
			||||||
 | 
					                _purchasedCount.Value = value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string UserId
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(_uid == null) InitProperties();
 | 
				
			||||||
 | 
					                return _uid.Value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            set
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(_uid == null) InitProperties();
 | 
				
			||||||
 | 
					                _uid.Value = value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public bool IsIAPUser => PurchasedCount > 0;
 | 
					        public bool IsIAPUser => PurchasedCount > 0;
 | 
				
			||||||
| 
						 | 
					@ -67,11 +96,12 @@ namespace Guru
 | 
				
			||||||
        private BindableProperty<int> _successLevel;
 | 
					        private BindableProperty<int> _successLevel;
 | 
				
			||||||
        private BindableProperty<int> _totalPlayed;
 | 
					        private BindableProperty<int> _totalPlayed;
 | 
				
			||||||
        private BindableProperty<int> _purchasedCount;
 | 
					        private BindableProperty<int> _purchasedCount;
 | 
				
			||||||
 | 
					        private BindableProperty<string> _uid;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public BindableProperty<int> PropBLevel => _successLevel;
 | 
					        public BindableProperty<int> PropBLevel => _successLevel;
 | 
				
			||||||
        public BindableProperty<int> PropBPlay => _totalPlayed;
 | 
					        public BindableProperty<int> PropBPlay => _totalPlayed;
 | 
				
			||||||
        public BindableProperty<int> PropBuyCount => _purchasedCount;
 | 
					        public BindableProperty<int> PropBuyCount => _purchasedCount;
 | 
				
			||||||
 | 
					        public BindableProperty<string> Uid => _uid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region 初始化
 | 
					        #region 初始化
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,6 +143,7 @@ namespace Guru
 | 
				
			||||||
            _successLevel = new BindableProperty<int>(b_level, OnLevelChanged);
 | 
					            _successLevel = new BindableProperty<int>(b_level, OnLevelChanged);
 | 
				
			||||||
            _totalPlayed = new BindableProperty<int>(b_play, OnPlayedChanged);
 | 
					            _totalPlayed = new BindableProperty<int>(b_play, OnPlayedChanged);
 | 
				
			||||||
            _purchasedCount = new BindableProperty<int>(buy_count, OnPurchasedNumChanged);
 | 
					            _purchasedCount = new BindableProperty<int>(buy_count, OnPurchasedNumChanged);
 | 
				
			||||||
 | 
					            _uid = new BindableProperty<string>(uid, OnUidChanged);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					@ -149,6 +180,12 @@ namespace Guru
 | 
				
			||||||
            buy_count = value;
 | 
					            buy_count = value;
 | 
				
			||||||
            Save();
 | 
					            Save();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private void OnUidChanged(string value)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            uid = value;
 | 
				
			||||||
 | 
					            Save();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region 启动配置
 | 
					        #region 启动配置
 | 
				
			||||||
| 
						 | 
					@ -157,12 +194,12 @@ namespace Guru
 | 
				
			||||||
        /// 从 Streaming 加载 AppServices 配置
 | 
					        /// 从 Streaming 加载 AppServices 配置
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public string LoadAppServicesConfigJson()
 | 
					        public string LoadDefaltServicesConfigJson()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                string path = Path.Combine(Application.streamingAssetsPath, $"{GuruSDK.ServicesConfigKey}.{GuruSDK.ServicesConfigExtension}");
 | 
					                var txt = Resources.Load<TextAsset>(GuruSDK.ServicesConfigKey);
 | 
				
			||||||
                return File.ReadAllText(path);
 | 
					                return txt?.text ?? "";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -173,16 +210,6 @@ namespace Guru
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,6 @@ namespace Guru
 | 
				
			||||||
        public const string Version = "1.0.0";
 | 
					        public const string Version = "1.0.0";
 | 
				
			||||||
        public const string Tag = "[Guru]";
 | 
					        public const string Tag = "[Guru]";
 | 
				
			||||||
        public const string ServicesConfigKey = "guru_services";
 | 
					        public const string ServicesConfigKey = "guru_services";
 | 
				
			||||||
        public const string ServicesConfigExtension = "cfg";
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        private static GuruSDK _instance;
 | 
					        private static GuruSDK _instance;
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					@ -53,10 +52,13 @@ namespace Guru
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 初始化成功标志位
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static bool IsInitialSuccess { get; private set; } = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region 初始化
 | 
					        #region 初始化
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static GuruSDK CreateInstance()
 | 
					        private static GuruSDK CreateInstance()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var go = new GameObject(nameof(GuruSDK));
 | 
					            var go = new GameObject(nameof(GuruSDK));
 | 
				
			||||||
| 
						 | 
					@ -87,8 +89,7 @@ namespace Guru
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public static void Init(GuruSDKInitConfig config, Action<bool> onComplete)
 | 
					        public static void Init(GuruSDKInitConfig config, Action<bool> onComplete)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LogI($"---- Guru SDK init ----");
 | 
					            LogI($"---- Guru SDK init ----\n{config.ToString()}");
 | 
				
			||||||
            LogI(config.ToString());
 | 
					 | 
				
			||||||
            Instance.StartWithConfig(config, onComplete);
 | 
					            Instance.StartWithConfig(config, onComplete);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -105,6 +106,7 @@ namespace Guru
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            _initConfig = config;
 | 
					            _initConfig = config;
 | 
				
			||||||
            _onCompleteCallback = onComplete;
 | 
					            _onCompleteCallback = onComplete;
 | 
				
			||||||
 | 
					            IsInitialSuccess = false;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            //---------- Start Firebase ------------
 | 
					            //---------- Start Firebase ------------
 | 
				
			||||||
            FirebaseUtil.InitFirebase(OnFirebaseReady);
 | 
					            FirebaseUtil.InitFirebase(OnFirebaseReady);
 | 
				
			||||||
| 
						 | 
					@ -135,6 +137,7 @@ namespace Guru
 | 
				
			||||||
            // 根据上次的云控配置来初始化参数
 | 
					            // 根据上次的云控配置来初始化参数
 | 
				
			||||||
            SetupServicesConfig();
 | 
					            SetupServicesConfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            IsInitialSuccess = true;
 | 
				
			||||||
            _onCompleteCallback?.Invoke(true);
 | 
					            _onCompleteCallback?.Invoke(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					@ -144,16 +147,15 @@ namespace Guru
 | 
				
			||||||
        /// <param name="dict"></param>
 | 
					        /// <param name="dict"></param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        private Dictionary<string, object> BuildDefaultRemoteData(Dictionary<string, object> dict)
 | 
					        private Dictionary<string, object> BuildDefaultRemoteData(Dictionary<string, object> dict)
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            string json = Model.LoadAppServicesConfigJson(); // 注入默认的Services 配置值
 | 
					 | 
				
			||||||
            if (!string.IsNullOrEmpty(json))
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (dict == null) dict = new Dictionary<string, object>(3);
 | 
					            if (dict == null) dict = new Dictionary<string, object>(3);
 | 
				
			||||||
                dict[ServicesConfigKey] = json;
 | 
					            
 | 
				
			||||||
 | 
					            // 注入默认的 Services 配置值
 | 
				
			||||||
 | 
					            string json = Model.LoadDefaltServicesConfigJson(); 
 | 
				
			||||||
 | 
					            if (!string.IsNullOrEmpty(json)) dict[ServicesConfigKey] = json;
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
            return dict;
 | 
					            return dict;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
            return null;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 拉取云控参数完成
 | 
					        /// 拉取云控参数完成
 | 
				
			||||||
| 
						 | 
					@ -230,6 +232,8 @@ namespace Guru
 | 
				
			||||||
            SetUserBPlay(bplay);
 | 
					            SetUserBPlay(bplay);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static string UID => _model?.UserId ?? "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        #region Misc
 | 
					        #region Misc
 | 
				
			||||||
| 
						 | 
					@ -351,5 +355,6 @@ namespace Guru
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue