diff --git a/Borepin/Borepin/Converter/MachineStateStringConverter.cs b/Borepin/Borepin/Converter/MachineStateStringConverter.cs
index 618765f..89253bd 100644
--- a/Borepin/Borepin/Converter/MachineStateStringConverter.cs
+++ b/Borepin/Borepin/Converter/MachineStateStringConverter.cs
@@ -23,6 +23,8 @@ namespace Borepin.Converter
return "Blocked";
case Machine.MachineState.disabled:
return "Disabled";
+ case Machine.MachineState.totakeover:
+ return "ToTakeOver";
default:
return "Unknown";
}
diff --git a/Borepin/Borepin/Page/ServerPage.xaml b/Borepin/Borepin/Page/ServerPage.xaml
index c2ce4f1..9635b5c 100644
--- a/Borepin/Borepin/Page/ServerPage.xaml
+++ b/Borepin/Borepin/Page/ServerPage.xaml
@@ -22,6 +22,8 @@
+
+
diff --git a/Borepin/Borepin/PageModel/ServerPageModel.cs b/Borepin/Borepin/PageModel/ServerPageModel.cs
index 6d3865a..3d209c4 100644
--- a/Borepin/Borepin/PageModel/ServerPageModel.cs
+++ b/Borepin/Borepin/PageModel/ServerPageModel.cs
@@ -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
diff --git a/Borepin/Borepin/PageModel/StartPageModel.cs b/Borepin/Borepin/PageModel/StartPageModel.cs
index 4b8cd7c..c43c5e5 100644
--- a/Borepin/Borepin/PageModel/StartPageModel.cs
+++ b/Borepin/Borepin/PageModel/StartPageModel.cs
@@ -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_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 () =>
diff --git a/Borepin/Borepin/Service/Storage/ILoginStorageService.cs b/Borepin/Borepin/Service/Storage/ILoginStorageService.cs
index 4d67bda..fc72cc7 100644
--- a/Borepin/Borepin/Service/Storage/ILoginStorageService.cs
+++ b/Borepin/Borepin/Service/Storage/ILoginStorageService.cs
@@ -10,5 +10,8 @@ namespace Borepin.Service.Storage
Task Add(ConnectionData connectionData);
Task Remove(ConnectionData connectionData);
Task UpdateTimestamp(ConnectionData connectionData);
+
+ Task GetDefault();
+ Task SetDefault(ConnectionData connectionData);
}
}
diff --git a/Borepin/Borepin/Service/Storage/LoginStorageService.cs b/Borepin/Borepin/Service/Storage/LoginStorageService.cs
index 44fc7c2..1605ac6 100644
--- a/Borepin/Borepin/Service/Storage/LoginStorageService.cs
+++ b/Borepin/Borepin/Service/Storage/LoginStorageService.cs
@@ -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 GetDefault()
+ {
+ try
+ {
+ string data = await _SecretStorageService.GetAsync(StorageKey_ConnecitonData_AutoConnect).ConfigureAwait(false);
+ if (data != null)
+ {
+ ConnectionData connectionData = JsonConvert.DeserializeObject(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_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>(data);
@@ -98,13 +124,13 @@ namespace Borepin.Service.Storage
else
{
connectionData_List = new List();
- 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();
- 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_List)
{
string data = JsonConvert.SerializeObject(connectionData_List);
- await _SecretStorageService.SetAsync(StorageKey, data).ConfigureAwait(false);
+ await _SecretStorageService.SetAsync(StorageKey_ConnectionDataList, data).ConfigureAwait(false);
}
#endregion
}
diff --git a/FabAccessAPI/ConnectionData.cs b/FabAccessAPI/ConnectionData.cs
index 3567423..c266361 100644
--- a/FabAccessAPI/ConnectionData.cs
+++ b/FabAccessAPI/ConnectionData.cs
@@ -9,7 +9,6 @@ namespace FabAccessAPI
public Mechanism Mechanism;
public string Username;
public Dictionary Properties;
- public bool IsDefault;
public DateTime LastTime;
public override bool Equals(object? obj)