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
|
public partial class MainWindowViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private string? _filter;
|
private string? _filter;
|
||||||
private bool _onlyOnline;
|
|
||||||
|
|
||||||
private BetterRaidDatabase? _db;
|
private BetterRaidDatabase? _db;
|
||||||
|
|
||||||
@ -23,19 +22,6 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
set => SetProperty(ref _filter, value);
|
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()
|
public void ExitApplication()
|
||||||
{
|
{
|
||||||
//TODO polish later
|
//TODO polish later
|
||||||
|
@ -12,16 +12,9 @@ namespace BetterRaid.ViewModels;
|
|||||||
|
|
||||||
public class RaidButtonViewModel : ViewModelBase
|
public class RaidButtonViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private MainWindowViewModel? _mainVm;
|
|
||||||
private TwitchChannel? _channel;
|
private TwitchChannel? _channel;
|
||||||
private SolidColorBrush _viewerCountColor = new SolidColorBrush(Color.FromRgb(byte.MaxValue, byte.MaxValue, byte.MaxValue));
|
private SolidColorBrush _viewerCountColor = new SolidColorBrush(Color.FromRgb(byte.MaxValue, byte.MaxValue, byte.MaxValue));
|
||||||
|
|
||||||
public bool ShowInGrid
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
} = true;
|
|
||||||
|
|
||||||
public required string ChannelName
|
public required string ChannelName
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
@ -36,11 +29,7 @@ public class RaidButtonViewModel : ViewModelBase
|
|||||||
set => SetProperty(ref _viewerCountColor, value);
|
set => SetProperty(ref _viewerCountColor, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MainWindowViewModel? MainVm
|
public MainWindowViewModel? MainVm { get; set; }
|
||||||
{
|
|
||||||
get => _mainVm;
|
|
||||||
set => SetProperty(ref _mainVm, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> GetOrUpdateChannelAsync()
|
public async Task<bool> GetOrUpdateChannelAsync()
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
Spacing="5">
|
Spacing="5">
|
||||||
|
|
||||||
<CheckBox Content="Only Online"
|
<CheckBox Content="Only Online"
|
||||||
IsChecked="{Binding OnlyOnline, Mode=TwoWay}" />
|
IsChecked="{Binding Database.OnlyOnline, Mode=TwoWay}" />
|
||||||
|
|
||||||
<TextBox Grid.Column="1"
|
<TextBox Grid.Column="1"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
|
@ -31,9 +31,11 @@ public partial class MainWindow : Window
|
|||||||
|
|
||||||
private void OnDatabaseChanged(object? sender, PropertyChangedEventArgs e)
|
private void OnDatabaseChanged(object? sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
InitializeRaidChannels();
|
if (e.PropertyName == nameof(BetterRaidDatabase.OnlyOnline))
|
||||||
|
{
|
||||||
GenerateRaidGrid();
|
GenerateRaidGrid();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDataContextChanged(object? sender, EventArgs e)
|
private void OnDataContextChanged(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@ -42,7 +44,6 @@ public partial class MainWindow : Window
|
|||||||
vm.Database = BetterRaidDatabase.LoadFromFile("db.json");
|
vm.Database = BetterRaidDatabase.LoadFromFile("db.json");
|
||||||
vm.Database.AutoSave = true;
|
vm.Database.AutoSave = true;
|
||||||
vm.Database.PropertyChanged += OnDatabaseChanged;
|
vm.Database.PropertyChanged += OnDatabaseChanged;
|
||||||
vm.OnlyOnline = vm.Database.OnlyOnline;
|
|
||||||
|
|
||||||
vm.PropertyChanged += OnViewModelChanged;
|
vm.PropertyChanged += OnViewModelChanged;
|
||||||
|
|
||||||
@ -55,48 +56,6 @@ public partial class MainWindow : Window
|
|||||||
{
|
{
|
||||||
if (e.PropertyName == nameof(MainWindowViewModel.Filter))
|
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();
|
GenerateRaidGrid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,11 +74,25 @@ public partial class MainWindow : Window
|
|||||||
if (string.IsNullOrEmpty(channel))
|
if (string.IsNullOrEmpty(channel))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
_raidButtonVMs.Add(new RaidButtonViewModel
|
var rbvm = new RaidButtonViewModel
|
||||||
{
|
{
|
||||||
ChannelName = channel,
|
ChannelName = channel,
|
||||||
MainVm = vm
|
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();
|
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);
|
var rows = (int)Math.Ceiling((visibleChannels.Count + 1) / 3.0);
|
||||||
|
|
||||||
for (var i = 0; i < rows; i++)
|
for (var i = 0; i < rows; i++)
|
||||||
@ -164,9 +161,9 @@ public partial class MainWindow : Window
|
|||||||
rowIndex++;
|
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);
|
dialog.ShowDialog(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAllTiles(object? sender, DoWorkEventArgs e)
|
public void UpdateChannelData()
|
||||||
{
|
{
|
||||||
while (e.Cancel == false)
|
foreach (var vm in _raidButtonVMs)
|
||||||
{
|
|
||||||
Task.Delay(App.AutoUpdateDelay).Wait();
|
|
||||||
|
|
||||||
if (raidGrid == null || raidGrid.Children.Count == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var children in raidGrid.Children)
|
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.InvokeAsync(async () =>
|
Dispatcher.UIThread.InvokeAsync(async () =>
|
||||||
{
|
|
||||||
if (children.DataContext is RaidButtonViewModel vm)
|
|
||||||
{
|
{
|
||||||
await vm.GetOrUpdateChannelAsync();
|
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