Simplify loading/saving files to reduce bugs
This commit is contained in:
parent
21cd8d1324
commit
c42223f796
1 changed files with 19 additions and 42 deletions
|
@ -8,8 +8,6 @@ import com.wbrawner.simplemarkdown.utility.getName
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.io.InputStream
|
|
||||||
import java.io.OutputStream
|
|
||||||
import java.io.Reader
|
import java.io.Reader
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
@ -29,62 +27,41 @@ class MarkdownViewModel : ViewModel() {
|
||||||
suspend fun load(context: Context, uri: Uri?): Boolean {
|
suspend fun load(context: Context, uri: Uri?): Boolean {
|
||||||
if (uri == null) return false
|
if (uri == null) return false
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
context.contentResolver.openFileDescriptor(uri, "r")?.use {
|
context.contentResolver.openFileDescriptor(uri, "r")?.use {
|
||||||
val fileInput = FileInputStream(it.fileDescriptor)
|
val fileInput = FileInputStream(it.fileDescriptor)
|
||||||
val fileName = uri.getName(context)
|
val fileName = uri.getName(context)
|
||||||
return@withContext if (load(fileInput)) {
|
val content = fileInput.reader().use(Reader::readText)
|
||||||
|
originalMarkdown.postValue(content)
|
||||||
|
markdownUpdates.postValue(content)
|
||||||
this@MarkdownViewModel.fileName.postValue(fileName)
|
this@MarkdownViewModel.fileName.postValue(fileName)
|
||||||
this@MarkdownViewModel.uri.postValue(uri)
|
this@MarkdownViewModel.uri.postValue(uri)
|
||||||
true
|
true
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
} ?: false
|
} ?: false
|
||||||
}
|
} catch (ignored: Exception) {
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun load(inputStream: InputStream): Boolean {
|
|
||||||
return try {
|
|
||||||
withContext(coroutineContext) {
|
|
||||||
val content = inputStream.reader().use(Reader::readText)
|
|
||||||
originalMarkdown.postValue(content)
|
|
||||||
markdownUpdates.postValue(content)
|
|
||||||
}
|
|
||||||
true
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
e.printStackTrace()
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun save(context: Context, givenUri: Uri? = this.uri.value): Boolean {
|
suspend fun save(context: Context, givenUri: Uri? = this.uri.value): Boolean {
|
||||||
val uri = givenUri ?: this.uri.value ?: return false
|
val uri = givenUri ?: this.uri.value ?: return false
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
val fileName = uri.getName(context)
|
val fileName = uri.getName(context)
|
||||||
val outputStream = context.contentResolver.openOutputStream(uri)
|
val outputStream = context.contentResolver.openOutputStream(uri)
|
||||||
?: return@withContext false
|
?: return@withContext false
|
||||||
if (save(outputStream)) {
|
|
||||||
this@MarkdownViewModel.fileName.postValue(fileName)
|
|
||||||
this@MarkdownViewModel.uri.postValue(uri)
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun save(outputStream: OutputStream): Boolean {
|
|
||||||
return try {
|
|
||||||
withContext(coroutineContext) {
|
|
||||||
outputStream.writer().use {
|
outputStream.writer().use {
|
||||||
it.write(markdownUpdates.value ?: "")
|
it.write(markdownUpdates.value ?: "")
|
||||||
}
|
}
|
||||||
}
|
this@MarkdownViewModel.fileName.postValue(fileName)
|
||||||
|
this@MarkdownViewModel.uri.postValue(uri)
|
||||||
true
|
true
|
||||||
} catch (e: Throwable) {
|
} catch (ignored: Exception) {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun reset(untitledFileName: String) {
|
fun reset(untitledFileName: String) {
|
||||||
fileName.postValue(untitledFileName)
|
fileName.postValue(untitledFileName)
|
||||||
|
|
Loading…
Reference in a new issue