You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
3.1 KiB

package org.wntr.mdeditor
import android.util.Log
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.fasterxml.jackson.module.kotlin.KotlinModule
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.ResponseBody.Companion.toResponseBody
class mdMeta {
var metaData = mutableMapOf<String,String>()
var ID: String? = null
var updatedAt: String? = null
var cursor: String = "{ line: 0, ch: 0, sticky: null }"
get() =
if (field.equals("null")) "{ line: 0, ch: 0, sticky: null }"
else field
fun put(key: String, value: String) {
metaData.put(key, value)
}
fun get(key: String): String?{
return metaData.get(key)
}
override fun toString(): String {
if (metaData.size == 0) return ""
var metaString = "---\n"
for (key in metaData.keys) {
metaString += "$key: ${metaData.get(key as String)}\n"
}
metaString += "---\n"
return metaString
}
fun extractMetadataFromMarkdown(markdown: String) : String {
val charactersBetweenGroupedHyphens = Regex("^---([\\s\\S]*?)---\n")
val metadataMatched = charactersBetweenGroupedHyphens.find(markdown)
if (metadataMatched == null || metadataMatched.value == "---\n---\n") {
Log.d(javaClass.simpleName,"No metadata included")
metaData = mutableMapOf()
ID = null
return markdown
}
val metadata = metadataMatched.value
val mapper = ObjectMapper(YAMLFactory())
mapper.registerModule(KotlinModule())
metaData = mapper.readValue(metadata, Map::class.java) as MutableMap<String,String>
for (entry in metaData) {
Log.d(javaClass.simpleName,"${entry.key}: ${entry.value}")
}
return markdown.substring(metadata.length)
}
fun getId(): String? {
if (ID !== null)
return ID as String
if (metaData.get("url") == "") return null
var response: retrofit2.Response<posts> = retrofit2.Response.error(
444,
"error".toResponseBody("text/plain".toMediaTypeOrNull())
)
try {
response = MainActivity.api.postApi.getPosts().execute()
}
catch(e: Exception) {
Log.d(javaClass.simpleName, "Couldn't get post list: $e")
}
Log.d(javaClass.simpleName, "result: ${response.code()}")
if (response.isSuccessful) {
val remoteDoc = response.body()!!.posts.find { it.url == metaData.get("url")}
if (remoteDoc == null ){
Log.d(javaClass.simpleName, "Could not find post ID ${metaData.get("url")}. Already deleted?")
metaData.put("url", "")
ID = null
return ID
}
ID = remoteDoc.id
updatedAt = remoteDoc.updated_at
Log.d(javaClass.simpleName, "Document is online at ${
metaData.get("url")}\nID: ${ID}")
return ID
} else {
return null
}
}
}