using System;
|
using System.Collections.Generic;
|
using Shared.Phone.Device.Category;
|
|
namespace Shared.Common
|
{
|
/// <summary>
|
/// 在分类场景中使用,展示要加上房间的名称
|
/// </summary>
|
[System.Serializable]
|
public class SceneRoomUI
|
{
|
/// <summary>
|
/// 场景信息
|
/// </summary>
|
public SceneUI sceneUI;
|
/// <summary>
|
/// 房间
|
/// </summary>
|
public Room room;
|
|
/// <summary>
|
/// 所有的场景和房间信息
|
/// </summary>
|
public static void GetAllSceneRoomUIList()
|
{
|
//选择场景--所有房间的所有场景
|
AllSceneRoomUIList.Clear();
|
List<int> sceneIdList = new List<int> { };
|
foreach (var r in Shared.Common.Room.Lists)
|
{
|
if (r.SceneUIList.Count == 0)
|
{
|
continue;
|
}
|
foreach (var scene in r.SceneUIList)
|
{
|
if (scene == null)
|
{
|
continue;
|
}
|
if(!sceneIdList.Contains(scene.Id))
|
{
|
var sceneRoomUI = new SceneRoomUI { sceneUI = scene, room = r };
|
sceneIdList.Add(scene.Id);
|
AllSceneRoomUIList.Add(sceneRoomUI);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 所有的场景和房间信息 -请先调用 GetAllSceneRoomUIList
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public static List<SceneRoomUI> AllSceneRoomUIList = new List<SceneRoomUI> { };
|
|
/// <summary>
|
/// 编辑场景
|
/// </summary>
|
/// <param name="sceneUI">sceneUI</param>
|
/// <param name="room">Room.</param>
|
public static void EditScene(SceneUI sceneUI,Room room)
|
{
|
Application.RunOnMainThread(async () =>
|
{
|
try
|
{
|
CommonPage.Loading.Start();
|
//从网关中反序列化出对应的房间设备
|
var sceneDeviceList = await ZigBee.Device.Scene.GetSceneDeviceListAsync(sceneUI.Id);
|
if (sceneDeviceList == null)
|
{
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine);
|
//CommonPage.Instance.FailureToServer();
|
return;
|
}
|
|
if (Shared.Common.Room.AllRoomDeviceUIList.Count == 0)
|
{
|
Shared.Common.Room.GetAllRoomDeviceUIList();
|
if (Shared.Common.Room.AllRoomDeviceUIList.Count == 0)
|
{
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ThisSceneHaveNoDevice);
|
}
|
//return;
|
}
|
if (sceneDeviceList.getSceneDeviceListInfo != null)
|
{
|
var deviceList = sceneDeviceList.getSceneDeviceListInfo.DeviceList;
|
//CategoryAddScene.sceneTargetDevicesList?.Clear();
|
//累加延时
|
int AddedDelayTime = 0;
|
if (deviceList != null && Shared.Common.Room.AllRoomDeviceUIList.Count != 0)
|
{
|
foreach (var sceneDev in deviceList)
|
{
|
if (sceneDev.Type == 0)
|
{
|
foreach (var dev in Shared.Common.Room.AllRoomDeviceUIList)
|
{
|
if (dev == null || dev.CommonDevice == null)
|
{
|
continue;
|
}
|
if (dev.CommonDevice.DeviceAddr == sceneDev.DeviceAddr && dev.CommonDevice.DeviceEpoint == sceneDev.Epoint)
|
{
|
if (sceneDev.DelayTime - AddedDelayTime > 0)
|
{
|
var sceneTargetDeviceTime = new SceneTargetDeviceUI { Type = 1, DelayTime = sceneDev.DelayTime - AddedDelayTime };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDeviceTime);
|
//CategoryAddScene.beforeSceneTargetDevicesList.Add(sceneTargetDeviceTime);
|
|
var sceneTargetDevice = new SceneTargetDeviceUI { Type = 0, DeviceUI = dev, TaskList = sceneDev.TaskList };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDevice);
|
//CategoryAddScene.beforeSceneTargetDevicesList.Add(sceneTargetDevice);
|
AddedDelayTime = sceneDev.DelayTime;
|
}
|
else
|
{
|
var sceneTargetDevice = new SceneTargetDeviceUI { Type = 0, DeviceUI = dev, TaskList = sceneDev.TaskList };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDevice);
|
//CategoryAddScene.beforeSceneTargetDevicesList.Add(sceneTargetDevice);
|
}
|
}
|
}
|
}
|
else if (sceneDev.Type == 1)
|
{
|
string localSceneName = string.Empty;
|
var localScene = SceneRoomUI.AllSceneRoomUIList.Find((obj) => obj.sceneUI.Id == sceneDev.ElseScenesId);
|
if (localScene != null)
|
{
|
localSceneName = localScene.sceneUI.Name;
|
}
|
if (sceneDev.DelayTime - AddedDelayTime > 0)
|
{
|
var sceneTargetDeviceTime = new SceneTargetDeviceUI { Type = 1, DelayTime = sceneDev.DelayTime - AddedDelayTime };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDeviceTime);
|
//CategoryAddScene.beforeSceneTargetDevicesList.Add(sceneTargetDeviceTime);
|
var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 2, ElseScenesId = sceneDev.ElseScenesId, SceneName = localSceneName };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDeviceScene);
|
//CategoryAddScene.beforeSceneTargetDevicesList.Add(sceneTargetDeviceScene);
|
AddedDelayTime = sceneDev.DelayTime;
|
}
|
else
|
{
|
var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 2, ElseScenesId = sceneDev.ElseScenesId, SceneName = localSceneName };
|
//CategoryAddScene.sceneTargetDevicesList.Add(sceneTargetDeviceScene);
|
//CategoryAddScene.beforeSceneTargetDevicesList.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;
|
//CategoryAddScene.SceneText = sceneUI.Name;
|
//scene.curRoom = room;
|
//CategoryAddScene.ModifySceneUI = sceneUI;
|
//CategoryAddScene.Modify = true;
|
//CategoryAddScene.ImagePath = sceneUI.IconPath;
|
scene.Show();
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"编辑场景出错---{ex.Message}");
|
}
|
finally
|
{
|
CommonPage.Loading.Hide();
|
}
|
});
|
}
|
}
|
}
|