app/lib/global_ui_model.dart

85 lines
2.8 KiB
Dart
Raw Normal View History

2023-10-09 09:32:07 +08:00
// ignore_for_file: use_build_context_synchronously
2023-11-06 22:23:06 +08:00
import 'dart:io';
2023-10-09 09:32:07 +08:00
import 'package:flutter_riverpod/flutter_riverpod.dart';
2023-11-08 20:48:48 +08:00
import 'package:hive/hive.dart';
2023-11-06 22:23:06 +08:00
import 'package:starcitizen_doctor/common/helper/log_helper.dart';
2023-10-09 09:32:07 +08:00
import 'api/api.dart';
import 'base/ui_model.dart';
import 'common/conf.dart';
2023-11-06 22:23:06 +08:00
import 'common/helper/system_helper.dart';
2023-10-09 09:32:07 +08:00
import 'ui/settings/upgrade_dialog_ui.dart';
import 'ui/settings/upgrade_dialog_ui_model.dart';
final globalUIModel = AppGlobalUIModel();
final globalUIModelProvider = ChangeNotifierProvider((ref) => globalUIModel);
class AppGlobalUIModel extends BaseUIModel {
Future<bool> checkUpdate(BuildContext context, {bool init = true}) async {
2023-10-31 00:27:46 +08:00
if (AppConf.isMSE) return true;
2023-10-09 09:32:07 +08:00
if (!init) {
try {
AppConf.networkVersionData = await Api.getAppVersion();
} catch (_) {}
}
await Future.delayed(const Duration(milliseconds: 100));
if (AppConf.networkVersionData == null) {
showToast(context,
"检查更新失败!请检查网络连接... \n进入离线模式.. \n\n请谨慎在离线模式中使用。 \n当前版本构建日期:${AppConf.appVersionDate}\n QQ群940696487");
return false;
}
if (((AppConf.networkVersionData?.lastVersionCode) ?? 0) >
AppConf.appVersionCode) {
// need update
final r = await showDialog(
dismissWithEsc: false,
context: context,
builder: (context) => BaseUIContainer(
uiCreate: () => UpgradeDialogUI(),
modelCreate: () => UpgradeDialogUIModel()));
if (r != true) {
showToast(context, "获取更新信息失败,请稍后重试。");
return false;
}
return true;
}
return false;
}
2023-11-06 22:23:06 +08:00
Future<bool> checkAdmin() async {
const checkAdmin =
r"if ((New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { exit 0 } else { exit 1 }";
2023-11-07 22:35:25 +08:00
final r = await Process.run(SystemHelper.powershellPath, [checkAdmin]);
2023-11-06 22:23:06 +08:00
dPrint("code == ${r.exitCode} msg == ${r.stdout} err = ${r.stderr}");
if (r.exitCode == 0) {
return true;
} else {
if (!AppConf.isMSE) {
await _runAsAdmin();
} else {
final logPath = await SCLoggerHelper.getLogFilePath();
if (logPath != null) {
if (await File(logPath).exists()) {
await _runAsAdmin();
}
}
}
return false;
}
}
_runAsAdmin() async {
2023-11-08 20:48:48 +08:00
final box = await Hive.openBox("app_conf");
await box.close();
await Process.run(SystemHelper.powershellPath, [
"""
Start-Process powershell -Verb RunAs -ArgumentList "Start-Process '${Platform.resolvedExecutable}' -Verb RunAs"
"""
]);
await Future.delayed(const Duration(seconds: 2));
2023-11-06 22:23:06 +08:00
exit(0);
}
2023-10-09 09:32:07 +08:00
}