Skip to content

Commit ab7bae1

Browse files
committed
misc stuffs
1 parent d589b01 commit ab7bae1

File tree

14 files changed

+172
-144
lines changed

14 files changed

+172
-144
lines changed

analysis_options.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ analyzer:
3232
- build/**
3333
- pub_cache/**
3434
- lib/**.g.dart
35-
- lib/l10n/**
35+
- lib/l10n/**
36+
plugins:
37+
- custom_lint

lib/Backend/Definitions/Device/device_definition.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'dart:async';
22
import 'dart:convert';
33
import 'dart:core';
44

5-
import 'package:circular_buffer/circular_buffer.dart';
65
import 'package:collection/collection.dart';
76
import 'package:fl_chart/fl_chart.dart';
87
import 'package:flutter/material.dart';

lib/Backend/command_runner.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:connectivity_plus/connectivity_plus.dart';
21
import 'package:data_saver/data_saver.dart';
32
import 'package:riverpod_annotation/riverpod_annotation.dart';
43
import 'package:tail_app/Backend/Bluetooth/bluetooth_message.dart';
@@ -154,14 +153,12 @@ class RunAction extends _$RunAction {
154153
List<BluetoothMessage> generateMoveCommand(Move move, BaseStatefulDevice device, CommandType type, {bool noResponseMsg = false, Priority priority = Priority.normal}) {
155154
List<BluetoothMessage> commands = [];
156155
if (move.moveType == MoveType.home) {
157-
//TODO: Remove for TAILCoNTROL update
158156
if (device.baseDeviceDefinition.deviceType == DeviceType.ears && device.isTailCoNTROL.value != TailControlStatus.tailControl) {
159157
commands.add(BluetoothMessage(message: "EARHOME", priority: priority, responseMSG: noResponseMsg ? null : "EARHOME END", type: type, timestamp: DateTime.now()));
160158
} else {
161159
commands.add(BluetoothMessage(message: "TAILHM", priority: priority, responseMSG: noResponseMsg ? null : "END TAILHM", type: type, timestamp: DateTime.now()));
162160
}
163161
} else if (move.moveType == MoveType.move) {
164-
//TODO: Remove for TAILCoNTROL update
165162
if (device.baseDeviceDefinition.deviceType == DeviceType.ears && device.isTailCoNTROL.value != TailControlStatus.tailControl) {
166163
commands
167164
..add(

lib/Backend/firmware_update.dart

Lines changed: 45 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -44,38 +44,40 @@ Future<List<FWInfo>?> getBaseFirmwareInfo(Ref ref, String url) async {
4444
return Response(requestOptions: RequestOptions(), statusCode: 500);
4545
});
4646
Response<String> value = await valueFuture;
47+
List<FWInfo> results = [];
4748
if (value.statusCode! < 400) {
48-
return (const JsonDecoder().convert(value.data.toString()) as List).map(
49-
(e) {
50-
return FWInfo.fromJson(e);
51-
},
52-
).toList();
49+
results = (const JsonDecoder().convert(value.data.toString()) as List).map((e) {
50+
return FWInfo.fromJson(e);
51+
}).toList();
5352
}
54-
return null;
53+
return results;
5554
}
5655

57-
@Riverpod()
56+
@Riverpod(keepAlive: true)
5857
Future<FWInfo?> getFirmwareInfo(Ref ref, String url, String hwVer) async {
5958
if (url.isEmpty || hwVer.isEmpty) {
6059
return null;
6160
}
62-
List<FWInfo>? fwInfos = await ref.read(getBaseFirmwareInfoProvider(url).future);
61+
62+
// https://github.com/rrousselGit/riverpod/issues/3745
63+
// using ref.read(provider.future) causes an infinite await on riverpod 3.0
64+
65+
final fwInfosListener = ref.listen(getBaseFirmwareInfoProvider(url).future, (p, n) {});
66+
List<FWInfo>? fwInfos;
67+
try {
68+
fwInfos = await fwInfosListener.read();
69+
} finally {
70+
fwInfosListener.close();
71+
}
72+
6373
if (fwInfos == null) {
6474
return null;
6575
}
6676
if (fwInfos.isNotEmpty) {
6777
// Find a FW file that matches the gear hardware version
68-
FWInfo? fwInfo = fwInfos.firstWhereOrNull(
69-
(element) =>
70-
element.supportedHardwareVersions.firstWhereOrNull(
71-
(element) => element.trim().toUpperCase() == hwVer.trim().toUpperCase(),
72-
) !=
73-
null,
74-
);
78+
FWInfo? fwInfo = fwInfos.firstWhereOrNull((element) => element.supportedHardwareVersions.firstWhereOrNull((element) => element.trim().toUpperCase() == hwVer.trim().toUpperCase()) != null);
7579
// Fall back to a generic file if it exists
76-
fwInfo ??= fwInfos.firstWhereOrNull(
77-
(element) => element.supportedHardwareVersions.isEmpty,
78-
);
80+
fwInfo ??= fwInfos.firstWhereOrNull((element) => element.supportedHardwareVersions.isEmpty);
7981
if (fwInfo != null) {
8082
//check that the app supports this firmware version
8183
Version minimumAppVersion = getVersionSemVer(fwInfo.minimumAppVersion);
@@ -135,27 +137,9 @@ Future<bool> hasOtaUpdate(Ref ref, BaseStatefulDevice baseStatefulDevice) async
135137
return false;
136138
}
137139

138-
enum OtaState {
139-
standby,
140-
download,
141-
upload,
142-
error,
143-
manual,
144-
completed,
145-
lowBattery,
146-
rebooting,
147-
}
140+
enum OtaState { standby, download, upload, error, manual, completed, lowBattery, rebooting }
148141

149-
enum OtaError {
150-
md5Mismatch,
151-
downloadFailed,
152-
gearVersionMismatch,
153-
gearReturnedError,
154-
uploadFailed,
155-
gearReconnectTimeout,
156-
gearDisconnectTimeout,
157-
gearOtaFinalTimeout,
158-
}
142+
enum OtaError { md5Mismatch, downloadFailed, gearVersionMismatch, gearReturnedError, uploadFailed, gearReconnectTimeout, gearDisconnectTimeout, gearOtaFinalTimeout }
159143

160144
@Riverpod()
161145
class OtaUpdater extends _$OtaUpdater {
@@ -320,14 +304,11 @@ class OtaUpdater extends _$OtaUpdater {
320304
if (OtaState.rebooting == state) {
321305
if (connectivityState == ConnectivityState.disconnected) {
322306
_disconnectTimer?.cancel();
323-
_reconnectTimer = Timer(
324-
const Duration(seconds: 30),
325-
() {
326-
_otaLogger.warning("Gear did not reconnect");
327-
_onError(OtaError.gearReconnectTimeout, transaction);
328-
transaction?.finish();
329-
},
330-
);
307+
_reconnectTimer = Timer(const Duration(seconds: 30), () {
308+
_otaLogger.warning("Gear did not reconnect");
309+
_onError(OtaError.gearReconnectTimeout, transaction);
310+
transaction?.finish();
311+
});
331312
} else if (connectivityState == ConnectivityState.connected) {
332313
_reconnectTimer?.cancel();
333314
}
@@ -379,30 +360,27 @@ class OtaUpdater extends _$OtaUpdater {
379360
if (uploadProgress == 1) {
380361
_otaLogger.info("File Uploaded");
381362
state = OtaState.rebooting;
382-
_disconnectTimer = Timer(
383-
const Duration(seconds: 30),
384-
() {
385-
_otaLogger.warning("Gear did not disconnect");
386-
_onError(OtaError.gearDisconnectTimeout, transaction);
387-
transaction?.finish();
388-
},
389-
);
363+
_disconnectTimer = Timer(const Duration(seconds: 30), () {
364+
_otaLogger.warning("Gear did not disconnect");
365+
_onError(OtaError.gearDisconnectTimeout, transaction);
366+
transaction?.finish();
367+
});
390368
// start scanning for the gear to reconnect
391-
_finalTimer = Timer(
392-
const Duration(seconds: 60),
393-
() {
394-
if (state != OtaState.completed) {
395-
_otaLogger.warning("Gear did not return correct version after reboot");
396-
_onError(OtaError.gearOtaFinalTimeout, transaction);
397-
transaction?.finish();
398-
}
369+
_finalTimer = Timer(const Duration(seconds: 60), () {
370+
if (state != OtaState.completed) {
371+
_otaLogger.warning("Gear did not return correct version after reboot");
372+
_onError(OtaError.gearOtaFinalTimeout, transaction);
373+
transaction?.finish();
374+
}
375+
});
376+
analyticsEvent(
377+
name: "Update Gear",
378+
props: {
379+
"Target Gear": baseStatefulDevice.baseDeviceDefinition.btName,
380+
"Hardware Version": baseStatefulDevice.hwVersion.value,
381+
"Firmware Version": baseStatefulDevice.fwVersion.value.toString(),
399382
},
400383
);
401-
analyticsEvent(name: "Update Gear", props: {
402-
"Target Gear": baseStatefulDevice.baseDeviceDefinition.btName,
403-
"Hardware Version": baseStatefulDevice.hwVersion.value,
404-
"Firmware Version": baseStatefulDevice.fwVersion.value.toString()
405-
});
406384
}
407385
baseStatefulDevice.deviceState.value = DeviceState.standby; // release the command queue
408386
}

lib/Backend/sensors.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'dart:math';
66

77
import 'package:ble_peripheral/ble_peripheral.dart';
88
import 'package:built_collection/built_collection.dart';
9-
import 'package:collection/collection.dart';
109
import 'package:flutter/foundation.dart';
1110
import 'package:flutter/material.dart';
1211
import 'package:flutter_android_volume_keydown/flutter_android_volume_keydown.dart';

lib/Backend/wear_bridge.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:async';
22

33
import 'package:built_collection/built_collection.dart';
4-
import 'package:flutter_riverpod/flutter_riverpod.dart';
54
import 'package:freezed_annotation/freezed_annotation.dart';
65
import 'package:logging/logging.dart';
76
import 'package:riverpod_annotation/riverpod_annotation.dart';

lib/Frontend/Widgets/coshub_feed.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:tail_app/Frontend/Widgets/tail_blog.dart';
77
import 'package:tail_app/Frontend/Widgets/tail_blog_image.dart';
88
import 'package:tail_app/Frontend/Widgets/uwu_text.dart';
99
import 'package:tail_app/Frontend/utils.dart';
10-
import 'package:tail_app/constants.dart';
1110

1211
class CoshubFeed extends ConsumerStatefulWidget {
1312
const CoshubFeed({super.key});

lib/Frontend/pages/custom_audio.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'dart:io';
22

33
import 'package:built_collection/built_collection.dart';
44
import 'package:file_picker/file_picker.dart';
5-
import 'package:flutter/foundation.dart';
65
import 'package:flutter/material.dart';
76
import 'package:flutter_riverpod/flutter_riverpod.dart';
87
import 'package:logging/logging.dart';

lib/Frontend/pages/developer/developer_menu.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'dart:io';
22

33
import 'package:connectivity_plus/connectivity_plus.dart';
44
import 'package:data_saver/data_saver.dart';
5-
import 'package:flutter/foundation.dart';
65
import 'package:flutter/material.dart';
76
import 'package:flutter/services.dart';
87
import 'package:flutter_blue_plus/flutter_blue_plus.dart';

lib/Frontend/pages/triggers.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import '../../Backend/analytics.dart';
1717
import '../../Backend/sensors.dart';
1818
import '../../constants.dart';
1919
import '../Widgets/casual_mode_delay_widget.dart';
20-
import '../Widgets/device_type_widget.dart';
2120
import '../Widgets/tutorial_card.dart';
2221
import '../go_router_config.dart';
2322
import '../translation_string_definitions.dart';

0 commit comments

Comments
 (0)