|
|
|
@ -50,6 +50,7 @@ import java.io.InputStreamReader
|
|
|
|
|
import java.lang.Thread.sleep
|
|
|
|
|
import java.net.URLDecoder
|
|
|
|
|
import java.time.Instant
|
|
|
|
|
import java.util.Timer
|
|
|
|
|
import kotlin.concurrent.fixedRateTimer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -132,11 +133,12 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
lateinit var ghostMetaData: ActivityResultLauncher<Intent>
|
|
|
|
|
lateinit var webView: WebView
|
|
|
|
|
lateinit var api: ghostAPI
|
|
|
|
|
lateinit var autosaveTimer: Timer
|
|
|
|
|
var ghostConnection = false
|
|
|
|
|
lateinit var credManager: CredentialManager
|
|
|
|
|
var intentScheme = "none"
|
|
|
|
|
var easyMDELoaded = false
|
|
|
|
|
|
|
|
|
|
var readOnResume = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
@ -293,24 +295,29 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
checkGhostConnection()
|
|
|
|
|
}
|
|
|
|
|
ghostMetaData = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
|
|
|
|
Log.d(javaClass.simpleName,"Saving new Metadata to file")
|
|
|
|
|
saveFile()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fixedRateTimer("timer",true,0,5000){
|
|
|
|
|
this@MainActivity.runOnUiThread {
|
|
|
|
|
val script = "easyMDE.codemirror.doc.isClean();"
|
|
|
|
|
webView.evaluateJavascript(script , {
|
|
|
|
|
if (it == "false" && thisFileUri != null) {
|
|
|
|
|
saveFile()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onResume() {
|
|
|
|
|
super.onResume()
|
|
|
|
|
|
|
|
|
|
if (!readOnResume) {
|
|
|
|
|
readOnResume = true
|
|
|
|
|
autosaveTimer = fixedRateTimer("timer",true,0,5000){
|
|
|
|
|
this@MainActivity.runOnUiThread {
|
|
|
|
|
val script = "easyMDE.codemirror.doc.isClean();"
|
|
|
|
|
webView.evaluateJavascript(script , {
|
|
|
|
|
if (it == "false" && thisFileUri != null) {
|
|
|
|
|
saveFile()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Log.d(javaClass.simpleName, "AutosaveTimer started.")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
loadMetaFromSharedPrefs()
|
|
|
|
|
if (intent.data !== null) {
|
|
|
|
|
readFile(intent.data!!)
|
|
|
|
@ -929,7 +936,10 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun saveFile() {
|
|
|
|
|
if (thisFileUri == null) return
|
|
|
|
|
if (thisFileUri == null) {
|
|
|
|
|
Log.d(javaClass.simpleName, "File Uri got null. Can't save.")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
lateinit var textFile: ParcelFileDescriptor
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
@ -982,6 +992,7 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
this.runOnUiThread({
|
|
|
|
|
webView.evaluateJavascript("getValue();") {
|
|
|
|
|
if (it == "") {
|
|
|
|
|
Log.d(javaClass.simpleName,"Editor delivered empty content. Don't save.")
|
|
|
|
|
return@evaluateJavascript
|
|
|
|
|
} else if (it == "null") {
|
|
|
|
|
Toast.makeText(
|
|
|
|
@ -995,7 +1006,7 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
mdeValue =
|
|
|
|
|
metaData.toString() + URLDecoder.decode(it.removeSurrounding("\""))
|
|
|
|
|
if (mdeValue.length.toLong() == textFile.statSize) {
|
|
|
|
|
Log.d(javaClass.simpleName, "No change on disk, file not saved.")
|
|
|
|
|
Log.d(javaClass.simpleName, "No change on disk, file not saved.\n$mdeValue")
|
|
|
|
|
return@evaluateJavascript
|
|
|
|
|
}
|
|
|
|
|
contentResolver.openFileDescriptor(thisFileUri!!, "wt")?.use {
|
|
|
|
@ -1070,6 +1081,13 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
|
private fun readFile(uri: Uri) {
|
|
|
|
|
try{
|
|
|
|
|
autosaveTimer.cancel()
|
|
|
|
|
Log.d(javaClass.simpleName, "Stopped autosaveTimer.")
|
|
|
|
|
} catch (e:UninitializedPropertyAccessException) {
|
|
|
|
|
Log.d (javaClass.simpleName, "Couldn't cancel autosaveTimer. Not yet initialized")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TODO: Which permissions are really needed?
|
|
|
|
|
try {
|
|
|
|
|
contentResolver.takePersistableUriPermission(
|
|
|
|
@ -1123,6 +1141,7 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
line = reader.readLine()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
reader.close()
|
|
|
|
|
mdeValue = metaData.extractMetadataFromMarkdown(i)
|
|
|
|
|
if (metaData.metaData.get("url") !== null) {
|
|
|
|
|
val url = parse(metaData.metaData.get("url"))
|
|
|
|
@ -1192,6 +1211,17 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
webView.evaluateJavascript(script, {
|
|
|
|
|
thisFileUri = uri
|
|
|
|
|
Log.d(javaClass.simpleName,"File read: ${thisFileUri}")
|
|
|
|
|
autosaveTimer = fixedRateTimer("timer",true,0,5000){
|
|
|
|
|
this@MainActivity.runOnUiThread {
|
|
|
|
|
val script = "easyMDE.codemirror.doc.isClean();"
|
|
|
|
|
webView.evaluateJavascript(script , {
|
|
|
|
|
if (it == "false" && thisFileUri != null) {
|
|
|
|
|
saveFile()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Log.d(javaClass.simpleName, "AutosaveTimer started.")
|
|
|
|
|
})
|
|
|
|
|
webView.requestFocus()
|
|
|
|
|
})
|
|
|
|
@ -1233,6 +1263,11 @@ class MainActivity : AppCompatActivity() {
|
|
|
|
|
|
|
|
|
|
override fun onPause() {
|
|
|
|
|
super.onPause()
|
|
|
|
|
try{
|
|
|
|
|
autosaveTimer.cancel()
|
|
|
|
|
} catch (e:Exception) {
|
|
|
|
|
Log.d (javaClass.simpleName, "Couldn't cancel autosaveTimer.\n$e")
|
|
|
|
|
}
|
|
|
|
|
saveFile()
|
|
|
|
|
webView.evaluateJavascript("easyMDE.codemirror.doc.getCursor();") {
|
|
|
|
|
metaData.cursor=it
|
|
|
|
|