From c1de48884fa145a16a0f8bcee93274dcfaa0ff82 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 07 五月 2020 10:40:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev-tzy' into dev-2020xm

---
 ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs |  491 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 491 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs
new file mode 100755
index 0000000..fc4a6f3
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs
@@ -0,0 +1,491 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.SharedContent
+{
+    /// <summary>
+    /// 閰嶇疆鏂板叡浜唴瀹圭殑涓荤晫闈�
+    /// </summary>
+    public class AddNewSharedListRoomForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        /// <summary>
+        /// 鍒嗕韩鎸夐挳
+        /// </summary>
+        private BottomClickButton btnShard = null;
+        /// <summary>
+        /// 鎴愬憳淇℃伅
+        /// </summary>
+        private MemberInfoRes memberResult = null;
+        /// <summary>
+        /// 鎴愬憳鐨勫垎浜暟鎹�
+        /// </summary>
+        private MemberShardInfoData memberShardInfo = null;
+        /// <summary>
+        /// 閫夋嫨鐨勬埧闂�
+        /// </summary>
+        private Dictionary<string, Common.Room> dicSelectRoom = new Dictionary<string, Common.Room>();
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬ゼ灞侷D
+        /// </summary>
+        private string nowSelectFloorId = string.Empty;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_memberResult">鎴愬憳淇℃伅</param>
+        /// <param name="i_memberShardInfo">鎴愬憳鐨勫叡浜俊鎭�</param>
+        public void ShowForm(MemberInfoRes i_memberResult, MemberShardInfoData i_memberShardInfo)
+        {
+            this.memberResult = i_memberResult;
+            this.memberShardInfo = i_memberShardInfo;
+
+            //璁剧疆澶撮儴淇℃伅
+            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddShared));
+
+            //鍒濆鍖栧彸涓婅鐨勬帶浠�
+            this.InitTopRightMenuControl();
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            var frameBack = new FrameLayout();
+            frameBack.Height = Application.GetRealHeight(141);
+            frameBack.BackgroundColor = UserCenterColor.Current.White;
+            bodyFrameLayout.AddChidren(frameBack);
+            //鎴块棿鍒楄〃
+            var btnTitle = new NormalViewControl(800, 60, true);
+            btnTitle.X = ControlCommonResourse.XXLeft;
+            btnTitle.Y = Application.GetRealHeight(52);
+            btnTitle.TextID = R.MyInternationalizationString.RoomList;
+            btnTitle.TextColor = UserCenterColor.Current.TextColor2;
+            btnTitle.TextSize = 15;
+            frameBack.AddChidren(btnTitle);
+
+            this.listView = new VerticalListControl(29);
+            listView.Y = frameBack.Bottom;
+            listView.Height = bodyFrameLayout.Height - frameBack.Bottom;
+            listView.BackgroundColor = UserCenterColor.Current.White;
+            bodyFrameLayout.AddChidren(listView);
+
+            this.btnShard = new BottomClickButton();
+            btnShard.TextID = R.MyInternationalizationString.uShared2;
+            bodyFrameLayout.AddChidren(btnShard);
+            btnShard.Visible = false;
+            btnShard.ButtonClickEvent += (sender, e) =>
+            {
+                var listRoom = new List<Common.Room>();
+                foreach (var room in this.dicSelectRoom.Values)
+                {
+                    listRoom.Add(room);
+                }
+                //鎵ц鍒嗕韩鎸囧畾鍖哄煙
+                this.DoSharedContentByRoom(listRoom);
+            };
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                //鍒濆鍖栧尯鍩熷垪琛�
+                this.InitAreaListRow(this.nowSelectFloorId);
+            });
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧彸涓婅鐨勬帶浠�
+        /// </summary>
+        private void InitTopRightMenuControl()
+        {
+            //鑾峰彇妤煎眰
+            var dicFloor = HdlRoomLogic.Current.GetFloorSortList();
+            if (dicFloor.Count == 0)
+            {
+                return;
+            }
+            var btnIconContr = new MostRightIconControl(69, 69);
+            btnIconContr.UnSelectedImagePath = "Item/Drop_Down.png";
+            topFrameLayout.AddChidren(btnIconContr);
+            btnIconContr.InitControl();
+
+            var btnFloor = new NormalViewControl(300, 69, true);
+            btnFloor.Gravity = Gravity.CenterVertical;
+            btnFloor.X = btnIconContr.X + btnIconContr.btnIcon.X - Application.GetRealWidth(300);
+            btnFloor.TextAlignment = TextAlignment.CenterRight;
+            topFrameLayout.AddChidren(btnFloor);
+
+            foreach (var floorId in dicFloor.Keys)
+            {
+                //绗竴涓ゼ灞�
+                this.nowSelectFloorId = floorId;
+                btnFloor.Text = dicFloor[floorId];
+                break;
+            }
+
+            btnIconContr.ButtonClickEvent += (sender, e) =>
+            {
+                //妤煎眰鑿滃崟
+                var contr = new TopRightFloorMenuControl(dicFloor.Count, 2, Language.StringByID(R.MyInternationalizationString.SelectFloor));
+                foreach (var floorId in dicFloor.Keys)
+                {
+                    contr.AddRowMenu(floorId, () =>
+                    {
+                        //璁板綍璧烽�夋嫨鐨処D
+                        this.nowSelectFloorId = floorId;
+                        btnFloor.Text = dicFloor[this.nowSelectFloorId];
+                        //鍒濆鍖栦腑閮ㄤ俊鎭�
+                        this.InitMiddleFrame();
+                    });
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鍖哄煙鍒楄〃___________________________
+
+        /// <summary>
+        /// 鍒濆鍖栧尯鍩熷垪琛�
+        /// </summary>
+        /// <param name="floorId">妤煎眰ID</param>
+        private void InitAreaListRow(string floorId)
+        {
+            dicSelectRoom.Clear();
+            var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(floorId, false);
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                var listDataRoom = new List<Common.Room>();
+                for (int i = 0; i < listRoom.Count; i++)
+                {
+                    //妫�娴嬭兘鍚︽樉绀鸿鎴块棿
+                    if (this.CheckCanShowRow(listRoom[i]) == true)
+                    {
+                        listDataRoom.Add(listRoom[i]);
+                    }
+                }
+                for (int i = 0; i < listDataRoom.Count; i++)
+                {
+                    //娣诲姞鎴块棿琛�
+                    this.AddRoomRow(listDataRoom[i], i != listDataRoom.Count - 1);
+                }
+
+                //璋冩暣鐪熷疄楂樺害
+                listView.AdjustRealHeight(Application.GetRealHeight(23));
+                if (listView.Y + listView.Height > btnShard.Y)
+                {
+                    //褰撹繖涓垪琛ㄦ帶浠剁殑楂樺害宸茬粡瓒呰繃浜嗐�愬垎浜寜閽�戞椂,灏嗗畠鐨勯珮搴︾洿鎺ユ墿澶у埌鏈�澶у寲
+                    listView.RecoverHeight();
+                    //鐒跺悗鍐嶆坊鍔犱竴涓┖鐧界殑鎺т欢,淇冧娇瀹冭兘澶熷悜涓婃粦鍔�
+                    var frameTemp = new FrameLayout();
+                    frameTemp.Height = bodyFrameLayout.Height - btnShard.Y;
+                    listView.AddChidren(frameTemp);
+                }
+                if (listDataRoom.Count == 0)
+                {
+                    //濡傛灉娌℃湁鑳藉鍏变韩鐨勬埧闂�
+                    bodyFrameLayout.RemoveAll();
+                    //鏃犲彲鍏变韩鐨勬埧闂�
+                    this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotCanShardRoomMsg), "Item/NotShardPic.png", 383, 279);
+                }
+            });
+        }
+
+        /// <summary>
+        /// 娣诲姞鎴块棿琛�
+        /// </summary>
+        /// <param name="room"></param>
+        /// <param name="addLine"></param>
+        private void AddRoomRow(Common.Room room, bool addLine)
+        {
+            var row = new FrameRowControl(listView.rowSpace / 2);
+            row.MainKeys = room.Id;
+            listView.AddChidren(row);
+            //鍥炬爣
+            var btnIcon = row.AddLeftIcon(81);
+            btnIcon.UnSelectedImagePath = "Item/RoomIconSelected.png";
+            //鎴块棿鍚�
+            var btnName = row.AddLeftCaption(room.Name, 650);
+            btnName.TextSize = 15;
+            if (addLine == true)
+            {
+                //搴曠嚎
+                row.AddBottomLine();
+            }
+            row.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new AddNewSharedContentForm();
+                form.AddForm(room, memberShardInfo);
+            };
+
+            //閫夋嫨
+            var btnSelect = row.AddMostRightEmptyIcon(69, 69);
+            btnSelect.UnSelectedImagePath = "Item/ItemUnSelected.png";
+            btnSelect.SelectedImagePath = "Item/ItemSelected.png";
+            row.ChangedChidrenBindMode(btnSelect, ChidrenBindMode.NotBind);
+            btnSelect.ButtonClickEvent += (sender, e) =>
+            {
+                if (btnSelect.IsSelected == true)
+                {
+                    btnSelect.IsSelected = false;
+                    dicSelectRoom.Remove(room.Id);
+                    if (dicSelectRoom.Count == 0)
+                    {
+                        btnShard.Visible = false;
+                    }
+                }
+                else
+                {
+                    btnSelect.IsSelected = true;
+                    dicSelectRoom[room.Id] = room;
+                    if (btnShard.Visible == false)
+                    {
+                        btnShard.Visible = true;
+                    }
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鍒嗕韩鎸囧畾鍖哄煙_______________________
+
+        /// <summary>
+        /// 鎵ц鍒嗕韩鎸囧畾鍖哄煙
+        /// </summary>
+        /// <param name="room">鎸囧畾瑕佸垎浜殑鎴块棿</param>
+        public void DoSharedContentByRoom(List<Common.Room> listRoom)
+        {
+            //鑾峰彇闇�瑕佷笂浼犵殑璁惧(鎸夋埧闂碙ist椤哄簭鍒嗙粍)
+            var dicDevice = new Dictionary<int, List<CommonDevice>>();
+            //鑾峰彇闇�瑕佷笂浼犵殑鍦烘櫙,杩欎釜涓滆タ涓嶈鑾峰彇瀹冪殑缁戝畾鐩爣(鎸夋埧闂碙ist椤哄簭鍒嗙粍)
+            var dicScene = new Dictionary<int, List<Common.SceneUI>>();
+            //鑾峰彇闇�瑕佷笂浼犵殑鎴块棿鏁版嵁
+            int fileCount = this.GetUpLoadRoomData(listRoom, dicDevice, dicScene);
+
+            var listCheckFile = new HashSet<string>();
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                //鎵撳紑杩涘害鏉�
+                this.ShowProgressBar();
+
+                for (int index = 0; index < listRoom.Count; index++)
+                {
+                    //鎵ц涓婁紶
+                    var result = await HdlShardLogic.Current.DoUploadSharedContent(memberShardInfo, listRoom[index], dicDevice[index], dicScene[index], fileCount, listCheckFile);
+                    if (result == false)
+                    {
+                        break;
+                    }
+                }
+                //鍏抽棴杩涘害鏉�
+                this.CloseProgressBar();
+
+                //涓嶇鎴愬姛杩樻槸澶辫触,閮藉埛鏂扮晫闈�
+                Application.RunOnMainThread(() =>
+                {
+                    if (this.Parent != null)
+                    {
+                        //閲嶆柊鍒锋柊鐣岄潰
+                        this.InitMiddleFrame();
+                    }
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鑾峰彇闇�瑕佷笂浼犵殑鎴块棿鏁版嵁
+        /// </summary>
+        /// <param name="listRoom">闇�瑕佷笂浼犵殑鎴块棿鍒楄〃</param>
+        /// <param name="dicDevice">鑾峰彇闇�瑕佷笂浼犵殑璁惧(鎸夋埧闂碙ist椤哄簭鍒嗙粍)</param>
+        /// <param name="dicScene">鑾峰彇闇�瑕佷笂浼犵殑鍦烘櫙,杩欎釜涓滆タ涓嶈鑾峰彇瀹冪殑缁戝畾鐩爣(鎸夋埧闂碙ist椤哄簭鍒嗙粍)</param>
+        /// <returns></returns>
+        private int GetUpLoadRoomData(List<Common.Room> listRoom, Dictionary<int, List<CommonDevice>> dicDevice, Dictionary<int, List<Common.SceneUI>> dicScene)
+        {
+            var listAllFile = new HashSet<string>();
+            for (int i = 0; i < listRoom.Count; i++)
+            {
+                //鎸夋埧闂碙ist椤哄簭鍒嗙粍鐨勮澶囧垪琛�
+                var listDevice = new List<CommonDevice>();
+                dicDevice[i] = listDevice;
+                //鎸夋埧闂碙ist椤哄簭鍒嗙粍鐨勫満鏅垪琛�
+                var listScene = new List<Common.SceneUI>();
+                dicScene[i] = listScene;
+
+                //鑾峰彇鎴块棿鍏ㄩ儴璁惧
+                foreach (var deviceKeys in listRoom[i].ListDevice)
+                {
+                    var device = Common.LocalDevice.Current.GetDevice(deviceKeys);
+                    if (device == null || memberShardInfo.dicAllShardKeys.ContainsKey(device.FilePath) == true)
+                    {
+                        //寮傚父
+                        continue;
+                    }
+                    string deviceFile = device.FilePath;
+                    if (memberShardInfo.dicAllShardKeys.ContainsKey(deviceFile) == false)
+                    {
+                        //鎴栬�呭凡缁忓垎浜簡鐨勶紝涓嶅啀鏄剧ず
+                        listDevice.Add(device);
+                        if (listAllFile.Contains(deviceFile) == false)
+                        {
+                            listAllFile.Add(deviceFile);
+                        }
+                    }
+                }
+
+                //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙(璁$畻鎬绘暟鐢�)
+                var listCheck = new HashSet<string>();
+                var listChirdDevice = new List<CommonDevice>();
+                var listChirdScene = new List<Common.SceneUI>();
+                //鑾峰彇鎴块棿鍏ㄩ儴鍦烘櫙
+                foreach (var sceneId in listRoom[i].ListSceneId)
+                {
+                    var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
+                    if (sceneUi == null || memberShardInfo.dicAllShardKeys.ContainsKey(sceneUi.FileName) == true)
+                    {
+                        //寮傚父锛屾垨鑰呭凡缁忓垎浜簡鐨勶紝涓嶅啀鏄剧ず
+                        continue;
+                    }
+                    listScene.Add(sceneUi);
+                    //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣(杩欎釜鍑芥暟鏄绠楁�绘暟鐢�)
+                    HdlShardLogic.Current.GetSceneDeviceList(sceneUi, listCheck, listChirdScene, listChirdDevice);
+                    if (listAllFile.Contains(sceneUi.FileName) == false)
+                    {
+                        listAllFile.Add(sceneUi.FileName);
+                    }
+                }
+                foreach (var device in listChirdDevice)
+                {
+                    //宓屽瀛愯澶囩殑鏂囦欢鍚嶅瓧(璁$畻鎬绘暟鐢�)
+                    string deviceFile = device.FilePath;
+                    if (listAllFile.Contains(deviceFile) == false)
+                    {
+                        listAllFile.Add(deviceFile);
+                    }
+                }
+                foreach (var secene in listChirdScene)
+                {
+                    //宓屽瀛愬満鏅殑鏂囦欢鍚嶅瓧(璁$畻鎬绘暟鐢�)
+                    if (listAllFile.Contains(secene.FileName) == false)
+                    {
+                        listAllFile.Add(secene.FileName);
+                    }
+                }
+                //鎴块棿鏂囦欢
+                listAllFile.Add(listRoom[i].FileName);
+            }
+            //濡傛灉鏈夋ゼ灞傜殑璇�
+            if (Common.Config.Instance.Home.FloorDics.Count > 0)
+            {
+                return listAllFile.Count + 1;
+            }
+            return listAllFile.Count;
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________
+
+        /// <summary>
+        /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠�
+        /// </summary>
+        public override int FormActionAgainEvent()
+        {
+            //閲嶆柊鍒锋柊鐣岄潰
+            this.InitMiddleFrame();
+            return 1;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 妫�娴嬭鎴块棿鑳藉惁鏄剧ず
+        /// </summary>
+        /// <param name="room"></param>
+        /// <returns></returns>
+        private bool CheckCanShowRow(Common.Room room)
+        {
+            if (room.ListDevice.Count == 0 && room.ListSceneId.Count == 0)
+            {
+                return false;
+            }
+            if (room.IsLove == true)
+            {
+                return false;
+            }
+            if (memberShardInfo.dicShardRoom.ContainsKey(room.FileName) == false)
+            {
+                //娌℃湁杩欎釜鎴块棿
+                return true;
+            }
+            foreach (var deviceKeys in room.ListDevice)
+            {
+                var device = Common.LocalDevice.Current.GetDevice(deviceKeys);
+                if (device == null)
+                {
+                    continue;
+                }
+                if (memberShardInfo.dicAllShardKeys.ContainsKey(device.FilePath) == false)
+                {
+                    //瀛樺湪鏈垎浜殑璁惧鐨勮瘽锛屾鎴块棿鍙互鏄剧ず
+                    return true;
+                }
+            }
+            foreach (var sceneId in room.ListSceneId)
+            {
+                var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
+                if (sceneUi == null)
+                {
+                    continue;
+                }
+                if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneUi.FileName) == false)
+                {
+                    //瀛樺湪鏈垎浜殑鍦烘櫙鐨勮瘽锛屾鎴块棿鍙互鏄剧ず
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 鈻� 缁撴瀯浣揰____________________________
+
+        /// <summary>
+        /// 鎺ユ敹鍒嗕韩鏁版嵁
+        /// </summary>
+        private class MemberShardInfoResult
+        {
+            /// <summary>
+            /// 鏂囦欢鍚嶅瓧
+            /// </summary>
+            public string ShareName = string.Empty;
+            /// <summary>
+            /// 涓婚敭
+            /// </summary>
+            public string DistributedMark = string.Empty;
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0