mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
* refa: logfile * opt: log page * opt: raf log file * remove old log * update Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me> --------- Co-authored-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
104 lines
2.9 KiB
Dart
104 lines
2.9 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:PiliPlus/services/logger.dart' show LoggerUtils;
|
|
import 'package:catcher_2/model/platform_type.dart';
|
|
import 'package:catcher_2/model/report.dart';
|
|
import 'package:catcher_2/model/report_handler.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class JsonFileHandler extends ReportHandler {
|
|
final bool enableDeviceParameters;
|
|
final bool enableApplicationParameters;
|
|
final bool enableStackTrace;
|
|
final bool enableCustomParameters;
|
|
final bool printLogs;
|
|
final bool handleWhenRejected;
|
|
|
|
static late Future<RandomAccessFile> _future;
|
|
|
|
JsonFileHandler._({
|
|
this.enableDeviceParameters = true,
|
|
this.enableApplicationParameters = true,
|
|
this.enableStackTrace = true,
|
|
this.enableCustomParameters = true,
|
|
this.printLogs = false,
|
|
this.handleWhenRejected = false,
|
|
});
|
|
|
|
static Future<JsonFileHandler?> init({
|
|
bool enableDeviceParameters = true,
|
|
bool enableApplicationParameters = true,
|
|
bool enableStackTrace = true,
|
|
bool enableCustomParameters = true,
|
|
bool printLogs = false,
|
|
bool handleWhenRejected = false,
|
|
}) async {
|
|
try {
|
|
final raf = await (await LoggerUtils.getLogsPath()).open(
|
|
mode: FileMode.writeOnlyAppend,
|
|
);
|
|
await raf.writeFrom(const []);
|
|
await raf.flush();
|
|
_future = Future.syncValue(raf);
|
|
return JsonFileHandler._(
|
|
enableDeviceParameters: enableDeviceParameters,
|
|
enableApplicationParameters: enableApplicationParameters,
|
|
enableStackTrace: enableStackTrace,
|
|
enableCustomParameters: enableCustomParameters,
|
|
printLogs: printLogs,
|
|
handleWhenRejected: handleWhenRejected,
|
|
);
|
|
} catch (e, s) {
|
|
debugPrintStack(stackTrace: s, label: e.toString());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<RandomAccessFile> add(
|
|
Future<RandomAccessFile> Function(RandomAccessFile) onValue,
|
|
) {
|
|
return _future = _future.then(onValue);
|
|
}
|
|
|
|
@override
|
|
Future<bool> handle(Report report, BuildContext? context) async {
|
|
try {
|
|
await _processReport(report);
|
|
return true;
|
|
} catch (exc, stackTrace) {
|
|
_printLog('Exception occurred: $exc stack: $stackTrace');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
Future<void> _processReport(Report report) {
|
|
_printLog('Writing report to file');
|
|
final json = report.toJson(
|
|
enableDeviceParameters: enableDeviceParameters,
|
|
enableApplicationParameters: enableApplicationParameters,
|
|
enableStackTrace: enableStackTrace,
|
|
enableCustomParameters: enableCustomParameters,
|
|
);
|
|
return add((raf) => raf.writeString('${jsonEncode(json)}\n'));
|
|
}
|
|
|
|
void _printLog(String log) {
|
|
if (printLogs) {
|
|
logger.info(log);
|
|
}
|
|
}
|
|
|
|
@override
|
|
List<PlatformType> getSupportedPlatforms() => const [
|
|
PlatformType.android,
|
|
PlatformType.iOS,
|
|
PlatformType.linux,
|
|
PlatformType.macOS,
|
|
PlatformType.windows,
|
|
];
|
|
|
|
@override
|
|
bool shouldHandleWhenRejected() => handleWhenRejected;
|
|
}
|