using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Threading; using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.Utilities; using Ryujinx.Ui.Common.Helper; using System.Net.Http; using System.Net.NetworkInformation; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows { public partial class AboutWindow : StyleableWindow { public AboutWindow() { if (Program.PreviewerDetached) { Title = $"Ryujinx {Program.Version} - " + LocaleManager.Instance[LocaleKeys.MenuBarHelpAbout]; } Version = Program.Version; DataContext = this; InitializeComponent(); _ = DownloadPatronsJson(); } public string Supporters { get; set; } public string Version { get; set; } public string Developers => string.Format(LocaleManager.Instance[LocaleKeys.AboutPageDeveloperListMore], "gdkchan, Ac_K, Thog, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, Xpl0itR, GoffyDude, »jD«"); private void Button_OnClick(object sender, RoutedEventArgs e) { if (sender is Button button) { OpenHelper.OpenUrl(button.Tag.ToString()); } } private async Task DownloadPatronsJson() { if (!NetworkInterface.GetIsNetworkAvailable()) { Supporters = LocaleManager.Instance[LocaleKeys.ConnectionError]; return; } HttpClient httpClient = new(); try { string patreonJsonString = await httpClient.GetStringAsync("https://patreon.ryujinx.org/"); Supporters = string.Join(", ", JsonHelper.Deserialize(patreonJsonString)); } catch { Supporters = LocaleManager.Instance[LocaleKeys.ApiError]; } await Dispatcher.UIThread.InvokeAsync(() => SupportersTextBlock.Text = Supporters); } private void AmiiboLabel_OnPointerPressed(object sender, PointerPressedEventArgs e) { if (sender is TextBlock) { OpenHelper.OpenUrl("https://amiiboapi.com"); } } } }