Added: Default Connection

This commit is contained in:
TheJoKlLa 2022-05-23 00:10:43 +02:00
parent c39b5bce3d
commit f54e6ed98b
7 changed files with 99 additions and 13 deletions

View File

@ -23,6 +23,8 @@ namespace Borepin.Converter
return "Blocked"; return "Blocked";
case Machine.MachineState.disabled: case Machine.MachineState.disabled:
return "Disabled"; return "Disabled";
case Machine.MachineState.totakeover:
return "ToTakeOver";
default: default:
return "Unknown"; return "Unknown";
} }

View File

@ -22,6 +22,8 @@
<StackLayout Grid.Row="0"> <StackLayout Grid.Row="0">
<Label Text="{Binding DisplayAddress}" Style="{StaticResource LabelStyle_Title}"/> <Label Text="{Binding DisplayAddress}" Style="{StaticResource LabelStyle_Title}"/>
<Label Text="{Binding Connection_Item.Username}" Style="{StaticResource Style_Label_Text_Center}"/> <Label Text="{Binding Connection_Item.Username}" Style="{StaticResource Style_Label_Text_Center}"/>
<Button IsVisible="{Binding InstanceIsDefaultConnection, Converter={StaticResource InvertBoolConverter}}" Text="Set as Default Connection" Margin="0,10,0,0" Command="{Binding SetDefaultCommand}" Style="{StaticResource Style_Button_Primary}"/>
<Label IsVisible="{Binding InstanceIsDefaultConnection}" Text="Is Default Connection" Style="{StaticResource Style_Label_Text_Center}"/>
<Button IsVisible="{Binding InstanceIsActiveConnection, Converter={StaticResource InvertBoolConverter}}" Text="Connect" Margin="0,10,0,0" Command="{Binding ConnectCommand}" Style="{StaticResource Style_Button_Primary}"/> <Button IsVisible="{Binding InstanceIsActiveConnection, Converter={StaticResource InvertBoolConverter}}" Text="Connect" Margin="0,10,0,0" Command="{Binding ConnectCommand}" Style="{StaticResource Style_Button_Primary}"/>
<Button IsVisible="{Binding InstanceIsActiveConnection}" Text="Disconnect" Margin="0,10,0,0" Command="{Binding DisconnectCommand}" Style="{StaticResource Style_Button_Admin}"/> <Button IsVisible="{Binding InstanceIsActiveConnection}" Text="Disconnect" Margin="0,10,0,0" Command="{Binding DisconnectCommand}" Style="{StaticResource Style_Button_Admin}"/>
</StackLayout> </StackLayout>

View File

@ -32,15 +32,16 @@ namespace Borepin.PageModel
ConnectCommand = new DelegateCommand(async () => await ConnectCommandExecute().ConfigureAwait(false)); ConnectCommand = new DelegateCommand(async () => await ConnectCommandExecute().ConfigureAwait(false));
DisconnectCommand = new DelegateCommand(async () => await DisonnectCommandExecute().ConfigureAwait(false)); DisconnectCommand = new DelegateCommand(async () => await DisonnectCommandExecute().ConfigureAwait(false));
DeleteCommand = new DelegateCommand(DeleteCommandExecute); DeleteCommand = new DelegateCommand(DeleteCommandExecute);
SetDefaultCommand = new DelegateCommand(async () => await SetDefaultCommandExecute().ConfigureAwait(false));
} }
#endregion #endregion
#region Data #region Data
public override Task LoadInstance(object instance) public override async Task LoadInstance(object instance)
{ {
if(instance != null) if(instance != null)
{ {
if (instance is ConnectionData) if(instance is ConnectionData)
{ {
Connection_Item = instance as ConnectionData; Connection_Item = instance as ConnectionData;
} }
@ -49,7 +50,7 @@ namespace Borepin.PageModel
throw new InstanceIncorrectException(); throw new InstanceIncorrectException();
} }
if (_API.ConnectionData != null && Connection_Item != null) if(_API.ConnectionData != null && Connection_Item != null)
{ {
InstanceIsActiveConnection = Connection_Item.Equals(_API.ConnectionData); InstanceIsActiveConnection = Connection_Item.Equals(_API.ConnectionData);
} }
@ -58,10 +59,16 @@ namespace Borepin.PageModel
InstanceIsActiveConnection = false; InstanceIsActiveConnection = false;
} }
if (_Connection_Item != null && _Connection_Item.Host != null) if(_Connection_Item != null && _Connection_Item.Host != null)
{ {
DisplayAddress = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", _Connection_Item.Host.Host, _Connection_Item.Host.Port); DisplayAddress = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", _Connection_Item.Host.Host, _Connection_Item.Host.Port);
} }
ConnectionData connectionData_Default = await _LoginStorageService.GetDefault().ConfigureAwait(false);
if(connectionData_Default != null && connectionData_Default.Equals(_Connection_Item))
{
InstanceIsDefaultConnection = true;
}
} }
if(instance == null && Connection_Item == null) if(instance == null && Connection_Item == null)
{ {
@ -69,7 +76,6 @@ namespace Borepin.PageModel
} }
IsBusy = false; IsBusy = false;
return Task.CompletedTask;
} }
#endregion #endregion
@ -94,6 +100,13 @@ namespace Borepin.PageModel
get => _InstanceIsActiveConnection; get => _InstanceIsActiveConnection;
set => SetProperty(ref _InstanceIsActiveConnection, value); set => SetProperty(ref _InstanceIsActiveConnection, value);
} }
private bool _InstanceIsDefaultConnection;
public bool InstanceIsDefaultConnection
{
get => _InstanceIsDefaultConnection;
set => SetProperty(ref _InstanceIsDefaultConnection, value);
}
#endregion #endregion
#region Commands #region Commands
@ -143,6 +156,18 @@ namespace Borepin.PageModel
} }
}); });
} }
private ICommand _SetDefaultCommand;
public ICommand SetDefaultCommand
{
get => _SetDefaultCommand;
set => SetProperty(ref _SetDefaultCommand, value);
}
public async Task SetDefaultCommandExecute()
{
await _LoginStorageService.SetDefault(Connection_Item).ConfigureAwait(false);
await LoadInstance(Connection_Item).ConfigureAwait(false);
}
private ICommand _DisconnectCommand; private ICommand _DisconnectCommand;
public ICommand DisconnectCommand public ICommand DisconnectCommand

View File

@ -1,4 +1,5 @@
using Borepin.Base; using Borepin.Base;
using Borepin.Service;
using Borepin.Service.Storage; using Borepin.Service.Storage;
using FabAccessAPI; using FabAccessAPI;
using Prism.AppModel; using Prism.AppModel;
@ -9,14 +10,14 @@ using Xamarin.Forms;
namespace Borepin.PageModel namespace Borepin.PageModel
{ {
public class StartPageModel : PageModelBase, IPageLifecycleAware public class StartPageModel : ConnectionModelBase, IPageLifecycleAware
{ {
#region Private Fields #region Private Fields
private readonly ILoginStorageService _LoginStorageService; private readonly ILoginStorageService _LoginStorageService;
#endregion #endregion
#region Constructors #region Constructors
public StartPageModel(INavigationService navigationService, IPageDialogService pageDialogService, ILoginStorageService loginStorageService) : base(navigationService, pageDialogService) public StartPageModel(INavigationService navigationService, IPageDialogService pageDialogService, IAPIService apiService, ILoginStorageService loginStorageService) : base(navigationService, pageDialogService, apiService)
{ {
_LoginStorageService = loginStorageService; _LoginStorageService = loginStorageService;
} }
@ -26,6 +27,8 @@ namespace Borepin.PageModel
public async void OnAppearing() public async void OnAppearing()
{ {
IList<ConnectionData> connectionData_List = await _LoginStorageService.GetList().ConfigureAwait(false); IList<ConnectionData> connectionData_List = await _LoginStorageService.GetList().ConfigureAwait(false);
ConnectionData connectionData_Default = await _LoginStorageService.GetDefault().ConfigureAwait(false);
if (connectionData_List.Count == 0) if (connectionData_List.Count == 0)
{ {
Device.BeginInvokeOnMainThread(async () => Device.BeginInvokeOnMainThread(async () =>
@ -37,6 +40,32 @@ namespace Borepin.PageModel
} }
}); });
} }
else if(connectionData_Default != null)
{
try
{
await _API.Connect(connectionData_Default).ConfigureAwait(false);
Device.BeginInvokeOnMainThread(async () =>
{
INavigationResult result = await _NavigationService.NavigateAsync("/MainPage/NavigationPage/MachineListPage").ConfigureAwait(false);
if (result.Exception != null)
{
Log.Fatal(result.Exception, "Navigating failed");
}
});
}
catch
{
Device.BeginInvokeOnMainThread(async () =>
{
INavigationResult result = await _NavigationService.NavigateAsync("/MainPage/NavigationPage/ServerListPage").ConfigureAwait(false);
if (result.Exception != null)
{
Log.Fatal(result.Exception, "Navigating failed");
}
});
}
}
else else
{ {
Device.BeginInvokeOnMainThread(async () => Device.BeginInvokeOnMainThread(async () =>

View File

@ -10,5 +10,8 @@ namespace Borepin.Service.Storage
Task Add(ConnectionData connectionData); Task Add(ConnectionData connectionData);
Task Remove(ConnectionData connectionData); Task Remove(ConnectionData connectionData);
Task UpdateTimestamp(ConnectionData connectionData); Task UpdateTimestamp(ConnectionData connectionData);
Task<ConnectionData> GetDefault();
Task SetDefault(ConnectionData connectionData);
} }
} }

View File

@ -10,7 +10,8 @@ namespace Borepin.Service.Storage
public class LoginStorageService : ILoginStorageService public class LoginStorageService : ILoginStorageService
{ {
#region Static Members #region Static Members
const string StorageKey = "ConnectionData"; const string StorageKey_ConnectionDataList = "ConnectionData";
const string StorageKey_ConnecitonData_AutoConnect = "ConnectionData_Default";
#endregion #endregion
#region Private Members #region Private Members
@ -82,6 +83,31 @@ namespace Borepin.Service.Storage
connectionData_List.Add(connectionData); connectionData_List.Add(connectionData);
await _SaveConnectionData(connectionData_List).ConfigureAwait(false); await _SaveConnectionData(connectionData_List).ConfigureAwait(false);
} }
public async Task<ConnectionData> GetDefault()
{
try
{
string data = await _SecretStorageService.GetAsync(StorageKey_ConnecitonData_AutoConnect).ConfigureAwait(false);
if (data != null)
{
ConnectionData connectionData = JsonConvert.DeserializeObject<ConnectionData>(data);
return connectionData;
}
return null;
}
catch (JsonSerializationException)
{
_SecretStorageService.Remove(StorageKey_ConnecitonData_AutoConnect);
return null;
}
}
public async Task SetDefault(ConnectionData connectionData)
{
string data = JsonConvert.SerializeObject(connectionData);
await _SecretStorageService.SetAsync(StorageKey_ConnecitonData_AutoConnect, data).ConfigureAwait(false);
}
#endregion #endregion
#region Private Methods #region Private Methods
@ -90,7 +116,7 @@ namespace Borepin.Service.Storage
List<ConnectionData> connectionData_List; List<ConnectionData> connectionData_List;
try try
{ {
string data = await _SecretStorageService.GetAsync(StorageKey).ConfigureAwait(false); string data = await _SecretStorageService.GetAsync(StorageKey_ConnectionDataList).ConfigureAwait(false);
if(data != null) if(data != null)
{ {
connectionData_List = JsonConvert.DeserializeObject<List<ConnectionData>>(data); connectionData_List = JsonConvert.DeserializeObject<List<ConnectionData>>(data);
@ -98,13 +124,13 @@ namespace Borepin.Service.Storage
else else
{ {
connectionData_List = new List<ConnectionData>(); connectionData_List = new List<ConnectionData>();
await _SecretStorageService.SetAsync(StorageKey, JsonConvert.SerializeObject(connectionData_List)).ConfigureAwait(false); await _SecretStorageService.SetAsync(StorageKey_ConnectionDataList, JsonConvert.SerializeObject(connectionData_List)).ConfigureAwait(false);
} }
} }
catch (JsonSerializationException) catch (JsonSerializationException)
{ {
connectionData_List = new List<ConnectionData>(); connectionData_List = new List<ConnectionData>();
await _SecretStorageService.SetAsync(StorageKey, JsonConvert.SerializeObject(connectionData_List)).ConfigureAwait(false); await _SecretStorageService.SetAsync(StorageKey_ConnectionDataList, JsonConvert.SerializeObject(connectionData_List)).ConfigureAwait(false);
} }
return connectionData_List; return connectionData_List;
@ -113,7 +139,7 @@ namespace Borepin.Service.Storage
private async Task _SaveConnectionData(IList<ConnectionData> connectionData_List) private async Task _SaveConnectionData(IList<ConnectionData> connectionData_List)
{ {
string data = JsonConvert.SerializeObject(connectionData_List); string data = JsonConvert.SerializeObject(connectionData_List);
await _SecretStorageService.SetAsync(StorageKey, data).ConfigureAwait(false); await _SecretStorageService.SetAsync(StorageKey_ConnectionDataList, data).ConfigureAwait(false);
} }
#endregion #endregion
} }

View File

@ -9,7 +9,6 @@ namespace FabAccessAPI
public Mechanism Mechanism; public Mechanism Mechanism;
public string Username; public string Username;
public Dictionary<string, object> Properties; public Dictionary<string, object> Properties;
public bool IsDefault;
public DateTime LastTime; public DateTime LastTime;
public override bool Equals(object? obj) public override bool Equals(object? obj)