Move SSD native error text to typed Kotlin

ober

0227a73d06d86a6adf85499fd3ccbe505fd7f2b3

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 76bd39a..d2bab0e 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -5301,6 +5301,17 @@
               (json-object-put-json-object! out "error" error)
               out)))))
 
+    (typed-kotlin-file "com/sfb/ssdreview/ThrowableText.kt"
+      (typed-library (com sfb ssdreview)
+        (export throwableMessageOrEmpty)
+        (type Throwable)
+        (extern (throwableMessage (error : Throwable)) : (Nullable String)
+          (kotlin-member-get message))
+        (def (throwableMessageOrEmpty (error : (Nullable Throwable))) : String
+          (if (nullable-null? error)
+            ""
+            (nullableTextOrEmpty (throwableMessage (nullable-get error)))))))
+
     (typed-kotlin-file "com/sfb/ssdreview/EventJson.kt"
       (kotlin-imports (org json JSONObject))
       (typed-library (com sfb ssdreview)
@@ -7986,7 +7997,7 @@
        ""
        "    fun isAvailable(): Boolean = loaded"
        ""
-       "    fun loadErrorMessage(): String = loadError?.message ?: \"\""
+       "    fun loadErrorMessage(): String = throwableMessageOrEmpty(loadError)"
        ""
        "    fun detect(bitmap: Bitmap): NativeDetection? {"
        "        if (bitmapNotReadyForNativeDetection(loaded, bitmap)) return null"