Add desktop autostart

This commit is contained in:
problematicconsumer
2023-09-09 16:47:11 +03:30
parent 87af2f8087
commit 08e0e7f72a
8 changed files with 66 additions and 4 deletions

View File

@@ -105,6 +105,7 @@
"light": "Light mode" "light": "Light mode"
}, },
"trueBlack": "True Black", "trueBlack": "True Black",
"autoStart": "Start on Boot",
"silentStart": "Silent Start", "silentStart": "Silent Start",
"openWorkingDir": "Open Working Directory", "openWorkingDir": "Open Working Directory",
"ignoreBatteryOptimizations": "Ignore Battery Optimization", "ignoreBatteryOptimizations": "Ignore Battery Optimization",

View File

@@ -105,6 +105,7 @@
"light": "تم روشن" "light": "تم روشن"
}, },
"trueBlack": "کاملا سیاه", "trueBlack": "کاملا سیاه",
"autoStart": "اجرا با روشن شدن سیستم",
"silentStart": "اجرای ساکت", "silentStart": "اجرای ساکت",
"openWorkingDir": "باز کردن دایرکتوری کاری", "openWorkingDir": "باز کردن دایرکتوری کاری",
"ignoreBatteryOptimizations": "نادیده‌گرفتن بهینه‌سازی باتری", "ignoreBatteryOptimizations": "نادیده‌گرفتن بهینه‌سازی باتری",

View File

@@ -11,6 +11,7 @@ import 'package:hiddify/features/common/active_profile/active_profile_notifier.d
import 'package:hiddify/features/common/common.dart'; import 'package:hiddify/features/common/common.dart';
import 'package:hiddify/features/common/window/window_controller.dart'; import 'package:hiddify/features/common/window/window_controller.dart';
import 'package:hiddify/features/system_tray/system_tray.dart'; import 'package:hiddify/features/system_tray/system_tray.dart';
import 'package:hiddify/services/auto_start_service.dart';
import 'package:hiddify/services/deep_link_service.dart'; import 'package:hiddify/services/deep_link_service.dart';
import 'package:hiddify/services/service_providers.dart'; import 'package:hiddify/services/service_providers.dart';
import 'package:hiddify/utils/utils.dart'; import 'package:hiddify/utils/utils.dart';
@@ -47,6 +48,7 @@ Future<void> lazyBootstrap(WidgetsBinding widgetsBinding) async {
FlutterNativeSplash.remove(); FlutterNativeSplash.remove();
} }
if (PlatformUtils.isDesktop) { if (PlatformUtils.isDesktop) {
await container.read(autoStartServiceProvider.future);
await container.read(windowControllerProvider.future); await container.read(windowControllerProvider.future);
} }

View File

@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/core_providers.dart';
import 'package:hiddify/core/prefs/prefs.dart'; import 'package:hiddify/core/prefs/prefs.dart';
import 'package:hiddify/features/settings/widgets/theme_mode_switch_button.dart'; import 'package:hiddify/features/settings/widgets/theme_mode_switch_button.dart';
import 'package:hiddify/services/auto_start_service.dart';
import 'package:hiddify/utils/utils.dart'; import 'package:hiddify/utils/utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
@@ -85,6 +86,17 @@ class GeneralSettingTiles extends HookConsumerWidget {
onChanged: ref.read(trueBlackThemeNotifierProvider.notifier).update, onChanged: ref.read(trueBlackThemeNotifierProvider.notifier).update,
), ),
if (PlatformUtils.isDesktop) ...[ if (PlatformUtils.isDesktop) ...[
SwitchListTile(
title: Text(t.settings.general.autoStart),
value: ref.watch(autoStartServiceProvider).asData!.value,
onChanged: (value) async {
if (value) {
await ref.read(autoStartServiceProvider.notifier).enable();
} else {
await ref.read(autoStartServiceProvider.notifier).disable();
}
},
),
SwitchListTile( SwitchListTile(
title: Text(t.settings.general.silentStart), title: Text(t.settings.general.silentStart),
value: ref.watch(silentStartNotifierProvider), value: ref.watch(silentStartNotifierProvider),

View File

@@ -0,0 +1,37 @@
import 'dart:io';
import 'package:hiddify/services/service_providers.dart';
import 'package:hiddify/utils/utils.dart';
import 'package:launch_at_startup/launch_at_startup.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'auto_start_service.g.dart';
@Riverpod(keepAlive: true)
class AutoStartService extends _$AutoStartService with InfraLogger {
@override
Future<bool> build() async {
loggy.debug("initializing");
if (!PlatformUtils.isDesktop) return false;
final packageInfo = ref.watch(runtimeDetailsServiceProvider).packageInfo;
launchAtStartup.setup(
appName: packageInfo.appName,
appPath: Platform.resolvedExecutable,
);
final isEnabled = await launchAtStartup.isEnabled();
loggy.info("auto start is [${isEnabled ? "Enabled" : "Disabled"}]");
return isEnabled;
}
Future<void> enable() async {
loggy.debug("enabling auto start");
await launchAtStartup.enable();
state = const AsyncValue.data(true);
}
Future<void> disable() async {
loggy.debug("disabling auto start");
await launchAtStartup.disable();
state = const AsyncValue.data(false);
}
}

View File

@@ -4,17 +4,17 @@ import 'package:hiddify/utils/utils.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
class RuntimeDetailsService with InfraLogger { class RuntimeDetailsService with InfraLogger {
late final PackageInfo _packageInfo; late final PackageInfo packageInfo;
String get appVersion => _packageInfo.version; String get appVersion => packageInfo.version;
String get buildNumber => _packageInfo.buildNumber; String get buildNumber => packageInfo.buildNumber;
late final String operatingSystem = Platform.operatingSystem; late final String operatingSystem = Platform.operatingSystem;
late final String userAgent; late final String userAgent;
Future<void> init() async { Future<void> init() async {
loggy.debug("initializing"); loggy.debug("initializing");
_packageInfo = await PackageInfo.fromPlatform(); packageInfo = await PackageInfo.fromPlatform();
userAgent = "HiddifyNext/$appVersion ($operatingSystem)"; userAgent = "HiddifyNext/$appVersion ($operatingSystem)";
loggy.info( loggy.info(

View File

@@ -709,6 +709,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.7.1" version: "6.7.1"
launch_at_startup:
dependency: "direct main"
description:
name: launch_at_startup
sha256: "93fc5638e088290004fae358bae691486673d469957d461d9dae5b12248593eb"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
lint: lint:
dependency: "direct dev" dependency: "direct dev"
description: description:

View File

@@ -53,6 +53,7 @@ dependencies:
package_info_plus: ^4.1.0 package_info_plus: ^4.1.0
url_launcher: ^6.1.14 url_launcher: ^6.1.14
vclibs: ^0.1.0 vclibs: ^0.1.0
launch_at_startup: ^0.2.2
# utils # utils
combine: ^0.5.6 combine: ^0.5.6