default creds update on ghost update

hauntED
yova 3 months ago
parent 1583c0009b
commit f0d90c175f

@ -1,6 +1,5 @@
package org.wntr.mdeditor
import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.content.ActivityNotFoundException
@ -12,7 +11,6 @@ import android.os.Build
import android.os.Bundle
import android.os.ParcelFileDescriptor
import android.provider.DocumentsContract
import android.provider.OpenableColumns
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@ -45,7 +43,6 @@ import java.io.BufferedReader
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.lang.Thread.sleep
import java.net.URLDecoder
@ -148,7 +145,7 @@ class MainActivity : AppCompatActivity() {
supportActionBar!!.setDisplayShowTitleEnabled(false)
deleteCache()
deleteCache(applicationContext)
Log.i(javaClass.simpleName, "intent data on start: ${intent.data.toString()}\nIntent action: ${intent.action}")
@ -208,7 +205,7 @@ class MainActivity : AppCompatActivity() {
@JavascriptInterface
fun triggerDisplayName(): String {
return getDisplayName(thisFileUri)
return getDisplayName(applicationContext, thisFileUri)
}
@JavascriptInterface
@ -418,7 +415,7 @@ class MainActivity : AppCompatActivity() {
R.id.push_ghost -> {
with(AlertDialog.Builder(this)){
if (metaData.get("url") != null) setTitle("Update ghost posting to ${metaData.get("url")}?")
else setTitle("Push to ghost instance ${api.baseUrl}?")
else setTitle("Push to ghost instance ${credManager.instance}?")
setPositiveButton("Yes", { dialog, id ->
webView.evaluateJavascript("getHtml();", {
@ -438,7 +435,7 @@ class MainActivity : AppCompatActivity() {
} else {
Log.i(javaClass.simpleName,"posting $msg")
updatePost(
title = metaData.get("title") ?: getDisplayName(thisFileUri),
title = metaData.get("title") ?: getDisplayName(applicationContext, thisFileUri),
author = credManager.username,
html = msg,
id = metaData.getId()!!
@ -509,49 +506,6 @@ class MainActivity : AppCompatActivity() {
return true
}
@Throws(IOException::class)
fun getFile(context: Context, uri: Uri): File? {
val destinationFilename =
File(context.filesDir.path + File.separatorChar + queryName(context, uri))
try {
context.contentResolver.openInputStream(uri!!).use { ins ->
createFileFromStream(
ins!!,
destinationFilename
)
}
} catch (ex: java.lang.Exception) {
Log.e("Save File", ex.message!!)
ex.printStackTrace()
}
return destinationFilename
}
fun createFileFromStream(ins: InputStream, destination: File?) {
try {
FileOutputStream(destination).use { os ->
val buffer = ByteArray(4096)
var length: Int
while (ins.read(buffer).also { length = it } > 0) {
os.write(buffer, 0, length)
}
os.flush()
}
} catch (ex: java.lang.Exception) {
Log.e("Save File", ex.message!!)
ex.printStackTrace()
}
}
private fun queryName(context: Context, uri: Uri): String? {
val returnCursor = context.contentResolver.query(uri, null, null, null, null)!!
val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
returnCursor.moveToFirst()
val name = returnCursor.getString(nameIndex)
returnCursor.close()
return name
}
fun pushImage(uri: Uri) {
// see https://androidfortechs.blogspot.com/2020/12/how-to-convert-uri-to-file-android-10.html
val file = getFile(applicationContext, uri)!!
@ -606,6 +560,7 @@ class MainActivity : AppCompatActivity() {
val mApiHost = mUrl.scheme + "://" + mUrl.host
if (api.baseUrl != mApiHost) api = ghostAPI(applicationContext, mApiHost)
credManager.saveCredentialsToSharedPrefs(Credentials(mApiHost,author))
Log.d(javaClass.simpleName,"Updating post to ${mUrl}")
try {
@ -646,7 +601,7 @@ class MainActivity : AppCompatActivity() {
}
}
fun sendPosting(html: String, author: String): retrofit2.Response<Any> {
val title = metaData.get("title") ?: "test"
val title = metaData.get("title") ?: getDisplayName(applicationContext, thisFileUri)
val post = sendPost(title, updated_at = Instant.now().toString(), authors = listOf(author), html, feature_image = metaData.get("feature_image"))
val postings = sendPostList(listOf(post))
@ -749,34 +704,6 @@ class MainActivity : AppCompatActivity() {
// we have a cookie
return true
}
//
fun deleteCache() {
try {
val dir = File(cacheDir, "html")
deleteDir(dir)
deleteDir(applicationContext.filesDir)
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
fun deleteDir(dir: File?): Boolean {
return if (dir != null && dir.isDirectory) {
val children = dir.list()
for (i in children.indices) {
val success = deleteDir(File(dir, children[i]))
if (!success) {
return false
}
}
dir.delete()
} else if (dir != null && dir.isFile) {
dir.delete()
} else {
false
}
}
fun shareHtml(htmlString: String): Boolean {
try {
@ -828,7 +755,7 @@ class MainActivity : AppCompatActivity() {
// Create an image file name
val storageDir = File(cacheDir, "html")
storageDir.mkdir()
tempFile = File(storageDir.path + "/${getDisplayName(thisFileUri).split(".")[0]}.html")
tempFile = File(storageDir.path + "/${getDisplayName(applicationContext, thisFileUri).split(".")[0]}.html")
if (tempFile.exists()) tempFile.delete()
tempFile.createNewFile()
}
@ -847,36 +774,13 @@ class MainActivity : AppCompatActivity() {
startActivityForResult(intent, OPEN_FILE)
}
@SuppressLint("Range")
fun getDisplayName(uri: Uri?): String {
// via: https://stackoverflow.com/questions/5568874/how-to-extract-the-file-name-from-uri-returned-from-intent-action-get-content
var result: String? = null;
if (uri == null) return "hauntED.md"
if (uri!!.getScheme().equals("content")) {
val cursor = getContentResolver().query(uri!!, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor?.close();
}
}
if (result == null) {
result = uri!!.getPath();
val cut = result!!.lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}
fun selectFileForSaveAs() {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "text/*"
putExtra(Intent.EXTRA_TITLE, getDisplayName(thisFileUri))
putExtra(Intent.EXTRA_TITLE, getDisplayName(applicationContext, thisFileUri))
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
@ -922,8 +826,8 @@ class MainActivity : AppCompatActivity() {
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
Log.d(javaClass.simpleName, "Saving to: ${getDisplayName(uri)}")
if (getDisplayName(thisFileUri) + " (1)" != getDisplayName(uri)) thisFileUri = uri
Log.d(javaClass.simpleName, "Saving to: ${getDisplayName(applicationContext, uri)}")
if (getDisplayName(applicationContext, thisFileUri) + " (1)" != getDisplayName(applicationContext, uri)) thisFileUri = uri
saveAs()
}
} else if (requestCode == OPEN_FILE && resultCode == Activity.RESULT_OK) {
@ -1082,13 +986,6 @@ class MainActivity : AppCompatActivity() {
}
}
fun checkURIResource(context: Context, uri: Uri?): Boolean {
val cursor = context.contentResolver.query(uri!!, null, null, null, null)
val doesExist = cursor != null && cursor.moveToFirst()
cursor?.close()
return doesExist
}
@Throws(IOException::class)
private fun readFile(uri: Uri) {
try{
@ -1153,8 +1050,8 @@ class MainActivity : AppCompatActivity() {
}
reader.close()
mdeValue = metaData.extractMetadataFromMarkdown(i)
if (metaData.metaData.get("url") !== null) {
val url = parse(metaData.metaData.get("url"))
if (metaData.get("url") !== null) {
val url = parse(metaData.get("url"))
deleteVisible = true
invalidateOptionsMenu()
val apiHost = url.scheme + "://" + url.host
@ -1215,7 +1112,7 @@ class MainActivity : AppCompatActivity() {
"easyMDE.codemirror.focus();" +
"easyMDE.codemirror.doc.setCursor(JSON.parse(`${metaData.cursor}`));" +
"pasteText();" +
"easyMDE.updateStatusBar(\"displayName\",\"${getDisplayName(uri)}\");}"
"easyMDE.updateStatusBar(\"displayName\",\"${getDisplayName(applicationContext, uri)}\");}"
Log.d(javaClass.simpleName, "executing in webview:\n${script}")
webView.evaluateJavascript(script, {
@ -1287,7 +1184,7 @@ class MainActivity : AppCompatActivity() {
Log.i(javaClass.simpleName, "\"onPause\" durchlaufen")
}
override protected fun onRestoreInstanceState(savedInstanceState: Bundle) {
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
Log.i(javaClass.simpleName, "\"onRestoreInstanceState\" durchlaufen")
}

@ -15,7 +15,7 @@ class MetadataActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
binding = ActivityMetadataBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.title.setText(MainActivity.metaData.get("title"))
binding.title.setText(MainActivity.metaData.get("title") ?: getDisplayName(applicationContext, MainActivity.thisFileUri))
binding.url.setText(MainActivity.metaData.get("url"))
binding.featureImage.setText(MainActivity.metaData.get("feature_image"))
binding.author.setText(MainActivity.metaData.get("author") ?: MainActivity.credManager.username)

@ -0,0 +1,114 @@
package org.wntr.mdeditor
import android.annotation.SuppressLint
import android.content.Context
import android.net.Uri
import android.provider.OpenableColumns
import android.util.Log
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
fun checkURIResource(context: Context, uri: Uri?): Boolean {
val cursor = context.contentResolver.query(uri!!, null, null, null, null)
val doesExist = cursor != null && cursor.moveToFirst()
cursor?.close()
return doesExist
}
fun createFileFromStream(ins: InputStream, destination: File?) {
try {
FileOutputStream(destination).use { os ->
val buffer = ByteArray(4096)
var length: Int
while (ins.read(buffer).also { length = it } > 0) {
os.write(buffer, 0, length)
}
os.flush()
}
} catch (ex: java.lang.Exception) {
Log.e("Save File", ex.message!!)
ex.printStackTrace()
}
}
fun deleteCache(context: Context) {
try {
val dir = File(context.cacheDir, "html")
deleteDir(dir)
deleteDir(context.filesDir)
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
fun deleteDir(dir: File?): Boolean {
return if (dir != null && dir.isDirectory) {
val children = dir.list()
for (i in children.indices) {
val success = deleteDir(File(dir, children[i]))
if (!success) {
return false
}
}
dir.delete()
} else if (dir != null && dir.isFile) {
dir.delete()
} else {
false
}
}
@SuppressLint("Range")
fun getDisplayName(context: Context, uri: Uri?): String {
// via: https://stackoverflow.com/questions/5568874/how-to-extract-the-file-name-from-uri-returned-from-intent-action-get-content
var result: String? = null;
if (uri == null) return "hauntED.md"
if (uri!!.getScheme().equals("content")) {
val cursor = context.getContentResolver().query(uri!!, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor?.close();
}
}
if (result == null) {
result = uri!!.getPath();
val cut = result!!.lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}
@Throws(IOException::class)
fun getFile(context: Context, uri: Uri): File? {
val destinationFilename =
File(context.filesDir.path + File.separatorChar + queryName(context, uri))
try {
context.contentResolver.openInputStream(uri!!).use { ins ->
createFileFromStream(
ins!!,
destinationFilename
)
}
} catch (ex: java.lang.Exception) {
Log.e("Save File", ex.message!!)
ex.printStackTrace()
}
return destinationFilename
}
fun queryName(context: Context, uri: Uri): String? {
val returnCursor = context.contentResolver.query(uri, null, null, null, null)!!
val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
returnCursor.moveToFirst()
val name = returnCursor.getString(nameIndex)
returnCursor.close()
return name
}
Loading…
Cancel
Save