Пример #1
0
        private void bwAsync_DoWork(object sender, DoWorkEventArgs e)
        {
            Stopwatch mStopWatch = new Stopwatch();

            mStopWatch.Start();

            SanitaLogEx.d(TAG, "Start database cache...");
            PostMessage("Start database cache ...");
            IsCacheCompleted = false;

            try
            {
                //Update timer
                SystemInfo.NOW = SoftUpdatePresenter.GetCurrentTime(null, null);

                //Kiểm tra và nâng cấp cấu trúc database
                Splasher.Status = "Check and update database...";
                SoftUpdatePresenter.DoUpdateDatabaseSQL();

                using (IDbConnection connection = SoftUpdatePresenter.GetConnection())
                {
                    //Open connection
                    connection.Open();

                    //Begin transtation
                    using (IDbTransaction trans = connection.BeginTransaction())
                    {
                        Splasher.Status = "Đang xử lý : Danh sách danh mục...".Translate();
                        DM_Intent_Type.InitDefaultList(DM_Intent_TypePresenter.GetDM_Intent_Types(connection, trans));
                        MyVar.mListDM_Intent_Type = DM_Intent_Type.GetDefaultList(0).OrderBy(p => p.DM_Intent_TypeID).ToList();

                        DM_Entity_Type.InitDefaultList(DM_Entity_TypePresenter.GetDM_Entity_Types(connection, trans));
                        MyVar.mListDM_Entity_Type = DM_Entity_Type.GetDefaultList(0).OrderBy(p => p.DM_Entity_TypeID).ToList();

                        MyVar.mListUser   = UserPresenter.GetUsers(connection, trans);
                        MyVar.mListHome   = HomePresenter.GetHomes(connection, trans);
                        MyVar.mListRoom   = RoomPresenter.GetRooms(connection, trans);
                        MyVar.mListDevice = DevicePresenter.GetDevices(connection, trans);

                        //-----------------------------------------------------------------------------

                        //Commit transtation
                        trans.Commit();

                        //Close connection
                        connection.Close();
                    }
                }

                SanitaLogEx.d(TAG, "End database cache...");
            }
            catch (Exception ex)
            {
                SanitaLogEx.e(TAG, "bwAsync_DoWork error !", ex);
            }

            IsCacheCompleted = true;
        }
Пример #2
0
        private void bwAsync_Worker(object sender, DoWorkEventArgs e)
        {
            ProcessingType type = (ProcessingType)e.Argument;
            e.Result = type;

            switch (type)
            {
                case ProcessingType.LoadData:
                    {
                        mListData_Flat = RoomPresenter.GetRooms(null, null);
                        MyVar.mListRoom = mListData_Flat;

                        //Update dữ liệu
                        mListData = new List<Room>();
                        foreach (Home nhom_khoa in MyVar.mListHome)
                        {
                            if (mListData_Flat.Any(p => p.HomeID == nhom_khoa.HomeID))
                            {
                                Room group_Room = new Room();
                                group_Room.HomeID = nhom_khoa.HomeID;
                                group_Room.RoomID = -1;
                                group_Room.RoomName = nhom_khoa.HomeName;
                                group_Room.mListSubData = mListData_Flat.Where(p => p.HomeID == nhom_khoa.HomeID).ToList();
                                mListData.Add(group_Room);
                            }
                        }

                        //Update danh sách                 
                        {
                            mListThongTinDanhSachRoom = new List<ThongTinDanhSachRoom>();
                            mListThongTinDanhSachRoom_Flat = new List<ThongTinDanhSachRoom>();
                            ThongTinDanhSachRoom.ThongTinDanhSachRoomID_Index = 1;

                            //Add tất cả khoa
                            ThongTinDanhSachRoom root = new ThongTinDanhSachRoom();
                            root.ThongTinDanhSachRoomType = (int)ThongTinDanhSachRoom.TYPE.ROOT;
                            root.mListData = mListData;
                            root.ThongTinDanhSachRoomName = "Tất Cả Phòng (" + mListData_Flat.Where(p => p.RoomID > 0).Count() + ")";
                            mListThongTinDanhSachRoom.Add(root);
                            mListThongTinDanhSachRoom_Flat.Add(root);
                        }

                        foreach (DM_Room_Group nhom_dich_vu in DM_Room_Group.GetDefaultList(0))
                        {
                            ThongTinDanhSachRoom mData = new ThongTinDanhSachRoom();
                            mData.ThongTinDanhSachRoomType = (int)ThongTinDanhSachRoom.TYPE.GROUP;
                            mData.DM_Room_GroupID = nhom_dich_vu.DM_Room_GroupID;
                            mData.mListSubData = new List<ThongTinDanhSachRoom>();
                            mData.mListData = mListData;
                            mData.ThongTinDanhSachRoomName = DM_Room_Group.GetDefault(mData.DM_Room_GroupID).DM_Room_GroupName;

                            //Add loại khoa
                            {
                                IList<DM_Room_SubGroup> list_sub = DM_Room_SubGroup.GetDefaultList_Group(0, mData.DM_Room_GroupID);
                                foreach (DM_Room_SubGroup sub_data in list_sub)
                                {
                                    ThongTinDanhSachRoom mSubData = new ThongTinDanhSachRoom();
                                    mSubData.ThongTinDanhSachRoomType = (int)ThongTinDanhSachRoom.TYPE.SUB_GROUP;
                                    mSubData.DM_Room_GroupID = mData.DM_Room_GroupID;
                                    mSubData.DM_Room_SubGroupID = sub_data.DM_Room_SubGroupID;
                                    mSubData.mListData = new List<Room>();
                                    mSubData.ThongTinDanhSachRoomName = DM_Room_SubGroup.GetDefault(mSubData.DM_Room_SubGroupID).DM_Room_SubGroupName;

                                    //Loai 
                                    if (sub_data.DM_Room_GroupID == DM_Room_Group.HOME)
                                    {
                                        int loai_khoa = sub_data.DM_Room_SubGroupID - DM_Room_SubGroup.HOME_INIT;
                                        mSubData.mListData = mListData_Flat.Where(p => p.HomeID == loai_khoa).ToList();
                                    }

                                    if (sub_data.DM_Room_GroupID == DM_Room_Group.USER)
                                    {
                                        int loai_khoa = sub_data.DM_Room_SubGroupID - DM_Room_SubGroup.USER_INIT;
                                        mSubData.mListData = mListData_Flat.Where(p => p.UserID == loai_khoa).ToList();
                                    }

                                    //Check
                                    if (mSubData.mListData.Count > 0)
                                    {
                                        mSubData.ThongTinDanhSachRoomName += " (" + mSubData.mListData.Count + ")";
                                        mData.mListSubData.Add(mSubData);
                                        mListThongTinDanhSachRoom_Flat.Add(mSubData);
                                    }
                                }
                            }

                            //Check
                            if (mData.mListData.Count > 0)
                            {
                                mListThongTinDanhSachRoom.Add(mData);
                                mListThongTinDanhSachRoom_Flat.Add(mData);
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
        }
Пример #3
0
        public String ExecuteCommand(Intent_Request data)
        {
            EntityParam thiet_bi = data.mListParam.FirstOrDefault(p => p.Name == "thiet_bi");

            if (thiet_bi == null)
            {
                return("<speak><p><s>Bạn hãy nói tên thiết bị</s></p></speak>");
            }

            //Danh sách thiết bị
            IList <Device> mListDevice = DevicePresenter.GetDevices(null, null);
            IList <Room>   mListRoom   = RoomPresenter.GetRooms(null, null);

            foreach (Device device in mListDevice)
            {
                device.mRoom = mListRoom.FirstOrDefault(p => p.RoomID == device.RoomID);
                device.mRoom = device.mRoom ?? new Room();
            }

            Device mDevice = null;

            while (true)
            {
                //Tìm thiết bị trùng khớp
                //ví dụ "đèn ngủ 1"
                {
                    mDevice = mListDevice.FirstOrDefault(p => p.DeviceName.EqualTextNoCase(thiet_bi.Value));
                    if (mDevice != null)
                    {
                        break;
                    }
                }

                //Tìm thiết bị gồm tên thiết bị (đầy đủ) + tên phòng
                //ví dụ "đèn ngủ 1 phòng khách"
                {
                    mDevice = mListDevice.FirstOrDefault(p => (p.DeviceName + " " + p.mRoom.RoomName).EqualTextNoCase(thiet_bi.Value));
                    if (mDevice != null)
                    {
                        break;
                    }
                }

                //Tìm thiết bị gồm tên thiết bị (ngắn gọn) + tên phòng
                //ví dụ "đèn phòng khách"
                {
                    mDevice = mListDevice.FirstOrDefault(p => (p.DeviceName_Short + " " + p.mRoom.RoomName).EqualTextNoCase(thiet_bi.Value));
                    if (mDevice != null)
                    {
                        break;
                    }
                }

                //Tìm thiết bị cùng phòng (tên đầy đủ)
                {
                    mListDevice = mListDevice.Where(p => p.RoomID == data.mDevice.RoomID).ToList();

                    {
                        mDevice = mListDevice.FirstOrDefault(p => p.DeviceName.EqualTextNoCase(thiet_bi.Value));
                        if (mDevice != null)
                        {
                            break;
                        }
                    }

                    //Tìm thiết bị cùng phòng (tên ngắn gọn)
                    {
                        mDevice = mListDevice.FirstOrDefault(p => p.DeviceName_Short.EqualTextNoCase(thiet_bi.Value));
                        if (mDevice != null)
                        {
                            break;
                        }
                    }
                }

                break;
            }

            if (mDevice != null)
            {
                switch (data.DM_Entity_TypeID)
                {
                case DM_Entity_Type.HOME_CONTROL_BAT_THIET_VI:
                {
                    if (UtilityHassIO.mInstance.Switch_Turn_OnOff(data.mDevice.mUser.HassIO_URL, data.mDevice.mUser.HassIO_KEY, mDevice.DeviceCode, "on"))
                    {
                        return(String.Format("<speak><p><s>Đã bật {0}</s></p></speak>", mDevice.DeviceName));
                    }
                    else
                    {
                        return(String.Format("<speak><p><s>Xin lỗi, tôi không thực hiện được yêu cầu của bạn</s></p></speak>", mDevice.DeviceName));
                    }
                }

                case DM_Entity_Type.HOME_CONTROL_TAT_THIET_VI:
                {
                    if (UtilityHassIO.mInstance.Switch_Turn_OnOff(data.mDevice.mUser.HassIO_URL, data.mDevice.mUser.HassIO_KEY, mDevice.DeviceCode, "off"))
                    {
                        return(String.Format("<speak><p><s>Đã tắt {0}</s></p></speak>", mDevice.DeviceName));
                    }
                    else
                    {
                        return(String.Format("<speak><p><s>Xin lỗi, tôi không thực hiện được yêu cầu của bạn</s></p></speak>", mDevice.DeviceName));
                    }
                }

                default:
                    break;
                }
            }
            else
            {
                return("<speak><p><s>Tôi không tìm được thiết bị trong nhà của bạn</s></p></speak>");
            }

            return("");
        }