using Blazored.LocalStorage; using FrontOffice.Main.Shared; using FrontOffice.Main.Utilities; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.WebUtilities; using MudBlazor; namespace FrontOffice.Main; public partial class App { [Inject] private ILocalStorageService LocalStorage { get; set; } = default!; [Inject] private AuthService AuthService { get; set; } = default!; [Inject] private AppVersionService AppVersionService { get; set; } = default!; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); // Check app version and show update dialog if needed await CheckAndShowVersionUpdateAsync(); // Check for referral code in URL query parameters var uri = Navigation.ToAbsoluteUri(Navigation.Uri); var query = QueryHelpers.ParseQuery(uri.Query); if (query.TryGetValue("ref", out var refValues)) { var referralCode = refValues.FirstOrDefault(); if (!string.IsNullOrWhiteSpace(referralCode)) { // Store referral code in local storage await LocalStorage.SetItemAsync("referral:code", referralCode); if(!await AuthService.IsAuthenticatedAsync()) { var options = new DialogOptions { BackdropClick = false, CloseOnEscapeKey = false }; var parameters = new DialogParameters { { x => x.HideCancelButton, true } }; var dialog = await DialogService.ShowAsync("ورود به حساب کاربری", parameters, options); var result = await dialog.Result; if (!result.Canceled) { Snackbar.Add(GlobalConstants.SuccessMsg, Severity.Success); await Task.Delay(1000); Navigation.NavigateTo(Navigation.Uri, forceLoad: true); StateHasChanged(); } } } } } /// /// بررسی نسخه و نمایش دیالوگ آپدیت در صورت نیاز /// فقط برای کاربران لاگین شده /// private async Task CheckAndShowVersionUpdateAsync() { try { // فقط برای کاربران لاگین شده if (!await AuthService.IsAuthenticatedAsync()) return; // forDialog: true یعنی اگه skip کرده ولی یک روز گذشته، دوباره نشون بده var versionCheck = await AppVersionService.CheckVersionAsync(forDialog: true); if (!versionCheck.HasNewVersion || string.IsNullOrEmpty(versionCheck.NewVersion)) return; // ثبت زمان نمایش دیالوگ await AppVersionService.RecordDialogShownAsync(); // تنظیمات دیالوگ var dialogOptions = new DialogOptions { BackdropClick = !versionCheck.IsForceUpdate, // اگر force باشه نتونه بیرون کلیک کنه CloseOnEscapeKey = !versionCheck.IsForceUpdate, CloseButton = !versionCheck.IsForceUpdate, MaxWidth = MaxWidth.Small, FullWidth = true }; var parameters = new DialogParameters { { x => x.OldVersion, versionCheck.OldVersion }, { x => x.NewVersion, versionCheck.NewVersion }, { x => x.ReleaseNotes, versionCheck.ReleaseNotes }, { x => x.UpdateMessage, versionCheck.UpdateMessage }, { x => x.IsForceUpdate, versionCheck.IsForceUpdate } }; var dialog = await DialogService.ShowAsync("بروزرسانی", parameters, dialogOptions); var result = await dialog.Result; if (result is { Canceled: false, Data: bool shouldUpdate }) { if (shouldUpdate) { // کاربر خواست آپدیت کنه await AppVersionService.ApplyUpdateAsync(versionCheck.NewVersion); // رفرش صفحه Navigation.NavigateTo(Navigation.Uri, forceLoad: true); } else { // کاربر گفت بعداً (فقط وقتی force نیست) await AppVersionService.SkipVersionAsync(versionCheck.NewVersion); } } else if (versionCheck.IsForceUpdate) { // اگر force بود و دیالوگ بسته شد، باز هم آپدیت کن await AppVersionService.ApplyUpdateAsync(versionCheck.NewVersion); Navigation.NavigateTo(Navigation.Uri, forceLoad: true); } } catch (Exception ex) { // در صورت خطا، لاگ کن ولی ادامه بده Console.WriteLine($"Error checking version: {ex.Message}"); } } }