Fixed channel data not loaded on start; fixed only online not working
This commit is contained in:
parent
fdc717dd77
commit
d3cb34e130
@ -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
|
||||
|
@ -12,16 +12,9 @@ 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
|
||||
{
|
||||
get;
|
||||
@ -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<bool> GetOrUpdateChannelAsync()
|
||||
{
|
||||
|
@ -48,7 +48,7 @@
|
||||
Spacing="5">
|
||||
|
||||
<CheckBox Content="Only Online"
|
||||
IsChecked="{Binding OnlyOnline, Mode=TwoWay}" />
|
||||
IsChecked="{Binding Database.OnlyOnline, Mode=TwoWay}" />
|
||||
|
||||
<TextBox Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
|
@ -31,9 +31,11 @@ public partial class MainWindow : Window
|
||||
|
||||
private void OnDatabaseChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
InitializeRaidChannels();
|
||||
if (e.PropertyName == nameof(BetterRaidDatabase.OnlyOnline))
|
||||
{
|
||||
GenerateRaidGrid();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDataContextChanged(object? sender, EventArgs e)
|
||||
{
|
||||
@ -42,7 +44,6 @@ public partial class MainWindow : Window
|
||||
vm.Database = BetterRaidDatabase.LoadFromFile("db.json");
|
||||
vm.Database.AutoSave = true;
|
||||
vm.Database.PropertyChanged += OnDatabaseChanged;
|
||||
vm.OnlyOnline = vm.Database.OnlyOnline;
|
||||
|
||||
vm.PropertyChanged += OnViewModelChanged;
|
||||
|
||||
@ -55,48 +56,6 @@ public partial class MainWindow : Window
|
||||
{
|
||||
if (e.PropertyName == nameof(MainWindowViewModel.Filter))
|
||||
{
|
||||
if (DataContext is MainWindowViewModel mainWindowVm)
|
||||
{
|
||||
if (string.IsNullOrEmpty(mainWindowVm.Filter))
|
||||
{
|
||||
foreach (var vm in _raidButtonVMs)
|
||||
{
|
||||
vm.ShowInGrid = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var vm in _raidButtonVMs)
|
||||
{
|
||||
if (string.IsNullOrEmpty(mainWindowVm.Filter))
|
||||
continue;
|
||||
|
||||
if (string.IsNullOrEmpty(vm.Channel?.DisplayName))
|
||||
continue;
|
||||
|
||||
vm.ShowInGrid = vm.Channel.DisplayName.Contains(mainWindowVm.Filter, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
||||
GenerateRaidGrid();
|
||||
}
|
||||
|
||||
if (e.PropertyName == nameof(MainWindowViewModel.OnlyOnline))
|
||||
{
|
||||
if (DataContext is MainWindowViewModel mainWindowVm)
|
||||
{
|
||||
foreach (var vm in _raidButtonVMs)
|
||||
{
|
||||
if (mainWindowVm.OnlyOnline)
|
||||
{
|
||||
vm.ShowInGrid = vm.Channel.IsLive;
|
||||
}
|
||||
else
|
||||
{
|
||||
vm.ShowInGrid = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GenerateRaidGrid();
|
||||
}
|
||||
}
|
||||
@ -115,11 +74,25 @@ public partial class MainWindow : Window
|
||||
if (string.IsNullOrEmpty(channel))
|
||||
continue;
|
||||
|
||||
_raidButtonVMs.Add(new RaidButtonViewModel
|
||||
var rbvm = new RaidButtonViewModel
|
||||
{
|
||||
ChannelName = channel,
|
||||
MainVm = vm
|
||||
});
|
||||
};
|
||||
|
||||
rbvm.PropertyChanged += OnChannelDataChanged;
|
||||
|
||||
_raidButtonVMs.Add(rbvm);
|
||||
}
|
||||
|
||||
UpdateChannelData();
|
||||
}
|
||||
|
||||
private void OnChannelDataChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == nameof(RaidButtonViewModel.Channel))
|
||||
{
|
||||
GenerateRaidGrid();
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,7 +108,31 @@ public partial class MainWindow : Window
|
||||
|
||||
raidGrid.Children.Clear();
|
||||
|
||||
var visibleChannels = _raidButtonVMs.Where(c => 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()
|
||||
{
|
||||
while (e.Cancel == false)
|
||||
{
|
||||
Task.Delay(App.AutoUpdateDelay).Wait();
|
||||
|
||||
if (raidGrid == null || raidGrid.Children.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var children in raidGrid.Children)
|
||||
foreach (var vm in _raidButtonVMs)
|
||||
{
|
||||
Dispatcher.UIThread.InvokeAsync(async () =>
|
||||
{
|
||||
if (children.DataContext is RaidButtonViewModel vm)
|
||||
{
|
||||
await vm.GetOrUpdateChannelAsync();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAllTiles(object? sender, DoWorkEventArgs e)
|
||||
{
|
||||
while (e.Cancel == false)
|
||||
{
|
||||
Task.Delay(App.AutoUpdateDelay).Wait();
|
||||
UpdateChannelData();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user