diff --git a/app/src/main/java/com/geeksville/mesh/model/Channel.kt b/app/src/main/java/com/geeksville/mesh/model/Channel.kt index cb8c5c1f8..a1e568d42 100644 --- a/app/src/main/java/com/geeksville/mesh/model/Channel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/Channel.kt @@ -4,6 +4,7 @@ import android.graphics.Bitmap import android.net.Uri import android.util.Base64 import com.geeksville.mesh.MeshProtos +import com.geeksville.util.anonymize import com.google.zxing.BarcodeFormat import com.google.zxing.MultiFormatWriter import com.journeyapps.barcodescanner.BarcodeEncoder @@ -32,15 +33,18 @@ data class Channel( .setModemConfig(MeshProtos.ChannelSettings.ModemConfig.Bw125Cr45Sf128).build() ) - const val prefix = "https://www.meshtastic.org/c/#" + private const val prefixRoot = "https://www.meshtastic.org/c/" + const val prefix = "$prefixRoot#" private const val base64Flags = Base64.URL_SAFE + Base64.NO_WRAP private fun urlToSettings(url: Uri): MeshProtos.ChannelSettings { val urlStr = url.toString() - val pathRegex = Regex("$prefix(.*)") + + // Let the path optionally include the # character (or not) so we can work with old URLs generated by old versions of the app + val pathRegex = Regex("$prefixRoot#?(.*)") val (base64) = pathRegex.find(urlStr)?.destructured - ?: throw MalformedURLException("Not a meshtastic URL") + ?: throw MalformedURLException("Not a meshtastic URL: ${urlStr.anonymize(40)}") val bytes = Base64.decode(base64, base64Flags) return MeshProtos.ChannelSettings.parseFrom(bytes) diff --git a/geeksville-androidlib b/geeksville-androidlib index ce2485b63..80d207cb5 160000 --- a/geeksville-androidlib +++ b/geeksville-androidlib @@ -1 +1 @@ -Subproject commit ce2485b63b7fb09c9c506c9afa9531707ab829f3 +Subproject commit 80d207cb51c79601ceaf2b09bc369e5babf06495