更新太和e护配置wifi失败问题

This commit is contained in:
wyf
2025-11-13 09:56:02 +08:00
parent a9992f40ee
commit 776275aa3d
34 changed files with 5470 additions and 552 deletions

View File

@@ -0,0 +1,165 @@
// 批量升级封装类
import 'package:easydevice/easydevice.dart';
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:vbvs_app/common/util/BluetoothFirmwareUpdater.dart';
import 'package:vbvs_app/component/tool/NewTopSlideNotification.dart';
import 'package:vbvs_app/pages/mh_page/device/model/BlueToothDataModel.dart';
import 'package:vbvs_app/pages/mh_page/device/upgrade/device_upgrade_controller.dart';
class BatchUpgradeManager {
static final BatchUpgradeManager _instance = BatchUpgradeManager._internal();
factory BatchUpgradeManager() => _instance;
BatchUpgradeManager._internal();
final MultiDeviceFirmwareUpdater _updater = MultiDeviceFirmwareUpdater();
final MHTDeviceUpgradeController _upgradeController = Get.find();
bool _isBatchUpgrading = false;
final List<BlueToothDataModel> _batchDevices = [];
// 开始批量升级
Future<void> startBatchUpgrade(List<BlueToothDataModel> devices) async {
if (_isBatchUpgrading) {
throw Exception("批量升级正在进行中".tr);
}
_isBatchUpgrading = true;
_batchDevices.clear();
_upgradeController.clearUpgradingList();
// 验证设备并添加到升级列表
for (var device in devices) {
if (device.selected == true) {
_batchDevices.add(device);
_upgradeController.addToUpgradingList(device);
}
}
if (_batchDevices.isEmpty) {
_isBatchUpgrading = false;
throw Exception("没有选择要升级的设备".tr);
}
// 开始批量升级
try {
await _startBatchUpgradeInternal();
} catch (e) {
_isBatchUpgrading = false;
rethrow;
}
}
// 内部批量升级实现
Future<void> _startBatchUpgradeInternal() async {
final List<Future> upgradeFutures = [];
for (var device in _batchDevices) {
final future = _startSingleDeviceUpgrade(device);
upgradeFutures.add(future);
}
// 等待所有升级完成
try {
await Future.wait(upgradeFutures, eagerError: false);
} finally {
_isBatchUpgrading = false;
_showBatchUpgradeCompleteNotification();
}
}
// 单个设备升级
Future<void> _startSingleDeviceUpgrade(BlueToothDataModel device) async {
try {
// 创建 THapp 实例
final thapp = THapp(device: device.scanResult.device);
// 获取固件URL - 需要您提供实现
final firmwareUrl = await _getFirmwareUrl();
if (firmwareUrl == null) {
throw Exception("固件URL为空".tr);
}
// 使用现有的升级器进行升级
await _updater.startUpgrade(
thapp: thapp,
mac: device.mac,
firmwareUrl: firmwareUrl,
);
// 升级成功,从列表中移除
_upgradeController.removeFromUpgradingList(device.mac);
} catch (e) {
// 升级失败,也从列表中移除(或者您可以保留失败设备用于重试)
_upgradeController.removeFromUpgradingList(device.mac);
rethrow;
}
}
// 获取固件URL - 需要您根据实际情况实现
Future<String?> _getFirmwareUrl() async {
// 这里可以从配置、用户选择或其他地方获取固件URL
// 例如return _upgradeController.selectedFirmwareUrl;
return null;
}
// 取消批量升级
void cancelBatchUpgrade() {
for (var device in _batchDevices) {
if (_updater.isDeviceUpgrading(device.mac)) {
_updater.cancelUpgrade(device.mac);
}
_upgradeController.removeFromUpgradingList(device.mac);
}
_isBatchUpgrading = false;
_batchDevices.clear();
NewTopSlideNotification.show(
text: "批量升级已取消".tr,
textColor: Colors.orange,
);
}
// 显示批量升级完成通知
void _showBatchUpgradeCompleteNotification() {
final allStatus = _updater.getAllUpgradeStatus();
final completedCount = allStatus.values.where((status) =>
status['status'] == 'completed').length;
final failedCount = allStatus.values.where((status) =>
status['status'] == 'failed').length;
String message;
if (failedCount == 0) {
message = "批量升级完成,所有 ${_batchDevices.length} 个设备升级成功".tr;
} else {
message = "批量升级完成,$completedCount 个成功,$failedCount 个失败".tr;
}
NewTopSlideNotification.show(
text: message,
textColor: failedCount == 0 ? Colors.green : Colors.orange,
);
}
// 检查是否正在批量升级
bool get isBatchUpgrading => _isBatchUpgrading;
// 获取批量升级统计
Map<String, int> getBatchUpgradeStatistics() {
final allStatus = _updater.getAllUpgradeStatus();
return {
'total': _batchDevices.length,
'completed': allStatus.values.where((status) =>
status['status'] == 'completed').length,
'failed': allStatus.values.where((status) =>
status['status'] == 'failed').length,
'upgrading': allStatus.values.where((status) =>
status['status'] == 'upgrading' || status['status'] == 'downloading').length,
'waiting': allStatus.values.where((status) =>
status['status'] == 'waiting').length,
};
}
}