From f0bc5b03e89163860a2ddc0c2c22389c46190c8a Mon Sep 17 00:00:00 2001 From: Luca Spinazzola Date: Mon, 14 Aug 2023 19:24:29 -0400 Subject: [PATCH] use getAssetByFilePath to load any asset file. closes #6 Note: the custom getAssetByFilePath implementation can be removed after after https://github.com/icerockdev/moko-resources/pull/550 is merged --- .../MultiFileModeResourceProvider.android.kt | 9 +++++++++ .../DefaultMetadataDependenciesProvider.kt | 10 +++++----- .../source/MultiFileModeResourceProvider.kt | 11 +++++++---- .../source/MultiFileModeResourceProvider.js.kt | 9 +++++++++ .../source/MultiFileModeResourceProvider.jvm.kt | 9 +++++++++ .../source/MultiFileModeResourceProvider.native.kt | 14 ++++++++++++++ 6 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 library/src/androidMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.android.kt rename library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/{ => metadata}/DefaultMetadataDependenciesProvider.kt (85%) create mode 100644 library/src/jsMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.js.kt create mode 100644 library/src/jvmMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.jvm.kt create mode 100644 library/src/nativeMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.native.kt diff --git a/library/src/androidMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.android.kt b/library/src/androidMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.android.kt new file mode 100644 index 00000000..ec43d2b9 --- /dev/null +++ b/library/src/androidMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.android.kt @@ -0,0 +1,9 @@ +package io.michaelrocks.libphonenumber.kotlin.metadata.source + +import dev.icerock.moko.resources.AssetResource +import dev.icerock.moko.resources.ResourceContainer +import dev.icerock.moko.resources.getAssetByFilePath + +actual fun ResourceContainer.getAssetByFilePath( + filePath: String +): AssetResource? = getAssetByFilePath(filePath) \ No newline at end of file diff --git a/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/DefaultMetadataDependenciesProvider.kt b/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/DefaultMetadataDependenciesProvider.kt similarity index 85% rename from library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/DefaultMetadataDependenciesProvider.kt rename to library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/DefaultMetadataDependenciesProvider.kt index fc839c93..df86bfe7 100644 --- a/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/DefaultMetadataDependenciesProvider.kt +++ b/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/DefaultMetadataDependenciesProvider.kt @@ -29,15 +29,15 @@ class DefaultMetadataDependenciesProvider @JvmOverloads constructor(metadataLoad val metadataParser = newLenientParser() val metadataLoader: MetadataLoader val phoneNumberMetadataFileNameProvider: PhoneMetadataResourceProvider = MultiFileModeResourceProvider( - "files/io/michaelrocks/libphonenumber/android/data/PhoneNumberMetadataProto" + "io/michaelrocks/libphonenumber/android/data/PhoneNumberMetadataProto" ) val phoneNumberMetadataSource: MetadataSource val shortNumberMetadataFileNameProvider: PhoneMetadataResourceProvider = MultiFileModeResourceProvider( - "files/io/michaelrocks/libphonenumber/android/data/ShortNumberMetadataProto" + "io/michaelrocks/libphonenumber/android/data/ShortNumberMetadataProto" ) val shortNumberMetadataSource: RegionMetadataSource val alternateFormatsMetadataFileNameProvider: PhoneMetadataResourceProvider = MultiFileModeResourceProvider( - "files/io/michaelrocks/libphonenumber/android/data/PhoneNumberAlternateFormatsProto" + "io/michaelrocks/libphonenumber/android/data/PhoneNumberAlternateFormatsProto" ) val alternateFormatsMetadataSource: FormattingMetadataSource @@ -62,7 +62,7 @@ class DefaultMetadataDependenciesProvider @JvmOverloads constructor(metadataLoad } val carrierDataDirectory: String - get() = "files/io/michaelrocks/libphonenumber/android/carrier/data/" + get() = "io/michaelrocks/libphonenumber/android/carrier/data/" val geocodingDataDirectory: String - get() = "files/io/michaelrocks/libphonenumber/android/geocoding/data/" + get() = "io/michaelrocks/libphonenumber/android/geocoding/data/" } diff --git a/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.kt b/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.kt index 30adc6f7..2a7f933b 100644 --- a/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.kt +++ b/library/src/commonMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.kt @@ -17,8 +17,12 @@ package io.michaelrocks.libphonenumber.kotlin.metadata.source import dev.icerock.moko.resources.AssetResource +import dev.icerock.moko.resources.ResourceContainer import io.michaelrocks.libphonenumber.MR +// TODO: Remove after https://github.com/icerockdev/moko-resources/pull/550 is merged +expect fun ResourceContainer.getAssetByFilePath(filePath: String): AssetResource? + /** * [PhoneMetadataResourceProvider] implementation which appends key as a suffix to the * predefined metadata file name base. @@ -33,10 +37,9 @@ class MultiFileModeResourceProvider(phoneMetadataFileNameBase: String) : PhoneMe override fun getFor(key: Any): AssetResource { val keyAsString = key.toString() require(ALPHANUMERIC.matches(keyAsString)) { "Invalid key: $keyAsString" } - return when (keyAsString) { - "US" -> MR.assets.io.michaelrocks.libphonenumber.android.data.PhoneNumberMetadataProto_US - else -> throw NotImplementedError("Couldn't get asset resource for key: $keyAsString") - } + val path = phoneMetadataFileNamePrefix + keyAsString + return MR.assets.getAssetByFilePath(path) + ?: throw NotImplementedError("Couldn't get asset resource for key: $keyAsString") } companion object { diff --git a/library/src/jsMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.js.kt b/library/src/jsMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.js.kt new file mode 100644 index 00000000..ec43d2b9 --- /dev/null +++ b/library/src/jsMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.js.kt @@ -0,0 +1,9 @@ +package io.michaelrocks.libphonenumber.kotlin.metadata.source + +import dev.icerock.moko.resources.AssetResource +import dev.icerock.moko.resources.ResourceContainer +import dev.icerock.moko.resources.getAssetByFilePath + +actual fun ResourceContainer.getAssetByFilePath( + filePath: String +): AssetResource? = getAssetByFilePath(filePath) \ No newline at end of file diff --git a/library/src/jvmMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.jvm.kt b/library/src/jvmMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.jvm.kt new file mode 100644 index 00000000..ec43d2b9 --- /dev/null +++ b/library/src/jvmMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.jvm.kt @@ -0,0 +1,9 @@ +package io.michaelrocks.libphonenumber.kotlin.metadata.source + +import dev.icerock.moko.resources.AssetResource +import dev.icerock.moko.resources.ResourceContainer +import dev.icerock.moko.resources.getAssetByFilePath + +actual fun ResourceContainer.getAssetByFilePath( + filePath: String +): AssetResource? = getAssetByFilePath(filePath) \ No newline at end of file diff --git a/library/src/nativeMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.native.kt b/library/src/nativeMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.native.kt new file mode 100644 index 00000000..9baed494 --- /dev/null +++ b/library/src/nativeMain/kotlin/io/michaelrocks/libphonenumber/kotlin/metadata/source/MultiFileModeResourceProvider.native.kt @@ -0,0 +1,14 @@ +package io.michaelrocks.libphonenumber.kotlin.metadata.source + +import dev.icerock.moko.resources.AssetResource +import dev.icerock.moko.resources.ResourceContainer + +// TODO: Remove after https://github.com/icerockdev/moko-resources/pull/550 is merged +actual fun ResourceContainer.getAssetByFilePath(filePath: String): AssetResource? { + //get name without extension and extension + val ext = filePath.substringAfterLast('.', "") + val name = filePath.substringBeforeLast('.') + .replace('/', '+') + + return AssetResource(filePath.removePrefix("/"), name, ext, nsBundle) +}