-
Notifications
You must be signed in to change notification settings - Fork 2
/
log_contents_bloc.dart
81 lines (65 loc) · 2.83 KB
/
log_contents_bloc.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:log_keep/bloc/log_contents/log_contents.dart';
import 'package:log_keep/repositories/logs_repository.dart';
import 'log_contents_state.dart';
class LogContentsBloc extends Bloc<LogContentsEvent, LogContentsState> {
final LogsRepository logsRepository;
LogContentsBloc({this.logsRepository}) : super(LogContentsNotLoaded());
@override
Stream<LogContentsState> mapEventToState(LogContentsEvent event) async* {
if (event is LoadLogContents) {
yield* _mapLoadLogContentsToState(event);
} else if (event is LogContentsUpdated) {
yield* _mapLogContentsUpdateToState(event);
}
}
Stream<LogContentsState> _mapLoadLogContentsToState(
LoadLogContents event) async* {
var log = await logsRepository.getLogById(event.id);
var linesRaw = log.data.contents.split(RegExp(r"\|[0-9]+\|"));
var lines = List<LogLine>.empty(growable: true);
var totalAlarmsCount = 0;
var totalCheatCount = 0;
var totalModelCount = 0;
var totalTutorialCount = 0;
final alarmExp = new RegExp(
'exception|warning|incorrect|timeout|unable|cannot|fail|can\'t',
caseSensitive: false);
final cheatExp = new RegExp('cheat', caseSensitive: false);
final tutorialExp = new RegExp('tutorial', caseSensitive: false);
final modelExp = new RegExp(
r'(\[PlayerService\])|(\[Server\])|(Request:)|(Response:)|(Received response)',
caseSensitive: false);
for (int i = 0; i < linesRaw.length; i++) {
var rawLine = linesRaw[i];
if (rawLine.endsWith('\n')) {
rawLine = rawLine.replaceRange(rawLine.length - 1, rawLine.length, '');
}
final cheatCount = cheatExp.allMatches(rawLine).length;
final tutorialCount = tutorialExp.allMatches(rawLine).length;
final modelCount = modelExp.allMatches(rawLine).length;
var alarmsCount = alarmExp.allMatches(rawLine).length;
final errorMatches = rawLine.allMatches("error").length;
final fakeErrorMatches = rawLine.allMatches('error\":null').length;
if (errorMatches != fakeErrorMatches) {
alarmsCount = errorMatches - fakeErrorMatches;
}
final isAlarm = alarmsCount > 0;
final isCheat = cheatCount > 0;
final isModel = modelCount > 0;
final isTutorial = tutorialCount > 0;
lines.add(LogLine(i, rawLine, isAlarm, isCheat, isModel, isTutorial));
totalAlarmsCount += alarmsCount;
totalCheatCount += cheatCount;
totalModelCount += modelCount;
totalTutorialCount += tutorialCount;
}
add(LogContentsUpdated(LogAnalysisEntity(log, lines, totalAlarmsCount,
totalCheatCount, totalModelCount, totalTutorialCount)));
}
Stream<LogContentsState> _mapLogContentsUpdateToState(
LogContentsUpdated event) async* {
yield LogContentsLoaded(event.log);
}
}