update version control

This commit is contained in:
kwan.nguyen 2024-10-30 17:00:07 +07:00
parent 850dc4c8a1
commit f5d9cce2ea
7 changed files with 69 additions and 8 deletions

View File

@ -29,6 +29,7 @@ namespace Http.Core.Contexts
public string AccessToken { get; private set; }
public string RefreshToken { get; private set; }
public string DeviceId { get; private set; }
public string AppVersion { get; private set; }
public DateTime? ExpiredTime { get; private set; }
public bool IsPermittedEdit => Profile.Role == "admin" || (Profile.IsPermittedEdit ?? false);
@ -41,6 +42,14 @@ namespace Http.Core.Contexts
}
}
public void SetAppVersion(string appVersion)
{
if (AppVersion == null)
{
AppVersion = appVersion;
}
}
private readonly object _updateLock = new object();
internal void SetValue(string accessToken, string refreshToken, string userName = null)
{

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Http.Core.Exceptions
{
public class AppOutdatedException : Exception
{
public AppOutdatedException() : base() { }
public AppOutdatedException(string message) : base(message) { }
}
}

View File

@ -1,4 +1,7 @@
using Http.Core.Contexts;
using Http.Core.Exceptions;
using Http.Core.Extensions;
using PCUT.Entities.ApiResponse;
using System;
using System.Collections.Generic;
using System.Net.Http;
@ -10,10 +13,17 @@ namespace Http.Core.Handlers
{
public class DeviceAuthHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Add("x-device-id", $"{UserContext.Instance.DeviceId}");
return base.SendAsync(request, cancellationToken);
request.Headers.Add("x-device-id", UserContext.Instance.DeviceId);
request.Headers.Add("x-version-id", UserContext.Instance.AppVersion);
var response = await base.SendAsync(request, cancellationToken);
if (response.StatusCode == System.Net.HttpStatusCode.Conflict && response.Content.Headers.ContentLength > 0)
{
var content = await response.DeserializeObjectAsync<MessageResponse>(ensureSuccess: false);
throw new AppOutdatedException(content.ErrorMessage);
}
return response;
}
}
}

View File

@ -1,4 +1,6 @@
using Http.Core;
using Http.Core.Contexts;
using Http.Core.Exceptions;
using Http.Core.Handlers;
using Microsoft.Extensions.DependencyInjection;
using PCUT.Pages;
@ -12,6 +14,7 @@ using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Core;
using Windows.UI.Popups;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
@ -45,6 +48,7 @@ namespace PCUT
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.UnhandledException += HandleException;
AppContainer = ConfigDI();
HttpClientFactory
.AddHttpClient(ClientNames.AuthClient)
@ -65,8 +69,9 @@ namespace PCUT
/// <param name="e">Details about the launch request and process.</param>
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
UserContext.Instance.SetAppVersion(GetAppVersion());
ApplicationView.GetForCurrentView().IsScreenCaptureEnabled = false;
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
@ -124,10 +129,25 @@ namespace PCUT
deferral.Complete();
}
private async void HandleException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)
{
if (e.Exception is AppOutdatedException outdatedException)
{
e.Handled = true;
await new MessageDialog(outdatedException.Message, "App Outdated!").ShowAsync();
}
}
IServiceProvider ConfigDI()
{
var serviceCollection = new ServiceCollection();
return serviceCollection.BuildServiceProvider();
}
private string GetAppVersion()
{
var packageVersion = Package.Current.Id.Version;
return $"{packageVersion.Major}.{packageVersion.Minor}.{packageVersion.Build}.{packageVersion.Revision}";
}
}
}

View File

@ -9,7 +9,7 @@
<Identity
Name="ac171214-3336-4e02-845d-9bdc107cce71"
Publisher="CN=pcut, O=PCUT, L=HN, S=HN, C=VN"
Version="1.3.4.4" />
Version="1.3.4.6" />
<mp:PhoneIdentity PhoneProductId="ac171214-3336-4e02-845d-9bdc107cce71" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

View File

@ -27,7 +27,8 @@
<Grid.RowDefinitions>
<RowDefinition Height="0.35*"/>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.4*"/>
<RowDefinition Height="0.1*"/>
<RowDefinition Height="0.3*"/>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="1">
<Grid.RowDefinitions>
@ -96,6 +97,13 @@
IsEnabled="{x:Bind Path=LoginModel.LoginEnabled, Mode=OneWay}"
Command="{x:Bind Path=LoginModel.NavigateMainCommand}"/>
</Grid>
<TextBlock
Grid.Row="2"
Grid.Column="0"
Text="{x:Bind LoginModel.VersionDisplay}"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Margin="10 0 0 10"/>
</Grid>
</Grid>
</Grid>

View File

@ -71,9 +71,10 @@ namespace PCUT.ViewModels
SetProperty(ref _loginEnabled, value);
}
}
#region Commands
public string VersionDisplay = $"Version {UserContext.Instance.AppVersion}";
public ICommand NavigateMainCommand { get; private set; }
#endregion
private bool _success = false;
private async Task LoginAsync()