feat: friendly notification
This commit is contained in:
@@ -3,6 +3,8 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:winui_n2n/edge_state.dart';
|
||||
import 'package:winui_n2n/globals.dart';
|
||||
import 'package:winui_n2n/navigation_service.dart';
|
||||
import 'package:winui_n2n/saved_connection.dart';
|
||||
import 'package:winui_n2n/shared_pref_singleton.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
@@ -276,22 +278,93 @@ class _ControlPageState extends State<ControlPage> {
|
||||
'-r',
|
||||
],
|
||||
).then((process) async {
|
||||
EdgeState.instance.isRunning = true;
|
||||
EdgeState.instance.process = process;
|
||||
EdgeState.instance.logger
|
||||
.addLog('edge.exe starting');
|
||||
debugPrint('edge.exe starting');
|
||||
setState(() {
|
||||
_edgeConnecting = false;
|
||||
});
|
||||
EdgeState.instance.logger.addLog('edge.exe start');
|
||||
|
||||
process.stdout
|
||||
.transform(const SystemEncoding().decoder)
|
||||
.listen((data) {
|
||||
debugPrint('stdout: $data');
|
||||
|
||||
if (data.contains('<<< ================ >>>')) {
|
||||
debugPrint('edge.exe connected');
|
||||
ScaffoldMessenger.of(context)
|
||||
..removeCurrentSnackBar()
|
||||
..showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!
|
||||
.successfullyConnected),
|
||||
duration: const Duration(seconds: 2),
|
||||
),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_edgeConnecting = false;
|
||||
EdgeState.instance.isRunning = true;
|
||||
});
|
||||
} else if (data.contains(
|
||||
'MAC or IP address already in use or not released yet by supernode')) {
|
||||
debugPrint(
|
||||
'MAC or IP address already in use or not released yet by supernode');
|
||||
|
||||
ScaffoldMessenger.of(context)
|
||||
..removeCurrentSnackBar()
|
||||
..showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!
|
||||
.macOrIpAlreadyInUse),
|
||||
duration: const Duration(seconds: 2),
|
||||
),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_edgeConnecting = false;
|
||||
if (EdgeState.instance.process != null) {
|
||||
if (EdgeState.instance.process!.kill()) {
|
||||
EdgeState.instance.isRunning = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
// else if (data.contains(
|
||||
// 'username or password not recognized by supernode')) {
|
||||
// debugPrint('Other reason fail');
|
||||
|
||||
// ScaffoldMessenger.of(context)
|
||||
// ..removeCurrentSnackBar()
|
||||
// ..showSnackBar(
|
||||
// SnackBar(
|
||||
// content: Text(
|
||||
// AppLocalizations.of(context)!
|
||||
// .otherReasonFail),
|
||||
// duration: const Duration(seconds: 2),
|
||||
// ),
|
||||
// );
|
||||
|
||||
// setState(() {
|
||||
// _edgeConnecting = false;
|
||||
// EdgeState.instance.isRunning = false;
|
||||
// });
|
||||
// }
|
||||
|
||||
EdgeState.instance.logger.addLog(data);
|
||||
});
|
||||
|
||||
await process.exitCode;
|
||||
if (_edgeConnecting) {
|
||||
debugPrint('Other reason fail');
|
||||
// TODO: Notify user.
|
||||
snackbarKey.currentState
|
||||
?..removeCurrentSnackBar()
|
||||
..showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(
|
||||
NavigationService
|
||||
.navigatorKey.currentContext!)!
|
||||
.otherReasonFail)));
|
||||
}
|
||||
_edgeConnecting = false;
|
||||
EdgeState.instance.isRunning = false;
|
||||
EdgeState.instance.process = null;
|
||||
EdgeState.instance.logger
|
||||
|
4
lib/globals.dart
Normal file
4
lib/globals.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
final GlobalKey<ScaffoldMessengerState> snackbarKey =
|
||||
GlobalKey<ScaffoldMessengerState>();
|
@@ -20,5 +20,8 @@
|
||||
"use": "Use It",
|
||||
"configNameComment": "Write a name for this config",
|
||||
"showWindow": "Show Window",
|
||||
"chooseLanguage": "Choose Language"
|
||||
"chooseLanguage": "Choose Language",
|
||||
"successfullyConnected": "Connected",
|
||||
"macOrIpAlreadyInUse": "MAC or IP address already in use or not released yet by supernode",
|
||||
"otherReasonFail": "Connect fail"
|
||||
}
|
@@ -20,5 +20,8 @@
|
||||
"use": "使用",
|
||||
"configNameComment": "给这个配置备注一个名字",
|
||||
"showWindow": "显示主面板",
|
||||
"chooseLanguage": "选择语言"
|
||||
"chooseLanguage": "选择语言",
|
||||
"successfullyConnected": "已连接",
|
||||
"macOrIpAlreadyInUse": "MAC或IP地址已被占用或者未被中转服务器释放",
|
||||
"otherReasonFail": "连接失败"
|
||||
}
|
@@ -4,6 +4,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
import 'package:winui_n2n/application_exit_control.dart';
|
||||
import 'package:winui_n2n/edge_state.dart';
|
||||
import 'package:winui_n2n/globals.dart';
|
||||
import 'package:winui_n2n/navigation_service.dart';
|
||||
import 'package:winui_n2n/shared_pref_singleton.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
@@ -54,6 +56,8 @@ class _MainAppState extends State<MainApp> {
|
||||
darkTheme: ThemeData.dark(),
|
||||
themeMode: _themeMode,
|
||||
locale: _locale,
|
||||
scaffoldMessengerKey: snackbarKey,
|
||||
navigatorKey: NavigationService.navigatorKey,
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
home: const Scaffold(
|
||||
|
5
lib/navigation_service.dart
Normal file
5
lib/navigation_service.dart
Normal file
@@ -0,0 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class NavigationService {
|
||||
static GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
}
|
Reference in New Issue
Block a user