mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: linux/win window size & server reconnect
This commit is contained in:
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:toolbox/core/extension/context/common.dart';
|
import 'package:toolbox/core/extension/context/common.dart';
|
||||||
import 'package:toolbox/core/extension/locale.dart';
|
import 'package:toolbox/core/extension/locale.dart';
|
||||||
import 'package:toolbox/core/utils/rebuild.dart';
|
import 'package:toolbox/data/res/rebuild.dart';
|
||||||
import 'package:toolbox/data/res/store.dart';
|
import 'package:toolbox/data/res/store.dart';
|
||||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -80,8 +80,11 @@ Future<SSHClient> genClient(
|
|||||||
timeout: timeout,
|
timeout: timeout,
|
||||||
);
|
);
|
||||||
// Use `0.0.0.0` as localhost to use all interfaces.
|
// Use `0.0.0.0` as localhost to use all interfaces.
|
||||||
return await jumpClient.forwardLocal(spi.ip, spi.port,
|
return await jumpClient.forwardLocal(
|
||||||
localHost: '0.0.0.0');
|
spi.ip,
|
||||||
|
spi.port,
|
||||||
|
localHost: '0.0.0.0',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
// ignore: prefer_void_to_null
|
// ignore: prefer_void_to_null
|
||||||
class _RebuildNode implements ValueListenable<Null> {
|
class RebuildNode implements ValueListenable<Null> {
|
||||||
final List<VoidCallback> _listeners = [];
|
final List<VoidCallback> _listeners = [];
|
||||||
|
|
||||||
_RebuildNode();
|
RebuildNode();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void addListener(VoidCallback listener) {
|
void addListener(VoidCallback listener) {
|
||||||
@@ -25,9 +25,3 @@ class _RebuildNode implements ValueListenable<Null> {
|
|||||||
@override
|
@override
|
||||||
Null get value => null;
|
Null get value => null;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RebuildNodes {
|
|
||||||
const RebuildNodes._();
|
|
||||||
|
|
||||||
static final _RebuildNode app = _RebuildNode();
|
|
||||||
}
|
|
||||||
@@ -10,6 +10,10 @@ class Server implements TagPickable {
|
|||||||
SSHClient? client;
|
SSHClient? client;
|
||||||
ServerState state;
|
ServerState state;
|
||||||
|
|
||||||
|
/// Whether is generating client.
|
||||||
|
/// Use this to avoid reconnecting if last connect try not finished.
|
||||||
|
bool isGenerating = false;
|
||||||
|
|
||||||
Server(this.spi, this.status, this.client, this.state);
|
Server(this.spi, this.status, this.client, this.state);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -268,6 +268,8 @@ class ServerProvider extends ChangeNotifier {
|
|||||||
final time1 = DateTime.now();
|
final time1 = DateTime.now();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (s.isGenerating) return;
|
||||||
|
s.isGenerating = true;
|
||||||
s.client = await genClient(
|
s.client = await genClient(
|
||||||
spi,
|
spi,
|
||||||
timeout: Stores.setting.timeoutD,
|
timeout: Stores.setting.timeoutD,
|
||||||
@@ -282,6 +284,8 @@ class ServerProvider extends ChangeNotifier {
|
|||||||
/// In order to keep privacy, print [spi.name] instead of [spi.id]
|
/// In order to keep privacy, print [spi.name] instead of [spi.id]
|
||||||
Loggers.app.warning('Connect to ${spi.name} failed', e);
|
Loggers.app.warning('Connect to ${spi.name} failed', e);
|
||||||
return;
|
return;
|
||||||
|
} finally {
|
||||||
|
s.isGenerating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final time2 = DateTime.now();
|
final time2 = DateTime.now();
|
||||||
|
|||||||
7
lib/data/res/rebuild.dart
Normal file
7
lib/data/res/rebuild.dart
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import 'package:toolbox/data/model/app/rebuild.dart';
|
||||||
|
|
||||||
|
class RebuildNodes {
|
||||||
|
const RebuildNodes._();
|
||||||
|
|
||||||
|
static final app = RebuildNode();
|
||||||
|
}
|
||||||
@@ -10,11 +10,11 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
|
|||||||
import 'package:toolbox/core/persistant_store.dart';
|
import 'package:toolbox/core/persistant_store.dart';
|
||||||
import 'package:toolbox/core/utils/icloud.dart';
|
import 'package:toolbox/core/utils/icloud.dart';
|
||||||
import 'package:toolbox/core/utils/platform/base.dart';
|
import 'package:toolbox/core/utils/platform/base.dart';
|
||||||
import 'package:toolbox/core/utils/rebuild.dart';
|
|
||||||
import 'package:toolbox/data/model/app/backup.dart';
|
import 'package:toolbox/data/model/app/backup.dart';
|
||||||
import 'package:toolbox/data/res/logger.dart';
|
import 'package:toolbox/data/res/logger.dart';
|
||||||
import 'package:toolbox/data/res/path.dart';
|
import 'package:toolbox/data/res/path.dart';
|
||||||
import 'package:toolbox/data/res/provider.dart';
|
import 'package:toolbox/data/res/provider.dart';
|
||||||
|
import 'package:toolbox/data/res/rebuild.dart';
|
||||||
import 'package:toolbox/data/res/store.dart';
|
import 'package:toolbox/data/res/store.dart';
|
||||||
import 'package:toolbox/view/widget/expand_tile.dart';
|
import 'package:toolbox/view/widget/expand_tile.dart';
|
||||||
import 'package:toolbox/view/widget/cardx.dart';
|
import 'package:toolbox/view/widget/cardx.dart';
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import 'package:toolbox/core/extension/locale.dart';
|
|||||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||||
import 'package:toolbox/core/extension/stringx.dart';
|
import 'package:toolbox/core/extension/stringx.dart';
|
||||||
import 'package:toolbox/core/utils/platform/base.dart';
|
import 'package:toolbox/core/utils/platform/base.dart';
|
||||||
import 'package:toolbox/core/utils/rebuild.dart';
|
|
||||||
import 'package:toolbox/data/res/provider.dart';
|
import 'package:toolbox/data/res/provider.dart';
|
||||||
|
import 'package:toolbox/data/res/rebuild.dart';
|
||||||
import 'package:toolbox/data/res/store.dart';
|
import 'package:toolbox/data/res/store.dart';
|
||||||
import 'package:toolbox/view/widget/expand_tile.dart';
|
import 'package:toolbox/view/widget/expand_tile.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import 'package:toolbox/core/utils/platform/base.dart';
|
|||||||
import 'package:toolbox/core/utils/platform/path.dart';
|
import 'package:toolbox/core/utils/platform/path.dart';
|
||||||
import 'package:toolbox/data/model/pkg/manager.dart';
|
import 'package:toolbox/data/model/pkg/manager.dart';
|
||||||
import 'package:toolbox/data/model/server/dist.dart';
|
import 'package:toolbox/data/model/server/dist.dart';
|
||||||
|
import 'package:toolbox/data/res/path.dart';
|
||||||
import 'package:toolbox/data/res/provider.dart';
|
import 'package:toolbox/data/res/provider.dart';
|
||||||
|
|
||||||
import '../../core/route.dart';
|
import '../../core/route.dart';
|
||||||
@@ -149,9 +150,11 @@ Future<void> _gotoSSH(
|
|||||||
extraArgs.addAll(['-p', '${spi.port}']);
|
extraArgs.addAll(['-p', '${spi.port}']);
|
||||||
}
|
}
|
||||||
|
|
||||||
final path = () {
|
final path = await () async {
|
||||||
final tempKeyFileName = 'srvbox_pk_${spi.pubKeyId}';
|
final tempKeyFileName = 'srvbox_pk_${spi.pubKeyId}';
|
||||||
return joinPath(Directory.systemTemp.path, tempKeyFileName);
|
|
||||||
|
/// For security reason, save the private key file to app doc path
|
||||||
|
return joinPath(await Paths.doc, tempKeyFileName);
|
||||||
}();
|
}();
|
||||||
final file = File(path);
|
final file = File(path);
|
||||||
final shouldGenKey = spi.pubKeyId != null;
|
final shouldGenKey = spi.pubKeyId != null;
|
||||||
@@ -175,7 +178,7 @@ Future<void> _gotoSSH(
|
|||||||
default:
|
default:
|
||||||
context.showSnackBar('Mismatch system: $system');
|
context.showSnackBar('Mismatch system: $system');
|
||||||
}
|
}
|
||||||
// For security reason, delete the private key file after use
|
|
||||||
if (shouldGenKey) {
|
if (shouldGenKey) {
|
||||||
if (!await file.exists()) return;
|
if (!await file.exists()) return;
|
||||||
await Future.delayed(const Duration(seconds: 2), file.delete);
|
await Future.delayed(const Duration(seconds: 2), file.delete);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ static void my_application_activate(GApplication* application) {
|
|||||||
GtkWindow* window =
|
GtkWindow* window =
|
||||||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
|
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
|
||||||
|
|
||||||
gtk_window_set_default_size(window, 1280, 720);
|
gtk_window_set_default_size(window, 400, 777);
|
||||||
gtk_widget_show(GTK_WIDGET(window));
|
gtk_widget_show(GTK_WIDGET(window));
|
||||||
|
|
||||||
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Future<int> getGitModificationCount() async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<String> getFlutterVersion() async {
|
Future<String> getFlutterVersion() async {
|
||||||
final result = await Process.run('flutter', ['--version']);
|
final result = await Process.run('flutter', ['--version'], runInShell: true);
|
||||||
final stdout = result.stdout as String;
|
final stdout = result.stdout as String;
|
||||||
return stdout.split('\n')[0].split('•')[0].split(' ')[1].trim();
|
return stdout.split('\n')[0].split('•')[0].split(' ')[1].trim();
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ Future<void> updateBuildData() async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> dartFormat() async {
|
Future<void> dartFormat() async {
|
||||||
final result = await Process.run('dart', ['format', '.']);
|
final result = await Process.run('dart', ['format', '.'], runInShell: true);
|
||||||
print(result.stdout);
|
print(result.stdout);
|
||||||
if (result.exitCode != 0) {
|
if (result.exitCode != 0) {
|
||||||
print(result.stderr);
|
print(result.stderr);
|
||||||
@@ -128,7 +128,7 @@ Future<void> flutterBuild(String buildType) async {
|
|||||||
args.add('--target-platform=android-arm64');
|
args.add('--target-platform=android-arm64');
|
||||||
}
|
}
|
||||||
print('\n[$buildType]\nBuilding with args: ${args.join(' ')}');
|
print('\n[$buildType]\nBuilding with args: ${args.join(' ')}');
|
||||||
final buildResult = await Process.run('flutter', args);
|
final buildResult = await Process.run('flutter', args, runInShell: true);
|
||||||
final exitCode = buildResult.exitCode;
|
final exitCode = buildResult.exitCode;
|
||||||
|
|
||||||
if (exitCode != 0) {
|
if (exitCode != 0) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
|||||||
|
|
||||||
FlutterWindow window(project);
|
FlutterWindow window(project);
|
||||||
Win32Window::Point origin(10, 10);
|
Win32Window::Point origin(10, 10);
|
||||||
Win32Window::Size size(1280, 720);
|
Win32Window::Size size(400, 777);
|
||||||
if (!window.CreateAndShow(L"ServerBox", origin, size)) {
|
if (!window.CreateAndShow(L"ServerBox", origin, size)) {
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user