using System; using System.Collections.Generic; using Shared.Phone.Device.Category; using Shared.Phone.UserCenter; namespace Shared.Common { /// /// 场景 /// [System.Serializable] public class SceneUI : ZigBee.Device.CommonDevice { #region ◆ 变量____________________________ /// /// 场景文件 /// /// The name of the file. [Newtonsoft.Json.JsonIgnore] public string FileName { get { return $"Scene_{Id}.json"; } } /// /// 场景id /// public int Id = int.MaxValue; /// /// 场景名 /// public string Name = string.Empty; /// /// 图片路径 /// public string IconPath = "Scene/SceneDefault.png"; /// /// 图片来源 0--本地图库 1--拍照 2--系统图库 /// public int IconPathType = 0; /// /// 功能路径列表---备用 /// public List FunctionFilePathList = new List { }; /// /// 通用标识--备用 /// public object Tag; /// /// 延时执行时间--设备延时 /// public int DelayTime = 0; /// /// 标识当前场景是否是分享的场景 /// public bool IsSharedScene = false; ///// ///// 是否收藏 ///// //public bool IsCollected = false; /// /// 延时执行时间--整个场景延时(不是延时场景里面的执行目标) /// 不序列化,重新打开APP置。即只对本次编辑场景延时执行有效 /// [Newtonsoft.Json.JsonIgnore] public int SceneDelayTime = 0; /// /// 场景执行目标 /// public List AddSceneMemberDataList = new List { }; ///// ///// RoomId ///// //public string RoomId = string.Empty; #endregion #region ◆ 通过场景id获取场景路径_____________ /// /// GetSceneFilePathBySceneId /// /// /// public static string GetSceneFilePathBySceneId(int sceneId) { return $"Scene_{sceneId}.json"; } #endregion #region ◆ 通过id获取场景区域_________________ /// /// GetZone /// /// public string GetZone() { var room = Room.CurrentRoom.GetRoomBySceneId(Id); if(room==null) { return null; } var floorName = Shared.Common.Config.Instance.Home.GetFloorNameById(room.FloorId); if (floorName == null) { return room.Name; } return $"{floorName},{room.Name}"; } #endregion #region ◆ 编辑场景_________________________ /// /// 编辑场景 /// /// sceneUI /// Room. public static void EditScene(SceneUI sceneUI, Room room) { Application.RunOnMainThread(async () => { try { var targetList = new List { }; CommonPage.Loading.Start(); //从网关中反序列化出对应的房间设备 var sceneDeviceList = await ZigBee.Device.Scene.GetSceneDeviceListAsync(sceneUI.Id); if (sceneDeviceList == null) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine); return; } if (Shared.Common.Room.AllRoomDeviceUIList.Count == 0) { if (Shared.Common.Room.AllRoomDeviceUIList.Count == 0) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ThisSceneHaveNoDevice); } //return; } if (sceneDeviceList.getSceneDeviceListInfo != null) { var deviceList = sceneDeviceList.getSceneDeviceListInfo.DeviceList; if (deviceList != null && Room.AllRoomDeviceUIList.Count != 0) { foreach (var sceneDev in deviceList) { if (sceneDev.Type == 0) { var dev = Room.AllRoomDeviceUIList.Find((obj) => obj.DeviceEpoint == sceneDev.Epoint && obj.DeviceAddr == sceneDev.DeviceAddr); if(dev!=null) { var sceneTargetDevice = new SceneTargetDeviceUI { Type = 0, DeviceUI = dev, TaskList = sceneDev.TaskList, DelayTimeSerialNumber= deviceList.IndexOf(sceneDev) + 1 }; targetList.Add(sceneTargetDevice); } } else if (sceneDev.Type == 1) { var localScene = Room.AllRoomSceneUIList.Find((obj) => obj.Id == sceneDev.ElseScenesId); if (localScene != null) { var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 1, ElseScenesId = sceneDev.ElseScenesId, SceneName = localScene.Name, SceneUI = localScene, DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1 }; targetList.Add(sceneTargetDeviceScene); } } else { var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 2, DelayTime = sceneDev.DelayTime, DelayTimeSerialNumber = deviceList.IndexOf(sceneDev)+1 }; targetList.Add(sceneTargetDeviceScene); } } } } else { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain); } var scene = new CategoryAddScene(); Phone.UserView.HomePage.Instance.AddChidren(scene); Phone.UserView.HomePage.Instance.PageIndex += 1; scene.isModify = true; scene.modifyRoom = room; scene.modifySceneUI = sceneUI; scene.modifySceneTargetDevicesList = targetList; scene.Show(); } catch (Exception ex) { System.Console.WriteLine($"编辑场景出错---{ex.Message}"); } finally { CommonPage.Loading.Hide(); } }); } #endregion #region ◆ 保存____________________________ /// /// 保存 /// /// 是否备份 public void Save(bool autoBackup = true) { Global.WriteFileByBytesByHomeId(FileName, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this))); if (autoBackup == true) { HdlAutoBackupLogic.AddOrEditorFile(FileName); } } #endregion } }