diff --git a/OneGateApp/Data/DApp.cs b/OneGateApp/Data/DApp.cs index c49af82..07b1d9f 100644 --- a/OneGateApp/Data/DApp.cs +++ b/OneGateApp/Data/DApp.cs @@ -9,6 +9,10 @@ namespace NeoOrder.OneGate.Data; public class DApp : IComparable, IShareable, IVersioned { + const int OneGateVaultDAppId = 23; + const string OneGateVaultHost = "neomini.app"; + const string OneGateVaultPath = "/miniapps/miniapp-gas-lucky-pool"; + [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; } public bool IsActive { get; set; } @@ -31,6 +35,8 @@ public class DApp : IComparable, IShareable, IVersioned public bool IsGamingApp => !string.IsNullOrWhiteSpace(GameType); public bool IsRegularApp => !IsGamingApp; + public bool IsOneGateVault => Id == OneGateVaultDAppId || IsOneGateVaultUrl(Url); + public string OneGateVaultStatusText => IsActive ? Strings.OneGateVaultStatusActive : Strings.OneGateVaultStatusUnavailable; public string? GameTypeDisplayName => LocalizeGameType(GameType); public Dictionary NameLocalizer => field ??= JsonSerializer.Deserialize>(Name)!; public Dictionary? DescriptionLocalizer => Description is null ? null : field ??= JsonSerializer.Deserialize>(Description); @@ -53,4 +59,12 @@ public static string LocalizeTag(string tag) if (string.IsNullOrWhiteSpace(gameType)) return null; return Strings.ResourceManager.GetString($"GameType{gameType}") ?? gameType; } + + static bool IsOneGateVaultUrl(string url) + { + if (!Uri.TryCreate(url, UriKind.Absolute, out Uri? uri)) return false; + return uri.Scheme == Uri.UriSchemeHttps + && string.Equals(uri.Host, OneGateVaultHost, StringComparison.OrdinalIgnoreCase) + && string.Equals(uri.AbsolutePath.TrimEnd('/'), OneGateVaultPath, StringComparison.OrdinalIgnoreCase); + } } diff --git a/OneGateApp/Pages/DAppDetailsPage.xaml b/OneGateApp/Pages/DAppDetailsPage.xaml index d886ae4..20e8bee 100644 --- a/OneGateApp/Pages/DAppDetailsPage.xaml +++ b/OneGateApp/Pages/DAppDetailsPage.xaml @@ -43,6 +43,35 @@