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; } }
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)); } } } }
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"); }
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(); }
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"); } } }