Esempio n. 1
0
        private async void _refreshTimer_Tick(object sender, EventArgs e)
        {
            IHueObject        selected = SelectedObject;
            List <IHueObject> obj      = await SelectedBridge.GetAllObjectsAsync(false, true);

            List <IHueObject> diff = obj.Where(x => !_listCurrentBridgeHueObjects.Any(y => y.Id == x.Id && y.GetType() == x.GetType())).ToList();

            foreach (IHueObject ho in diff)
            {
                CurrentBridgeHueObjectsList.Remove(x => x.Id == ho.Id && x.GetType() == ho.GetType());
            }

            foreach (IHueObject o in obj)
            {
                IHueObject oldo = _listCurrentBridgeHueObjects.FirstOrDefault(x => x.Id == o.Id && x.GetType() == o.GetType());
                if (oldo == null)
                {
                    _listCurrentBridgeHueObjects.Add(o);
                }
                else
                {
                    RefreshHueObject(ref oldo, o);
                }
            }

            if (SelectedObject is null)
            {
                return;
            }
            if (obj.Any(x => x.Id == selected.Id && x.GetType() == selected.GetType()))
            {
                SelectedObject = selected;
            }
        }
Esempio n. 2
0
        public async Task RefreshCurrentObject(bool logging = false)
        {
            int index = CurrentBridgeHueObjectsList.FindIndex(x => x.Id == SelectedObject.Id && x.GetType() == SelectedObject.GetType());

            if (index == -1)
            {
                return;
            }

            IHueObject hr = await SelectedBridge.GetObjectAsync(SelectedObject.Id, SelectedObject.GetType());

            if (hr == null)
            {
                return;
            }
            IHueObject newobj = hr;

            CurrentBridgeHueObjectsList[index].Image = newobj.Image;
            List <PropertyInfo> pi = newobj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).ToList();

            foreach (PropertyInfo p in pi)
            {
                if (CurrentBridgeHueObjectsList[index].HasProperty(p.Name))
                {
                    PropertyInfo prop = CurrentBridgeHueObjectsList[index].GetType().GetProperty(p.Name);
                    if (prop != null)
                    {
                        p.SetValue(CurrentBridgeHueObjectsList[index], prop.GetValue(newobj));
                    }
                }
            }
        }
Esempio n. 3
0
        private async void _findsensortimer_Tick(object sender, EventArgs e)
        {
            _findsensortimer.Stop();
            log.Info("Done searching for new sensors.");
            List <IHueObject> hr = await SelectedBridge.GetBridgeNewSensorsAsyncTask();

            if (hr == null)
            {
                return;
            }
            List <IHueObject> newsensors = hr;

            log.Info($"Found {newsensors.Count} new sensors.");
            CurrentBridgeHueObjectsList.AddRange(newsensors);
            CommandManager.InvalidateRequerySuggested();
            RaisePropertyChanged("SearchingLights");
        }
Esempio n. 4
0
        public async Task RefreshCurrentListHueObject()
        {
            if (SelectedBridge == null)
            {
                return;
            }
            Cursor_Tools.ShowWaitCursor();
            SelectedObject = null;
            if (!SelectedBridge.Virtual)
            {
                log.Info($"Getting list of objects from bridge at {SelectedBridge.IpAddress}.");
                List <IHueObject> hr = await SelectedBridge.GetAllObjectsAsync(false, true);

                if (hr != null)
                {
                    List <IHueObject> listobj = hr;

                    ObservableCollection <IHueObject> newlist = new ObservableCollection <IHueObject>();

                    switch (WinHueSettings.settings.Sort)
                    {
                    case WinHueSortOrder.Default:
                        CurrentBridgeHueObjectsList = new ObservableCollection <IHueObject>(hr);
                        break;

                    case WinHueSortOrder.Ascending:
                        newlist.AddRange(from item in listobj
                                         where item is Light
                                         orderby item.name
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Group
                                         orderby item.name
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Schedule
                                         orderby item.name
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Scene
                                         orderby item.name
                                         select item);
                        newlist.AddRange(
                            from item in listobj where item is Sensor orderby item.name select item);
                        newlist.AddRange(from item in listobj where item is Rule orderby item.name select item);
                        newlist.AddRange(from item in listobj
                                         where item is Resourcelink
                                         orderby item.name
                                         select item);
                        CurrentBridgeHueObjectsList = new ObservableCollection <IHueObject>(newlist);
                        break;

                    case WinHueSortOrder.Descending:
                        newlist.AddRange(from item in listobj
                                         where item is Light
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Group
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Schedule
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Scene
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Sensor
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Rule
                                         orderby item.name descending
                                         select item);
                        newlist.AddRange(from item in listobj
                                         where item is Resourcelink
                                         orderby item.name descending
                                         select item);
                        CurrentBridgeHueObjectsList = new ObservableCollection <IHueObject>(newlist);
                        break;

                    default:
                        goto case WinHueSortOrder.Default;
                    }

                    CreateExpanders();
                }
                else
                {
                    CurrentBridgeHueObjectsList = new ObservableCollection <IHueObject>();
                    log.Info("Bridge update required. Please update the bridge to use WinHue with this bridge.");
                }
            }
            else
            {
                log.Info("Virtual Bridge detected. Will skip refresh.");
            }

            Cursor_Tools.ShowNormalCursor();
        }
Esempio n. 5
0
        public async Task ChangeBridgeSettings()
        {
            if (SelectedBridge == null)
            {
                return;
            }
            Form_BridgeSettings frs = new Form_BridgeSettings {
                Owner = Application.Current.MainWindow
            };
            await frs.Initialize(SelectedBridge);

            if (frs.ShowDialog() == true)
            {
                Philips_Hue.BridgeObject.BridgeObjects.BridgeSettings bresult = await SelectedBridge.GetBridgeSettingsAsyncTask();

                if (bresult != null)
                {
                    string newname = bresult.name;
                    if (SelectedBridge.Name != newname)
                    {
                        SelectedBridge.Name = newname;
                        ListBridges[ListBridges.IndexOf(SelectedBridge)].Name = newname;
                        Bridge selbr = SelectedBridge;
                        SelectedBridge = null;
                        SelectedBridge = selbr;
                    }

                    await RefreshCurrentListHueObject();

                    RaisePropertyChanged("UpdateAvailable");
                }
            }
        }