mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 01:51:29 -07:00
Show one-off supporters on supporters info page
This commit is contained in:
parent
d8f1e27585
commit
0acf1ee24b
@ -14,7 +14,7 @@ namespace Bloxstrap.Extensions
|
|||||||
catch (UnauthorizedAccessException)
|
catch (UnauthorizedAccessException)
|
||||||
{
|
{
|
||||||
Frontend.ShowMessageBox(Strings.Dialog_RegistryWriteError, System.Windows.MessageBoxImage.Error);
|
Frontend.ShowMessageBox(Strings.Dialog_RegistryWriteError, System.Windows.MessageBoxImage.Error);
|
||||||
App.Terminate();
|
App.Terminate(ErrorCode.ERROR_INSTALL_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
{
|
{
|
||||||
public class SupporterData
|
public class SupporterData
|
||||||
{
|
{
|
||||||
[JsonPropertyName("columns")]
|
[JsonPropertyName("monthly")]
|
||||||
public int Columns { get; set; }
|
public SupporterGroup Monthly { get; set; } = new();
|
||||||
|
|
||||||
[JsonPropertyName("supporters")]
|
[JsonPropertyName("oneoff")]
|
||||||
public List<Supporter> Supporters { get; set; } = null!;
|
public SupporterGroup OneOff { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
Bloxstrap/Models/APIs/Config/SupporterGroup.cs
Normal file
11
Bloxstrap/Models/APIs/Config/SupporterGroup.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
namespace Bloxstrap.Models.APIs.Config
|
||||||
|
{
|
||||||
|
public class SupporterGroup
|
||||||
|
{
|
||||||
|
[JsonPropertyName("columns")]
|
||||||
|
public int Columns { get; set; } = 0;
|
||||||
|
|
||||||
|
[JsonPropertyName("supporters")]
|
||||||
|
public List<Supporter> Supporters { get; set; } = Enumerable.Empty<Supporter>().ToList();
|
||||||
|
}
|
||||||
|
}
|
18
Bloxstrap/Resources/Strings.Designer.cs
generated
18
Bloxstrap/Resources/Strings.Designer.cs
generated
@ -78,6 +78,24 @@ namespace Bloxstrap.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Monthly.
|
||||||
|
/// </summary>
|
||||||
|
public static string About_Supporters_Monthly {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("About.Supporters.Monthly", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to One-off.
|
||||||
|
/// </summary>
|
||||||
|
public static string About_Supporters_OneOff {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("About.Supporters.OneOff", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Supporters.
|
/// Looks up a localized string similar to Supporters.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1207,4 +1207,10 @@ Please manually delete Bloxstrap.exe from the install location or try restarting
|
|||||||
<data name="Dialog.RegistryWriteError" xml:space="preserve">
|
<data name="Dialog.RegistryWriteError" xml:space="preserve">
|
||||||
<value>Bloxstrap is unable to write to the Windows Registry. An antivirus is likely interfering and causing issues. Please check to make sure there isn't anything that would restrict Bloxstrap's operation.</value>
|
<value>Bloxstrap is unable to write to the Windows Registry. An antivirus is likely interfering and causing issues. Please check to make sure there isn't anything that would restrict Bloxstrap's operation.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="About.Supporters.Monthly" xml:space="preserve">
|
||||||
|
<value>Monthly</value>
|
||||||
|
</data>
|
||||||
|
<data name="About.Supporters.OneOff" xml:space="preserve">
|
||||||
|
<value>One-off</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@ -37,6 +37,7 @@
|
|||||||
<ui:NavigationStore x:Name="RootNavigation" Grid.Row="1" Grid.Column="0" Margin="0,0,12,0" Frame="{Binding ElementName=RootFrame}" SelectedPageIndex="0">
|
<ui:NavigationStore x:Name="RootNavigation" Grid.Row="1" Grid.Column="0" Margin="0,0,12,0" Frame="{Binding ElementName=RootFrame}" SelectedPageIndex="0">
|
||||||
<ui:NavigationStore.Items>
|
<ui:NavigationStore.Items>
|
||||||
<ui:NavigationItem Content="{x:Static resources:Strings.Menu_About_Title}" PageType="{x:Type pages:AboutPage}" Icon="QuestionCircle48" Tag="about" Margin="0,0,0,12" />
|
<ui:NavigationItem Content="{x:Static resources:Strings.Menu_About_Title}" PageType="{x:Type pages:AboutPage}" Icon="QuestionCircle48" Tag="about" Margin="0,0,0,12" />
|
||||||
|
<ui:NavigationItem Content="{x:Static resources:Strings.About_Supporters_Title}" PageType="{x:Type pages:SupportersPage}" Icon="Heart24" Tag="translators" Margin="0,0,0,12" />
|
||||||
<ui:NavigationItem Content="{x:Static resources:Strings.About_Translators_Title}" PageType="{x:Type pages:TranslatorsPage}" Icon="Translate24" Tag="translators" Margin="0,0,0,12" />
|
<ui:NavigationItem Content="{x:Static resources:Strings.About_Translators_Title}" PageType="{x:Type pages:TranslatorsPage}" Icon="Translate24" Tag="translators" Margin="0,0,0,12" />
|
||||||
<ui:NavigationItem Content="{x:Static resources:Strings.About_Licenses_Title}" PageType="{x:Type pages:LicensesPage}" Icon="Code24" Tag="licenses" Margin="0,0,0,12" />
|
<ui:NavigationItem Content="{x:Static resources:Strings.About_Licenses_Title}" PageType="{x:Type pages:LicensesPage}" Icon="Code24" Tag="licenses" Margin="0,0,0,12" />
|
||||||
</ui:NavigationStore.Items>
|
</ui:NavigationStore.Items>
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:enums="clr-namespace:Bloxstrap.Enums"
|
|
||||||
xmlns:models="clr-namespace:Bloxstrap.UI.ViewModels"
|
xmlns:models="clr-namespace:Bloxstrap.UI.ViewModels"
|
||||||
xmlns:dmodels="clr-namespace:Bloxstrap.UI.ViewModels.About"
|
xmlns:dmodels="clr-namespace:Bloxstrap.UI.ViewModels.About"
|
||||||
xmlns:controls="clr-namespace:Bloxstrap.UI.Elements.Controls"
|
xmlns:controls="clr-namespace:Bloxstrap.UI.Elements.Controls"
|
||||||
@ -81,85 +80,6 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<TextBlock Text="{x:Static resources:Strings.About_Supporters_Title}" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
|
||||||
<controls:MarkdownTextBlock MarkdownText="{Binding Source={x:Static resources:Strings.About_Supporters_Description}, Converter={StaticResource StringFormatConverter}, ConverterParameter='https://ko-fi.com/boxerpizza'}" TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
|
||||||
<Grid Margin="0,8,0,0">
|
|
||||||
<Grid.Style>
|
|
||||||
<Style TargetType="Grid">
|
|
||||||
<Style.Triggers>
|
|
||||||
<DataTrigger Binding="{Binding SupportersLoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Unknown}">
|
|
||||||
<Setter Property="Visibility" Value="Visible" />
|
|
||||||
</DataTrigger>
|
|
||||||
</Style.Triggers>
|
|
||||||
<Setter Property="Visibility" Value="Collapsed" />
|
|
||||||
</Style>
|
|
||||||
</Grid.Style>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="*" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<ui:ProgressRing Grid.Column="0" IsIndeterminate="True" />
|
|
||||||
<TextBlock Grid.Column="1" Margin="16,0,0,0" Text="{x:Static resources:Strings.Common_Loading}" VerticalAlignment="Center" />
|
|
||||||
</Grid>
|
|
||||||
<Grid Margin="0,8,0,0">
|
|
||||||
<Grid.Style>
|
|
||||||
<Style TargetType="Grid">
|
|
||||||
<Style.Triggers>
|
|
||||||
<DataTrigger Binding="{Binding SupportersLoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Failed}">
|
|
||||||
<Setter Property="Visibility" Value="Visible" />
|
|
||||||
</DataTrigger>
|
|
||||||
</Style.Triggers>
|
|
||||||
<Setter Property="Visibility" Value="Collapsed" />
|
|
||||||
</Style>
|
|
||||||
</Grid.Style>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="*" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Image Source="pack://application:,,,/Resources/MessageBox/Error.png" Width="60" Height="60" RenderOptions.BitmapScalingMode="HighQuality" />
|
|
||||||
<StackPanel Grid.Column="1" Margin="16,0,0,0" VerticalAlignment="Center">
|
|
||||||
<TextBlock Text="{x:Static resources:Strings.Common_NetworkError}" />
|
|
||||||
<TextBlock Text="{Binding SupportersLoadError, Mode=OneWay}" />
|
|
||||||
</StackPanel>
|
|
||||||
</Grid>
|
|
||||||
<ListView ItemsSource="{Binding Supporters, Mode=OneWay}" Margin="0,8,0,0" ScrollViewer.CanContentScroll="False" IsEnabled="False">
|
|
||||||
<ListView.Style>
|
|
||||||
<Style TargetType="ListView" BasedOn="{StaticResource {x:Type ListView}}">
|
|
||||||
<Style.Triggers>
|
|
||||||
<DataTrigger Binding="{Binding SupportersLoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Successful}">
|
|
||||||
<Setter Property="Visibility" Value="Visible" />
|
|
||||||
</DataTrigger>
|
|
||||||
</Style.Triggers>
|
|
||||||
<Setter Property="Visibility" Value="Collapsed" />
|
|
||||||
</Style>
|
|
||||||
</ListView.Style>
|
|
||||||
<ListView.ItemTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<ui:Card Padding="8">
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<Ellipse Grid.Column="0" Height="32" Width="32" VerticalAlignment="Center">
|
|
||||||
<Ellipse.Fill>
|
|
||||||
<ImageBrush ImageSource="{Binding Image, IsAsync=True}" />
|
|
||||||
</Ellipse.Fill>
|
|
||||||
</Ellipse>
|
|
||||||
|
|
||||||
<TextBlock Grid.Column="1" Margin="8,0,2,0" VerticalAlignment="Center" Text="{Binding Name}" />
|
|
||||||
</Grid>
|
|
||||||
</ui:Card>
|
|
||||||
</DataTemplate>
|
|
||||||
</ListView.ItemTemplate>
|
|
||||||
<ListView.ItemsPanel>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<UniformGrid Columns="{Binding SupporterColumns}" Margin="-4" />
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</ListView.ItemsPanel>
|
|
||||||
</ListView>
|
|
||||||
|
|
||||||
<TextBlock Text="{x:Static resources:Strings.Menu_About_Contributors}" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
<TextBlock Text="{x:Static resources:Strings.Menu_About_Contributors}" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
||||||
<TextBlock Text="{x:Static resources:Strings.Menu_About_Contributors_Description}" TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Text="{x:Static resources:Strings.Menu_About_Contributors_Description}" TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
<Grid Margin="0,8,0,0">
|
<Grid Margin="0,8,0,0">
|
||||||
|
131
Bloxstrap/UI/Elements/About/Pages/SupportersPage.xaml
Normal file
131
Bloxstrap/UI/Elements/About/Pages/SupportersPage.xaml
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<ui:UiPage x:Class="Bloxstrap.UI.Elements.About.Pages.SupportersPage"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:models="clr-namespace:Bloxstrap.UI.ViewModels"
|
||||||
|
xmlns:controls="clr-namespace:Bloxstrap.UI.Elements.Controls"
|
||||||
|
xmlns:enums="clr-namespace:Bloxstrap.Enums"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
|
xmlns:resources="clr-namespace:Bloxstrap.Resources"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="1500" d:DesignWidth="800"
|
||||||
|
Title="AboutPage"
|
||||||
|
Scrollable="True">
|
||||||
|
<StackPanel Margin="0,0,14,14">
|
||||||
|
<TextBlock Text="{x:Static resources:Strings.About_Supporters_Title}" FontWeight="Medium" FontSize="24" />
|
||||||
|
<controls:MarkdownTextBlock MarkdownText="{Binding Source={x:Static resources:Strings.About_Supporters_Description}, Converter={StaticResource StringFormatConverter}, ConverterParameter='https://ko-fi.com/boxerpizza'}" TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
|
|
||||||
|
<Grid Margin="0,8,0,0">
|
||||||
|
<Grid.Style>
|
||||||
|
<Style TargetType="Grid">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding LoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Unknown}">
|
||||||
|
<Setter Property="Visibility" Value="Visible" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" />
|
||||||
|
</Style>
|
||||||
|
</Grid.Style>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ui:ProgressRing Grid.Column="0" IsIndeterminate="True" />
|
||||||
|
<TextBlock Grid.Column="1" Margin="16,0,0,0" Text="{x:Static resources:Strings.Common_Loading}" VerticalAlignment="Center" />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Grid Margin="0,8,0,0">
|
||||||
|
<Grid.Style>
|
||||||
|
<Style TargetType="Grid">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding LoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Failed}">
|
||||||
|
<Setter Property="Visibility" Value="Visible" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" />
|
||||||
|
</Style>
|
||||||
|
</Grid.Style>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Image Source="pack://application:,,,/Resources/MessageBox/Error.png" Width="60" Height="60" RenderOptions.BitmapScalingMode="HighQuality" />
|
||||||
|
<StackPanel Grid.Column="1" Margin="16,0,0,0" VerticalAlignment="Center">
|
||||||
|
<TextBlock Text="{x:Static resources:Strings.Common_NetworkError}" />
|
||||||
|
<TextBlock Text="{Binding LoadError, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<StackPanel>
|
||||||
|
<StackPanel.Style>
|
||||||
|
<Style TargetType="StackPanel">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding LoadedState, Mode=OneWay}" Value="{x:Static enums:GenericTriState.Successful}">
|
||||||
|
<Setter Property="Visibility" Value="Visible" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
<Setter Property="Visibility" Value="Collapsed" />
|
||||||
|
</Style>
|
||||||
|
</StackPanel.Style>
|
||||||
|
|
||||||
|
<TextBlock Text="{x:Static resources:Strings.About_Supporters_Monthly}" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
||||||
|
<ListView ItemsSource="{Binding SupporterData.Monthly.Supporters, Mode=OneWay}" Margin="0,8,0,0" ScrollViewer.CanContentScroll="False" IsEnabled="False">
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ui:Card Padding="8">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<Ellipse Grid.Column="0" Height="32" Width="32" VerticalAlignment="Center">
|
||||||
|
<Ellipse.Fill>
|
||||||
|
<ImageBrush ImageSource="{Binding Image, IsAsync=True}" />
|
||||||
|
</Ellipse.Fill>
|
||||||
|
</Ellipse>
|
||||||
|
|
||||||
|
<TextBlock Grid.Column="1" Margin="8,0,2,0" VerticalAlignment="Center" Text="{Binding Name}" />
|
||||||
|
</Grid>
|
||||||
|
</ui:Card>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
<ListView.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<UniformGrid Columns="{Binding SupporterData.Monthly.Columns}" Margin="-4" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ListView.ItemsPanel>
|
||||||
|
</ListView>
|
||||||
|
|
||||||
|
<TextBlock Text="{x:Static resources:Strings.About_Supporters_OneOff}" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
||||||
|
<ListView ItemsSource="{Binding SupporterData.OneOff.Supporters, Mode=OneWay}" Margin="0,8,0,0" ScrollViewer.CanContentScroll="False" IsEnabled="False">
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ui:Card Padding="8">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<Ellipse Grid.Column="0" Height="32" Width="32" VerticalAlignment="Center">
|
||||||
|
<Ellipse.Fill>
|
||||||
|
<ImageBrush ImageSource="{Binding Image, IsAsync=True}" />
|
||||||
|
</Ellipse.Fill>
|
||||||
|
</Ellipse>
|
||||||
|
|
||||||
|
<TextBlock Grid.Column="1" Margin="8,0,2,0" VerticalAlignment="Center" Text="{Binding Name}" />
|
||||||
|
</Grid>
|
||||||
|
</ui:Card>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
<ListView.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<UniformGrid Columns="{Binding SupporterData.OneOff.Columns}" Margin="-4" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ListView.ItemsPanel>
|
||||||
|
</ListView>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</ui:UiPage>
|
16
Bloxstrap/UI/Elements/About/Pages/SupportersPage.xaml.cs
Normal file
16
Bloxstrap/UI/Elements/About/Pages/SupportersPage.xaml.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using Bloxstrap.UI.ViewModels.About;
|
||||||
|
|
||||||
|
namespace Bloxstrap.UI.Elements.About.Pages
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for SupportersPage.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class SupportersPage
|
||||||
|
{
|
||||||
|
public SupportersPage()
|
||||||
|
{
|
||||||
|
DataContext = new SupportersViewModel();
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,8 +4,6 @@ namespace Bloxstrap.UI.ViewModels.About
|
|||||||
{
|
{
|
||||||
public class AboutViewModel : NotifyPropertyChangedViewModel
|
public class AboutViewModel : NotifyPropertyChangedViewModel
|
||||||
{
|
{
|
||||||
private SupporterData? _supporterData;
|
|
||||||
|
|
||||||
public string Version => string.Format(Strings.Menu_About_Version, App.Version);
|
public string Version => string.Format(Strings.Menu_About_Version, App.Version);
|
||||||
|
|
||||||
public BuildMetadataAttribute BuildMetadata => App.BuildMetadata;
|
public BuildMetadataAttribute BuildMetadata => App.BuildMetadata;
|
||||||
@ -15,49 +13,5 @@ namespace Bloxstrap.UI.ViewModels.About
|
|||||||
|
|
||||||
public Visibility BuildInformationVisibility => App.IsProductionBuild ? Visibility.Collapsed : Visibility.Visible;
|
public Visibility BuildInformationVisibility => App.IsProductionBuild ? Visibility.Collapsed : Visibility.Visible;
|
||||||
public Visibility BuildCommitVisibility => App.IsActionBuild ? Visibility.Visible : Visibility.Collapsed;
|
public Visibility BuildCommitVisibility => App.IsActionBuild ? Visibility.Visible : Visibility.Collapsed;
|
||||||
|
|
||||||
public List<Supporter> Supporters => _supporterData?.Supporters ?? Enumerable.Empty<Supporter>().ToList();
|
|
||||||
|
|
||||||
public int SupporterColumns => _supporterData?.Columns ?? 0;
|
|
||||||
|
|
||||||
public GenericTriState SupportersLoadedState { get; set; } = GenericTriState.Unknown;
|
|
||||||
|
|
||||||
public string SupportersLoadError { get; set; } = "";
|
|
||||||
|
|
||||||
public AboutViewModel()
|
|
||||||
{
|
|
||||||
// this will cause momentary freezes only when ran under the debugger
|
|
||||||
LoadSupporterData();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void LoadSupporterData()
|
|
||||||
{
|
|
||||||
const string LOG_IDENT = "AboutViewModel::LoadSupporterData";
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_supporterData = await Http.GetJson<SupporterData>("https://raw.githubusercontent.com/bloxstraplabs/config/main/supporters.json");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Could not load supporter data");
|
|
||||||
App.Logger.WriteException(LOG_IDENT, ex);
|
|
||||||
|
|
||||||
SupportersLoadedState = GenericTriState.Failed;
|
|
||||||
SupportersLoadError = ex.Message;
|
|
||||||
|
|
||||||
OnPropertyChanged(nameof(SupportersLoadError));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_supporterData is not null)
|
|
||||||
{
|
|
||||||
SupportersLoadedState = GenericTriState.Successful;
|
|
||||||
|
|
||||||
OnPropertyChanged(nameof(Supporters));
|
|
||||||
OnPropertyChanged(nameof(SupporterColumns));
|
|
||||||
}
|
|
||||||
|
|
||||||
OnPropertyChanged(nameof(SupportersLoadedState));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
46
Bloxstrap/UI/ViewModels/About/SupportersViewModel.cs
Normal file
46
Bloxstrap/UI/ViewModels/About/SupportersViewModel.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
namespace Bloxstrap.UI.ViewModels.About
|
||||||
|
{
|
||||||
|
public class SupportersViewModel : NotifyPropertyChangedViewModel
|
||||||
|
{
|
||||||
|
public SupporterData? SupporterData { get; private set; }
|
||||||
|
|
||||||
|
public GenericTriState LoadedState { get; set; } = GenericTriState.Unknown;
|
||||||
|
|
||||||
|
public string LoadError { get; set; } = "";
|
||||||
|
|
||||||
|
public SupportersViewModel()
|
||||||
|
{
|
||||||
|
// this will cause momentary freezes only when ran under the debugger
|
||||||
|
LoadSupporterData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void LoadSupporterData()
|
||||||
|
{
|
||||||
|
const string LOG_IDENT = "AboutViewModel::LoadSupporterData";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SupporterData = await Http.GetJson<SupporterData>("https://raw.githubusercontent.com/bloxstraplabs/config/main/supporters.json");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
App.Logger.WriteLine(LOG_IDENT, "Could not load supporter data");
|
||||||
|
App.Logger.WriteException(LOG_IDENT, ex);
|
||||||
|
|
||||||
|
LoadedState = GenericTriState.Failed;
|
||||||
|
LoadError = ex.Message;
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(LoadError));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SupporterData is not null)
|
||||||
|
{
|
||||||
|
LoadedState = GenericTriState.Successful;
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(SupporterData));
|
||||||
|
}
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(LoadedState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user