stop autosavetimer for read. Close file after read.

hauntED
yova 4 months ago
parent 36b9d7bd0b
commit 3a7409ee6a

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

@ -2,6 +2,7 @@ package org.wntr.mdeditor
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import org.wntr.mdeditor.databinding.ActivityMetadataBinding import org.wntr.mdeditor.databinding.ActivityMetadataBinding
@ -19,8 +20,10 @@ class MetadataActivity : AppCompatActivity() {
} }
fun onButtonSaveClick(view: View) { fun onButtonSaveClick(view: View) {
Log.d(javaClass.simpleName, "Getting Metadata:\ntitle:\t${binding.title.text}\nfeature_image:\t${binding.featureImage.text}")
MainActivity.metaData.put("title", binding.title.text.toString()) MainActivity.metaData.put("title", binding.title.text.toString())
MainActivity.metaData.put("feature_image", binding.featureImage.text.toString()) MainActivity.metaData.put("feature_image", binding.featureImage.text.toString())
MainActivity.readOnResume = false
finish() finish()
} }
} }
Loading…
Cancel
Save