import 'dart:convert'; import 'dart:io'; class FirmwareVersionInfo { final String version; final String fileName; final String downloadUrl; FirmwareVersionInfo({ required this.version, required this.fileName, required this.downloadUrl, }); @override String toString() { return 'FirmwareVersionInfo{version: $version, fileName: $fileName, downloadUrl: $downloadUrl}'; } } class FirmwareVersionService { /// 从远程URL获取最新的固件版本信息 /// [baseUrl] 基础URL,如 "https://share.file.he-info.cn" /// [firmwarePath] 固件路径,如 "/ota/aithv2/" static Future getLatestFirmwareVersion({ required String baseUrl, required String firmwarePath, }) async { try { // 构建完整的API URL final apiUrl = '$baseUrl/~/api/get_file_list?uri=$firmwarePath'; // 发送HTTP请求 - 使用基础的http客户端,不依赖项目特定实现 final response = await _makeHttpRequest(apiUrl); if (response == null) { return null; } // 解析响应数据 return _parseFirmwareData(response, baseUrl, firmwarePath); } catch (e) { print('获取固件版本信息失败: $e'); return null; } } /// 发送HTTP请求 static Future _makeHttpRequest(String url) async { try { // 使用基础的http客户端 final httpClient = HttpClient(); final request = await httpClient.getUrl(Uri.parse(url)); final response = await request.close(); if (response.statusCode != 200) { return null; } final responseBody = await response.transform(utf8.decoder).join(); return jsonDecode(responseBody); } catch (e) { print('HTTP请求失败: $e'); return null; } } /// 解析固件数据 static FirmwareVersionInfo? _parseFirmwareData( dynamic data, String baseUrl, String firmwarePath ) { if (data == null || data['list'] == null) { return null; } final versionList = data['list'] as List; int? maxVersionNum; String? latestFileName; for (var item in versionList) { if (item is Map && item.containsKey('n')) { final fileName = item['n'] as String; try { // 解析版本号 - 假设文件名格式为 "something-version.extension" final versionMatch = _extractVersionFromFileName(fileName); if (versionMatch != null) { final versionNum = int.parse(versionMatch); if (maxVersionNum == null || versionNum > maxVersionNum) { maxVersionNum = versionNum; latestFileName = fileName; } } } catch (e) { // 解析失败跳过 continue; } } } if (latestFileName != null && maxVersionNum != null) { // 构建下载URL final downloadUrl = '$baseUrl/${firmwarePath.replaceFirst('/', '')}$latestFileName'; return FirmwareVersionInfo( version: maxVersionNum.toString(), fileName: latestFileName, downloadUrl: downloadUrl, ); } return null; } /// 从文件名中提取版本号 static String? _extractVersionFromFileName(String fileName) { // 多种可能的文件名格式处理 final patterns = [ // 格式: something-123.bin RegExp(r'-(\d+)\.'), // 格式: v123.bin RegExp(r'v(\d+)\.'), // 格式: firmware_123.bin RegExp(r'_(\d+)\.'), ]; for (final pattern in patterns) { final match = pattern.firstMatch(fileName); if (match != null && match.groupCount >= 1) { return match.group(1); } } return null; } }