Migrate to singbox
This commit is contained in:
@@ -10,14 +10,14 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'logs_notifier.g.dart';
|
||||
|
||||
// TODO: rewrite
|
||||
@riverpod
|
||||
@Riverpod(keepAlive: true)
|
||||
class LogsNotifier extends _$LogsNotifier with AppLogger {
|
||||
static const maxLength = 1000;
|
||||
|
||||
@override
|
||||
Stream<LogsState> build() {
|
||||
state = const AsyncData(LogsState());
|
||||
return ref.read(clashFacadeProvider).watchLogs().asyncMap(
|
||||
return ref.read(coreFacadeProvider).watchLogs().asyncMap(
|
||||
(event) async {
|
||||
_logs = [
|
||||
event.getOrElse((l) => throw l),
|
||||
@@ -32,16 +32,15 @@ class LogsNotifier extends _$LogsNotifier with AppLogger {
|
||||
);
|
||||
}
|
||||
|
||||
var _logs = <ClashLog>[];
|
||||
var _logs = <String>[];
|
||||
final _debouncer = CallbackDebouncer(const Duration(milliseconds: 200));
|
||||
LogLevel? _levelFilter;
|
||||
String _filter = "";
|
||||
|
||||
Future<List<ClashLog>> _computeLogs() async {
|
||||
Future<List<String>> _computeLogs() async {
|
||||
if (_levelFilter == null && _filter.isEmpty) return _logs;
|
||||
return _logs.where((e) {
|
||||
return (_filter.isEmpty || e.message.contains(_filter)) &&
|
||||
(_levelFilter == null || e.level == _levelFilter);
|
||||
return _filter.isEmpty || e.contains(_filter);
|
||||
}).toList();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class LogsState with _$LogsState {
|
||||
const LogsState._();
|
||||
|
||||
const factory LogsState({
|
||||
@Default([]) List<ClashLog> logs,
|
||||
@Default([]) List<String> logs,
|
||||
@Default("") String filter,
|
||||
LogLevel? levelFilter,
|
||||
}) = _LogsState;
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:hiddify/features/logs/notifier/notifier.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:recase/recase.dart';
|
||||
import 'package:tint/tint.dart';
|
||||
|
||||
class LogsPage extends HookConsumerWidget {
|
||||
const LogsPage({super.key});
|
||||
@@ -80,19 +81,7 @@ class LogsPage extends HookConsumerWidget {
|
||||
children: [
|
||||
ListTile(
|
||||
dense: true,
|
||||
title: Text.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
TextSpan(text: log.timeStamp),
|
||||
const TextSpan(text: " "),
|
||||
TextSpan(
|
||||
text: log.level.name.toUpperCase(),
|
||||
style: TextStyle(color: log.level.color),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
subtitle: Text(log.message),
|
||||
subtitle: Text(log.strip()),
|
||||
),
|
||||
if (index != 0)
|
||||
const Divider(
|
||||
|
||||
Reference in New Issue
Block a user