Added Custom download folder
This commit is contained in:
@@ -19,28 +19,32 @@
|
||||
package xyz.quaver.pupil.util
|
||||
|
||||
import android.content.Context
|
||||
import androidx.core.content.ContextCompat
|
||||
import android.net.Uri
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.preference.PreferenceManager
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
import java.nio.charset.Charset
|
||||
import java.util.*
|
||||
|
||||
fun getCachedGallery(context: Context, galleryID: Int): File {
|
||||
return File(getDownloadDirectory(context), galleryID.toString()).let {
|
||||
when {
|
||||
it.exists() -> it
|
||||
else -> File(context.cacheDir, "imageCache/$galleryID")
|
||||
}
|
||||
fun getCachedGallery(context: Context, galleryID: Int) =
|
||||
getDownloadDirectory(context)?.findFile(galleryID.toString()) ?:
|
||||
DocumentFile.fromFile(File(context.cacheDir, "imageCache/$galleryID"))
|
||||
|
||||
fun getDownloadDirectory(context: Context) : DocumentFile? {
|
||||
val uri = PreferenceManager.getDefaultSharedPreferences(context).getString("dl_location", null).let {
|
||||
Uri.parse(it)
|
||||
}
|
||||
|
||||
return if (uri.toString().startsWith("file"))
|
||||
DocumentFile.fromFile(File(uri.path!!))
|
||||
else
|
||||
DocumentFile.fromTreeUri(context, uri)
|
||||
}
|
||||
|
||||
fun getDownloadDirectory(context: Context): File {
|
||||
val dlLocation = PreferenceManager.getDefaultSharedPreferences(context).getInt("dl_location", 0)
|
||||
|
||||
return ContextCompat.getExternalFilesDirs(context, null)[dlLocation]
|
||||
}
|
||||
|
||||
fun URL.download(to: File, onDownloadProgress: ((Long, Long) -> Unit)? = null) {
|
||||
to.outputStream().use { out ->
|
||||
fun URL.download(context: Context, to: DocumentFile, onDownloadProgress: ((Long, Long) -> Unit)? = null) {
|
||||
context.contentResolver.openOutputStream(to.uri).use { out ->
|
||||
out!!
|
||||
|
||||
with(openConnection()) {
|
||||
val fileSize = contentLength.toLong()
|
||||
@@ -64,4 +68,69 @@ fun URL.download(to: File, onDownloadProgress: ((Long, Long) -> Unit)? = null) {
|
||||
}
|
||||
}
|
||||
|
||||
fun File.isParentOf(file: File?) = file?.absolutePath?.startsWith(this.absolutePath) ?: false
|
||||
fun DocumentFile.isParentOf(file: DocumentFile?) : Boolean {
|
||||
var parent = file?.parentFile
|
||||
while (parent != null) {
|
||||
if (this.uri.path == parent.uri.path)
|
||||
return true
|
||||
|
||||
parent = parent.parentFile
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
fun DocumentFile.reader(context: Context, charset: Charset = Charsets.UTF_8) = context.contentResolver.openInputStream(uri)!!.reader(charset)
|
||||
fun DocumentFile.readBytes(context: Context) = context.contentResolver.openInputStream(uri)!!.readBytes()
|
||||
fun DocumentFile.readText(context: Context, charset: Charset = Charsets.UTF_8) = reader(context, charset).use { it.readText() }
|
||||
|
||||
fun DocumentFile.writeBytes(context: Context, array: ByteArray) = context.contentResolver.openOutputStream(uri)!!.write(array)
|
||||
fun DocumentFile.writeText(context: Context, text: String, charset: Charset = Charsets.UTF_8) = writeBytes(context, text.toByteArray(charset))
|
||||
|
||||
fun DocumentFile.copyRecursively(
|
||||
context: Context,
|
||||
target: DocumentFile
|
||||
) {
|
||||
if (!exists())
|
||||
throw Exception("The source file doesn't exist.")
|
||||
|
||||
if (this.isFile)
|
||||
target.createFile("null", name!!)!!.writeBytes(
|
||||
context,
|
||||
readBytes(context)
|
||||
)
|
||||
else if (this.isDirectory) {
|
||||
target.createDirectory(name!!).also { newTarget ->
|
||||
listFiles().forEach { child ->
|
||||
child.copyRecursively(context, newTarget!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun DocumentFile.deleteRecursively() {
|
||||
|
||||
if (this.isDirectory)
|
||||
listFiles().forEach {
|
||||
it.deleteRecursively()
|
||||
}
|
||||
|
||||
this.delete()
|
||||
}
|
||||
|
||||
fun DocumentFile.walk(state: LinkedList<DocumentFile> = LinkedList()) : Queue<DocumentFile> {
|
||||
if (state.isEmpty())
|
||||
state.push(this)
|
||||
|
||||
listFiles().forEach {
|
||||
state.push(it)
|
||||
|
||||
if (it.isDirectory) {
|
||||
it.walk(state)
|
||||
}
|
||||
}
|
||||
|
||||
return state
|
||||
}
|
||||
|
||||
fun File.copyTo(context: Context, target: DocumentFile) = target.writeBytes(context, this.readBytes())
|
||||
Reference in New Issue
Block a user