This repository has been archived on 2024-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
BetterRaid_OLD/Views/MainWindow.axaml.cs

134 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using AsyncImageLoader;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Avalonia.Threading;
using BetterRaid.Models;
using BetterRaid.ViewModels;
using TwitchLib.Client.Events;
namespace BetterRaid.Views;
public partial class MainWindow : Window
{
private string[] _channelNames = [
"Cedricun", // Ehrenbruder
"ZanTal", // Ehrenschwester
"PropzMaster",
"Artimus83",
"HyperonsLive",
"theshroomlife",
"Robocraft999",
"sllikson",
"Aron_dc",
"AIEsports"
];
public MainWindow()
{
InitializeComponent();
PrepareRaidGrid();
ConnectToTwitch();
}
private void PrepareRaidGrid()
{
var rows = (int)Math.Ceiling(_channelNames.Length / 3.0);
for (var i = 0; i < rows; i++)
{
raidGrid.RowDefinitions.Add(new RowDefinition(GridLength.Parse("200")));
}
var colIndex = 0;
var rowIndex = 0;
foreach (var channel in _channelNames)
{
var btn = new Button
{
Content = channel,
DataContext = new TwitchChannel(channel),
Margin = Thickness.Parse("5"),
HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Stretch,
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Stretch,
HorizontalContentAlignment = Avalonia.Layout.HorizontalAlignment.Center,
VerticalContentAlignment = Avalonia.Layout.VerticalAlignment.Center
};
Grid.SetColumn(btn, colIndex);
Grid.SetRow(btn, rowIndex);
raidGrid.Children.Add(btn);
colIndex++;
if (colIndex % 3 == 0)
{
colIndex = 0;
rowIndex++;
}
}
}
private void ConnectToTwitch()
{
if (App.TwitchClient != null && App.TwitchAPI != null)
{
foreach (var c in raidGrid.Children)
{
if (c is Button btn)
{
var channel = (btn.DataContext as TwitchChannel)?.Name;
if (string.IsNullOrEmpty(channel) == false)
{
var channels = App.TwitchAPI.Helix.Search.SearchChannelsAsync(channel).Result;
var exactChannel = channels.Channels.FirstOrDefault(c => c.BroadcasterLogin.ToLower() == channel.ToLower());
Dispatcher.UIThread.Invoke(() =>
{
if (exactChannel != null)
{
if (btn.DataContext is TwitchChannel ctx)
{
ctx.BroadcasterId = exactChannel.Id;
var ib = new ImageBrush();
ImageBrushLoader.SetSource(ib, exactChannel.ThumbnailUrl);
btn.Background = ib;
var streamInfo = App.TwitchAPI.Helix.Streams.GetStreamsAsync(userLogins: new List<string>([channel])).Result;
var exactStreamInfo = streamInfo.Streams.FirstOrDefault(s => s.UserLogin.ToLower() == channel.ToLower());
if (exactStreamInfo != null)
{
if (exactChannel.IsLive)
{
btn.Foreground = new SolidColorBrush(new Color(byte.MaxValue, 0, byte.MaxValue, 0));
btn.Content = $"{exactChannel.DisplayName} ({exactStreamInfo.ViewerCount})";
}
else
{
btn.Foreground = new SolidColorBrush(new Color(byte.MaxValue, byte.MaxValue, 0, 0));
btn.Content = $"{exactChannel.DisplayName} (Offline)";
}
ctx.ViewerCount = exactStreamInfo.ViewerCount;
}
else
{
btn.Foreground = new SolidColorBrush(new Color(byte.MaxValue, byte.MaxValue, 0, 0));
btn.Content = $"{exactChannel.DisplayName} (Offline)";
}
}
}
});
}
}
}
}
}
}