Skip to content

Commit 2430422

Browse files
committed
Dispatcher provider IO implementation
1 parent ace97b2 commit 2430422

File tree

3 files changed

+59
-36
lines changed

3 files changed

+59
-36
lines changed

src/main/java/de/tillhub/printengine/PrinterImpl.kt

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@ import de.tillhub.printengine.data.PrinterResult
88
import de.tillhub.printengine.data.PrinterSettings
99
import de.tillhub.printengine.data.PrinterState
1010
import de.tillhub.printengine.data.doOnError
11+
import de.tillhub.printengine.dispatcher.DispatcherProvider
12+
import de.tillhub.printengine.dispatcher.DispatcherProviderImp
1113
import de.tillhub.printengine.pax.PaxPrintService
1214
import de.tillhub.printengine.sunmi.SunmiPrintService
1315
import de.tillhub.printengine.verifone.VerifonePrintService
1416
import kotlinx.coroutines.flow.StateFlow
17+
import kotlinx.coroutines.withContext
1518
import timber.log.Timber
1619

1720
class PrinterImpl(
1821
private val printService: PrintService,
19-
private val analytics: PrintAnalytics?
22+
private val analytics: PrintAnalytics?,
23+
private val dispatcherProvider: DispatcherProvider = DispatcherProviderImp()
2024
) : Printer {
2125

2226
init {
@@ -34,51 +38,55 @@ class PrinterImpl(
3438
override fun observePrinterState(): StateFlow<PrinterState> = printService.printerState
3539

3640
override suspend fun getPrinterInfo(): PrinterResult<PrinterInfo> =
37-
printService.withPrinterCatching {
38-
it.getPrinterInfo().let { info ->
39-
PrinterInfo(
40-
info.serialNumber,
41-
info.deviceModel,
42-
info.printerVersion,
43-
info.printerPaperSpec,
44-
info.printingFontType,
45-
info.printerHead,
46-
info.printedDistance,
47-
info.serviceVersion
48-
)
41+
withContext(dispatcherProvider.iO()) {
42+
printService.withPrinterCatching {
43+
it.getPrinterInfo().let { info ->
44+
PrinterInfo(
45+
info.serialNumber,
46+
info.deviceModel,
47+
info.printerVersion,
48+
info.printerPaperSpec,
49+
info.printingFontType,
50+
info.printerHead,
51+
info.printedDistance,
52+
info.serviceVersion
53+
)
54+
}
55+
}.doOnError {
56+
logWarning("getting printer info")
4957
}
50-
}.doOnError {
51-
logWarning("getting printer info")
5258
}
5359

5460
override suspend fun startPrintJob(job: PrintJob): PrinterResult<Unit> =
55-
printService.withPrinterCatching { controller ->
56-
logInfo(
57-
"""receipt: START #################
61+
withContext(dispatcherProvider.iO()) {
62+
printService.withPrinterCatching { controller ->
63+
logInfo(
64+
"""receipt: START #################
5865
|${job.description}
5966
|receipt END #################
6067
|""".trimMargin()
61-
)
62-
if (settings.enabled && job.isNotEmpty) {
63-
controller.setIntensity(settings.printingIntensity)
64-
controller.setFontSize(controller.getPrinterInfo().printingFontType)
65-
job.commands.forEach { command ->
66-
when (command) {
67-
is PrintCommand.Barcode -> controller.printBarcode(command.barcode)
68-
is PrintCommand.Image -> controller.printImage(command.image)
69-
is PrintCommand.QrCode -> controller.printQr(command.code)
70-
is PrintCommand.RawData -> controller.sendRawData(command.data)
71-
is PrintCommand.Text -> controller.printText(command.text)
72-
PrintCommand.CutPaper -> controller.cutPaper()
73-
PrintCommand.FeedPaper -> controller.feedPaper()
68+
)
69+
if (settings.enabled && job.isNotEmpty) {
70+
controller.setIntensity(settings.printingIntensity)
71+
controller.setFontSize(controller.getPrinterInfo().printingFontType)
72+
job.commands.forEach { command ->
73+
when (command) {
74+
is PrintCommand.Barcode -> controller.printBarcode(command.barcode)
75+
is PrintCommand.Image -> controller.printImage(command.image)
76+
is PrintCommand.QrCode -> controller.printQr(command.code)
77+
is PrintCommand.RawData -> controller.sendRawData(command.data)
78+
is PrintCommand.Text -> controller.printText(command.text)
79+
PrintCommand.CutPaper -> controller.cutPaper()
80+
PrintCommand.FeedPaper -> controller.feedPaper()
81+
}
7482
}
83+
controller.start()
84+
analytics?.logPrintReceipt(job.description)
7585
}
76-
controller.start()
77-
analytics?.logPrintReceipt(job.description)
86+
}.doOnError {
87+
logWarning("printing job '${job.description}'")
88+
analytics?.logErrorPrintReceipt("printing text '${job.description}'")
7889
}
79-
}.doOnError {
80-
logWarning("printing job '${job.description}'")
81-
analytics?.logErrorPrintReceipt("printing text '${job.description}'")
8290
}
8391

8492
private fun logInfo(message: String) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package de.tillhub.printengine.dispatcher
2+
3+
import kotlinx.coroutines.CoroutineDispatcher
4+
5+
interface DispatcherProvider {
6+
fun iO(): CoroutineDispatcher
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package de.tillhub.printengine.dispatcher
2+
3+
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.Dispatchers
5+
6+
class DispatcherProviderImp : DispatcherProvider {
7+
override fun iO(): CoroutineDispatcher = Dispatchers.IO
8+
}

0 commit comments

Comments
 (0)