diff --git a/lib/src/app/app.dart b/lib/src/app/app.dart index 4e8d5cce71e..01fd3ed4a48 100644 --- a/lib/src/app/app.dart +++ b/lib/src/app/app.dart @@ -3,6 +3,7 @@ import 'dart:async'; import '../../protos/app/packages.dart'; import '../gen/app/v1/app.pbgrpc.dart'; import '../gen/common/v1/common.pb.dart'; +import '../gen/google/protobuf/timestamp.pb.dart'; import '../utils.dart'; import 'permissions.dart'; @@ -363,11 +364,12 @@ class AppClient { /// Update a specific [RobotPart] by ID /// /// For more information, see [Fleet Management API](https://docs.viam.com/appendix/apis/fleet/). - Future updateRobotPart(String partId, String name, Map robotConfig) async { + Future updateRobotPart(String partId, String name, Map robotConfig, {DateTime? lastKnownUpdate}) async { final updateRobotPartRequest = UpdateRobotPartRequest() ..id = partId ..name = name ..robotConfig = robotConfig.toStruct(); + if (lastKnownUpdate != null) updateRobotPartRequest.lastKnownUpdate = Timestamp.fromDateTime(lastKnownUpdate); final response = await _client.updateRobotPart(updateRobotPartRequest); return response.part; } @@ -513,13 +515,14 @@ class AppClient { /// /// For more information, see [Fleet Management API](https://docs.viam.com/appendix/apis/fleet/). Future updateFragment(String id, String name, Map config, - {bool? public, FragmentVisibility? visibility}) async { + {bool? public, FragmentVisibility? visibility, DateTime? lastKnownUpdate}) async { final request = UpdateFragmentRequest() ..id = id ..name = name ..config = config.toStruct(); if (public != null) request.public = public; if (visibility != null) request.visibility = visibility; + if (lastKnownUpdate != null) request.lastKnownUpdate = Timestamp.fromDateTime(lastKnownUpdate); final UpdateFragmentResponse response = await _client.updateFragment(request); return response.fragment; } diff --git a/test/unit_test/app/app_client_test.dart b/test/unit_test/app/app_client_test.dart index cc06da9034c..25479ca124f 100644 --- a/test/unit_test/app/app_client_test.dart +++ b/test/unit_test/app/app_client_test.dart @@ -385,7 +385,7 @@ void main() { ..name = 'name2'; when(serviceClient.updateRobotPart(any)).thenAnswer((_) => MockResponseFuture.value(UpdateRobotPartResponse()..part = expected)); final rc = {'robot': 'config'}; - final response = await appClient.updateRobotPart('robot part', 'name2', rc); + final response = await appClient.updateRobotPart('robot part', 'name2', rc, lastKnownUpdate: DateTime.now()); expect(response, equals(expected)); }); @@ -547,7 +547,7 @@ void main() { ..organizationCount = 2 ..onlyUsedByOwner = false; when(serviceClient.updateFragment(any)).thenAnswer((_) => MockResponseFuture.value(UpdateFragmentResponse()..fragment = expected)); - final response = await appClient.updateFragment('id', 'name', {'config': 2}, public: false); + final response = await appClient.updateFragment('id', 'name', {'config': 2}, public: false, lastKnownUpdate: DateTime.now()); expect(response, equals(expected)); });