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";
case Machine.MachineState.disabled:
return "Disabled";
case Machine.MachineState.totakeover:
return "ToTakeOver";
default:
return "Unknown";
}

View File

@ -22,6 +22,8 @@
<StackLayout Grid.Row="0">
<Label Text="{Binding DisplayAddress}" Style="{StaticResource LabelStyle_Title}"/>
<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}" Text="Disconnect" Margin="0,10,0,0" Command="{Binding DisconnectCommand}" Style="{StaticResource Style_Button_Admin}"/>
</StackLayout>

View File

@ -32,15 +32,16 @@ namespace Borepin.PageModel
ConnectCommand = new DelegateCommand(async () => await ConnectCommandExecute().ConfigureAwait(false));
DisconnectCommand = new DelegateCommand(async () => await DisonnectCommandExecute().ConfigureAwait(false));
DeleteCommand = new DelegateCommand(DeleteCommandExecute);
SetDefaultCommand = new DelegateCommand(async () => await SetDefaultCommandExecute().ConfigureAwait(false));
}
#endregion
#region Data
public override Task LoadInstance(object instance)
public override async Task LoadInstance(object instance)
{
if(instance != null)
{
if (instance is ConnectionData)
if(instance is ConnectionData)
{
Connection_Item = instance as ConnectionData;
}
@ -49,7 +50,7 @@ namespace Borepin.PageModel
throw new InstanceIncorrectException();
}
if (_API.ConnectionData != null && Connection_Item != null)
if(_API.ConnectionData != null && Connection_Item != null)
{
InstanceIsActiveConnection = Connection_Item.Equals(_API.ConnectionData);
}
@ -58,10 +59,16 @@ namespace Borepin.PageModel
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);
}
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)
{
@ -69,7 +76,6 @@ namespace Borepin.PageModel
}
IsBusy = false;
return Task.CompletedTask;
}
#endregion
@ -94,6 +100,13 @@ namespace Borepin.PageModel
get => _InstanceIsActiveConnection;
set => SetProperty(ref _InstanceIsActiveConnection, value);
}
private bool _InstanceIsDefaultConnection;
public bool InstanceIsDefaultConnection
{
get => _InstanceIsDefaultConnection;
set => SetProperty(ref _InstanceIsDefaultConnection, value);
}
#endregion
#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;
public ICommand DisconnectCommand

View File

@ -1,4 +1,5 @@
using Borepin.Base;
using Borepin.Service;
using Borepin.Service.Storage;
using FabAccessAPI;
using Prism.AppModel;
@ -9,14 +10,14 @@ using Xamarin.Forms;
namespace Borepin.PageModel
{
public class StartPageModel : PageModelBase, IPageLifecycleAware
public class StartPageModel : ConnectionModelBase, IPageLifecycleAware
{
#region Private Fields
private readonly ILoginStorageService _LoginStorageService;
#endregion
#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;
}
@ -26,6 +27,8 @@ namespace Borepin.PageModel
public async void OnAppearing()
{
IList<ConnectionData> connectionData_List = await _LoginStorageService.GetList().ConfigureAwait(false);
ConnectionData connectionData_Default = await _LoginStorageService.GetDefault().ConfigureAwait(false);
if (connectionData_List.Count == 0)
{
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
{
Device.BeginInvokeOnMainThread(async () =>

View File

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

View File

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