From 025c1ae20461c2ac9124b3ef41e21ff01f100498 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 3 Feb 2023 18:49:47 +0600 Subject: [PATCH] feat: basic command line argument support --- lib/main.dart | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- pubspec.lock | 2 +- pubspec.yaml | 1 + 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 8783531f6..ce5fba436 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,7 @@ import 'dart:convert'; +import 'dart:io'; +import 'package:args/args.dart'; import 'package:catcher/catcher.dart'; import 'package:fl_query/fl_query.dart'; import 'package:flutter/foundation.dart'; @@ -8,6 +10,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:platform_ui/platform_ui.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotube/collections/cache_keys.dart'; @@ -29,7 +32,42 @@ import 'package:window_manager/window_manager.dart'; import 'package:window_size/window_size.dart'; final bowl = QueryBowl(); -void main() async { +void main(List rawArgs) async { + final parser = ArgParser(); + + parser.addFlag( + 'verbose', + abbr: 'v', + help: 'Verbose mode', + callback: (verbose) { + if (verbose) { + Platform.environment['VERBOSE'] = 'true'; + Platform.environment['DEBUG'] = 'true'; + Platform.environment['ERROR'] = 'true'; + } + }, + ); + parser.addFlag( + "version", + help: "Print version and exit", + negatable: false, + ); + + parser.addFlag("help", abbr: "h", negatable: false); + + final arguments = parser.parse(rawArgs); + + if (arguments["help"] == true) { + print(parser.usage); + exit(0); + } + + if (arguments["version"] == true) { + final package = await PackageInfo.fromPlatform(); + print("Spotube v${package.version}"); + exit(0); + } + WidgetsFlutterBinding.ensureInitialized(); await Hive.initFlutter(); Hive.registerAdapter(CacheTrackAdapter()); @@ -64,6 +102,7 @@ void main() async { } Catcher( + enableLogger: arguments["verbose"] ?? !kReleaseMode, debugConfig: CatcherOptions( SilentReportMode(), [ @@ -86,7 +125,15 @@ void main() async { ], ), releaseConfig: CatcherOptions(SilentReportMode(), [ - FileHandler(await getLogsPath(), printLogs: false), + if (arguments["verbose"] ?? false) + ConsoleHandler( + enableDeviceParameters: false, + enableApplicationParameters: false, + ), + FileHandler( + await getLogsPath(), + printLogs: false, + ), ]), runAppFunction: () { runApp( diff --git a/pubspec.lock b/pubspec.lock index 7253da998..9b356432c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -86,7 +86,7 @@ packages: source: hosted version: "3.3.6" args: - dependency: transitive + dependency: "direct main" description: name: args url: "https://pub.dartlang.org" diff --git a/pubspec.yaml b/pubspec.yaml index b05a15f55..0ee715679 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,6 +12,7 @@ environment: dependencies: adwaita: ^0.5.2 + args: ^2.3.2 async: ^2.9.0 audio_service: ^0.18.9 audio_session: ^0.1.13