xm
2020-07-21 9a4b76398009cf76c508d61f7e48fb6f5cb7ac2d
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Update/GatewayHistoryFirmwareVersionForm.cs
New file
@@ -0,0 +1,234 @@
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.GatewayUpdate
{
    /// <summary>
    /// 网关的历史版本界面
    /// </summary>
    public class GatewayHistoryFirmwareVersionForm : EditorCommonForm
    {
        /// <summary>
        /// 要升级的网关
        /// </summary>
        private ZbGateway upDatezbGateway = null;
        /// <summary>
        /// 虚拟设备的固件信息
        /// </summary>
        private FirmwareVersionInfo virtualFirmware = null;
        /// <summary>
        /// 协调器新版本的固件信息
        /// </summary>
        private FirmwareVersionInfo coordinatorFirmware = null;
        /// <summary>
        /// 网关新版本的固件信息
        /// </summary>
        private FirmwareVersionInfo gatewayFirmware = null;
        /// <summary>
        /// 列表控件
        /// </summary>
        private VerticalListControl listView = null;
        /// <summary>
        /// 虚拟驱动号
        /// </summary>
        private List<ZbGatewayData.DriveCodeObj> listVode = null;
        /// <summary>
        /// 界面关闭的Action(虚拟设备,协调器,网关)
        /// </summary>
        public Action<FirmwareVersionInfo, FirmwareVersionInfo, FirmwareVersionInfo, List<ZbGatewayData.DriveCodeObj>> SelectFirmwareInfoEvent = null;
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="i_zbGateway">网关</param>
        /// <param name="i_virtualFirmware">虚拟设备的固件信息</param>
        /// <param name="i_coordinatorFirmware">协调器新版本的固件信息</param>
        /// <param name="i_gatewayFirmware">网关新版本的固件信息</param>
        /// <param name="i_listVode">虚拟驱动</param>
        public void ShowForm(ZbGateway i_zbGateway, FirmwareVersionInfo i_virtualFirmware,
            FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware, List<ZbGatewayData.DriveCodeObj> i_listVode)
        {
            this.upDatezbGateway = i_zbGateway;
            this.virtualFirmware = i_virtualFirmware;
            this.coordinatorFirmware = i_coordinatorFirmware;
            this.gatewayFirmware = i_gatewayFirmware;
            this.listVode = i_listVode;
            //设置标题信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uHistoryVersion) + "(测试版,后面估计会删除)");
            //初始化中部控件
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部控件
        /// </summary>
        private void InitMiddleFrame()
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            listView = new VerticalListControl();
            listView.Height = bodyFrameLayout.Height;
            listView.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(listView);
            //网关
            var listData1 = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.Linux,
                 upDatezbGateway.LinuxHardVersion.ToString(),
                 upDatezbGateway.LinuxImageType.ToString());
            //协调器
            var listData2 = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.Coordinator,
                 upDatezbGateway.CoordinatorHardVersion.ToString(),
                 upDatezbGateway.CoordinatorImageId.ToString());
            //虚拟驱动
            var listData3 = new List<FirmwareVersionInfo>();
            if (this.listVode != null && this.listVode.Count > 0)
            {
                //如果这个网关要有虚拟驱动这个东西的时候才考虑
                listData3 = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.VirtualDevice,
                     this.listVode[0].DriveHwVersion.ToString(),
                     this.listVode[0].DriveImageType.ToString());
            }
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                bool canAddTitle = true;
                int fVersion1 = upDatezbGateway.LinuxFirmwareVersion;
                string imageType1 = upDatezbGateway.LinuxImageType.ToString();
                foreach (var data in listData1)
                {
                    if (data.ImagType == imageType1 && fVersion1 == data.FirmwareVersion)
                    {
                        //同一个东西,不显示出来
                        continue;
                    }
                    if (canAddTitle == true)
                    {
                        this.AddTitleRowlayout("Linux模块");
                        canAddTitle = false;
                    }
                    this.AddRowlayout(data, FirmwareLevelType.Linux);
                }
                canAddTitle = true;
                int fVersion2 = upDatezbGateway.CoordinatorFirmwareVersion;
                string imageType2 = upDatezbGateway.CoordinatorImageId.ToString();
                foreach (var data in listData2)
                {
                    if (data.ImagType == imageType2 && fVersion2 == data.FirmwareVersion)
                    {
                        //同一个东西,不显示出来
                        continue;
                    }
                    if (canAddTitle == true)
                    {
                        this.AddTitleRowlayout("协调器模块");
                        canAddTitle = false;
                    }
                    this.AddRowlayout(data, FirmwareLevelType.Coordinator);
                }
                canAddTitle = true;
                string imageType3 = this.listVode[0].DriveImageType.ToString();
                foreach (var data in listData3)
                {
                    if (data.ImagType == imageType3 && this.listVode[0].DriveFwVersion == data.FirmwareVersion)
                    {
                        //同一个东西,不显示出来
                        continue;
                    }
                    if (canAddTitle == true)
                    {
                        this.AddTitleRowlayout("虚拟设备模块");
                        canAddTitle = false;
                    }
                    this.AddRowlayout(data, FirmwareLevelType.VirtualDevice);
                }
                listView.AdjustRealHeight(Application.GetRealHeight(23));
            });
        }
        /// <summary>
        /// 添加行
        /// </summary>
        /// <param name="info"></param>
        /// <param name="levelType"></param>
        private void AddRowlayout(FirmwareVersionInfo info, FirmwareLevelType levelType)
        {
            var rowlayout = new FrameRowControl();
            this.listView.AddChidren(rowlayout);
            //图标
            var btnIcon = rowlayout.AddLeftIcon(81);
            HdlGatewayLogic.Current.SetGatewayIcon(btnIcon, this.upDatezbGateway);
            rowlayout.AddChidren(btnIcon);
            //指定的网关
            rowlayout.AddTopView(info.ShowName, 800);
            //固件信息
            string firmwareText = Common.LocalDevice.Current.AppendVersion(info.FirmwareVersion);
            firmwareText += "        " + UserCenterLogic.ConvertUtcTimeToLocalTime(info.CreatedOnUtc).ToString("yyyy/MM/dd HH:mm:ss");
            rowlayout.AddBottomView(firmwareText, 800);
            //向右的图标
            rowlayout.AddRightArrow();
            rowlayout.AddBottomLine();
            rowlayout.ButtonClickEvent += (sender, e) =>
            {
                if (FirmwareUpdateResourse.dicUpdateList.ContainsKey(upDatezbGateway.GwId) == true)
                {
                    this.CloseForm();
                    return;
                }
                if (levelType == FirmwareLevelType.Linux)
                {
                    this.gatewayFirmware = info;
                }
                else if (levelType == FirmwareLevelType.Coordinator)
                {
                    this.coordinatorFirmware = info;
                }
                else if (levelType == FirmwareLevelType.VirtualDevice)
                {
                    this.virtualFirmware = info;
                    this.virtualFirmware.VirtualCode = this.listVode[0].DriveCode;
                }
                SelectFirmwareInfoEvent?.Invoke(this.virtualFirmware, this.coordinatorFirmware, this.gatewayFirmware, this.listVode);
                this.CloseForm();
            };
        }
        /// <summary>
        /// 添加标题行
        /// </summary>
        /// <param name="title"></param>
        private void AddTitleRowlayout(string title)
        {
            var rowlayout = new FrameRowControl();
            rowlayout.UseClickStatu = false;
            this.listView.AddChidren(rowlayout);
            rowlayout.AddLeftCaption(title, 800);
        }
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            SelectFirmwareInfoEvent = null;
            base.CloseFormBefore();
        }
    }
}