From b63ae26ee363d217f50226130184fefd300aa1a7 Mon Sep 17 00:00:00 2001 From: miokuP Date: Sat, 1 Aug 2026 15:44:00 +0400 Subject: [PATCH 1/2] add RICOH support --- .../scanbridge/androidservice/ScanJobForegroundService.kt | 5 +++++ .../chrisimx/scanbridge/data/ui/ScanningScreenViewModel.kt | 3 ++- .../kotlin/io/github/chrisimx/scanbridge/model/ScanJob.kt | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/androidApp/src/main/java/io/github/chrisimx/scanbridge/androidservice/ScanJobForegroundService.kt b/androidApp/src/main/java/io/github/chrisimx/scanbridge/androidservice/ScanJobForegroundService.kt index 4f95b5c9..d14162fe 100644 --- a/androidApp/src/main/java/io/github/chrisimx/scanbridge/androidservice/ScanJobForegroundService.kt +++ b/androidApp/src/main/java/io/github/chrisimx/scanbridge/androidservice/ScanJobForegroundService.kt @@ -191,6 +191,11 @@ class ScanJobForegroundService : Service() { } val jobResult = job.scanJob + if (scanJob.scannerMakeAndModel == "RICOH") { + val status = esclRequestClient.getScannerStatus() + Timber.d("Scanner status after job creation: $status") + } + if (abortIfCancelling(jobResult)) return var polling = false diff --git a/androidApp/src/main/java/io/github/chrisimx/scanbridge/data/ui/ScanningScreenViewModel.kt b/androidApp/src/main/java/io/github/chrisimx/scanbridge/data/ui/ScanningScreenViewModel.kt index 1d27c139..f0d84994 100644 --- a/androidApp/src/main/java/io/github/chrisimx/scanbridge/data/ui/ScanningScreenViewModel.kt +++ b/androidApp/src/main/java/io/github/chrisimx/scanbridge/data/ui/ScanningScreenViewModel.kt @@ -495,7 +495,8 @@ class ScanningScreenViewModel( certificateValidationDisabled, withDebugInterceptor, timeout.toULong() - ) + ), + scanningScreenData.capabilities?.makeAndModel ) scanJobRepo.enqueue(scanJob) ScanJobForegroundService.startService(application) diff --git a/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/model/ScanJob.kt b/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/model/ScanJob.kt index b4aa2563..390d5728 100644 --- a/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/model/ScanJob.kt +++ b/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/model/ScanJob.kt @@ -9,5 +9,6 @@ data class ScanJob( val ownerSessionId: Uuid, val scanSettings: ScanSettings, val scannerBaseUrl: Url, - val httpClientConfig: HttpClientConfig + val httpClientConfig: HttpClientConfig, + val scannerMakeAndModel: String? ) From 3daa31dbd698e8b8e754c52496d747500ee5e91d Mon Sep 17 00:00:00 2001 From: miokuP Date: Sun, 2 Aug 2026 12:54:52 +0400 Subject: [PATCH 2/2] update implementation --- .../chrisimx/scanbridge/escl/EsclScanningProtocol.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/escl/EsclScanningProtocol.kt b/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/escl/EsclScanningProtocol.kt index c30dac82..1a773418 100644 --- a/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/escl/EsclScanningProtocol.kt +++ b/core/src/commonMain/kotlin/io/github/chrisimx/scanbridge/escl/EsclScanningProtocol.kt @@ -209,6 +209,11 @@ class EsclScanningProtocol( httpClient ) + val scannerCapabilities = esclRequestClient.getScannerCapabilities() + val statusBeforeNextDocument = + scannerCapabilities is ESCLRequestClient.ScannerCapabilitiesResult.Success && + scannerCapabilities.scannerCapabilities.makeAndModel == "RICOH" + suspend fun abortIfCancelling(scanJob: io.github.chrisimx.esclkt.ScanJob? = null): Boolean = if (cancelled.value) { logger.debug { "Scan job cancelling is set. Aborting, canceling job if possible. scanJob: $scanJob" } scanJob?.cancel() @@ -237,6 +242,12 @@ class EsclScanningProtocol( } val jobResult = job.scanJob + // Some RICOH devices keep the job pending until ScannerStatus is queried. + if (statusBeforeNextDocument) { + val status = esclRequestClient.getScannerStatus() + logger.debug { "Scanner status after job creation: $status" } + } + if (abortIfCancelling(jobResult)) return@flow var polling = false