feat: add alot

This commit is contained in:
2026-10-08 04:12:36 +02:00
parent ccf5165417
commit fc607cb7bd
99 changed files with 4981 additions and 3655 deletions
+16 -15
View File
@@ -1,10 +1,11 @@
import 'package:flutter/foundation.dart';
import 'package:kooltab2/utils/app_update_util.dart';
import 'package:ota_update/ota_update.dart';
import '../models/app_error.dart';
import '../models/settings.dart';
import '../services/settings_service.dart';
import '../utils/app_config.dart';
import '../utils/app_update_util.dart';
class SettingsViewModel extends ChangeNotifier {
final SettingsService settingsService;
@@ -14,7 +15,7 @@ class SettingsViewModel extends ChangeNotifier {
AppSettings _settings = AppSettings.defaults;
bool _isLoading = false;
bool _hasLoaded = false;
String? _errorMessage;
AppError? _error;
final AppUpdateUtil _updater = AppUpdateUtil(serverUrl: kUpdateServerUrl);
@@ -28,7 +29,7 @@ class SettingsViewModel extends ChangeNotifier {
bool get hasLoaded => _hasLoaded;
String? get errorMessage => _errorMessage;
AppError? get error => _error;
Future<void> ensureLoaded() async {
if (_hasLoaded || _isLoading) return;
@@ -39,14 +40,14 @@ class SettingsViewModel extends ChangeNotifier {
if (_isLoading) return;
_isLoading = true;
_errorMessage = null;
_error = null;
notifyListeners();
try {
_settings = await settingsService.getSettings();
} catch (e) {
debugPrint('SettingsViewModel: load error: $e');
_errorMessage = 'Could not load settings.';
_error = AppError.loadSettings;
} finally {
_hasLoaded = true;
_isLoading = false;
@@ -72,33 +73,33 @@ class SettingsViewModel extends ChangeNotifier {
UpdateInfo update, {
void Function(double progress)? onProgress,
}) async {
final url = update.download.startsWith("http")
final url = update.download.startsWith('http')
? update.download
: "$kUpdateServerUrl${update.download}";
: '$kUpdateServerUrl${update.download}';
debugPrint("Download Url: $url");
debugPrint('Download Url: $url');
final stream = OtaUpdate().execute(
url,
destinationFilename: "update.apk",
destinationFilename: 'update.apk',
sha256checksum: update.sha256,
);
await for (final event in stream) {
debugPrint("OTA: ${event.status} ${event.value}");
debugPrint('OTA: ${event.status} ${event.value}');
if (event.status == OtaStatus.DOWNLOADING) {
final progress = double.tryParse(event.value ?? "0") ?? 0;
final progress = double.tryParse(event.value ?? '0') ?? 0;
onProgress?.call(progress / 100);
}
if (event.status == OtaStatus.DOWNLOAD_ERROR) {
throw Exception("Download failed: ${event.value}");
throw Exception('Download failed: ${event.value}');
}
if (event.status == OtaStatus.INSTALLATION_ERROR) {
throw Exception("Installation failed: ${event.value}");
throw Exception('Installation failed: ${event.value}');
}
}
}
@@ -121,7 +122,7 @@ class SettingsViewModel extends ChangeNotifier {
Future<void> _save(AppSettings updated) async {
final previous = _settings;
_settings = updated;
_errorMessage = null;
_error = null;
notifyListeners();
try {
@@ -129,7 +130,7 @@ class SettingsViewModel extends ChangeNotifier {
} catch (e) {
debugPrint('SettingsViewModel: save error: $e');
_settings = previous;
_errorMessage = 'Could not save settings.';
_error = AppError.saveSettings;
notifyListeners();
}
}