sharee.bike-App/TINKLib/Model/Bikes/BikeCollectionUpdater.cs
Anja Müller-Meißner 0468955d49 Version 3.0.338
2022-09-08 09:55:14 +02:00

38 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.Linq;
namespace TINK.Model.Bikes
{
public static class BikeCollectionUpdater
{
/// <summary> Updates bikes lock info with the latest lock info from bluetooth service.</summary>
/// <param name="bikes">bikes to be updated.</param>
/// <param name="locksInfo">locks info to be used for updating bikes.</param>
/// <returns></returns>
public static BikeCollection UpdateLockInfo(
this BikeCollection bikes,
IEnumerable<Bikes.BikeInfoNS.BluetoothLock.LockInfo> locksInfo)
{
var updatedBikesCollection = new Dictionary<string, Bikes.BikeInfoNS.BC.BikeInfo>();
foreach (var bikeInfo in bikes)
{
if (!(bikeInfo is BikeInfoNS.BluetoothLock.BikeInfo bluetoothBikeInfo))
{
// No processing needed because bike is not a bluetooth bike
updatedBikesCollection.Add(bikeInfo.Id, bikeInfo);
continue;
}
// Check if to update current bike lock info using state from bluetooth service or not.
var currentLockInfo = locksInfo.FirstOrDefault(x => x.Id == bluetoothBikeInfo.LockInfo.Id) // Update bike info with latest info from bluethooth service if available
?? bluetoothBikeInfo.LockInfo; // Use lock info state object from copri which holds a lock id and a state of value unknown.
updatedBikesCollection.Add(bluetoothBikeInfo.Id, new BikeInfoNS.BluetoothLock.BikeInfo(bluetoothBikeInfo, currentLockInfo));
}
return new BikeCollection(updatedBikesCollection);
}
}
}