134 lines
5.3 KiB
C#
134 lines
5.3 KiB
C#
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<AuthDialog>
|
|
{
|
|
{ x => x.HideCancelButton, true }
|
|
};
|
|
var dialog = await DialogService.ShowAsync<AuthDialog>("ورود به حساب کاربری", 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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// بررسی نسخه و نمایش دیالوگ آپدیت در صورت نیاز
|
|
/// فقط برای کاربران لاگین شده
|
|
/// </summary>
|
|
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<ReleaseNotesDialog>
|
|
{
|
|
{ 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<ReleaseNotesDialog>("بروزرسانی", 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}");
|
|
}
|
|
}
|
|
} |