Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 42 additions & 12 deletions OneGateApp/Pages/GamingPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,25 +32,55 @@
<RefreshView Margin="20,0" IsRefreshing="{Binding LoadingService.IsReloading}" Command="{Binding LoadingService}">
<CollectionView ItemsSource="{Binding GamesFiltered}" MinimumHeightRequest="20">
<CollectionView.Header>
<VerticalStackLayout Spacing="20">
<VerticalStackLayout Spacing="16">
<Border StrokeShape="RoundRectangle 10" StrokeThickness="0" HeightRequest="132">
<Image Source="gaming_banner.webp" Aspect="AspectFill" />
</Border>
<VerticalStackLayout Spacing="8" IsVisible="{Binding HasRecentGames}">
<Label Text="{x:Static og:Strings.GamingRecentPlayed}" FontAttributes="Bold" />
<CollectionView ItemsSource="{Binding GamesRecent}" HeightRequest="104">
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal" ItemSpacing="8" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="og:DApp">
<Border StyleClass="Card" WidthRequest="96" HeightRequest="96" Padding="8,10">
<Grid RowDefinitions="48,*" RowSpacing="4">
<Image WidthRequest="44" HeightRequest="44" Aspect="AspectFit" HorizontalOptions="Center" VerticalOptions="Center">
<Image.Source>
<UriImageSource Uri="{Binding IconUrl}" CacheValidity="30:00:00:00" />
</Image.Source>
</Image>
<Label Grid.Row="1" Text="{Binding Name, Converter={StaticResource LocalizerConverter}}" FontAttributes="Bold" FontSize="12" MaxLines="1" LineBreakMode="TailTruncation" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
</Grid>
<Border.GestureRecognizers>
<TapGestureRecognizer Command="{x:Static og:Commands.LaunchDApp}" CommandParameter="{Binding .}" />
</Border.GestureRecognizers>
</Border>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</VerticalStackLayout>
<og:TabBar x:Name="gameTypeTabBar" Tabs="{Binding GameTypes}" IsVisible="{Binding HasGameTypeFilters}" Spacing="18" Margin="0,10" SelectedTabChanged="OnGameTypeChanged" />
</VerticalStackLayout>
</CollectionView.Header>
<CollectionView.EmptyView>
<Grid RowDefinitions="120">
<Label IsVisible="{Binding LoadingService.IsLoading}" HorizontalOptions="Center" VerticalOptions="Center">
<Label.FormattedText>
<FormattedString>
<Span Text="{x:Static og:Strings.Loading}" />
<Span Text="…" />
</FormattedString>
</Label.FormattedText>
</Label>
<Label Text="{x:Static og:Strings.DefaultEmptyViewMessage}" IsVisible="{Binding LoadingService.IsLoading, Converter={StaticResource InvertedBoolConverter}}" HorizontalOptions="Center" VerticalOptions="Center" />
</Grid>
<Border StyleClass="Card" HeightRequest="120">
<Grid>
<Label IsVisible="{Binding LoadingService.IsLoading}" HorizontalOptions="Center" VerticalOptions="Center">
<Label.FormattedText>
<FormattedString>
<Span Text="{x:Static og:Strings.Loading}" />
<Span Text="…" />
</FormattedString>
</Label.FormattedText>
</Label>
<VerticalStackLayout Spacing="4" IsVisible="{Binding LoadingService.IsLoading, Converter={StaticResource InvertedBoolConverter}}" HorizontalOptions="Center" VerticalOptions="Center">
<Label Text="{x:Static og:Strings.DefaultEmptyViewMessage}" HorizontalTextAlignment="Center" />
<Label StyleClass="Secondary" Text="{x:Static og:Strings.GamingEmptyState}" FontSize="12" HorizontalTextAlignment="Center" />
</VerticalStackLayout>
</Grid>
</Border>
</CollectionView.EmptyView>
<CollectionView.ItemsLayout>
<GridItemsLayout x:Name="GamesItemsLayout" Orientation="Vertical" Span="1" HorizontalItemSpacing="28" />
Expand Down
16 changes: 16 additions & 0 deletions OneGateApp/Pages/GamingPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using NeoOrder.OneGate.Models;
using NeoOrder.OneGate.Properties;
using NeoOrder.OneGate.Services;
using System.Collections.ObjectModel;
using TabBar = NeoOrder.OneGate.Controls.Views.TabBar;

namespace NeoOrder.OneGate.Pages;
Expand All @@ -17,6 +18,9 @@ public partial class GamingPage : ContentPage

public LoadingService LoadingService { get; }
public CachedCollection<DApp> DApps { get; }
public List<int> GamesIdRecent { get; private set; } = [];
public ObservableCollection<DApp> GamesRecent { get; private set { field = value; OnPropertyChanged(); } } = [];
public bool HasRecentGames { get; private set { field = value; OnPropertyChanged(); } }
public DApp[] Games { get; private set { field = value; OnPropertyChanged(); } } = [];
public DApp[] GamesFiltered { get; private set { field = value; OnPropertyChanged(); } } = [];
public string[] GameTypes { get; private set { field = value; OnPropertyChanged(); } } = [Strings.All];
Expand All @@ -41,6 +45,8 @@ protected override void OnAppearing()
base.OnAppearing();
if (this.ShouldRefresh())
LoadingService.BeginLoad();
else
LoadRecentGames();
}

protected override void OnSizeAllocated(double width, double height)
Expand All @@ -52,6 +58,7 @@ protected override void OnSizeAllocated(double width, double height)
async Task LoadSettingsAsync()
{
allowRestrictedContent = await DAppContentPolicy.GetAllowRestrictedContentAsync(dbContext);
GamesIdRecent = await dbContext.Settings.GetAsync<List<int>>("dapps/recent") ?? [];
}

async Task LoadDAppsAsync()
Expand Down Expand Up @@ -89,6 +96,15 @@ void OnDataLoaded(object? sender, EventArgs e)
.ToArray();
HasGameTypeFilters = GameTypes.Length > 2;
ApplyGameTypeFilter(gameTypeTabBar.SelectedTab);
LoadRecentGames();
}

void LoadRecentGames()
{
GamesRecent = new(GamesIdRecent
.Select(id => Games.FirstOrDefault(p => p.Id == id))
.OfType<DApp>());
HasRecentGames = GamesRecent.Count > 0;
}

void ApplyGameTypeFilter(string? selectedGameType)
Expand Down
1 change: 1 addition & 0 deletions OneGateApp/Pages/LaunchDAppPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public async void ApplyQueryAttributes(IDictionary<string, object> query)
recents.RemoveAt(recents.Count - 1);
await dbContext.Settings.PutAsync("dapps/recent", recents);
if (DApp.IsRegularApp) GlobalStates.Invalidate<DAppsPage>();
if (DApp.IsGamingApp) GlobalStates.Invalidate<GamingPage>();
}
}

Expand Down
18 changes: 18 additions & 0 deletions OneGateApp/Properties/Strings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Mit dem Fortfahren bestätigen Sie, dass Sie alle damit verbundenen Risiken voll
<data name="Gaming" xml:space="preserve">
<value>Gaming</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Zum Aktualisieren des Spielekatalogs nach unten ziehen.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Zuletzt gespielt</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Spieltyp</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Es wird empfohlen, den NEP-2-Schlüssel und das Passwort getrennt aufzubewahren
<data name="Unavailable" xml:space="preserve">
<value>Nicht verfügbar</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Al continuar, usted reconoce que comprende plenamente y acepta todos los riesgos
<data name="Gaming" xml:space="preserve">
<value>Juegos</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Desliza hacia abajo para actualizar el catálogo de juegos.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Jugados recientemente</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Tipo de juego</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Se recomienda almacenar la clave NEP-2 y la contraseña por separado y realizar
<data name="Unavailable" xml:space="preserve">
<value>No disponible</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ En continuant, vous reconnaissez comprendre pleinement et accepter tous les risq
<data name="Gaming" xml:space="preserve">
<value>Jeux</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Tirez vers le bas pour actualiser le catalogue de jeux.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Joués récemment</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Type de jeu</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Il est recommandé de conserver séparément la clé NEP-2 et le mot de passe, e
<data name="Unavailable" xml:space="preserve">
<value>Indisponible</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.id.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Dengan melanjutkan, Anda menyatakan bahwa Anda sepenuhnya memahami dan menerima
<data name="Gaming" xml:space="preserve">
<value>Game</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Tarik ke bawah untuk menyegarkan katalog game.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Baru dimainkan</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Jenis game</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Disarankan untuk menyimpan kunci NEP-2 dan kata sandinya secara terpisah serta m
<data name="Unavailable" xml:space="preserve">
<value>Tidak tersedia</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.it.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Continuando, confermi di aver compreso pienamente e accettato tutti i rischi ass
<data name="Gaming" xml:space="preserve">
<value>Giochi</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Trascina verso il basso per aggiornare il catalogo dei giochi.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Giocati di recente</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Tipo di gioco</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Si consiglia di conservare separatamente la chiave NEP-2 e la password e di eseg
<data name="Unavailable" xml:space="preserve">
<value>Non disponibile</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.ja.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@
<data name="Gaming" xml:space="preserve">
<value>ゲーム</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>下に引いてゲームカタログを更新します。</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>最近プレイ</value>
</data>
<data name="GameType" xml:space="preserve">
<value>ゲームタイプ</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ NEP-2 とパスワードは別々に保管し、それぞれを安全にバッ
<data name="Unavailable" xml:space="preserve">
<value>利用不可</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.ko.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@
<data name="Gaming" xml:space="preserve">
<value>게임</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>아래로 당겨 게임 카탈로그를 새로고침하세요.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>최근 플레이</value>
</data>
<data name="GameType" xml:space="preserve">
<value>게임 유형</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ NEP-2와 비밀번호는 별도로 보관하고 각각 안전하게 백업하는
<data name="Unavailable" xml:space="preserve">
<value>사용할 수 없음</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.nl.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Door door te gaan bevestigt u dat u alle bijbehorende risico's volledig begrijpt
<data name="Gaming" xml:space="preserve">
<value>Games</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Trek omlaag om de gamecatalogus te vernieuwen.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Recent gespeeld</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Speltype</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Het wordt aanbevolen om de NEP-2-sleutel en het wachtwoord apart op te slaan en
<data name="Unavailable" xml:space="preserve">
<value>Niet beschikbaar</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.pt-BR.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Ao continuar, você reconhece que compreende totalmente e aceita todos os riscos
<data name="Gaming" xml:space="preserve">
<value>Jogos</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Puxe para baixo para atualizar o catálogo de jogos.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Jogados recentemente</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Tipo de jogo</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ Recomenda-se armazenar a chave NEP-2 e a senha separadamente e fazer backups seg
<data name="Unavailable" xml:space="preserve">
<value>Indisponível</value>
</data>
</root>
</root>
6 changes: 6 additions & 0 deletions OneGateApp/Properties/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,12 @@ By continuing, you acknowledge that you fully understand and accept all associat
<data name="Gaming" xml:space="preserve">
<value>Gaming</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Pull down to refresh the game catalog.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Recently played</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Game type</value>
</data>
Expand Down
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.ru.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@
<data name="Gaming" xml:space="preserve">
<value>Игры</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Потяните вниз, чтобы обновить каталог игр.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Недавно сыгранные</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Тип игры</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@
<data name="Unavailable" xml:space="preserve">
<value>Недоступно</value>
</data>
</root>
</root>
8 changes: 7 additions & 1 deletion OneGateApp/Properties/Strings.tr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,12 @@ Devam ederek, ilgili tüm riskleri tamamen anladığınızı ve kabul ettiğiniz
<data name="Gaming" xml:space="preserve">
<value>Oyun</value>
</data>
<data name="GamingEmptyState" xml:space="preserve">
<value>Oyun kataloğunu yenilemek için aşağı çekin.</value>
</data>
<data name="GamingRecentPlayed" xml:space="preserve">
<value>Son oynananlar</value>
</data>
<data name="GameType" xml:space="preserve">
<value>Oyun türü</value>
</data>
Expand Down Expand Up @@ -992,4 +998,4 @@ NEP-2 anahtarı ile şifreyi ayrı ayrı saklamanız ve güvenli şekilde yedekl
<data name="Unavailable" xml:space="preserve">
<value>Kullanılamıyor</value>
</data>
</root>
</root>
Loading