diff --git a/Borepin/Borepin.Android/Borepin.Android.csproj b/Borepin/Borepin.Android/Borepin.Android.csproj
index 6f628be..06f1b43 100644
--- a/Borepin/Borepin.Android/Borepin.Android.csproj
+++ b/Borepin/Borepin.Android/Borepin.Android.csproj
@@ -81,6 +81,7 @@
+
diff --git a/Borepin/Borepin.Android/PlatformInitializer.cs b/Borepin/Borepin.Android/PlatformInitializer.cs
index ac5fbc0..540b18b 100644
--- a/Borepin/Borepin.Android/PlatformInitializer.cs
+++ b/Borepin/Borepin.Android/PlatformInitializer.cs
@@ -1,5 +1,6 @@
using Borepin.Droid.Services;
using Borepin.Service;
+using Borepin.Service.Browser;
using Borepin.Service.Storage;
using Borepin.Service.Versioning;
using Prism;
@@ -14,6 +15,7 @@ namespace Borepin.Droid
containerRegistry.Register();
containerRegistry.Register();
containerRegistry.Register();
+ containerRegistry.Register();
containerRegistry.RegisterSingleton();
}
diff --git a/Borepin/Borepin.Android/Services/BrowserService.cs b/Borepin/Borepin.Android/Services/BrowserService.cs
new file mode 100644
index 0000000..7345dd6
--- /dev/null
+++ b/Borepin/Borepin.Android/Services/BrowserService.cs
@@ -0,0 +1,51 @@
+using Borepin.Service.Browser;
+using System;
+using System.Threading.Tasks;
+using Xamarin.Essentials;
+
+namespace Borepin.Droid.Services
+{
+ public class BrowserService : IBrowserService
+ {
+ private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ return new Xamarin.Essentials.BrowserLaunchOptions()
+ {
+ Flags = (Xamarin.Essentials.BrowserLaunchFlags)browserLaunchOptions.Flags,
+ LaunchMode = (Xamarin.Essentials.BrowserLaunchMode)browserLaunchOptions.LaunchMode,
+ PreferredControlColor = browserLaunchOptions.PreferredControlColor,
+ PreferredToolbarColor = browserLaunchOptions.PreferredToolbarColor,
+ TitleMode = (Xamarin.Essentials.BrowserTitleMode)browserLaunchOptions.TitleMode
+ };
+ }
+ public async Task OpenAsync(string uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+
+ public async Task OpenAsync(Uri uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Borepin/Borepin.UWP/Borepin.UWP.csproj b/Borepin/Borepin.UWP/Borepin.UWP.csproj
index 620bb6d..c3ae35d 100644
--- a/Borepin/Borepin.UWP/Borepin.UWP.csproj
+++ b/Borepin/Borepin.UWP/Borepin.UWP.csproj
@@ -99,6 +99,7 @@
+
diff --git a/Borepin/Borepin.UWP/PlatformInitializer.cs b/Borepin/Borepin.UWP/PlatformInitializer.cs
index 9eacb3c..0818906 100644
--- a/Borepin/Borepin.UWP/PlatformInitializer.cs
+++ b/Borepin/Borepin.UWP/PlatformInitializer.cs
@@ -4,6 +4,7 @@ using Prism.Ioc;
using Borepin.Service.Storage;
using Borepin.Service.Versioning;
using Borepin.Service;
+using Borepin.Service.Browser;
namespace Borepin.UWP
{
@@ -14,6 +15,7 @@ namespace Borepin.UWP
containerRegistry.Register();
containerRegistry.Register();
containerRegistry.Register();
+ containerRegistry.Register();
containerRegistry.RegisterSingleton();
}
diff --git a/Borepin/Borepin.UWP/Services/BrowserService.cs b/Borepin/Borepin.UWP/Services/BrowserService.cs
new file mode 100644
index 0000000..3669447
--- /dev/null
+++ b/Borepin/Borepin.UWP/Services/BrowserService.cs
@@ -0,0 +1,51 @@
+using Borepin.Service.Browser;
+using System;
+using System.Threading.Tasks;
+using Xamarin.Essentials;
+
+namespace Borepin.UWP.Services
+{
+ public class BrowserService : IBrowserService
+ {
+ private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ return new Xamarin.Essentials.BrowserLaunchOptions()
+ {
+ Flags = (Xamarin.Essentials.BrowserLaunchFlags)browserLaunchOptions.Flags,
+ LaunchMode = (Xamarin.Essentials.BrowserLaunchMode)browserLaunchOptions.LaunchMode,
+ PreferredControlColor = browserLaunchOptions.PreferredControlColor,
+ PreferredToolbarColor = browserLaunchOptions.PreferredToolbarColor,
+ TitleMode = (Xamarin.Essentials.BrowserTitleMode)browserLaunchOptions.TitleMode
+ };
+ }
+ public async Task OpenAsync(string uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+
+ public async Task OpenAsync(Uri uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+ }
+}
diff --git a/Borepin/Borepin.iOS/Borepin.iOS.csproj b/Borepin/Borepin.iOS/Borepin.iOS.csproj
index 5a52689..d1110a9 100644
--- a/Borepin/Borepin.iOS/Borepin.iOS.csproj
+++ b/Borepin/Borepin.iOS/Borepin.iOS.csproj
@@ -82,6 +82,7 @@
+
diff --git a/Borepin/Borepin.iOS/PlatformInitializer.cs b/Borepin/Borepin.iOS/PlatformInitializer.cs
index 26a09b8..ade1f95 100644
--- a/Borepin/Borepin.iOS/PlatformInitializer.cs
+++ b/Borepin/Borepin.iOS/PlatformInitializer.cs
@@ -1,5 +1,6 @@
using Borepin.iOS.Services;
using Borepin.Service;
+using Borepin.Service.Browser;
using Borepin.Service.Storage;
using Borepin.Service.Versioning;
using Prism;
@@ -14,6 +15,7 @@ namespace Borepin.iOS
containerRegistry.Register();
containerRegistry.Register();
containerRegistry.Register();
+ containerRegistry.Register();
containerRegistry.RegisterSingleton();
}
diff --git a/Borepin/Borepin.iOS/Services/BrowserService.cs b/Borepin/Borepin.iOS/Services/BrowserService.cs
new file mode 100644
index 0000000..286116a
--- /dev/null
+++ b/Borepin/Borepin.iOS/Services/BrowserService.cs
@@ -0,0 +1,51 @@
+using Borepin.Service.Browser;
+using System;
+using System.Threading.Tasks;
+using Xamarin.Essentials;
+
+namespace Borepin.iOS.Services
+{
+ public class BrowserService : IBrowserService
+ {
+ private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ return new Xamarin.Essentials.BrowserLaunchOptions()
+ {
+ Flags = (Xamarin.Essentials.BrowserLaunchFlags)browserLaunchOptions.Flags,
+ LaunchMode = (Xamarin.Essentials.BrowserLaunchMode)browserLaunchOptions.LaunchMode,
+ PreferredControlColor = browserLaunchOptions.PreferredControlColor,
+ PreferredToolbarColor = browserLaunchOptions.PreferredToolbarColor,
+ TitleMode = (Xamarin.Essentials.BrowserTitleMode)browserLaunchOptions.TitleMode
+ };
+ }
+ public async Task OpenAsync(string uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+
+ public async Task OpenAsync(Uri uri)
+ {
+ await Browser.OpenAsync(uri).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchMode browserLaunchMode)
+ {
+ await Browser.OpenAsync(uri, (Xamarin.Essentials.BrowserLaunchMode)browserLaunchMode).ConfigureAwait(false);
+ }
+
+ public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
+ {
+ await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Borepin/Borepin/Model/MachineVisualize.cs b/Borepin/Borepin/Model/MachineVisualize.cs
index 2c51d6d..a77867b 100644
--- a/Borepin/Borepin/Model/MachineVisualize.cs
+++ b/Borepin/Borepin/Model/MachineVisualize.cs
@@ -26,6 +26,7 @@ namespace Borepin.Model
//Space = new SpaceVisualize(_Machine.Space);
Name = _Machine.Name;
Description = _Machine.Description;
+ Wiki = _Machine.Wiki;
State = _Machine.State;
if(_Machine.Manager.Just != null)
@@ -106,6 +107,13 @@ namespace Borepin.Model
set => SetProperty(ref _Description, value);
}
+ private string _Wiki;
+ public string Wiki
+ {
+ get => _Wiki;
+ set => SetProperty(ref _Wiki, value);
+ }
+
private MachineState _State;
public MachineState State
{
diff --git a/Borepin/Borepin/Page/MachinePage.xaml b/Borepin/Borepin/Page/MachinePage.xaml
index fabbc80..5e7d2d9 100644
--- a/Borepin/Borepin/Page/MachinePage.xaml
+++ b/Borepin/Borepin/Page/MachinePage.xaml
@@ -22,31 +22,38 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
diff --git a/Borepin/Borepin/PageModel/MachinePageModel.cs b/Borepin/Borepin/PageModel/MachinePageModel.cs
index 8ef9fbc..de5ea2b 100644
--- a/Borepin/Borepin/PageModel/MachinePageModel.cs
+++ b/Borepin/Borepin/PageModel/MachinePageModel.cs
@@ -10,6 +10,7 @@ using Borepin.Service;
using Borepin.Base.Exceptions;
using Capnp.Rpc;
using System;
+using Borepin.Service.Browser;
namespace Borepin.PageModel
{
@@ -18,14 +19,20 @@ namespace Borepin.PageModel
#region Private Fields
private string _ID;
private Machine _Machine;
+ private IBrowserService _BrowserService;
#endregion
#region Contructors
- public MachinePageModel(INavigationService navigationService, IPageDialogService pageDialogService, IAPIService apiService) : base(navigationService, pageDialogService, apiService)
+ public MachinePageModel(INavigationService navigationService, IPageDialogService pageDialogService, IAPIService apiService, IBrowserService browserService) : base(navigationService, pageDialogService, apiService)
{
+ _BrowserService = browserService;
+
UseMachineCommand = new DelegateCommand(UseMachineCommandExecute);
GiveBackMachineCommand = new DelegateCommand(GiveBackMachineCommandExecute);
ForceFreeMachineCommand = new DelegateCommand(ForceFreeMachineCommandExecute);
+ ForceBlockMachineCommand = new DelegateCommand(ForceBlockMachineCommandExecute);
+ ForceDisableMachineCommand = new DelegateCommand(ForceDisableMachineCommandExecute);
+ OpenWikiCommand = new DelegateCommand(OpenWikiCommandExecute);
}
#endregion
@@ -149,6 +156,86 @@ namespace Borepin.PageModel
IsBusy = false;
}
+
+ private ICommand _ForceBlockMachineCommand;
+ public ICommand ForceBlockMachineCommand
+ {
+ get => _ForceBlockMachineCommand;
+ set => SetProperty(ref _ForceBlockMachineCommand, value);
+ }
+
+ public async void ForceBlockMachineCommandExecute()
+ {
+ IsBusy = true;
+
+ if (_API.IsConnected)
+ {
+ try
+ {
+ Machine.IManageInterface manageInterface = _Machine.Manage;
+
+ await manageInterface.Block().ConfigureAwait(false);
+ await LoadAPIData().ConfigureAwait(false);
+ }
+ catch (RpcException exception) when (string.Equals(exception.Message, "RPC connection is broken. Task would never return.", StringComparison.Ordinal))
+ {
+ Log.Debug("RPC Connection Loss");
+ }
+ }
+
+ IsBusy = false;
+ }
+
+ private ICommand _ForceDisableMachineCommand;
+ public ICommand ForceDisableMachineCommand
+ {
+ get => _ForceDisableMachineCommand;
+ set => SetProperty(ref _ForceDisableMachineCommand, value);
+ }
+
+ public async void ForceDisableMachineCommandExecute()
+ {
+ IsBusy = true;
+
+ if (_API.IsConnected)
+ {
+ try
+ {
+ Machine.IManageInterface manageInterface = _Machine.Manage;
+
+ await manageInterface.Disabled().ConfigureAwait(false);
+ await LoadAPIData().ConfigureAwait(false);
+ }
+ catch (RpcException exception) when (string.Equals(exception.Message, "RPC connection is broken. Task would never return.", StringComparison.Ordinal))
+ {
+ Log.Debug("RPC Connection Loss");
+ }
+ }
+
+ IsBusy = false;
+ }
+
+ private ICommand _OpenWikiCommand;
+ public ICommand OpenWikiCommand
+ {
+ get => _OpenWikiCommand;
+ set => SetProperty(ref _OpenWikiCommand, value);
+ }
+
+ public async void OpenWikiCommandExecute()
+ {
+ if(_Machine != null && _Machine.Wiki != null)
+ {
+ try
+ {
+ await _BrowserService.OpenAsync(_Machine.Wiki).ConfigureAwait(false);
+ }
+ catch
+ {
+ //TODO: Do something
+ }
+ }
+ }
#endregion
}
}
diff --git a/Borepin/Borepin/Resources/Text/TextResource.Designer.cs b/Borepin/Borepin/Resources/Text/TextResource.Designer.cs
index d5b3014..0c6d3f7 100644
--- a/Borepin/Borepin/Resources/Text/TextResource.Designer.cs
+++ b/Borepin/Borepin/Resources/Text/TextResource.Designer.cs
@@ -370,7 +370,25 @@ namespace Borepin.Resources.Text {
}
///
- /// Looks up a localized string similar to Force Free.
+ /// Looks up a localized string similar to Block Machine.
+ ///
+ internal static string MachinePage_ForceBlock {
+ get {
+ return ResourceManager.GetString("MachinePage_ForceBlock", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Disable Machine.
+ ///
+ internal static string MachinePage_ForceDisable {
+ get {
+ return ResourceManager.GetString("MachinePage_ForceDisable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Free Machine.
///
internal static string MachinePage_ForceFree {
get {
@@ -405,6 +423,15 @@ namespace Borepin.Resources.Text {
}
}
+ ///
+ /// Looks up a localized string similar to Open Wiki.
+ ///
+ internal static string MachinePage_OpenWiki {
+ get {
+ return ResourceManager.GetString("MachinePage_OpenWiki", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Use.
///
diff --git a/Borepin/Borepin/Resources/Text/TextResource.resx b/Borepin/Borepin/Resources/Text/TextResource.resx
index cf1b0ce..ee5ccfc 100644
--- a/Borepin/Borepin/Resources/Text/TextResource.resx
+++ b/Borepin/Borepin/Resources/Text/TextResource.resx
@@ -222,8 +222,14 @@ Ask in your Space if you can be trained on the machine to be unlocked for the ma
Current User:
+
+ Block Machine
+
+
+ Disable Machine
+
- Force Free
+ Free Machine
GiveBack
@@ -234,6 +240,9 @@ Ask in your Space if you can be trained on the machine to be unlocked for the ma
Manage Machine:
+
+ Open Wiki
+
Use
diff --git a/Borepin/Borepin/Service/Browser/BrowserLaunchFlags.cs b/Borepin/Borepin/Service/Browser/BrowserLaunchFlags.cs
new file mode 100644
index 0000000..7c3071d
--- /dev/null
+++ b/Borepin/Borepin/Service/Browser/BrowserLaunchFlags.cs
@@ -0,0 +1,10 @@
+namespace Borepin.Service.Browser
+{
+ public enum BrowserLaunchFlags
+ {
+ None = 0,
+ LaunchAdjacent = 1,
+ PresentAsPageSheet = 2,
+ PresentAsFormSheet = 4,
+ }
+}
diff --git a/Borepin/Borepin/Service/Browser/BrowserLaunchMode.cs b/Borepin/Borepin/Service/Browser/BrowserLaunchMode.cs
new file mode 100644
index 0000000..59352d8
--- /dev/null
+++ b/Borepin/Borepin/Service/Browser/BrowserLaunchMode.cs
@@ -0,0 +1,8 @@
+namespace Borepin.Service.Browser
+{
+ public enum BrowserLaunchMode
+ {
+ SystemPreferred = 0,
+ External = 1
+ }
+}
diff --git a/Borepin/Borepin/Service/Browser/BrowserLaunchOptions.cs b/Borepin/Borepin/Service/Browser/BrowserLaunchOptions.cs
new file mode 100644
index 0000000..cd47f8b
--- /dev/null
+++ b/Borepin/Borepin/Service/Browser/BrowserLaunchOptions.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Drawing;
+
+namespace Borepin.Service.Browser
+{
+ public class BrowserLaunchOptions
+ {
+ public BrowserLaunchFlags Flags;
+ public BrowserLaunchMode LaunchMode;
+ public Nullable PreferredControlColor;
+ public Nullable PreferredToolbarColor;
+ public BrowserTitleMode TitleMode;
+ }
+}
diff --git a/Borepin/Borepin/Service/Browser/BrowserTitleMode.cs b/Borepin/Borepin/Service/Browser/BrowserTitleMode.cs
new file mode 100644
index 0000000..5b1d639
--- /dev/null
+++ b/Borepin/Borepin/Service/Browser/BrowserTitleMode.cs
@@ -0,0 +1,9 @@
+namespace Borepin.Service.Browser
+{
+ public enum BrowserTitleMode
+ {
+ Default = 0,
+ Show = 1,
+ Hide = 2
+ }
+}
diff --git a/Borepin/Borepin/Service/Browser/IBrowserService.cs b/Borepin/Borepin/Service/Browser/IBrowserService.cs
new file mode 100644
index 0000000..945c50b
--- /dev/null
+++ b/Borepin/Borepin/Service/Browser/IBrowserService.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Threading.Tasks;
+
+namespace Borepin.Service.Browser
+{
+ public interface IBrowserService
+ {
+ Task OpenAsync(string uri);
+ Task OpenAsync(string uri, BrowserLaunchMode browserLaunchMode);
+ Task OpenAsync(string uri, BrowserLaunchOptions browserLaunchOptions);
+ Task OpenAsync(Uri uri);
+ Task OpenAsync(Uri uri, BrowserLaunchMode browserLaunchMode);
+ Task OpenAsync(Uri uri, BrowserLaunchOptions browserLaunchOptions);
+
+
+ }
+}