From 944b87b6bcccb095cd73f13f4410fb20faf48f74 Mon Sep 17 00:00:00 2001 From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local> Date: 星期三, 25 十二月 2019 11:21:06 +0800 Subject: [PATCH] 2019.12.25 --- ZigbeeApp/Shared/Common/Room.cs | 274 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 199 insertions(+), 75 deletions(-) diff --git a/ZigbeeApp/Shared/Common/Room.cs b/ZigbeeApp/Shared/Common/Room.cs index 23c861c..178fc61 100644 --- a/ZigbeeApp/Shared/Common/Room.cs +++ b/ZigbeeApp/Shared/Common/Room.cs @@ -69,17 +69,41 @@ /// <summary> /// 娓╁害浼犳劅鍣�(璁惧涓婚敭) - /// </summary> + /// </summary> public string TemperatrueDevice = string.Empty; /// <summary> /// 婀垮害浼犳劅鍣�(璁惧涓婚敭) /// </summary> public string HumidityDevice = string.Empty; + /// <summary> + /// 娓╁害 + /// </summary> + public double Temperatrue; + /// <summary> + /// 婀垮害 + /// </summary> + public double Humidity; + /// <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 +138,6 @@ /// 娉細鍒嗕韩杩囨潵鐨勬埧闂翠笉鑳藉垹闄わ紝涓嶈兘缂栬緫璇ユ埧闂达紝涓嶈兘瀵硅澶囷紙鍔熻兘锛夈�佸満鏅繘琛屽鍒犳敼 /// </summary> public bool IsSharedRoom = false; - - /// <summary> - /// 鏄惁鍙互鍒锋柊鎴块棿鏁版嵁浜� - /// 闇�瑕佺瓑鍒濆鍖栨湰鍦拌澶囨暟鎹悗鍦ㄥ彲浠ュ垵濮嬪寲鎴块棿鏁版嵁 - /// </summary> - public static bool CanInitAllRoom; /// <summary> /// 鑾峰彇鍠滅埍鎴块棿鐨勬墍鏈夎澶囪矾寰� @@ -191,6 +209,32 @@ return sceneList; } } + + /// <summary> + /// 鑾峰彇鎵�鏈夋埧闂寸殑鎵�鏈夊満鏅矾寰� + /// </summary> + /// <value>All room scene UIL ist.</value> + [Newtonsoft.Json.JsonIgnore] + public List<string> AllRoomSceneUIFilepathList + { + get + { + var pathList = new List<string> { }; + foreach (var r in Lists) + { + if (r.SceneUIFilePathList.Count == 0) + { + continue; + } + foreach (var path in r.SceneUIFilePathList) + { + pathList.Add(path); + } + } + return pathList; + } + } + /// <summary> /// 鍦烘櫙鍒楄〃---涓嶅啀搴忓垪鍖� /// </summary> @@ -266,20 +310,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 +329,26 @@ { if (room.IsSharedRoom) { - room.Name = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){room.Name}"; + room.Name = $"{room.Name}"; } Lists.Add(room); + } } + Config.Instance.Home.InitFloor(); + + RefreshRoomListView(); + } + + /// <summary> + /// 鍒锋柊鎴块棿瑙嗗浘鍒楄〃 + /// </summary> + public static void RefreshRoomListView() + { + Application.RunOnMainThread(() => + { + Phone.Device.Room.RoomManagement.Instance.Show(); + }); } /// <summary> @@ -323,7 +378,6 @@ } } homeTemp.Save(false); - CanInitAllRoom = true; InitAllRoom(); } @@ -551,11 +605,8 @@ /// <param name="device">璁惧瀵硅薄</param> public Room GetRoomByDevice(CommonDevice device) { - var deviceUI = new DeviceUI { }; - deviceUI.DeviceAddr = device.DeviceAddr; - deviceUI.DeviceEpoint = device.DeviceEpoint; - - return Lists.Find((obj) => obj.DeviceUIFilePathList.Contains(deviceUI.FileName)); + string deviceFile = device.FilePath; + return Lists.Find((obj) => obj.IsLove == false && obj.DeviceUIFilePathList.Contains(deviceFile)); } /// <summary> @@ -598,21 +649,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); } @@ -627,6 +682,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; @@ -638,6 +697,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; @@ -652,7 +715,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) @@ -666,7 +730,7 @@ var room = this.GetRoomById(roomId); if (room != null) { - room.AddDevice(device); + room.AddDevice(device, saveRealRoom); } } @@ -755,19 +819,17 @@ #region 鈼� 娣诲姞璁惧________________________ /// <summary> - /// 娣诲姞璁惧 + /// 娣诲姞璁惧(姝ゆ柟娉曠洰鍓嶅彧缁欍�愭垜鐨勫枩鐖便�戜娇鐢�) /// </summary> /// <param name="deviceUIFilePath">Device UIF ile path.</param> public void AddDevice(string deviceUIFilePath) { if (string.IsNullOrEmpty(deviceUIFilePath)) - - { - return; + { + return; } - var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(deviceUIFilePath)); - var deviceUI = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceUI>(jsonInfo); - if (null == deviceUI || null == deviceUI.CommonDevice) + var deviceUI = Common.LocalDevice.Current.GetDeviceUI(deviceUIFilePath); + if (null == deviceUI.CommonDevice) { //褰撳墠瀵硅薄鏁版嵁鏃犳晥 return; @@ -782,10 +844,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) { @@ -794,10 +857,7 @@ //璁惧淇℃伅淇濆瓨鍒版湰鍦� device.Save(); - //娣诲姞鑷姩澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); - - DeviceUI deviceUI = Common.LocalDevice.Current.GetDeviceUI(device); + var deviceUI = Common.LocalDevice.Current.GetDeviceUI(device); if (DeviceUIFilePathList.Contains(deviceUI.FileName) == false) { DeviceUIFilePathList.Add(deviceUI.FileName); @@ -807,6 +867,11 @@ //娣诲姞鑷姩澶囦唤 HdlAutoBackupLogic.AddOrEditorFile(FileName); + if (saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1) + { + //濡傛灉鍙湁涓�涓洖璺�,鍒欎慨鏀圭湡瀹炵墿鐞嗚澶囩殑鎴块棿 + LocalDevice.Current.SaveRealDeviceRoomId(new List<CommonDevice>() { device }, this.Id, false); + } } } @@ -820,11 +885,10 @@ public void DeleteDevice(string deviceUIFilePath) { if (deviceUIFilePath == null) return; - if (DeviceUIFilePathList.Contains(deviceUIFilePath) && Global.IsExistsByHomeId(deviceUIFilePath)) + if (DeviceUIFilePathList.Contains(deviceUIFilePath)) { DeviceUIFilePathList.Remove(deviceUIFilePath); DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUIFilePath); - HdlAutoBackupLogic.DeleteFile(deviceUIFilePath); Save(); } } @@ -839,24 +903,21 @@ { return; } - DeviceUI deviceUI = new DeviceUI(); - deviceUI.DeviceAddr = device.DeviceAddr; - deviceUI.DeviceEpoint = device.DeviceEpoint; - //鏍规嵁璁惧锛岃幏鍙栨墍鍦ㄧ殑鎴块棿 var room = this.GetRoomByDevice(device); if (room == null) { return; } + string deviceFile = device.FilePath; //绉婚櫎缂撳瓨 - if (room.DeviceUIFilePathList.Contains(deviceUI.FileName) == false) + if (room.DeviceUIFilePathList.Contains(deviceFile) == false) { return; } - room.DeviceUIFilePathList.Remove(deviceUI.FileName); + room.DeviceUIFilePathList.Remove(deviceFile); - room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceUI.FileName); + room.DeviceUIList.RemoveAll((obj) => obj.FileName == deviceFile); room.Save(); //鏇存敼鑷姩澶囦唤 HdlAutoBackupLogic.AddOrEditorFile(room.FileName); @@ -891,11 +952,7 @@ } listDevice.Add(device.CommonDevice); } - if (listDevice.Count == 0) - { - return listDevice; - } - return Common.LocalDevice.Current.SortDevice(listDevice); + return listDevice; } /// <summary> @@ -948,35 +1005,34 @@ } /// <summary> - /// 鑾峰彇璇ユゼ灞傜殑鍦烘櫙 + /// 鑾峰彇鏈垎閰嶅尯鍩熻澶� /// </summary> - /// <param name="floorId"></param> /// <returns></returns> - public List<SceneUI> GetSceneUIsByFloorId(string floorId) + public List<DeviceUI> GetUnalloctedDeviceUIs() { - var rooms = GetRoomsByFloorId(floorId); - if (rooms == null) + List<DeviceUI> deviceUIs = new List<DeviceUI> { }; + var dList = AllRoomDeviceUIList; + var commonDeviceList = Common.LocalDevice.Current.listAllDevice; + + if (dList.Count == 0) { return null; } - var sceneList = new List<SceneUI> { }; - foreach (var r in rooms) + foreach (var device in commonDeviceList) { - if (r.SceneUIList.Count == 0) + if (dList.Find((obj) => obj.CommonDevice == device) == null) { - continue; - } - foreach (var sceneUI in r.SceneUIList) - { - if (sceneUI == null) - { - continue; - } - sceneList.Add(sceneUI); + deviceUIs.Add(Common.LocalDevice.Current.GetDeviceUI(device)); } } - return sceneList; + if (deviceUIs.Count == 0) + { + return null; + } + return deviceUIs; } + + //public List<DeviceUI> GetUnalloctedDeviceUITypes #endregion @@ -1211,7 +1267,6 @@ Save(); Global.DeleteFilebyHomeId(sceneUI.FileName); HdlAutoBackupLogic.DeleteFile(sceneUI.FileName); - HdlAutoBackupLogic.AddOrEditorFile(FileName); } #endregion @@ -1237,6 +1292,7 @@ } return null; } + /// <summary> /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅� /// </summary> @@ -1252,6 +1308,74 @@ } return sceneUIs; } + + /// <summary> + /// 鑾峰彇璇ユゼ灞傜殑鍦烘櫙 + /// </summary> + /// <param name="floorId"></param> + /// <returns></returns> + public List<SceneUI> GetSceneUIsByFloorId(string floorId) + { + var rooms = GetRoomsByFloorId(floorId); + if (rooms == null) + { + return null; + } + var sceneList = new List<SceneUI> { }; + foreach (var r in rooms) + { + if (r.SceneUIList.Count == 0) + { + continue; + } + foreach (var sceneUI in r.SceneUIList) + { + if (sceneUI == null) + { + continue; + } + sceneList.Add(sceneUI); + } + } + return sceneList; + } + + /// <summary> + /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅� + /// </summary> + /// <returns></returns> + public List<SceneUI> GetUnalloctedScenes() + { + List<SceneUI> sceneUIs = new List<SceneUI> { }; + var sList = AllRoomSceneUIFilepathList; + + List<string> sfile = new List<string> { }; + foreach (var path in Global.FileListByHomeId()) + { + if (path.StartsWith("Scene_", StringComparison.Ordinal)) + { + sfile.Add(path); + } + } + foreach (var path in sfile) + { + if (sList.Find((obj) => obj == path) == null) + { + var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(path)); + var tempSceneUI = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo); + if (tempSceneUI != null) + { + sceneUIs.Add(tempSceneUI); + } + } + } + if (sceneUIs.Count == 0) + { + return null; + } + return sceneUIs; + } + #endregion #region 鈼� 鍒锋柊鍦烘櫙_________________________ -- Gitblit v1.8.0