Skip to content

Commit 76d9d69

Browse files
feat: add some error handling wrt exit codes
1 parent 6cad5d2 commit 76d9d69

File tree

5 files changed

+64
-21
lines changed

5 files changed

+64
-21
lines changed

lib/bloc/process_bloc/process_bloc.dart

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,18 @@ class ProcessBloc extends Bloc<ProcessEvent, ProcessState> {
5656
);
5757
unawaited(_extractor
5858
.extractFile(
59-
file,
60-
listenProgress: (progress) =>
61-
add(ProcessFileExtractorProgress(progress)),
62-
listenOutput: (line) => add(ProcessFileExtractorOutput(line)),
63-
listenVideoDetails: (videoDetails) =>
64-
add(ProcessFileVideoDetails(videoDetails)),
65-
)
66-
.then((value) => add(ProcessFileComplete(file))));
59+
file,
60+
listenProgress: (progress) => add(ProcessFileExtractorProgress(progress)),
61+
listenOutput: (line) => add(ProcessFileExtractorOutput(line)),
62+
listenVideoDetails: (videoDetails) =>
63+
add(ProcessFileVideoDetails(videoDetails)),
64+
)
65+
.then((value) {
66+
if (value != 0) {
67+
add(ProcessError(value));
68+
}
69+
add(ProcessFileComplete(file));
70+
}));
6771
}
6872

6973
@override
@@ -164,6 +168,8 @@ class ProcessBloc extends Bloc<ProcessEvent, ProcessState> {
164168
current: state.current,
165169
version: ccxVersion,
166170
);
171+
} else if (event is ProcessError) {
172+
yield state.copyWith(current: state.current, exitCode: event.exitCode);
167173
}
168174
}
169175
}

lib/bloc/process_bloc/process_event.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,9 @@ class ProcessFileComplete extends ProcessEvent {
5555
const ProcessFileComplete(this.file);
5656
}
5757

58+
class ProcessError extends ProcessEvent {
59+
final int exitCode;
60+
const ProcessError(this.exitCode);
61+
}
62+
5863
class GetCCExtractorVersion extends ProcessEvent {}

lib/bloc/process_bloc/process_state.dart

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class ProcessState extends Equatable {
1010
final XFile? current;
1111
final bool started;
1212
final String? version;
13+
final int? exitCode;
1314
const ProcessState({
1415
required this.orignalList,
1516
required this.queue,
@@ -20,6 +21,7 @@ class ProcessState extends Equatable {
2021
required this.progress,
2122
required this.current,
2223
required this.version,
24+
this.exitCode,
2325
});
2426

2527
ProcessState copyWith({
@@ -32,18 +34,19 @@ class ProcessState extends Equatable {
3234
String? progress,
3335
String? version,
3436
required XFile? current,
37+
int? exitCode,
3538
}) =>
3639
ProcessState(
37-
orignalList: orignalList ?? this.orignalList,
38-
queue: queue ?? this.queue,
39-
processed: processed ?? this.processed,
40-
log: log ?? this.log,
41-
started: started ?? this.started,
42-
progress: progress ?? this.progress,
43-
videoDetails: videoDetails ?? this.videoDetails,
44-
version: version ?? this.version,
45-
current: current,
46-
);
40+
orignalList: orignalList ?? this.orignalList,
41+
queue: queue ?? this.queue,
42+
processed: processed ?? this.processed,
43+
log: log ?? this.log,
44+
started: started ?? this.started,
45+
progress: progress ?? this.progress,
46+
videoDetails: videoDetails ?? this.videoDetails,
47+
version: version ?? this.version,
48+
current: current,
49+
exitCode: exitCode ?? this.exitCode);
4750

4851
@override
4952
List<Object?> get props => [
@@ -56,5 +59,6 @@ class ProcessState extends Equatable {
5659
videoDetails,
5760
orignalList,
5861
version,
62+
exitCode,
5963
];
6064
}

lib/repositories/ccextractor.dart

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ class CCExtractor {
3939
);
4040

4141
process.stdout.transform(latin1.decoder).listen((update) {
42-
print(update);
42+
//print(update);
4343
});
4444

4545
process.stderr.transform(latin1.decoder).listen((update) {
46-
print(update);
46+
// print(update);
4747
if (progressRegx.hasMatch(update)) {
4848
for (RegExpMatch i in progressRegx.allMatches(update)) {
4949
listenProgress(i[1]!);
@@ -83,4 +83,24 @@ class CCExtractor {
8383
});
8484
return ccxStdOut;
8585
}
86+
87+
static Map<int, String> exitCodes = {
88+
0: 'EXIT_OK',
89+
2: 'EXIT_NO_INPUT_FILES',
90+
3: 'EXIT_TOO_MANY_INPUT_FILES',
91+
4: 'EXIT_INCOMPATIBLE_PARAMETERS',
92+
6: 'EXIT_UNABLE_TO_DETERMINE_FILE_SIZE',
93+
7: 'EXIT_MALFORMED_PARAMETER',
94+
8: 'EXIT_READ_ERROR',
95+
10: 'EXIT_NO_CAPTIONS',
96+
300: 'EXIT_NOT_CLASSIFIED',
97+
501: 'EXIT_ERROR_IN_CAPITALIZATION_FILE',
98+
502: 'EXIT_BUFFER_FULL',
99+
1001: 'EXIT_MISSING_ASF_HEADER',
100+
1002: 'EXIT_MISSING_RCWT_HEADER',
101+
5: 'CCX_COMMON_EXIT_FILE_CREATION_FAILED',
102+
9: 'CCX_COMMON_EXIT_UNSUPPORTED',
103+
500: 'EXIT_NOT_ENOUGH_MEMORY',
104+
1000: 'CCX_COMMON_EXIT_BUG_BUG',
105+
};
86106
}

lib/screens/dashboard/dashboard.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:ccxgui/repositories/ccextractor.dart';
12
import 'package:flutter/material.dart';
23

34
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -50,7 +51,14 @@ class Dashboard extends StatelessWidget {
5051
class ClearFilesButton extends StatelessWidget {
5152
@override
5253
Widget build(BuildContext context) {
53-
return BlocBuilder<ProcessBloc, ProcessState>(
54+
return BlocConsumer<ProcessBloc, ProcessState>(
55+
listenWhen: (previous, current) {
56+
return previous.exitCode != current.exitCode;
57+
},
58+
listener: (context, processState) {
59+
CustomSnackBarMessage.show(
60+
context, CCExtractor.exitCodes[processState.exitCode]!);
61+
},
5462
builder: (context, processState) {
5563
return BlocBuilder<DashboardBloc, DashboardState>(
5664
builder: (context, dashboardState) {

0 commit comments

Comments
 (0)