From eb424d24e39bab4a245725f35deab3f234ea0f13 Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期五, 13 十二月 2019 10:48:50 +0800
Subject: [PATCH] 2019.12.13

---
 ZigbeeApp/Shared/Common/Room.cs |  108 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 72 insertions(+), 36 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Room.cs b/ZigbeeApp/Shared/Common/Room.cs
old mode 100755
new mode 100644
index fd52a18..4d255ea
--- a/ZigbeeApp/Shared/Common/Room.cs
+++ b/ZigbeeApp/Shared/Common/Room.cs
@@ -76,10 +76,26 @@
         /// </summary>
         public string HumidityDevice = string.Empty;
 
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬埧闂�
+        /// </summary>
+        private static Room m_CurrentRoom = null;
         /// <summary>
         /// 褰撳墠閫夋嫨鐨勬埧闂�
         /// </summary>
-        public static Room CurrentRoom;
+        [Newtonsoft.Json.JsonIgnore]
+        public static Room CurrentRoom
+        {
+            get
+            {
+                if (m_CurrentRoom == null && Lists.Count > 0)
+                {
+                    return Lists[0];
+                }
+                return m_CurrentRoom;
+            }
+            set { m_CurrentRoom = value; }
+        }
 
         /// <summary>
         /// 鎴块棿閲屾墍鏈夌殑璁惧鍒楄〃
@@ -114,12 +130,6 @@
         /// 娉細鍒嗕韩杩囨潵鐨勬埧闂翠笉鑳藉垹闄わ紝涓嶈兘缂栬緫璇ユ埧闂达紝涓嶈兘瀵硅澶囷紙鍔熻兘锛夈�佸満鏅繘琛屽鍒犳敼
         /// </summary>
         public bool IsSharedRoom = false;
-
-        /// <summary>
-        /// 鏄惁鍙互鍒锋柊鎴块棿鏁版嵁浜�
-        /// 闇�瑕佺瓑鍒濆鍖栨湰鍦拌澶囨暟鎹悗鍦ㄥ彲浠ュ垵濮嬪寲鎴块棿鏁版嵁
-        /// </summary>
-        public static bool CanInitAllRoom;
 
         /// <summary>
         /// 鑾峰彇鍠滅埍鎴块棿鐨勬墍鏈夎澶囪矾寰�
@@ -266,20 +276,16 @@
         /// </summary>
         public static void InitAllRoom()
         {
-            if (CanInitAllRoom == false)
-            {
-                return;
-            }
             Lists.Clear();
             if (Config.Instance.Home.RoomFilePathList.Contains("Room_Favorite.json") == false)
             {
                 //榛樿娣诲姞鍠滅埍鐨勬埧闂�--绂佹淇敼鎴块棿鍚�
-                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "Room/r0.png", Id = LoveRoomId };
-                love.Save(true);
+                var love = new Room { Name = Language.StringByID(R.MyInternationalizationString.Favorite), BackgroundImage = "RoomIcon/0.JPG", Id = LoveRoomId };
+                love.Save(false);
                 //娣诲姞鍒癶ouse 鎴块棿璺緞鍒楄〃
                 var currentHome = Config.Instance.Home;
                 currentHome.RoomFilePathList.Insert(0, love.FileName);
-                currentHome.Save();
+                currentHome.Save(false);
             }
             foreach (var roomFilePath in Config.Instance.Home.RoomFilePathList)
             {
@@ -289,11 +295,13 @@
                 {
                     if (room.IsSharedRoom)
                     {
-                        room.Name = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){room.Name}";
+                        room.Name = $"{room.Name}";
                     }
                     Lists.Add(room);
+                   
                 }
             }
+            Config.Instance.Home.InitFloor();
         }
 
         /// <summary>
@@ -323,7 +331,6 @@
                 }
             }
             homeTemp.Save(false);
-            CanInitAllRoom = true;
             InitAllRoom();
         }
 
@@ -429,8 +436,21 @@
                     //璁惧锛坉eviceUI锛�
                     beforeRoom.DeviceUIList.Clear();
                     foreach (var deviceFilePath in beforeRoom.DeviceUIFilePathList)
-                    {
-                        beforeRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFilePath));
+                    {
+                        var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(deviceFilePath));
+                        var tempDeviceUI = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceUI>(jsonInfo);
+                        if (tempDeviceUI != null)
+                        {
+                            var delCommon = tempDeviceUIList.Find((obj) => obj.CommonDevice != null && tempDeviceUI.CommonDevice != null && obj.CommonDevice.Type == tempDeviceUI.CommonDevice.Type && obj.CommonDevice.CommonDeviceAddrEpoint == tempDeviceUI.CommonDevice.CommonDeviceAddrEpoint);
+                            if (delCommon != null)
+                            {
+                                beforeRoom.DeviceUIList.Add(delCommon);
+                            }
+                            else
+                            {
+                                beforeRoom.AddDevice(deviceFilePath);
+                            }
+                        }
                     }
                     //鍦烘櫙(SceneUI)
                     beforeRoom.SceneUIList.Clear();
@@ -582,21 +602,25 @@
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        public  List<Room> GetRoomsByFloorId(string id)
+        public List<Room> GetRoomsByFloorId(string id)
         {
-            return Lists.FindAll((obj) => obj.FloorId==id);
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                return Lists;
+            }
+            return Lists.FindAll((obj) => obj.FloorId == id);
         }
         /// <summary>
         /// 鑾峰彇褰撳墠妤煎眰鐨勬埧闂村悕绉�
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        public  List<string> GetRoomNamesByFloorId(string id)
+        public List<string> GetRoomNamesByFloorId(string id)
         {
             List<string> names = new List<string> { };
-            foreach(var r in Lists)
+            foreach (var r in Lists)
             {
-                if(r.FloorId==id)
+                if (r.FloorId == id)
                 {
                     names.Add(r.Name);
                 }
@@ -611,6 +635,10 @@
         /// <returns></returns>
         public  List<Room> GetRoomsByFloorIdAppendLoveRoom(string id)
         {
+            if (Config.Instance.Home.FloorDics.Count == 0)
+            {
+                return Lists;
+            }
             var r= Lists.FindAll((obj) => obj.FloorId == id);
             r.Insert(0, GetLoveRoom());
             return r;
@@ -622,6 +650,10 @@
         /// <returns></returns>
         public  List<Room> GetRoomsByCurrentFloorIdAppendLoveRoom()
         {
+            if(Config.Instance.Home.FloorDics.Count==0)
+            {
+                return Lists;
+            }
             var r = Lists.FindAll((obj) => obj.FloorId == Config.Instance.Home.CurrentFloorId);
             r.Insert(0, GetLoveRoom());
             return r;
@@ -636,7 +668,8 @@
         /// </summary>
         /// <param name="device">璁惧瀵硅薄</param>
         /// <param name="roomId">鏂版埧闂碔d</param>
-        public void ChangedRoom(CommonDevice device, string roomId)
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void ChangedRoom(CommonDevice device, string roomId, bool saveRealRoom = true)
         {
             //鎴块棿鏄惁淇敼
             if (this.IsRoomChanged(device, roomId) == false)
@@ -650,7 +683,7 @@
             var room = this.GetRoomById(roomId);
             if (room != null)
             {
-                room.AddDevice(device);
+                room.AddDevice(device, saveRealRoom);
             }
         }
 
@@ -739,14 +772,15 @@
         #region 鈼� 娣诲姞璁惧________________________
 
         /// <summary>
-        /// 娣诲姞璁惧
+        /// 娣诲姞璁惧(姝ゆ柟娉曠洰鍓嶅彧缁欍�愭垜鐨勫枩鐖便�戜娇鐢�)
         /// </summary>
         /// <param name="deviceUIFilePath">Device UIF ile path.</param>
         public void AddDevice(string deviceUIFilePath)
         {
             if (string.IsNullOrEmpty(deviceUIFilePath))
-            {
-                return;
+
+             {
+                 return;
             }
             var deviceUI = Common.LocalDevice.Current.GetDeviceUI(deviceUIFilePath);
             if (null == deviceUI.CommonDevice)
@@ -764,10 +798,11 @@
         }
 
         /// <summary>
-        /// 娣诲姞璁惧
+        /// 娣诲姞璁惧(姝ゆ柟娉曠洰鍓嶅彧缁橰oom閲岄潰浣跨敤)
         /// </summary>
         /// <param name="device">瑕佹坊鍔犵殑璁惧瀵硅薄</param>
-        public void AddDevice(CommonDevice device)
+        /// <param name="saveRealRoom">鏄惁淇敼鐪熷疄鐗╃悊璁惧鐨勬埧闂�,涓嶅嚭鎰忓,杩欎釜鍊奸粯璁や负true鍗冲彲</param>
+        public void AddDevice(CommonDevice device, bool saveRealRoom)
         {
             if (device == null)
             {
@@ -775,9 +810,6 @@
             }
             //璁惧淇℃伅淇濆瓨鍒版湰鍦�
             device.Save();
-
-            //娣诲姞鑷姩澶囦唤
-            HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
 
             var deviceUI = Common.LocalDevice.Current.GetDeviceUI(device);
             if (DeviceUIFilePathList.Contains(deviceUI.FileName) == false)
@@ -789,6 +821,11 @@
 
                 //娣诲姞鑷姩澶囦唤
                 HdlAutoBackupLogic.AddOrEditorFile(FileName);
+                if (saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
+                {
+                    //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿
+                    LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, this.Id, false);
+                }
             }
         }
 
@@ -974,7 +1011,7 @@
                     return -1;
                 }
             }
-            
+
             var getSceneIdAllData = await ZigBee.Device.Scene.GetSceneNewIdAsync(sceneName);
             if (getSceneIdAllData == null || getSceneIdAllData.getSceneIdData == null)
             {
@@ -1185,7 +1222,6 @@
             Save();
             Global.DeleteFilebyHomeId(sceneUI.FileName);
             HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
-            HdlAutoBackupLogic.AddOrEditorFile(FileName);
         }
 
         #endregion
@@ -1460,6 +1496,6 @@
         }
 
         #endregion
-       
+
     }
 }

--
Gitblit v1.8.0