2023-01-31 21:13:39 +05:30
|
|
|
package com.github.libretube.helpers
|
2022-09-10 15:21:50 +05:30
|
|
|
|
|
|
|
import android.content.Context
|
2022-12-16 17:47:09 +05:30
|
|
|
import android.content.Intent
|
2022-10-07 23:18:55 +05:30
|
|
|
import android.os.Build
|
2023-01-18 09:36:50 +05:30
|
|
|
import androidx.core.content.ContextCompat
|
2022-12-16 17:47:09 +05:30
|
|
|
import com.github.libretube.constants.IntentData
|
2022-12-25 15:33:28 +05:30
|
|
|
import com.github.libretube.constants.PreferenceKeys
|
2022-12-21 21:10:48 +05:30
|
|
|
import com.github.libretube.db.obj.DownloadItem
|
2022-12-16 17:47:09 +05:30
|
|
|
import com.github.libretube.services.DownloadService
|
2023-03-07 07:14:09 +05:30
|
|
|
import java.nio.file.Path
|
|
|
|
import kotlin.io.path.createDirectories
|
2022-09-10 15:21:50 +05:30
|
|
|
|
|
|
|
object DownloadHelper {
|
2022-11-11 23:09:56 +05:30
|
|
|
const val VIDEO_DIR = "video"
|
|
|
|
const val AUDIO_DIR = "audio"
|
2022-12-16 22:14:21 +05:30
|
|
|
const val SUBTITLE_DIR = "subtitle"
|
2022-11-11 23:09:56 +05:30
|
|
|
const val METADATA_DIR = "metadata"
|
|
|
|
const val THUMBNAIL_DIR = "thumbnail"
|
2022-12-16 22:14:21 +05:30
|
|
|
const val DOWNLOAD_CHUNK_SIZE = 8L * 1024
|
2022-12-21 21:10:48 +05:30
|
|
|
const val DEFAULT_TIMEOUT = 15 * 1000
|
2022-12-25 10:56:26 +05:30
|
|
|
const val DEFAULT_RETRY = 3
|
2022-11-11 23:09:56 +05:30
|
|
|
|
2023-03-07 07:14:09 +05:30
|
|
|
private fun getOfflineStorageDir(context: Context): Path {
|
|
|
|
val file = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
2022-10-07 23:18:55 +05:30
|
|
|
context.filesDir
|
2023-03-07 07:14:09 +05:30
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
context.getExternalFilesDir(null)!!
|
|
|
|
} catch (e: Exception) {
|
|
|
|
context.filesDir
|
|
|
|
}
|
2022-10-07 23:18:55 +05:30
|
|
|
}
|
2023-03-07 07:14:09 +05:30
|
|
|
return file.toPath()
|
2022-09-10 15:21:50 +05:30
|
|
|
}
|
|
|
|
|
2023-03-07 07:14:09 +05:30
|
|
|
fun getDownloadDir(context: Context, path: String): Path {
|
2023-04-01 09:23:17 +05:30
|
|
|
@Suppress("NewApi") // The Path class is desugared.
|
2023-03-07 07:14:09 +05:30
|
|
|
return getOfflineStorageDir(context).resolve(path).createDirectories()
|
2022-09-10 15:21:50 +05:30
|
|
|
}
|
2022-09-10 15:40:45 +05:30
|
|
|
|
2022-12-25 15:33:28 +05:30
|
|
|
fun getMaxConcurrentDownloads(): Int {
|
|
|
|
return PreferenceHelper.getString(
|
|
|
|
PreferenceKeys.MAX_CONCURRENT_DOWNLOADS,
|
|
|
|
"6"
|
|
|
|
).toFloat().toInt()
|
|
|
|
}
|
|
|
|
|
2022-12-16 17:47:09 +05:30
|
|
|
fun startDownloadService(
|
|
|
|
context: Context,
|
|
|
|
videoId: String? = null,
|
|
|
|
fileName: String? = null,
|
|
|
|
videoFormat: String? = null,
|
|
|
|
videoQuality: String? = null,
|
|
|
|
audioFormat: String? = null,
|
|
|
|
audioQuality: String? = null,
|
|
|
|
subtitleCode: String? = null
|
|
|
|
) {
|
|
|
|
val intent = Intent(context, DownloadService::class.java)
|
|
|
|
|
|
|
|
intent.putExtra(IntentData.videoId, videoId)
|
|
|
|
intent.putExtra(IntentData.fileName, fileName)
|
|
|
|
intent.putExtra(IntentData.videoFormat, videoFormat)
|
|
|
|
intent.putExtra(IntentData.videoQuality, videoQuality)
|
|
|
|
intent.putExtra(IntentData.audioFormat, audioFormat)
|
|
|
|
intent.putExtra(IntentData.audioQuality, audioQuality)
|
|
|
|
intent.putExtra(IntentData.subtitleCode, subtitleCode)
|
|
|
|
|
2023-01-18 09:36:50 +05:30
|
|
|
ContextCompat.startForegroundService(context, intent)
|
2022-12-16 17:47:09 +05:30
|
|
|
}
|
2022-12-21 21:18:30 +05:30
|
|
|
|
|
|
|
fun DownloadItem.getNotificationId(): Int {
|
|
|
|
return Int.MAX_VALUE - id
|
|
|
|
}
|
2022-09-10 15:21:50 +05:30
|
|
|
}
|