Add auto connect on start
This commit is contained in:
20
lib/core/prefs/service_prefs.dart
Normal file
20
lib/core/prefs/service_prefs.dart
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import 'package:hiddify/data/data_providers.dart';
|
||||||
|
import 'package:hiddify/utils/pref_notifier.dart';
|
||||||
|
import 'package:hiddify/utils/utils.dart';
|
||||||
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
|
part 'service_prefs.g.dart';
|
||||||
|
|
||||||
|
@Riverpod(keepAlive: true)
|
||||||
|
class StartedByUser extends _$StartedByUser with AppLogger {
|
||||||
|
late final _pref =
|
||||||
|
Pref(ref.watch(sharedPreferencesProvider), "started_by_user", false);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool build() => _pref.getValue();
|
||||||
|
|
||||||
|
Future<void> update(bool value) {
|
||||||
|
state = value;
|
||||||
|
return _pref.update(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:hiddify/core/prefs/prefs.dart';
|
import 'package:hiddify/core/prefs/prefs.dart';
|
||||||
|
import 'package:hiddify/core/prefs/service_prefs.dart';
|
||||||
import 'package:hiddify/data/data_providers.dart';
|
import 'package:hiddify/data/data_providers.dart';
|
||||||
import 'package:hiddify/domain/connectivity/connectivity.dart';
|
import 'package:hiddify/domain/connectivity/connectivity.dart';
|
||||||
import 'package:hiddify/domain/core_facade.dart';
|
import 'package:hiddify/domain/core_facade.dart';
|
||||||
@@ -24,20 +25,32 @@ class ConnectivityController extends _$ConnectivityController with AppLogger {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
return _core.watchConnectionStatus().doOnData((event) {
|
return _core.watchConnectionStatus().doOnData((event) {
|
||||||
|
if (event case Disconnected(:final connectionFailure?)
|
||||||
|
when PlatformUtils.isDesktop) {
|
||||||
|
ref.read(startedByUserProvider.notifier).update(false);
|
||||||
|
}
|
||||||
loggy.info("connection status: ${event.format()}");
|
loggy.info("connection status: ${event.format()}");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
CoreFacade get _core => ref.watch(coreFacadeProvider);
|
CoreFacade get _core => ref.watch(coreFacadeProvider);
|
||||||
|
|
||||||
|
Future<void> mayConnect() async {
|
||||||
|
if (state case AsyncData(:final value)) {
|
||||||
|
if (value case Disconnected()) return _connect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> toggleConnection() async {
|
Future<void> toggleConnection() async {
|
||||||
if (state case AsyncError()) {
|
if (state case AsyncError()) {
|
||||||
await _connect();
|
await _connect();
|
||||||
} else if (state case AsyncData(:final value)) {
|
} else if (state case AsyncData(:final value)) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case Disconnected():
|
case Disconnected():
|
||||||
|
await ref.read(startedByUserProvider.notifier).update(true);
|
||||||
await _connect();
|
await _connect();
|
||||||
case Connected():
|
case Connected():
|
||||||
|
await ref.read(startedByUserProvider.notifier).update(false);
|
||||||
await _disconnect();
|
await _disconnect();
|
||||||
default:
|
default:
|
||||||
loggy.warning("switching status, debounce");
|
loggy.warning("switching status, debounce");
|
||||||
@@ -52,6 +65,7 @@ class ConnectivityController extends _$ConnectivityController with AppLogger {
|
|||||||
return _disconnect();
|
return _disconnect();
|
||||||
}
|
}
|
||||||
loggy.info("active profile changed, reconnecting");
|
loggy.info("active profile changed, reconnecting");
|
||||||
|
await ref.read(startedByUserProvider.notifier).update(true);
|
||||||
await _core
|
await _core
|
||||||
.restart(profileId, ref.read(disableMemoryLimitProvider))
|
.restart(profileId, ref.read(disableMemoryLimitProvider))
|
||||||
.mapLeft((err) {
|
.mapLeft((err) {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hiddify/core/prefs/prefs.dart';
|
import 'package:hiddify/core/prefs/prefs.dart';
|
||||||
|
import 'package:hiddify/core/prefs/service_prefs.dart';
|
||||||
|
import 'package:hiddify/features/common/connectivity/connectivity_controller.dart';
|
||||||
import 'package:hiddify/utils/utils.dart';
|
import 'package:hiddify/utils/utils.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
@@ -28,6 +30,17 @@ class WindowController extends _$WindowController
|
|||||||
loggy.debug("silent start is enabled, hiding window");
|
loggy.debug("silent start is enabled, hiding window");
|
||||||
await windowManager.hide();
|
await windowManager.hide();
|
||||||
}
|
}
|
||||||
|
await Future.delayed(
|
||||||
|
const Duration(seconds: 1),
|
||||||
|
() async {
|
||||||
|
if (ref.read(startedByUserProvider)) {
|
||||||
|
loggy.debug("previously started by user, trying to connect");
|
||||||
|
return ref
|
||||||
|
.read(connectivityControllerProvider.notifier)
|
||||||
|
.mayConnect();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
windowManager.addListener(this);
|
windowManager.addListener(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user