153 lines
4.2 KiB
C#
153 lines
4.2 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Threading;
|
|
using BetterRaid.ViewModels;
|
|
|
|
namespace BetterRaid.Views;
|
|
|
|
public partial class MainWindow : Window
|
|
{
|
|
private BackgroundWorker _autoUpdater;
|
|
|
|
private string[] _channelNames = [
|
|
"Cedricun", // Ehrenbruder
|
|
"ZanTal", // Ehrenschwester
|
|
"PropzMaster",
|
|
"Artimus83",
|
|
"HyperonsLive",
|
|
"theshroomlife",
|
|
"Robocraft999",
|
|
"sllikson",
|
|
"Aron_dc",
|
|
"AIEsports"
|
|
];
|
|
|
|
public MainWindow()
|
|
{
|
|
_autoUpdater = new BackgroundWorker();
|
|
|
|
InitializeComponent();
|
|
GenerateRaidGrid();
|
|
|
|
DataContextChanged += OnDataContextChanged;
|
|
}
|
|
|
|
private void OnDataContextChanged(object? sender, EventArgs e)
|
|
{
|
|
if (DataContext is MainWindowViewModel vm)
|
|
{
|
|
vm.PropertyChanged += OnViewModelChanged;
|
|
}
|
|
}
|
|
|
|
private void OnViewModelChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
if (e.PropertyName == nameof(MainWindowViewModel.Filter))
|
|
{
|
|
if (DataContext is MainWindowViewModel mainWindowVm)
|
|
{
|
|
if (string.IsNullOrEmpty(mainWindowVm.Filter))
|
|
{
|
|
foreach (var child in raidGrid.Children)
|
|
{
|
|
child.IsVisible = true;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
foreach (var child in raidGrid.Children)
|
|
{
|
|
if (child.DataContext is RaidButtonViewModel vm)
|
|
{
|
|
if (string.IsNullOrEmpty(vm.Channel?.DisplayName))
|
|
continue;
|
|
|
|
if (string.IsNullOrEmpty(mainWindowVm.Filter))
|
|
continue;
|
|
|
|
if (vm.Channel.DisplayName.Contains(mainWindowVm.Filter, StringComparison.OrdinalIgnoreCase) == false)
|
|
{
|
|
child.IsVisible = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void GenerateRaidGrid()
|
|
{
|
|
var rows = (int)Math.Ceiling(_channelNames.Length / 3.0);
|
|
|
|
for (var i = 0; i < rows; i++)
|
|
{
|
|
raidGrid.RowDefinitions.Add(new RowDefinition(GridLength.Parse("*")));
|
|
}
|
|
|
|
var colIndex = 0;
|
|
var rowIndex = 0;
|
|
foreach (var channel in _channelNames)
|
|
{
|
|
if (string.IsNullOrEmpty(channel))
|
|
continue;
|
|
|
|
var btn = new RaidButton
|
|
{
|
|
DataContext = new RaidButtonViewModel
|
|
{
|
|
ChannelName = channel
|
|
}
|
|
};
|
|
|
|
Grid.SetColumn(btn, colIndex);
|
|
Grid.SetRow(btn, rowIndex);
|
|
|
|
raidGrid.Children.Add(btn);
|
|
|
|
colIndex++;
|
|
if (colIndex % 3 == 0)
|
|
{
|
|
colIndex = 0;
|
|
rowIndex++;
|
|
}
|
|
|
|
if (btn.DataContext is RaidButtonViewModel vm)
|
|
{
|
|
Dispatcher.UIThread.InvokeAsync(vm.GetOrUpdateChannelAsync);
|
|
}
|
|
}
|
|
|
|
_autoUpdater.DoWork += UpdateAllTiles;
|
|
_autoUpdater.RunWorkerAsync();
|
|
}
|
|
|
|
public 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();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
Console.WriteLine("Data Update");
|
|
}
|
|
}
|
|
} |