Skip to content

Commit

Permalink
Refactor ContentResolverExtensions to begin separating out the non-…
Browse files Browse the repository at this point in the history
…content resolver code from that file
  • Loading branch information
MarmadileManteater committed Jan 15, 2025
1 parent 4eada78 commit eb0e48b
Showing 1 changed file with 88 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,54 +8,113 @@ import io.freetubeapp.freetube.javascript.consoleError
import java.io.File
import java.io.FileInputStream

fun ContentResolver.readFileFromContentTree(contentTreeUri: Uri): Promise<String> {
return Promise {
resolve,
reject ->
try {
val stream = openInputStream(contentTreeUri)
val content = String(stream!!.readBytes())
stream.close()
resolve(content)
} catch (ex: Exception) {
reject(ex.toJSON())
}
}
}

fun ContentResolver.readFile(directoryName: String, fileName: String) : Promise<String> {
// todo put this somewhere else
fun readFileFromAbsolutePath(directory: String, fileName: String) : Promise<String> {
return Promise {
resolve,
reject ->
try {
if (directoryName.startsWith("content://")) {
val stream = openInputStream(Uri.parse(directoryName))
val content = String(stream!!.readBytes())
stream.close()
resolve(content)
} else {
val file = File(directoryName, fileName)
resolve(FileInputStream(file).bufferedReader().use { it.readText() })
val file = File(directory, fileName)
resolve(FileInputStream(file).bufferedReader().use { it.readText() })
} catch (ex: Exception) {
reject(ex.toJSON())
}
}
}

fun ContentResolver.readFile(directoryName: String, fileName: String) : Promise<String> {
return Promise {
resolve,
reject ->
if (directoryName.startsWith("content://")) {
readFileFromContentTree(Uri.parse(directoryName)).then {
resolve(it)
}.catch {
reject(it)
}
} else {
// TODO this shouldn't be called here, it should be called in the js interface
readFileFromAbsolutePath(directoryName, fileName).then {
resolve(it)
}.catch {
reject(it)
}
}
}
}

fun ContentResolver.writeFileFromContentTree(contentTreeUri: Uri, content: String, mode: String): Promise<Unit?> {
return Promise {
resolve,
reject ->
try {
val stream = openOutputStream(contentTreeUri, mode)
stream!!.write(content.toByteArray())
stream.flush()
stream.close()
resolve(null)
} catch (ex: Exception) {
reject(ex.toJSON())
}
}
}

fun ContentResolver.writeFile(directoryName: String, fileName: String, content: String, mode: String = "wt") : Promise<Unit?> {
// todo put this somewhere else
fun writeFileFromAbsolutePath(directory: String, fileName: String, content: String, mode: String = "wt") : Promise<Unit?> {
return Promise {
resolve,
reject ->
try {
if (directoryName.startsWith("content://")) {
// urls created by save dialog
val stream = openOutputStream(Uri.parse(directoryName), mode)
stream!!.write(content.toByteArray())
stream.flush()
stream.close()
resolve(null)
} else {
val file = File(directoryName, fileName)
if (!file.exists()) {
file.createNewFile()
}
if (mode == "wt") {
file.writeText(content)
}
if (mode == "wa") {
file.appendText(content)
}
resolve(null)
val file = File(directory, fileName)
if (!file.exists()) {
file.createNewFile()
}
if (mode == "wt") {
file.writeText(content)
}
if (mode == "wa") {
file.appendText(content)
}
resolve(null)
} catch (ex: Exception) {
reject(ex.toJSON())
}
}
}

fun ContentResolver.writeFile(directoryName: String, fileName: String, content: String, mode: String = "wt") : Promise<Unit?> {
return Promise {
resolve,
reject ->
if (directoryName.startsWith("content://")) {
// urls created by save dialog
writeFileFromContentTree(Uri.parse(directoryName), content, mode).then {
resolve(it)
}.catch {
reject(it)
}
} else {
// TODO this shouldn't be called here, it should be called in the js interface
writeFileFromAbsolutePath(directoryName, fileName, content, mode).then {
resolve(it)
}.catch {
reject(it)
}
}
}
}

0 comments on commit eb0e48b

Please sign in to comment.