using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.SharedContent
{
///
/// 配置新共享内容的主界面
///
public class ConfigureNewSharedListRoomForm : UserCenterCommonForm
{
#region ■ 变量声明___________________________
///
/// 列表控件
///
private VerticalScrolViewLayout listView = null;
///
/// 成员信息
///
private MemberInfoRes memberResult = null;
///
/// 成员的分享数据
///
private MemberShardInfoData memberShardInfo = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 成员信息
/// 成员的共享信息
public void ShowForm(MemberInfoRes i_memberResult, MemberShardInfoData i_memberShardInfo)
{
this.memberResult = i_memberResult;
this.memberShardInfo = i_memberShardInfo;
this.memberShardInfo.SubAccountDistributedMark = this.memberResult.SubAccountDistributedMark;
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddShared));
//初始化中部信息
this.InitMiddleFrame();
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
bodyFrameLayout.RemoveAll();
//区域列表
var btnTitle = new TitleViewControl(1000, true);
btnTitle.TextID = R.MyInternationalizationString.uAreaList;
btnTitle.Y = Application.GetRealHeight(30);
bodyFrameLayout.AddChidren(btnTitle);
this.listView = new VerticalScrolViewLayout();
listView.Y = btnTitle.Bottom + Application.GetRealHeight(30);
listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(30) - btnTitle.Bottom;
bodyFrameLayout.AddChidren(listView);
new System.Threading.Thread(() =>
{
//初始化区域列表
this.InitAreaListRow();
})
{ IsBackground = true }.Start();
}
#endregion
#region ■ 区域列表___________________________
///
/// 初始化区域列表
///
private void InitAreaListRow()
{
bool hadShard = false;
foreach (var room in Shared.Common.Room.Lists)
{
if (this.CheckCanShowRow(room) == false)
{
//检测能否显示该房间
continue;
}
hadShard = true;
Application.RunOnMainThread(() =>
{
this.AddRoomRow(room);
});
}
if (hadShard == false)
{
Application.RunOnMainThread(() =>
{
bodyFrameLayout.RemoveAll();
//全部区域无可共享的设备
var btnMsg = new MsgViewControl(bodyFrameLayout.Width, false);
btnMsg.Gravity = Gravity.CenterVertical;
btnMsg.TextID = R.MyInternationalizationString.uNotShardDeviceInAllRoomMsg;
bodyFrameLayout.AddChidren(btnMsg);
});
}
}
///
/// 添加房间行
///
///
private void AddRoomRow(Common.Room room)
{
var row = new StatuRowLayout(listView);
//房间名
var btnName = new RowCenterView(false);
btnName.Text = room.Name;
row.AddChidren(btnName);
row.AddRightIconControl();
//分享
var btnShard = new RowEditorButton();
btnShard.TextID = R.MyInternationalizationString.uShared;
row.AddRightView(btnShard);
btnShard.MouseUpEventHandler += (sender, e) =>
{
//确定共享该区域?
string msg = Language.StringByID(R.MyInternationalizationString.uConfirmShardRoomContent);
this.ShowConfirmMsg(msg, "DoSharedContentByRoom", room);
};
row.MouseUpEvent += (sender, e) =>
{
var form = new ConfigureNewSharedMainForm();
this.AddForm(form, room, memberResult, memberShardInfo);
};
}
///
/// 检测该房间能否显示
///
///
///
private bool CheckCanShowRow(Common.Room room)
{
if (room.DeviceUIList.Count == 0 && room.SceneUIList.Count == 0)
{
return false;
}
if (room.IsLove == true)
{
return false;
}
if (memberShardInfo.dicAllMemberShard.ContainsKey(room.FileName) == false)
{
//没有这个房间
return true;
}
var listCheck = memberShardInfo.dicAllMemberShard[room.FileName];
foreach (var deviceUi in room.DeviceUIList)
{
if (deviceUi.CommonDevice == null)
{
continue;
}
if (listCheck.Contains(deviceUi.CommonDevice.FilePath) == false)
{
//存在未分享的设备的话,此房间可以显示
return true;
}
}
foreach (var sceneUi in room.SceneUIList)
{
if (sceneUi == null)
{
continue;
}
if (listCheck.Contains(sceneUi.FileName) == false)
{
//存在未分享的场景的话,此房间可以显示
return true;
}
}
return false;
}
#endregion
#region ■ 分享指定区域_______________________
///
/// 执行分分享指定区域
///
/// 指定要分享的房间
public void DoSharedContentByRoom(Common.Room room)
{
if (memberShardInfo.dicAllMemberShard.ContainsKey(room.FileName) == false)
{
memberShardInfo.dicAllMemberShard[room.FileName] = new HashSet();
}
//重复检测用
var listCheck = memberShardInfo.dicAllMemberShard[room.FileName];
//获取全部设备
var listDevice = new List();
foreach (var deviceUi in room.DeviceUIList)
{
var device = deviceUi.CommonDevice;
if (device == null || listCheck.Contains(device.FilePath) == true)
{
//异常,或者已经分享了的,不再显示
continue;
}
listDevice.Add(device);
}
//获取全部场景
var listScene = new List();
foreach (var sceneUi in room.SceneUIList)
{
if (sceneUi == null || listCheck.Contains(sceneUi.FileName) == true)
{
//异常,或者已经分享了的,不再显示
continue;
}
listScene.Add(sceneUi);
}
new System.Threading.Thread(async () =>
{
//执行上传
var result = await HdlShardLogic.Current.DoUploadSharedContent(memberShardInfo, room, listDevice, listScene);
if (result == true)
{
//分享成功
string msg = Language.StringByID(R.MyInternationalizationString.uShardSuccess);
this.ShowTip(msg);
Application.RunOnMainThread(() =>
{
//重新刷新界面
this.InitMiddleFrame();
});
}
})
{ IsBackground = true }.Start();
}
#endregion
#region ■ 界面重新激活事件___________________
///
/// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
///
public override void FormActionAgainEvent()
{
//重新刷新界面
this.InitMiddleFrame();
}
#endregion
#region ■ 结构体_____________________________
///
/// 接收分享数据
///
private class MemberShardInfoResult
{
///
/// 文件名字
///
public string ShareName = string.Empty;
///
/// 主键
///
public string DistributedMark = string.Empty;
}
#endregion
}
}