From d3cb34e1304f8711a647efe1184b08ad4e3bb53d Mon Sep 17 00:00:00 2001 From: Enrico Ludwig Date: Mon, 26 Aug 2024 20:28:42 +0200 Subject: [PATCH] Fixed channel data not loaded on start; fixed only online not working --- ViewModels/MainWindowViewModel.cs | 14 ---- ViewModels/RaidButtonViewModel.cs | 13 +-- Views/MainWindow.axaml | 2 +- Views/MainWindow.axaml.cs | 129 ++++++++++++++---------------- 4 files changed, 63 insertions(+), 95 deletions(-) diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index 5bfb174..3168404 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -7,7 +7,6 @@ namespace BetterRaid.ViewModels; public partial class MainWindowViewModel : ViewModelBase { private string? _filter; - private bool _onlyOnline; private BetterRaidDatabase? _db; @@ -23,19 +22,6 @@ public partial class MainWindowViewModel : ViewModelBase set => SetProperty(ref _filter, value); } - public bool OnlyOnline - { - get => _onlyOnline; - set - { - if (SetProperty(ref _onlyOnline, value)) - { - if (Database != null) - Database.OnlyOnline = value; - } - } - } - public void ExitApplication() { //TODO polish later diff --git a/ViewModels/RaidButtonViewModel.cs b/ViewModels/RaidButtonViewModel.cs index 523065f..f78d7e0 100644 --- a/ViewModels/RaidButtonViewModel.cs +++ b/ViewModels/RaidButtonViewModel.cs @@ -12,15 +12,8 @@ namespace BetterRaid.ViewModels; public class RaidButtonViewModel : ViewModelBase { - private MainWindowViewModel? _mainVm; private TwitchChannel? _channel; private SolidColorBrush _viewerCountColor = new SolidColorBrush(Color.FromRgb(byte.MaxValue, byte.MaxValue, byte.MaxValue)); - - public bool ShowInGrid - { - get; - set; - } = true; public required string ChannelName { @@ -36,11 +29,7 @@ public class RaidButtonViewModel : ViewModelBase set => SetProperty(ref _viewerCountColor, value); } - public MainWindowViewModel? MainVm - { - get => _mainVm; - set => SetProperty(ref _mainVm, value); - } + public MainWindowViewModel? MainVm { get; set; } public async Task GetOrUpdateChannelAsync() { diff --git a/Views/MainWindow.axaml b/Views/MainWindow.axaml index e4ea100..2608fce 100644 --- a/Views/MainWindow.axaml +++ b/Views/MainWindow.axaml @@ -48,7 +48,7 @@ Spacing="5"> + IsChecked="{Binding Database.OnlyOnline, Mode=TwoWay}" /> c.ShowInGrid).ToList(); + var vm = DataContext as MainWindowViewModel; + + if (vm?.Database == null) + { + return; + } + + var visibleChannels = _raidButtonVMs.Where(channel => + { + var visible = true; + if (string.IsNullOrWhiteSpace(vm.Filter) == false) + { + if (channel.ChannelName.Contains(vm.Filter, StringComparison.OrdinalIgnoreCase) == false) + { + visible = false; + } + } + + if (vm.Database.OnlyOnline && channel.Channel.IsLive == false) + { + visible = false; + } + + return visible; + }).ToList(); var rows = (int)Math.Ceiling((visibleChannels.Count + 1) / 3.0); for (var i = 0; i < rows; i++) @@ -164,9 +161,9 @@ public partial class MainWindow : Window rowIndex++; } - if (btn.DataContext is RaidButtonViewModel vm) + if (btn.DataContext is RaidButtonViewModel rbvm) { - Dispatcher.UIThread.InvokeAsync(vm.GetOrUpdateChannelAsync); + Dispatcher.UIThread.InvokeAsync(rbvm.GetOrUpdateChannelAsync); } } @@ -220,28 +217,24 @@ public partial class MainWindow : Window dialog.ShowDialog(this); } - public void UpdateAllTiles(object? sender, DoWorkEventArgs e) + public void UpdateChannelData() + { + foreach (var vm in _raidButtonVMs) + { + Dispatcher.UIThread.InvokeAsync(async () => + { + await vm.GetOrUpdateChannelAsync(); + } + ); + } + } + + private void UpdateAllTiles(object? sender, DoWorkEventArgs e) { while (e.Cancel == false) { Task.Delay(App.AutoUpdateDelay).Wait(); - - if (raidGrid == null || raidGrid.Children.Count == 0) - { - return; - } - - foreach (var children in raidGrid.Children) - { - Dispatcher.UIThread.InvokeAsync(async () => - { - if (children.DataContext is RaidButtonViewModel vm) - { - await vm.GetOrUpdateChannelAsync(); - } - } - ); - } + UpdateChannelData(); } } } \ No newline at end of file