From ac6392ccbd133698d83fc8b76c0fb3744e7197d1 Mon Sep 17 00:00:00 2001 From: qnga <32197639+qnga@users.noreply.github.com> Date: Tue, 21 May 2024 16:39:28 +0200 Subject: [PATCH] Add a retrieveLicenseDocument method to LcpService (#519) --- .../main/java/org/readium/r2/lcp/LcpService.kt | 8 ++++++++ .../readium/r2/lcp/service/LicensesService.kt | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt b/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt index 51193da434..93e8d99b68 100644 --- a/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt +++ b/readium/lcp/src/main/java/org/readium/r2/lcp/LcpService.kt @@ -28,6 +28,7 @@ import org.readium.r2.shared.publication.protection.ContentProtection import org.readium.r2.shared.util.Try import org.readium.r2.shared.util.asset.Asset import org.readium.r2.shared.util.asset.AssetRetriever +import org.readium.r2.shared.util.asset.ContainerAsset import org.readium.r2.shared.util.format.Format /** @@ -118,6 +119,13 @@ public interface LcpService { allowUserInteraction: Boolean ): Try + /** + * Retrieves the license document from a LCP-protected publication asset. + */ + public suspend fun retrieveLicenseDocument( + asset: ContainerAsset + ): Try + /** * Injects a [licenseDocument] into the given [publicationFile] package. * diff --git a/readium/lcp/src/main/java/org/readium/r2/lcp/service/LicensesService.kt b/readium/lcp/src/main/java/org/readium/r2/lcp/service/LicensesService.kt index f419a3d296..36ecd028fa 100644 --- a/readium/lcp/src/main/java/org/readium/r2/lcp/service/LicensesService.kt +++ b/readium/lcp/src/main/java/org/readium/r2/lcp/service/LicensesService.kt @@ -42,6 +42,7 @@ import org.readium.r2.shared.util.FileExtension import org.readium.r2.shared.util.Try import org.readium.r2.shared.util.asset.Asset import org.readium.r2.shared.util.asset.AssetRetriever +import org.readium.r2.shared.util.asset.ContainerAsset import org.readium.r2.shared.util.format.Format import org.readium.r2.shared.util.format.FormatHints import org.readium.r2.shared.util.format.FormatSpecification @@ -243,6 +244,21 @@ internal class LicensesService( Try.failure(LcpError.wrap(e)) } + override suspend fun retrieveLicenseDocument( + asset: ContainerAsset + ): Try = + withContext(Dispatchers.IO) { + try { + val licenseContainer = createLicenseContainer(context, asset) + val licenseData = licenseContainer.read() + Try.success(LicenseDocument(licenseData)) + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Try.failure(LcpError.wrap(e)) + } + } + private suspend fun retrieveLicense( container: LicenseContainer, authentication: LcpAuthenticating,