mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-16 23:26:26 +01:00
118 lines
3.9 KiB
C#
118 lines
3.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using TINK.Model.Connector;
|
|
using TINK.Repository.Request;
|
|
using TINK.Services.BluetoothLock;
|
|
using TINK.Services.Geolocation;
|
|
using TINK.ViewModel;
|
|
using static TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command.CloseCommand;
|
|
using static TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command.GetLockedLocationCommand;
|
|
|
|
namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
|
|
{
|
|
public class BikeInfoMutable : BC.BikeInfoMutable, IBikeInfoMutable
|
|
{
|
|
/// <summary> Provides a connector object.</summary>
|
|
private Func<bool, IConnector> ConnectorFactory { get; }
|
|
|
|
/// <summary> Provides geolocation information.</summary>
|
|
private IGeolocationService GeolocationService { get; }
|
|
|
|
/// <summary> Provides a connector object.</summary>
|
|
private ILocksService LockService { get; }
|
|
|
|
/// <summary> Delegate to retrieve connected state. </summary>
|
|
private Func<bool> IsConnectedDelegate { get; }
|
|
|
|
/// <summary>Object to manage update of view model objects from Copri.</summary>
|
|
protected Func<IPollingUpdateTaskManager> ViewUpdateManager { get; }
|
|
|
|
/// <summary> Constructs a bike object from source. </summary>
|
|
/// <param name="viewUpdateManager">Manages update of view model objects from Copri.</param>
|
|
public BikeInfoMutable(
|
|
IGeolocationService geolocation,
|
|
ILocksService lockService,
|
|
Func<bool> isConnectedDelegate,
|
|
Func<bool, IConnector> connectorFactory,
|
|
Func<IPollingUpdateTaskManager> viewUpdateManager,
|
|
BikeInfo bike,
|
|
string stationName) : base(
|
|
bike != null
|
|
? bike.Bike
|
|
: throw new ArgumentNullException(nameof(bike)),
|
|
bike.Drive,
|
|
bike.DataSource,
|
|
bike.IsDemo,
|
|
bike.Group,
|
|
bike.StationId,
|
|
stationName,
|
|
bike.OperatorUri,
|
|
bike.TariffDescription,
|
|
() => DateTime.Now,
|
|
bike.State)
|
|
{
|
|
LockInfo = new LockInfoMutable(
|
|
bike.LockInfo.Id,
|
|
bike.LockInfo.Guid,
|
|
bike.LockInfo.UserKey,
|
|
bike.LockInfo.AdminKey,
|
|
bike.LockInfo.Seed,
|
|
bike.LockInfo.State);
|
|
|
|
GeolocationService = geolocation
|
|
?? throw new ArgumentException($"Can not instantiate {nameof(BikeInfoMutable)}- object. No geolocation object available.");
|
|
|
|
LockService = lockService
|
|
?? throw new ArgumentException($"Can not instantiate {nameof(BikeInfoMutable)}- object. No lock service object available.");
|
|
|
|
IsConnectedDelegate = isConnectedDelegate
|
|
?? throw new ArgumentException($"Can not instantiate {nameof(BikeInfoMutable)}- object. No is connected delegate available.");
|
|
|
|
ConnectorFactory = connectorFactory
|
|
?? throw new ArgumentException($"Can not instantiate {nameof(BikeInfoMutable)}- object. No connector available.");
|
|
|
|
ViewUpdateManager = viewUpdateManager
|
|
?? throw new ArgumentException($"Can not instantiate {nameof(BikeInfoMutable)}- object. No update manger available.");
|
|
}
|
|
|
|
public LockInfoMutable LockInfo { get; }
|
|
|
|
ILockInfoMutable IBikeInfoMutable.LockInfo => LockInfo;
|
|
|
|
/// <summary>
|
|
/// Closes the lock and updates copri.
|
|
/// </summary>
|
|
/// <param name="listener">View model to process closing notifications.</param>
|
|
/// <param name="stopPollingTask">Task which stops polling.</param>
|
|
public async Task CloseLockAsync(
|
|
ICloseCommandListener listener,
|
|
Task stopPollingTask)
|
|
{
|
|
await InvokeAsync<BikeInfoMutable>(
|
|
this,
|
|
GeolocationService,
|
|
LockService,
|
|
IsConnectedDelegate,
|
|
ConnectorFactory,
|
|
listener,
|
|
stopPollingTask);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the location of the locked bike.
|
|
/// </summary>
|
|
/// <param name="listener">View model to process notifications.</param>
|
|
/// <returns></returns>
|
|
public async Task<LocationDto> GetLockedBikeLocationAsync(IGetLockedLocationCommandListener listener) =>
|
|
await InvokeAsync<BikeInfoMutable>(
|
|
this,
|
|
GeolocationService,
|
|
LockService,
|
|
listener: listener);
|
|
|
|
public new string ToString()
|
|
{
|
|
return $"Id={Id}{(TypeOfBike != null ? $";type={TypeOfBike}" : "")};state={State.ToString()}";
|
|
}
|
|
}
|
|
}
|