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.
91 lines
3.0 KiB
91 lines
3.0 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 }"
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
} |