From b6ff203e4b45b7c45c800ac0b22268c6ab06d961 Mon Sep 17 00:00:00 2001 From: jscampucci Date: Fri, 5 Jul 2024 15:25:46 +0200 Subject: [PATCH] [clean] add logger --- lib/main.dart | 12 ++++++++++ lib/services/download.dart | 24 +++++++++++++++++-- lib/services/file_logger.dart | 45 +++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 lib/services/file_logger.dart diff --git a/lib/main.dart b/lib/main.dart index 8f35de8..e88978a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,13 +1,19 @@ +import 'dart:async'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:logger/logger.dart'; import 'package:notube/screens/settings.dart'; import 'package:notube/wrapper.dart'; import 'package:notube/constants.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:window_manager/window_manager.dart'; import 'package:upgrader/upgrader.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:notube/videoList/cubit/videos_cubit.dart'; +import 'package:notube/services/file_logger.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -25,6 +31,12 @@ void main() async { await windowManager.focus(); }); + await FileLogger().init(); + + FlutterError.onError = (FlutterErrorDetails details) { + FileLogger().e('FlutterError', details.exception, details.stack); + }; + runApp( EasyLocalization( supportedLocales: [Locale('en', 'US'), Locale('fr', 'FR')], diff --git a/lib/services/download.dart b/lib/services/download.dart index 7a981ef..f261797 100644 --- a/lib/services/download.dart +++ b/lib/services/download.dart @@ -2,8 +2,11 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; +import 'package:get/get_navigation/src/nav2/get_router_delegate.dart'; +import 'package:logger/logger.dart'; import 'package:notube/constants.dart'; import 'package:notube/models/video.dart'; +import 'package:notube/services/file_logger.dart'; import 'package:path_provider/path_provider.dart'; import 'package:process_run/shell.dart'; @@ -91,12 +94,29 @@ class DLServices { var command = '${url.trim()} -q --flat-playlist -J'; var shellLinesController = ShellLinesController(); - var shell = Shell(stdout: shellLinesController.sink, verbose: false); + var shellErrorController = ShellLinesController(); + + shellErrorController.stream.listen((event) { + debugPrint('Analyse error: $event'); + FileLogger().e('Analyse error: $event'); + }); + + var shell = Shell( + stdout: shellLinesController.sink, + stderr: shellErrorController.sink, + verbose: false); await shell.run(''' $ytDlpPath $command ''').then((result) { - debugPrint('Analyse result: $result'); + debugPrint('Analyse error: $result'); + + FileLogger().d('Analyse result: ${result.toString()}'); + }).catchError(( + error, + stackTrace, + ) { + FileLogger().e('Analyse error: $error'); }); return shellLinesController.stream; diff --git a/lib/services/file_logger.dart b/lib/services/file_logger.dart new file mode 100644 index 0000000..08057e9 --- /dev/null +++ b/lib/services/file_logger.dart @@ -0,0 +1,45 @@ +import 'dart:io'; +import 'package:path_provider/path_provider.dart'; +import 'package:logger/logger.dart'; +import 'package:flutter/foundation.dart'; + +class FileLogger { + static final FileLogger _instance = FileLogger._internal(); + late Logger _logger; + late File _logFile; + + factory FileLogger() { + return _instance; + } + + FileLogger._internal(); + + Future init() async { + _logFile = File('apps_logs.txt'); + + _logger = Logger( + printer: PrettyPrinter(), + output: FileOutput(file: _logFile), + ); + } + + void d(String message) { + _logger.d(message); + } + + void i(String message) { + _logger.i(message); + } + + void w(String message) { + _logger.w(message); + } + + void e(String message, [dynamic error, StackTrace? stackTrace]) { + _logger.e(message, error: error, stackTrace: stackTrace); + } + + Future getLogContent() async { + return await _logFile.readAsString(); + } +}