You've already forked Magisk
mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-09-06 06:36:58 +00:00
Added option to have custom download location
The location is automatically added to list of supported paths for caching
This commit is contained in:
committed by
John Wu
parent
7cd814d917
commit
e5118418b2
@@ -11,6 +11,7 @@ import android.widget.Toast
|
||||
import androidx.annotation.RequiresPermission
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.topjohnwu.magisk.ClassMap
|
||||
import com.topjohnwu.magisk.Config
|
||||
import com.topjohnwu.magisk.Const
|
||||
import com.topjohnwu.magisk.R
|
||||
import com.topjohnwu.magisk.model.entity.internal.Configuration.*
|
||||
@@ -29,7 +30,7 @@ import kotlin.random.Random.Default.nextInt
|
||||
open class DownloadService : RemoteFileService() {
|
||||
|
||||
private val context get() = this
|
||||
private val String.downloadsFile get() = File(Const.EXTERNAL_PATH, this)
|
||||
private val String.downloadsFile get() = Config.downloadsFile()?.let { File(it, this) }
|
||||
private val File.type
|
||||
get() = MimeTypeMap.getSingleton()
|
||||
.getMimeTypeFromExtension(extension)
|
||||
@@ -100,19 +101,36 @@ open class DownloadService : RemoteFileService() {
|
||||
// ---
|
||||
|
||||
private fun moveToDownloads(file: File) {
|
||||
val destination = file.name.downloadsFile
|
||||
val destination = file.name.downloadsFile ?: let {
|
||||
Utils.toast(
|
||||
getString(R.string.download_file_folder_error),
|
||||
Toast.LENGTH_LONG
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (file != destination) {
|
||||
destination.deleteRecursively()
|
||||
file.copyTo(destination)
|
||||
}
|
||||
|
||||
Utils.toast(
|
||||
getString(R.string.internal_storage, "/Download/${file.name}"),
|
||||
getString(
|
||||
R.string.internal_storage,
|
||||
"/" + destination.toRelativeString(Const.EXTERNAL_PATH.parentFile)
|
||||
),
|
||||
Toast.LENGTH_LONG
|
||||
)
|
||||
}
|
||||
|
||||
private fun fileIntent(fileName: String): Intent {
|
||||
val file = fileName.downloadsFile
|
||||
val file = fileName.downloadsFile ?: let {
|
||||
Utils.toast(
|
||||
getString(R.string.download_file_folder_error),
|
||||
Toast.LENGTH_LONG
|
||||
)
|
||||
return Intent()
|
||||
}
|
||||
return Intent(Intent.ACTION_VIEW)
|
||||
.setDataAndType(file.provide(this), file.type)
|
||||
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.topjohnwu.magisk.R
|
||||
import com.topjohnwu.magisk.data.repository.FileRepository
|
||||
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
|
||||
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject.*
|
||||
import com.topjohnwu.magisk.utils.firstMap
|
||||
import com.topjohnwu.magisk.utils.writeToCachedFile
|
||||
import com.topjohnwu.magisk.view.Notifications
|
||||
import com.topjohnwu.superuser.ShellUtils
|
||||
@@ -25,6 +26,13 @@ abstract class RemoteFileService : NotificationService() {
|
||||
|
||||
private val repo by inject<FileRepository>()
|
||||
|
||||
private val supportedFolders
|
||||
get() = listOfNotNull(
|
||||
cacheDir,
|
||||
Config.downloadsFile(),
|
||||
Const.EXTERNAL_PATH
|
||||
)
|
||||
|
||||
override val defaultNotification: NotificationCompat.Builder
|
||||
get() = Notifications
|
||||
.progress(this, "")
|
||||
@@ -53,15 +61,7 @@ abstract class RemoteFileService : NotificationService() {
|
||||
throw IllegalStateException("The download cache is disabled")
|
||||
}
|
||||
|
||||
val file = runCatching {
|
||||
cacheDir.list().orEmpty()
|
||||
.first { it == subject.fileName } // this throws an exception if not found
|
||||
.let { File(cacheDir, it) }
|
||||
}.getOrElse {
|
||||
Const.EXTERNAL_PATH.list().orEmpty()
|
||||
.first { it == subject.fileName } // this throws an exception if not found
|
||||
.let { File(Const.EXTERNAL_PATH, it) }
|
||||
}
|
||||
val file = supportedFolders.firstMap { it.find(subject.fileName) }
|
||||
|
||||
if (subject is Magisk) {
|
||||
if (!ShellUtils.checkSum("MD5", file, subject.magisk.hash)) {
|
||||
@@ -91,6 +91,10 @@ abstract class RemoteFileService : NotificationService() {
|
||||
|
||||
// ---
|
||||
|
||||
private fun File.find(name: String) = list().orEmpty()
|
||||
.firstOrNull { it == name }
|
||||
?.let { File(this, it) }
|
||||
|
||||
private fun ResponseBody.toFile(id: Int, name: String): File {
|
||||
val maxRaw = contentLength()
|
||||
val max = maxRaw / 1_000_000f
|
||||
|
||||
Reference in New Issue
Block a user