feat(ui): route locked tiers through About

Keep non-owner resolution choices visible but muted. Selecting one preserves the free tier and opens About; external navigation is only the explicit llamacasty.com link. Ref: https://streamlabs.com/desktop
This commit is contained in:
2026-11-02 09:41:38 -08:00
parent ff5e8d94ae
commit 6208cb9409
16 changed files with 149 additions and 84 deletions
+9 -3
View File
@@ -25,12 +25,11 @@ public partial class MainViewModel : ViewModelBase
// integration test can assert they point at real destinations.
public const string ChannelUrl = "https://youtube.com/@llamachileshop";
public const string MastodonUrl = "https://mastodon.llamachile.tube/@gramps";
public const string PremiumUrl = "https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw";
public const string PremiumUrl = "https://llamacasty.com";
public const string CoffeeUrl = "https://buymeacoffee.com/llamachiley";
public static string AppVersionLabel => $"Version {typeof(MainViewModel).Assembly.GetName().Version?.ToString(3)}";
/// <summary>The About hub's Unlock Premium button lights up only once the
/// billing URL is set (Polar — polar.sh, pending TASK 10 implementation).</summary>
/// <summary>The About hub's optional product-information link.</summary>
public bool IsPremiumAvailable => PremiumUrl.Length > 0;
/// <summary>Full in-app licensing/legal text, loaded on demand from the
@@ -176,6 +175,13 @@ public partial class MainViewModel : ViewModelBase
IsLicensesOpen = false;
}
private void ShowAbout()
{
IsLicensesOpen = false;
IsLicenseEntryOpen = false;
ShowOverlay(nameof(IsAboutOpen), "About");
}
/// <summary>Shows the in-app licensing panel, loading the full texts from
/// the shipped THIRD-PARTY-NOTICES.txt on first open (never the OS viewer).
/// Falls back to a "not found" note if the file is missing so the panel