diff --git a/app/src/main/java/org/wntr/mdeditor/MainActivity.kt b/app/src/main/java/org/wntr/mdeditor/MainActivity.kt index b0e2fae..6ba37a4 100644 --- a/app/src/main/java/org/wntr/mdeditor/MainActivity.kt +++ b/app/src/main/java/org/wntr/mdeditor/MainActivity.kt @@ -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 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 diff --git a/app/src/main/java/org/wntr/mdeditor/MetadataActivity.kt b/app/src/main/java/org/wntr/mdeditor/MetadataActivity.kt index f2656f3..cffcd2e 100644 --- a/app/src/main/java/org/wntr/mdeditor/MetadataActivity.kt +++ b/app/src/main/java/org/wntr/mdeditor/MetadataActivity.kt @@ -2,6 +2,7 @@ package org.wntr.mdeditor import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.util.Log import android.view.View import org.wntr.mdeditor.databinding.ActivityMetadataBinding @@ -19,8 +20,10 @@ class MetadataActivity : AppCompatActivity() { } 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("feature_image", binding.featureImage.text.toString()) + MainActivity.readOnResume = false finish() } } \ No newline at end of file