v4
laoyuyu 2 years ago
parent 34e60bd578
commit e2c7686da0
  1. 33
      Http/src/main/java/com/arialyy/aria/http/HttpBaseStartController.kt
  2. 12
      Http/src/main/java/com/arialyy/aria/http/HttpComponentLoader.kt
  3. 7
      Http/src/main/java/com/arialyy/aria/http/HttpTaskOption.kt
  4. 3
      Http/src/main/java/com/arialyy/aria/http/HttpUtil.kt
  5. 3
      Http/src/main/java/com/arialyy/aria/http/download/HttpBlockThreadInterceptor.kt
  6. 6
      Http/src/main/java/com/arialyy/aria/http/download/HttpDBTaskAdapter.kt
  7. 11
      Http/src/main/java/com/arialyy/aria/http/download/HttpDBlockInterceptor.kt
  8. 6
      Http/src/main/java/com/arialyy/aria/http/download/HttpDCTTaskAdapter.kt
  9. 9
      Http/src/main/java/com/arialyy/aria/http/download/HttpDHeaderInterceptor.kt
  10. 64
      Http/src/main/java/com/arialyy/aria/http/download/HttpDStartController.kt
  11. 7
      Http/src/main/java/com/arialyy/aria/http/download/HttpDTaskUtil.kt
  12. 4
      Http/src/main/java/com/arialyy/aria/http/download/HttpDownloader.kt
  13. 35
      Http/src/main/java/com/arialyy/aria/http/upload/HttpULoader.kt
  14. 4
      Http/src/main/java/com/arialyy/aria/http/upload/HttpULoader1.java
  15. 2
      Http/src/main/java/com/arialyy/aria/http/upload/HttpULoaderUtil.java
  16. 53
      Http/src/main/java/com/arialyy/aria/http/upload/HttpUStartController.kt
  17. 2
      PublicComponent/src/main/java/com/arialyy/aria/core/download/TaskOption.kt
  18. 3
      PublicComponent/src/main/java/com/arialyy/aria/core/inf/IComponentLoader.kt
  19. 4
      PublicComponent/src/main/java/com/arialyy/aria/core/inf/IDownloader.kt
  20. 23
      PublicComponent/src/main/java/com/arialyy/aria/core/inf/IUploader.kt
  21. 10
      PublicComponent/src/main/java/com/arialyy/aria/core/task/DownloadTask.java

@ -15,11 +15,44 @@
*/ */
package com.arialyy.aria.http package com.arialyy.aria.http
import com.arialyy.aria.core.task.ITaskInterceptor
import timber.log.Timber
/** /**
* @Author laoyuyu * @Author laoyuyu
* @Description * @Description
* @Date 12:40 PM 2023/1/22 * @Date 12:40 PM 2023/1/22
**/ **/
open class HttpBaseStartController(val target: Any) { open class HttpBaseStartController(val target: Any) {
protected var httpTaskOption = HttpTaskOption()
/**
* set http params, link Header
*/
open fun setHttpOption(httpOption: HttpOption): HttpBaseStartController {
httpTaskOption.httpOption = httpOption
return this
}
/**
* use multi-threaded download file, if file size <= 5m, this setting is not valid
* @param threadNum range [1 - 32]
*/
open fun setThreadNum(threadNum: Int): HttpBaseStartController {
if (threadNum !in 1..32) {
Timber.e("set thread num fail, only 0 < threadNum < 33, threadNum: $threadNum")
return this
}
httpTaskOption.threadNum = threadNum
return this
}
/**
* if you want to do something before the task is executed, you can set up a task interceptor
* eg: determine the network status before task execution
*/
open fun setTaskInterceptor(taskInterceptor: ITaskInterceptor): HttpBaseStartController {
httpTaskOption.taskInterceptor.add(taskInterceptor)
return this
}
} }

@ -20,7 +20,9 @@ import com.arialyy.aria.core.DuaContext
import com.arialyy.aria.core.inf.IBaseLoader import com.arialyy.aria.core.inf.IBaseLoader
import com.arialyy.aria.core.inf.IComponentLoader import com.arialyy.aria.core.inf.IComponentLoader
import com.arialyy.aria.core.inf.IDownloader import com.arialyy.aria.core.inf.IDownloader
import com.arialyy.aria.core.inf.IUploader
import com.arialyy.aria.http.download.HttpDownloader import com.arialyy.aria.http.download.HttpDownloader
import com.arialyy.aria.http.upload.HttpULoader
import kotlin.LazyThreadSafetyMode.SYNCHRONIZED import kotlin.LazyThreadSafetyMode.SYNCHRONIZED
/** /**
@ -33,6 +35,11 @@ class HttpComponentLoader : IComponentLoader {
private val downloader by lazy(SYNCHRONIZED) { private val downloader by lazy(SYNCHRONIZED) {
HttpDownloader(DuaContext.getLifeManager().getTargetByLoader(this)!!) HttpDownloader(DuaContext.getLifeManager().getTargetByLoader(this)!!)
} }
private val uploader by lazy(SYNCHRONIZED) {
HttpULoader(DuaContext.getLifeManager().getTargetByLoader(this)!!)
}
private lateinit var loader: IBaseLoader private lateinit var loader: IBaseLoader
override fun <T : IDownloader> download(): T { override fun <T : IDownloader> download(): T {
@ -40,6 +47,11 @@ class HttpComponentLoader : IComponentLoader {
return downloader as T return downloader as T
} }
override fun <T : IUploader> upload(): T {
loader = uploader
return uploader as T
}
override fun getTaskEnum(): TaskEnum { override fun getTaskEnum(): TaskEnum {
return loader.getTaskEnum() return loader.getTaskEnum()
} }

@ -13,19 +13,18 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.arialyy.aria.http.download package com.arialyy.aria.http
import com.arialyy.aria.core.download.DTaskOption import com.arialyy.aria.core.download.TaskOption
import com.arialyy.aria.core.processor.IHttpFileLenAdapter import com.arialyy.aria.core.processor.IHttpFileLenAdapter
import com.arialyy.aria.core.task.ITaskInterceptor import com.arialyy.aria.core.task.ITaskInterceptor
import com.arialyy.aria.http.HttpOption
/** /**
* @Author laoyuyu * @Author laoyuyu
* @Description * @Description
* @Date 12:47 PM 2023/1/22 * @Date 12:47 PM 2023/1/22
**/ **/
class HttpDTaskOption : DTaskOption() { class HttpTaskOption : TaskOption() {
var httpOption: HttpOption? = null var httpOption: HttpOption? = null
var fileSizeAdapter: IHttpFileLenAdapter? = null var fileSizeAdapter: IHttpFileLenAdapter? = null

@ -19,7 +19,6 @@ import android.net.Uri
import android.text.TextUtils import android.text.TextUtils
import com.arialyy.aria.core.inf.ITaskUtil import com.arialyy.aria.core.inf.ITaskUtil
import com.arialyy.aria.core.task.TaskCachePool import com.arialyy.aria.core.task.TaskCachePool
import com.arialyy.aria.http.download.HttpDTaskOption
import com.arialyy.aria.http.download.HttpDTaskUtil import com.arialyy.aria.http.download.HttpDTaskUtil
import com.arialyy.aria.util.FileUtils import com.arialyy.aria.util.FileUtils
import com.arialyy.aria.util.Regular import com.arialyy.aria.util.Regular
@ -88,7 +87,7 @@ internal object HttpUtil {
return connection.inputStream return connection.inputStream
} }
fun checkHttpDParams(option: HttpDTaskOption?): Boolean { fun checkHttpDParams(option: HttpTaskOption?): Boolean {
if (option == null) { if (option == null) {
Timber.e("option is null") Timber.e("option is null")
return false return false

@ -22,6 +22,7 @@ import com.arialyy.aria.core.task.TaskChain
import com.arialyy.aria.core.task.TaskResp import com.arialyy.aria.core.task.TaskResp
import com.arialyy.aria.core.task.ThreadConfig import com.arialyy.aria.core.task.ThreadConfig
import com.arialyy.aria.core.task.ThreadTask2 import com.arialyy.aria.core.task.ThreadTask2
import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.orm.entity.BlockRecord import com.arialyy.aria.orm.entity.BlockRecord
/** /**
@ -44,7 +45,7 @@ class HttpBlockThreadInterceptor : ITaskInterceptor {
val threadTaskList = mutableListOf<IThreadTask>() val threadTaskList = mutableListOf<IThreadTask>()
blockRecordList.forEach { blockRecordList.forEach {
val option = chain.getTask().getTaskOption(HttpDTaskOption::class.java) val option = chain.getTask().getTaskOption(HttpTaskOption::class.java)
val threadConfig = ThreadConfig(it, option, DuaContext.getDConfig().maxSpeed) val threadConfig = ThreadConfig(it, option, DuaContext.getDConfig().maxSpeed)
threadTaskList.add( threadTaskList.add(
ThreadTask2( ThreadTask2(

@ -17,7 +17,7 @@ package com.arialyy.aria.http.download
import com.arialyy.aria.core.task.AbsThreadTaskAdapter import com.arialyy.aria.core.task.AbsThreadTaskAdapter
import com.arialyy.aria.core.task.ThreadConfig import com.arialyy.aria.core.task.ThreadConfig
import com.arialyy.aria.http.ConnectionHelp import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.http.HttpUtil import com.arialyy.aria.http.HttpUtil
import com.arialyy.aria.http.request.IRequest.Companion.getRequest import com.arialyy.aria.http.request.IRequest.Companion.getRequest
import timber.log.Timber import timber.log.Timber
@ -35,8 +35,8 @@ import java.nio.channels.Channels
**/ **/
class HttpDBTaskAdapter(threadConfig: ThreadConfig) : AbsThreadTaskAdapter(threadConfig) { class HttpDBTaskAdapter(threadConfig: ThreadConfig) : AbsThreadTaskAdapter(threadConfig) {
private fun getTaskOption(): HttpDTaskOption { private fun getTaskOption(): HttpTaskOption {
return threadConfig.option as HttpDTaskOption return threadConfig.option as HttpTaskOption
} }
override fun handlerThreadTask() { override fun handlerThreadTask() {

@ -22,6 +22,7 @@ import com.arialyy.aria.core.task.ITask
import com.arialyy.aria.core.task.ITaskInterceptor import com.arialyy.aria.core.task.ITaskInterceptor
import com.arialyy.aria.core.task.TaskChain import com.arialyy.aria.core.task.TaskChain
import com.arialyy.aria.core.task.TaskResp import com.arialyy.aria.core.task.TaskResp
import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.orm.entity.BlockRecord import com.arialyy.aria.orm.entity.BlockRecord
import com.arialyy.aria.orm.entity.TaskRecord import com.arialyy.aria.orm.entity.TaskRecord
import com.arialyy.aria.util.FileUri import com.arialyy.aria.util.FileUri
@ -38,20 +39,20 @@ import java.io.File
*/ */
internal class HttpDBlockInterceptor : ITaskInterceptor { internal class HttpDBlockInterceptor : ITaskInterceptor {
private lateinit var task: ITask private lateinit var task: ITask
private lateinit var option: HttpDTaskOption private lateinit var option: HttpTaskOption
private lateinit var blockManager: IBlockManager private lateinit var blockManager: IBlockManager
private lateinit var taskRecord: TaskRecord private lateinit var taskRecord: TaskRecord
override suspend fun interceptor(chain: TaskChain): TaskResp { override suspend fun interceptor(chain: TaskChain): TaskResp {
task = chain.getTask() task = chain.getTask()
blockManager = chain.blockManager blockManager = chain.blockManager
option = task.getTaskOption(HttpDTaskOption::class.java) option = task.getTaskOption(HttpTaskOption::class.java)
if (task.taskState.fileSize < 0) { if (task.taskState.fileSize < 0) {
Timber.e("file size < 0") Timber.e("file size < 0")
return TaskResp(TaskResp.CODE_GET_FILE_INFO_FAIL) return TaskResp(TaskResp.CODE_GET_FILE_INFO_FAIL)
} }
val savePath = FileUri.getPathByUri(task.getTaskOption(HttpDTaskOption::class.java).savePathUri) val savePath = FileUri.getPathByUri(task.getTaskOption(HttpTaskOption::class.java).savePathUri)
if (savePath.isNullOrEmpty()) { if (savePath.isNullOrEmpty()) {
Timber.e("saveUri is null") Timber.e("saveUri is null")
return TaskResp(TaskResp.CODE_SAVE_URI_NULL) return TaskResp(TaskResp.CODE_SAVE_URI_NULL)
@ -76,7 +77,7 @@ internal class HttpDBlockInterceptor : ITaskInterceptor {
} }
private fun removeBlock() { private fun removeBlock() {
val saveUri = task.getTaskOption(HttpDTaskOption::class.java).savePathUri val saveUri = task.getTaskOption(HttpTaskOption::class.java).savePathUri
if (!FileUtils.uriEffective(saveUri)) { if (!FileUtils.uriEffective(saveUri)) {
return return
} }
@ -108,7 +109,7 @@ internal class HttpDBlockInterceptor : ITaskInterceptor {
taskRecord.blockList.addAll( taskRecord.blockList.addAll(
BlockUtil.createBlockRecord( BlockUtil.createBlockRecord(
task.getTaskOption(HttpDTaskOption::class.java).savePathUri!!, task.getTaskOption(HttpTaskOption::class.java).savePathUri!!,
task.taskState.fileSize task.taskState.fileSize
) )
) )

@ -17,7 +17,7 @@ package com.arialyy.aria.http.download
import com.arialyy.aria.core.task.AbsThreadTaskAdapter import com.arialyy.aria.core.task.AbsThreadTaskAdapter
import com.arialyy.aria.core.task.ThreadConfig import com.arialyy.aria.core.task.ThreadConfig
import com.arialyy.aria.http.ConnectionHelp import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.http.HttpUtil import com.arialyy.aria.http.HttpUtil
import com.arialyy.aria.http.request.IRequest.Companion.getRequest import com.arialyy.aria.http.request.IRequest.Companion.getRequest
import java.io.BufferedInputStream import java.io.BufferedInputStream
@ -34,8 +34,8 @@ import java.nio.channels.Channels
**/ **/
class HttpDCTTaskAdapter(threadConfig: ThreadConfig) : AbsThreadTaskAdapter(threadConfig) { class HttpDCTTaskAdapter(threadConfig: ThreadConfig) : AbsThreadTaskAdapter(threadConfig) {
private fun getTaskOption(): HttpDTaskOption { private fun getTaskOption(): HttpTaskOption {
return threadConfig.option as HttpDTaskOption return threadConfig.option as HttpTaskOption
} }
override fun handlerThreadTask() { override fun handlerThreadTask() {

@ -25,6 +25,7 @@ import com.arialyy.aria.core.task.ITask
import com.arialyy.aria.core.task.ITaskInterceptor import com.arialyy.aria.core.task.ITaskInterceptor
import com.arialyy.aria.core.task.TaskChain import com.arialyy.aria.core.task.TaskChain
import com.arialyy.aria.core.task.TaskResp import com.arialyy.aria.core.task.TaskResp
import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.http.HttpUtil import com.arialyy.aria.http.HttpUtil
import com.arialyy.aria.http.request.IRequest import com.arialyy.aria.http.request.IRequest
import com.arialyy.aria.orm.entity.BlockRecord import com.arialyy.aria.orm.entity.BlockRecord
@ -43,7 +44,7 @@ import java.util.UUID
**/ **/
internal class HttpDHeaderInterceptor : ITaskInterceptor { internal class HttpDHeaderInterceptor : ITaskInterceptor {
private lateinit var task: ITask private lateinit var task: ITask
private lateinit var taskOption: HttpDTaskOption private lateinit var taskOption: HttpTaskOption
companion object { companion object {
private val CODE_30X = listOf( private val CODE_30X = listOf(
@ -58,7 +59,7 @@ internal class HttpDHeaderInterceptor : ITaskInterceptor {
} }
Timber.i("step 1. get file info") Timber.i("step 1. get file info")
task = chain.getTask() task = chain.getTask()
taskOption = task.getTaskOption(HttpDTaskOption::class.java) taskOption = task.getTaskOption(HttpTaskOption::class.java)
try { try {
val fileSize = getFileSize() val fileSize = getFileSize()
if (fileSize >= 0) { if (fileSize >= 0) {
@ -70,7 +71,7 @@ internal class HttpDHeaderInterceptor : ITaskInterceptor {
} catch (e: IOException) { } catch (e: IOException) {
Timber.e( Timber.e(
"download fail, url: ${ "download fail, url: ${
chain.getTask().getTaskOption(HttpDTaskOption::class.java).sourUrl chain.getTask().getTaskOption(HttpTaskOption::class.java).sourUrl
}" }"
) )
return TaskResp(TaskResp.CODE_GET_FILE_INFO_FAIL) return TaskResp(TaskResp.CODE_GET_FILE_INFO_FAIL)
@ -191,7 +192,7 @@ internal class HttpDHeaderInterceptor : ITaskInterceptor {
*/ */
private fun getFileSizeFromHeader( private fun getFileSizeFromHeader(
header: Map<String, List<String>>, header: Map<String, List<String>>,
taskOption: HttpDTaskOption taskOption: HttpTaskOption
): Long { ): Long {
var lenAdapter = taskOption.fileSizeAdapter var lenAdapter = taskOption.fileSizeAdapter
if (lenAdapter == null) { if (lenAdapter == null) {

@ -26,10 +26,10 @@ import com.arialyy.aria.core.task.ITaskInterceptor
import com.arialyy.aria.core.task.TaskCachePool import com.arialyy.aria.core.task.TaskCachePool
import com.arialyy.aria.http.HttpBaseStartController import com.arialyy.aria.http.HttpBaseStartController
import com.arialyy.aria.http.HttpOption import com.arialyy.aria.http.HttpOption
import com.arialyy.aria.http.HttpTaskOption
import com.arialyy.aria.http.HttpUtil import com.arialyy.aria.http.HttpUtil
import com.arialyy.aria.orm.entity.DEntity import com.arialyy.aria.orm.entity.DEntity
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber
import java.net.HttpURLConnection import java.net.HttpURLConnection
/** /**
@ -37,57 +37,37 @@ import java.net.HttpURLConnection
* @Description * @Description
* @Date 12:38 PM 2023/1/22 * @Date 12:38 PM 2023/1/22
**/ **/
class HttpDStartStartController(target: Any, val url: String) : HttpBaseStartController(target), class HttpDStartController(target: Any, val url: String) : HttpBaseStartController(target),
IStartController { IStartController {
private var httpDTaskOption = HttpDTaskOption()
init { init {
httpDTaskOption.sourUrl = url httpTaskOption.sourUrl = url
} }
/** override fun setTaskInterceptor(taskInterceptor: ITaskInterceptor): HttpDStartController {
* use multi-threaded download file, if file size <= 5m, this setting is not valid return super.setTaskInterceptor(taskInterceptor) as HttpDStartController
* @param threadNum range [1 - 32]
*/
fun setThreadNum(threadNum: Int): HttpDStartStartController {
if (threadNum !in 1..32) {
Timber.e("set thread num fail, only 0 < threadNum < 33, threadNum: $threadNum")
return this
}
httpDTaskOption.threadNum = threadNum
return this
} }
/** override fun setThreadNum(threadNum: Int): HttpDStartController {
* set http params, link Header return super.setThreadNum(threadNum) as HttpDStartController
*/
fun setHttpOption(httpOption: HttpOption): HttpDStartStartController {
httpDTaskOption.httpOption = httpOption
return this
} }
/** override fun setHttpOption(httpOption: HttpOption): HttpDStartController {
* Maybe the server has special rules, you need set [IHttpFileLenAdapter] to get the file length from [HttpURLConnection.getHeaderFields] return super.setHttpOption(httpOption) as HttpDStartController
*/
fun setHttpFileLenAdapter(adapter: IHttpFileLenAdapter): HttpDStartStartController {
httpDTaskOption.fileSizeAdapter = adapter
return this
} }
/** /**
* if you want to do something before the task is executed, you can set up a task interceptor * Maybe the server has special rules, you need set [IHttpFileLenAdapter] to get the file length from [HttpURLConnection.getHeaderFields]
* eg: determine the network status before task execution
*/ */
fun setTaskInterceptor(taskInterceptor: ITaskInterceptor): HttpDStartStartController { fun setHttpFileLenAdapter(adapter: IHttpFileLenAdapter): HttpDStartController {
httpDTaskOption.taskInterceptor.add(taskInterceptor) httpTaskOption.fileSizeAdapter = adapter
return this return this
} }
/** /**
* set download listener * set download listener
*/ */
fun setListener(listener: HttpDownloadListener): HttpDStartStartController { fun setListener(listener: HttpDownloadListener): HttpDStartController {
DuaContext.getLifeManager().addCustomListener(target, listener) DuaContext.getLifeManager().addCustomListener(target, listener)
return this return this
} }
@ -95,24 +75,24 @@ class HttpDStartStartController(target: Any, val url: String) : HttpBaseStartCon
/** /**
* set file save path, eg: /mnt/sdcard/Downloads/test.zip * set file save path, eg: /mnt/sdcard/Downloads/test.zip
*/ */
fun setSavePath(savePath: Uri): HttpDStartStartController { fun setSavePath(savePath: Uri): HttpDStartController {
httpDTaskOption.savePathUri = savePath httpTaskOption.savePathUri = savePath
return this return this
} }
private fun createTask(): DownloadTask { private fun createTask(): DownloadTask {
if (HttpUtil.checkHttpDParams(httpDTaskOption)) { if (HttpUtil.checkHttpDParams(httpTaskOption)) {
throw IllegalArgumentException("invalid params") throw IllegalArgumentException("invalid params")
} }
val savePath = httpDTaskOption.savePathUri!! val savePath = httpTaskOption.savePathUri!!
var util = TaskCachePool.getTaskUtil(savePath) var util = TaskCachePool.getTaskUtil(savePath)
if (util == null) { if (util == null) {
util = HttpDTaskUtil() util = HttpDTaskUtil()
TaskCachePool.putTaskUtil(savePath, util) TaskCachePool.putTaskUtil(savePath, util)
} }
val task = DownloadTask(httpDTaskOption, util) val task = DownloadTask(httpTaskOption, util)
DuaContext.duaScope.launch { DuaContext.duaScope.launch {
val dEntity = findDEntityBySavePath(httpDTaskOption) val dEntity = findDEntityBySavePath(httpTaskOption)
TaskCachePool.putEntity(task.taskId, dEntity) TaskCachePool.putEntity(task.taskId, dEntity)
} }
TaskCachePool.putTask(task) TaskCachePool.putTask(task)
@ -122,7 +102,7 @@ class HttpDStartStartController(target: Any, val url: String) : HttpBaseStartCon
/** /**
* find DEntity, if that not exist, create and save it * find DEntity, if that not exist, create and save it
*/ */
private suspend fun findDEntityBySavePath(option: HttpDTaskOption): DEntity { private suspend fun findDEntityBySavePath(option: HttpTaskOption): DEntity {
val savePath = option.savePathUri val savePath = option.savePathUri
val dao = DuaContext.getServiceManager().getDbService().getDuaDb().getDEntityDao() val dao = DuaContext.getServiceManager().getDbService().getDuaDb().getDEntityDao()
val de = dao.getDEntityBySavePath(savePath.toString()) val de = dao.getDEntityBySavePath(savePath.toString())
@ -138,7 +118,7 @@ class HttpDStartStartController(target: Any, val url: String) : HttpBaseStartCon
} }
override fun add(): Int { override fun add(): Int {
if (!HttpUtil.checkHttpDParams(httpDTaskOption)) { if (!HttpUtil.checkHttpDParams(httpTaskOption)) {
return -1 return -1
} }
val task = createTask() val task = createTask()
@ -147,7 +127,7 @@ class HttpDStartStartController(target: Any, val url: String) : HttpBaseStartCon
} }
override fun start(): Int { override fun start(): Int {
if (!HttpUtil.checkHttpDParams(httpDTaskOption)) { if (!HttpUtil.checkHttpDParams(httpTaskOption)) {
return -1 return -1
} }
val task = createTask() val task = createTask()

@ -24,6 +24,7 @@ import com.arialyy.aria.core.task.DownloadTask
import com.arialyy.aria.core.task.TaskResp import com.arialyy.aria.core.task.TaskResp
import com.arialyy.aria.core.task.ThreadTaskManager2 import com.arialyy.aria.core.task.ThreadTaskManager2
import com.arialyy.aria.exception.AriaException import com.arialyy.aria.exception.AriaException
import com.arialyy.aria.http.HttpTaskOption
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -37,7 +38,7 @@ internal class HttpDTaskUtil : AbsTaskUtil() {
private var blockManager: BlockManager? = null private var blockManager: BlockManager? = null
init { init {
getTask().getTaskOption(HttpDTaskOption::class.java).eventListener = getTask().getTaskOption(HttpTaskOption::class.java).eventListener =
HttpDEventListener(getTask() as DownloadTask) HttpDEventListener(getTask() as DownloadTask)
} }
@ -65,7 +66,7 @@ internal class HttpDTaskUtil : AbsTaskUtil() {
} }
override fun start() { override fun start() {
getTask().getTaskOption(HttpDTaskOption::class.java).taskInterceptor.let { getTask().getTaskOption(HttpTaskOption::class.java).taskInterceptor.let {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
addInterceptors(it) addInterceptors(it)
} }
@ -79,7 +80,7 @@ internal class HttpDTaskUtil : AbsTaskUtil() {
addCoreInterceptor(HttpBlockThreadInterceptor()) addCoreInterceptor(HttpBlockThreadInterceptor())
val resp = interceptor() val resp = interceptor()
if (resp == null || resp.code != TaskResp.CODE_SUCCESS) { if (resp == null || resp.code != TaskResp.CODE_SUCCESS) {
getTask().getTaskOption(HttpDTaskOption::class.java).eventListener.onFail( getTask().getTaskOption(HttpTaskOption::class.java).eventListener.onFail(
false, false,
AriaException("start task fail, task interrupt, code: ${resp?.code ?: TaskResp.CODE_INTERRUPT}") AriaException("start task fail, task interrupt, code: ${resp?.code ?: TaskResp.CODE_INTERRUPT}")
) )

@ -35,8 +35,8 @@ class HttpDownloader(val target: Any) : IDownloader {
* start, create a task * start, create a task
* @param url download url * @param url download url
*/ */
fun load(url: String): HttpDStartStartController { fun load(url: String): HttpDStartController {
return HttpDStartStartController(target, url) return HttpDStartController(target, url)
} }
/** /**

@ -0,0 +1,35 @@
/*
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.arialyy.aria.http.upload
import android.net.Uri
import com.arialyy.annotations.TaskEnum
import com.arialyy.aria.core.inf.IUploader
/**
* @Author laoyuyu
* @Description
* @Date 2:24 PM 2023/2/20
**/
class HttpULoader(val target: Any) : IUploader {
override fun getTaskEnum(): TaskEnum {
return TaskEnum.UPLOAD
}
fun load(filePath: Uri): HttpUStartController {
return HttpUStartController(target, filePath)
}
}

@ -30,8 +30,8 @@ import com.arialyy.aria.exception.AriaHTTPException;
import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.ALog;
import java.util.List; import java.util.List;
final class HttpULoader extends AbsNormalLoader<UTaskWrapper> { final class HttpULoader1 extends AbsNormalLoader<UTaskWrapper> {
HttpULoader(UTaskWrapper wrapper, IEventListener listener) { HttpULoader1(UTaskWrapper wrapper, IEventListener listener) {
super(wrapper, listener); super(wrapper, listener);
} }

@ -37,7 +37,7 @@ public final class HttpULoaderUtil extends AbsNormalLoaderUtil {
@Override public AbsNormalLoader getLoader() { @Override public AbsNormalLoader getLoader() {
if (mLoader == null) { if (mLoader == null) {
getTaskWrapper().generateTaskOption(HttpTaskOption.class); getTaskWrapper().generateTaskOption(HttpTaskOption.class);
mLoader = new HttpULoader((UTaskWrapper) getTaskWrapper(), getListener()); mLoader = new HttpULoader1((UTaskWrapper) getTaskWrapper(), getListener());
} }
return mLoader; return mLoader;
} }

@ -0,0 +1,53 @@
/*
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.arialyy.aria.http.upload
import android.net.Uri
import com.arialyy.aria.core.task.ITaskInterceptor
import com.arialyy.aria.http.HttpBaseStartController
import com.arialyy.aria.http.HttpOption
/**
* @Author laoyuyu
* @Description
* @Date 8:39 PM 2023/2/20
**/
class HttpUStartController(target: Any, val filePath: Uri) : HttpBaseStartController(target) {
init {
httpTaskOption.savePathUri = filePath
}
override fun setTaskInterceptor(taskInterceptor: ITaskInterceptor): HttpUStartController {
return super.setTaskInterceptor(taskInterceptor) as HttpUStartController
}
override fun setThreadNum(threadNum: Int): HttpUStartController {
return super.setThreadNum(threadNum) as HttpUStartController
}
override fun setHttpOption(httpOption: HttpOption): HttpUStartController {
return super.setHttpOption(httpOption) as HttpUStartController
}
/**
* set uploader service url
*/
fun setUploadUrl(url: String): HttpUStartController {
httpTaskOption.sourUrl = url
return this
}
}

@ -23,7 +23,7 @@ import com.arialyy.aria.core.inf.ITaskOption
* @Description * @Description
* @Date 4:16 PM 2023/1/25 * @Date 4:16 PM 2023/1/25
**/ **/
open class DTaskOption : ITaskOption() { open class TaskOption : ITaskOption() {
var sourUrl: String? = null var sourUrl: String? = null
var savePathUri: Uri? = null var savePathUri: Uri? = null
var redirectUrl: String? = null var redirectUrl: String? = null

@ -16,7 +16,6 @@
package com.arialyy.aria.core.inf package com.arialyy.aria.core.inf
import com.arialyy.annotations.TaskEnum import com.arialyy.annotations.TaskEnum
import com.arialyy.aria.core.listener.ITaskStatusListener
/** /**
* @Author laoyuyu * @Author laoyuyu
@ -33,5 +32,7 @@ interface IComponentLoader {
fun <T : IDownloader> download(): T fun <T : IDownloader> download(): T
fun <T : IUploader> upload(): T
fun getTaskEnum(): TaskEnum fun getTaskEnum(): TaskEnum
} }

@ -20,6 +20,4 @@ package com.arialyy.aria.core.inf
* @Description * @Description
* @Date 14:04 AM 2023/1/20 * @Date 14:04 AM 2023/1/20
**/ **/
interface IDownloader : IBaseLoader { interface IDownloader : IBaseLoader
}

@ -0,0 +1,23 @@
/*
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.arialyy.aria.core.inf
/**
* @Author laoyuyu
* @Description
* @Date 14:04 AM 2023/1/20
**/
interface IUploader : IBaseLoader

@ -17,7 +17,7 @@
package com.arialyy.aria.core.task; package com.arialyy.aria.core.task;
import android.net.Uri; import android.net.Uri;
import com.arialyy.aria.core.download.DTaskOption; import com.arialyy.aria.core.download.TaskOption;
import com.arialyy.aria.core.inf.ITaskUtil; import com.arialyy.aria.core.inf.ITaskUtil;
import java.util.Objects; import java.util.Objects;
@ -27,16 +27,16 @@ import java.util.Objects;
*/ */
public class DownloadTask extends AbsTask { public class DownloadTask extends AbsTask {
public DownloadTask(DTaskOption taskOption, ITaskUtil util) { public DownloadTask(TaskOption taskOption, ITaskUtil util) {
super(taskOption, util); super(taskOption, util);
} }
public Uri getSavePath() { public Uri getSavePath() {
return getTaskOption(DTaskOption.class).getSavePathUri(); return getTaskOption(TaskOption.class).getSavePathUri();
} }
public String getSourceUrl() { public String getSourceUrl() {
return getTaskOption(DTaskOption.class).getSourUrl(); return getTaskOption(TaskOption.class).getSourUrl();
} }
/** /**
@ -47,6 +47,6 @@ public class DownloadTask extends AbsTask {
} }
@Override public String getFilePath() { @Override public String getFilePath() {
return Objects.requireNonNull(getTaskOption(DTaskOption.class).getSavePathUri()).toString(); return Objects.requireNonNull(getTaskOption(TaskOption.class).getSavePathUri()).toString();
} }
} }
Loading…
Cancel
Save