Skip to content

Commit e0e5216

Browse files
committed
Redirect isolate Log to main thread
1 parent 36f77b5 commit e0e5216

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

packages/sane/lib/src/extensions.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:logging/logging.dart';
12
import 'package:sane/src/bindings.g.dart';
23
import 'package:sane/src/exceptions.dart';
34

@@ -10,3 +11,15 @@ extension SaneStatusExtension on SANE_Status {
1011
}
1112
}
1213
}
14+
15+
extension LoggerExtension on Logger {
16+
void redirect(LogRecord record) {
17+
log(
18+
record.level,
19+
record.message,
20+
record.error,
21+
record.stackTrace,
22+
record.zone,
23+
);
24+
}
25+
}

packages/sane/lib/src/sane_isolate.dart

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import 'dart:async';
12
import 'dart:isolate';
23
import 'dart:typed_data';
34

5+
import 'package:logging/logging.dart';
46
import 'package:sane/sane.dart';
7+
import 'package:sane/src/extensions.dart';
58
import 'package:sane/src/isolate_messages/cancel.dart';
69
import 'package:sane/src/isolate_messages/close.dart';
710
import 'package:sane/src/isolate_messages/control_button_option.dart';
@@ -18,6 +21,7 @@ import 'package:sane/src/isolate_messages/open.dart';
1821
import 'package:sane/src/isolate_messages/read.dart';
1922
import 'package:sane/src/isolate_messages/set_io_mode.dart';
2023
import 'package:sane/src/isolate_messages/start.dart';
24+
import 'package:sane/src/logger.dart';
2125

2226
class SaneIsolate implements Sane {
2327
SaneIsolate({
@@ -38,7 +42,16 @@ class SaneIsolate implements Sane {
3842
sane: _sane,
3943
),
4044
);
41-
_sendPort = await receivePort.first as SendPort;
45+
46+
final sendPortCompleter = Completer<SendPort>();
47+
receivePort.listen((message) {
48+
if (message is _SendPortMessage) {
49+
sendPortCompleter.complete(message.sendPort);
50+
} else if (message is _LogRecordMessage) {
51+
logger.redirect(message.record);
52+
}
53+
});
54+
_sendPort = await sendPortCompleter.future;
4255
}
4356

4457
void kill() {
@@ -292,7 +305,16 @@ class _IsolateEntryPointArgs {
292305

293306
void _isolateEntryPoint(_IsolateEntryPointArgs args) {
294307
final isolateReceivePort = ReceivePort();
295-
args.mainSendPort.send(isolateReceivePort.sendPort);
308+
args.mainSendPort.send(
309+
_SendPortMessage(isolateReceivePort.sendPort),
310+
);
311+
312+
Logger.root.level = Level.ALL;
313+
Logger.root.onRecord.listen((record) {
314+
args.mainSendPort.send(
315+
_LogRecordMessage(record),
316+
);
317+
});
296318

297319
final sane = args.sane;
298320
isolateReceivePort.cast<_IsolateMessageEnvelope>().listen((envelope) async {
@@ -320,3 +342,13 @@ class _IsolateMessageEnvelope {
320342
final SendPort replyPort;
321343
final IsolateMessage message;
322344
}
345+
346+
class _SendPortMessage {
347+
_SendPortMessage(this.sendPort);
348+
final SendPort sendPort;
349+
}
350+
351+
class _LogRecordMessage {
352+
_LogRecordMessage(this.record);
353+
final LogRecord record;
354+
}

0 commit comments

Comments
 (0)