JLChen
2020-12-09 e87985ec1dcb69beedaf9f95e8e7aba14b7c08d6
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -3,6 +3,8 @@
using Shared;
using HDL_ON.Entity;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
namespace HDL_ON.UI
{
@@ -136,9 +138,13 @@
                Gravity = Gravity.CenterHorizontal,
                Height = Application.GetRealWidth(184),
                Radius = (uint)Application.GetRealWidth(12),
                ImagePath = scene.ImagePath
                //ImagePath = scene.ImagePath
            };
            sceneBgView.AddChidren(addSceneImageView);
            //2020-12-03 修改图片加载方法
            ImageUtlis.Current.LoadLocalOrNetworkImages(scene.ImagePath, addSceneImageView);
            #region 场景名称row
            sceneNameView = new FrameLayout()
@@ -327,9 +333,7 @@
            };
            contentView.AddChidren(functionListView);
            LoadFunctionRow(functionListView);
            Button btnLine1 = new Button()
            {
@@ -339,7 +343,6 @@
            };
            contentView.AddChidren(btnLine1);
            Button btnLine2 = new Button()
            {
                //Y = sceneDelayRow.Bottom,
@@ -347,12 +350,11 @@
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            contentView.AddChidren(btnLine2);
            #endregion
            Button btnBottomLine = new Button()
            {
                Y = Application.GetRealHeight(667-50)-1,
                Y = Application.GetRealHeight(667 - 50) - 1,
                Height = 1,
                BackgroundColor = CSS_Color.DividingLineColor,
            };
@@ -379,8 +381,8 @@
        void LoadFunctionRow(VerticalScrolViewLayout functionListView)
        {
            functionListView.RemoveAll();
            functionListView.Height = Application.GetRealWidth(65 * scene.sceneFunctionList.Count);
            foreach (var function in scene.sceneFunctionList)
            functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count);
            foreach (var scenefunction in scene.functions)
            {
                var row = new RowLayout()
                {
@@ -416,7 +418,7 @@
                    TextAlignment = TextAlignment.BottomRight,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = GetFunctionScnenInfo(function),
                    Text = GetFunctionScnenInfo(scenefunction),
                };
                row.AddChidren(btnFunctionInfo);
@@ -431,9 +433,9 @@
                };
                row.AddChidren(btnFunctionDelayInfo);
                if (function.delay > 0)
                if (Convert.ToInt32( scenefunction.delay) > 0)
                {
                    btnFunctionDelayInfo.Text = Language.StringByID(StringId.Delay) + " " + function.delayText;
                    btnFunctionDelayInfo.Text = Language.StringByID(StringId.Delay) + " " + scenefunction.localFunction.delayText;
                }
                else
                {
@@ -447,7 +449,7 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    Text = function.name,
                    Text = scenefunction.localFunction.name,
                };
                row.AddChidren(btnFunctionName);
@@ -459,20 +461,20 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    Text = function.GetRoomListName(),
                    Text = scenefunction.localFunction.GetRoomListName(),
                };
                row.AddChidren(btnFunctionFloorAndRoom);
                btnFunctionName.MouseUpEventHandler = (sender, e) =>
                {
                    var ssf = new SceneFunctionInfoEditPage(scene, function, refreshFunctionRowAction);
                    var ssf = new SceneFunctionInfoEditPage(scene, scenefunction, refreshFunctionRowAction);
                    MainPage.BasePageView.AddChidren(ssf);
                    ssf.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnFunctionFloorAndRoom.MouseUpEventHandler = (sender, e) =>
                {
                    var ssf = new SceneFunctionInfoEditPage(scene, function, refreshFunctionRowAction);
                    var ssf = new SceneFunctionInfoEditPage(scene, scenefunction, refreshFunctionRowAction);
                    MainPage.BasePageView.AddChidren(ssf);
                    ssf.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -486,10 +488,10 @@
                };
                row.AddRightView(btnDelSceneFunction);
                btnDelSceneFunction.MouseUpEventHandler = (sender, e) => {
                    scene.sceneFunctionList.Remove(function);
                    scene.SaveFunctionData();
                    scene.functions.Remove(scenefunction);
                    scene.SaveSceneData(true);
                    row.RemoveFromParent();
                    functionListView.Height = Application.GetRealWidth(65 * scene.sceneFunctionList.Count);
                    functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count);
                    //LoadFunctionRow(functionListView);
                };
@@ -501,32 +503,41 @@
        /// 解析场景功能数据
        /// </summary>
        /// <param name="sceneFunction"></param>
        string GetFunctionScnenInfo(Function sceneFunction)
        string GetFunctionScnenInfo(SceneFunction sceneFunction)
        {
            string sceneFunctionInfo = Language.StringByID(StringId.Close);
            if (sceneFunction.trait_on_off.curValue.ToString() == "off")
                return sceneFunctionInfo;
            sceneFunctionInfo = "";
            var sceneFunctionInfo = "";
            foreach (var sfs in sceneFunction.status)
            {
                if (sfs.key == FunctionAttributeKey.OnOff)
                {
                    if (sfs.value == "off")
                        return Language.StringByID(StringId.Close);
                }
                if (sfs.key == FunctionAttributeKey.Mode)
                {
                }
            }
            FunctionAttributes perTrait;
            switch (sceneFunction.functionType)
            switch (sceneFunction.localFunction.functionType)
            {
                case FunctionType.AC:
                    sceneFunctionInfo += sceneFunction.function.Find((obj) => obj.key == "mode").GetCurValueText();
                    sceneFunctionInfo += " " + sceneFunction.function.Find((obj) => obj.key == "set_temperature").curValue.ToString() +
                         sceneFunction.function.Find((obj) => obj.key == "set_temperature").uintString;
                    sceneFunctionInfo += sceneFunction.function.Find((obj) => obj.key == "fan").GetCurValueText();
                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").curValue.ToString() +
                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").uintString;
                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan").GetCurValueText();
                    break;
                case FunctionType.FloorHeating:
                    sceneFunctionInfo += sceneFunction.function.Find((obj) => obj.key == "mode").GetCurValueText();
                    sceneFunctionInfo += " " + sceneFunction.function.Find((obj) => obj.key == "set_temperature").curValue.ToString() +
                         sceneFunction.function.Find((obj) => obj.key == "set_temperature").uintString;
                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").curValue.ToString() +
                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").uintString;
                    break;
                case FunctionType.Dimmer:
                    perTrait = sceneFunction.function.Find((obj) => obj.key == "brightness");
                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness");
                    if (perTrait != null)
                    {
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.function.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
                    }
                    else
                    {
@@ -537,10 +548,10 @@
                    sceneFunctionInfo += Language.StringByID(StringId.Open);
                    break;
                case FunctionType.RGB:
                    perTrait = sceneFunction.function.Find((obj) => obj.key == "percent");
                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
                    if (perTrait != null)
                    {
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.function.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
                    }
                    else
                    {
@@ -551,10 +562,10 @@
                    sceneFunctionInfo += Language.StringByID(StringId.Open);
                    break;
                case FunctionType.MotorCurtain:
                    perTrait = sceneFunction.function.Find((obj) => obj.key == "percent");
                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
                    if (perTrait != null)
                    {
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.function.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
                    }
                    else
                    {
@@ -747,16 +758,18 @@
                //}, pid.ToString(), 4, 3);
                var imageName = Guid.NewGuid().ToString() + ".png";
                var imageName = Guid.NewGuid().ToString();
                //var imageName = scene.sid;
                CropImage.TakePicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, imageName);
                    CropImageCallBack(imagePath);
                }, imageName, 4, 3);
                if (pageTitleId == StringId.EditScene)
                {
                    scene.SaveFunctionData();
                }
                //if (pageTitleId == StringId.EditScene)
                //{
                //    scene.SaveFunctionData();
                //}
                pictureOptionView.Parent.RemoveFromParent();
            };
            btnAlbum.MouseDownEventHandler = (sender, e) => {
@@ -778,17 +791,18 @@
                //}, pid.ToString(), 4, 3);
                //从相册选择图片裁剪
                var imageName = Guid.NewGuid().ToString() + ".png";
                var imageName = Guid.NewGuid().ToString();
                //var imageName = scene.sid;
                CropImage.SelectPicture((imagePath) =>
                {
                    CropImageCallBack(imagePath, imageName);
                    CropImageCallBack(imagePath);
                }, imageName, 4, 3);
                if (pageTitleId == StringId.EditScene)
                {
                    scene.SaveFunctionData();
                }
                //if (pageTitleId == StringId.EditScene)
                //{
                //    scene.SaveFunctionData();
                //}
                pictureOptionView.Parent.RemoveFromParent();
            };
@@ -799,7 +813,7 @@
                    addSceneImageView.ImagePath = scene.ImagePath;
                    if (pageTitleId == StringId.EditScene)
                    {
                        scene.SaveFunctionData();
                        scene.SaveSceneData(true);
                    }
                };
@@ -812,29 +826,29 @@
        }
        /// <summary>
        ///
        /// 裁剪完照片回调,统一处理
        /// </summary>
        /// <param name="imagePath"></param>
        /// <param name="imageName"></param>
        void CropImageCallBack(string imagePath, string imageName)
        /// <param name="imagePath">裁剪后的真实路径</param>
        /// <param name="imageName">自定义的图片名称</param>
        void CropImageCallBack(string selectImagePath)
        {
            if (string.IsNullOrEmpty(imagePath) == true)
            if (string.IsNullOrEmpty(selectImagePath) == true)
            {
                return;
            }
            //如果是自定义图片删除之前的
            if (!addSceneImageView.ImagePath.Contains("Gallery/scenebg"))
            //上传成功到回调
            Action<string> uploadSuccessAction = (imageUrl) =>
            {
                Utlis.WriteLine("删除: " + addSceneImageView.ImagePath);
                System.IO.File.Delete(addSceneImageView.ImagePath);
            }
            MainPage.Log("SelectPicture 裁剪图片返回路径: " + imagePath);
            FileUtils.FileCopyToRootPath(imagePath, imageName);
            System.IO.File.Delete(imagePath);
            scene.ImagePath = imageName;
            addSceneImageView.ImagePath = imageName;
                    //2020-12-03 需要讲最新的图片路径同步到云端
                    scene.ImagePath = imageUrl;
                if (pageTitleId == StringId.EditScene)
                {
                    scene.SaveSceneData(true);
                }
            };
            //上传图片到云端
            UploadImage(selectImagePath, addSceneImageView, scene, uploadSuccessAction);
        }
        /// <summary>
@@ -864,7 +878,7 @@
                            return;
                        }
                    }
                    scene.SaveFunctionData();
                    scene.SaveSceneData(true);
                    DB_ResidenceData.functionList.scenes.Add(scene);
                    backAction();
                    this.RemoveFromParent();
@@ -873,7 +887,7 @@
                {
                    Action action = () =>
                    {
                        DB_ResidenceData.DelSceneFunction(scene.sid);
                        DB_ResidenceData.functionList.DeleteScene(scene,true);
                        backAction();
                        this.RemoveFromParent();
                    };
@@ -905,7 +919,7 @@
                scene.name = str;
                if (pageTitleId == StringId.EditScene)
                {
                    scene.SaveFunctionData();
                    scene.SaveSceneData(true);
                }
            };
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
@@ -922,6 +936,89 @@
            btnEditSceneNameIcon.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// 上传图片方法
        /// </summary>
        /// <param name="selectImagePath">裁剪后的图片路径</param>
        /// <param name="imageView"></param>
        /// <param name="uploadSuccessAction"></param>
        void UploadImage(string selectImagePath, ImageView imageView, Scene mScene, Action<string> uploadSuccessAction)
        {
            try
            {
                //MainPage.Log("SelectPicture 裁剪图片返回路径: " + selectImagePath);
                //1.读取裁剪后的图片,然后删除
                var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath);
                System.IO.File.Delete(selectImagePath);
                var waitPage = new Loading();
                bodyView.AddChidren(waitPage);
                waitPage.Start(Language.StringByID(StringId.PleaseWait));
                //开始上传
                new Thread(() =>
                {
                    try
                    {
                        var newImageName = mScene.name.Trim() + ".png";
                        var uploadImageObj = new UploadImageObj()
                        {
                            prefix = "Scene" + Utlis.GetTimestamp(),
                            fileName = newImageName,
                            uid = mScene.sid,
                            content = imageBytes,
                        };
                        var imageUrl = ImageUtlis.Current.UploadImage(uploadImageObj);
                        if (!string.IsNullOrEmpty(imageUrl) && imageUrl.Contains(newImageName))
                        {
                            //上传成功
                            Application.RunOnMainThread(() =>
                            {
                                //Utlis.WriteLine("上传成功:" + imageUrl);
                                //1.2如果是自定义图片删除之前的
                                if (!string.IsNullOrEmpty(imageView.ImagePath) && !imageView.ImagePath.Contains("Classification/Room/Roombg"))
                                {
                                    //Utlis.WriteLine("删除: " + imageView.ImagePath);
                                    System.IO.File.Delete(imageView.ImagePath);
                                }
                                //重命名保存
                                FileUtils.WriteFileByBytes(imageUrl, imageBytes);
                                imageView.ImagePath = null;
                                imageView.ImageBytes = imageBytes;
                                //上传成功
                                Utlis.ShowTip(Language.StringByID(StringId.UploadSuccessfully));
                                uploadSuccessAction?.Invoke(imageUrl);
                            });
                        }
                        else
                        {
                            //上传失败
                            Application.RunOnMainThread(() =>
                            {
                                //上传失败
                                Utlis.ShowTip(Language.StringByID(StringId.UploadFailed));
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        Application.RunOnMainThread(() =>
                        {
                            if (waitPage != null)
                            {
                                waitPage.RemoveFromParent();
                                waitPage = null;
                            }
                        });
                    }
                })
                { IsBackground = true }.Start();
            }
            catch { }
        }
    }
}