val downloader = Downloader.Builder().build() val request = Download.Request.Builder() .url(it.url) .into(it.savepath) // or into(file) .build() val call = downloader.newCall(request)
privatefundownloadAction() { if (isRunning) { return } val coroutineScope = CoroutineScope(Dispatchers.IO) coroutineScope.launch { while (queue.size > 0) { isRunning = true
val downItem = queue.peek() downItem?.let { try { val downloader = Downloader.Builder().build() val request = Download.Request.Builder() .url(it.url) .into(it.savepath) // or into(file) .build() val call = downloader.newCall(request) call.execute(object : Download.Callback { overridefunonStart(call: Download.Call) { for (downloadCallback in callbackList) { downloadCallback.onStart(downItem) } }
overridefunonSuccess(call: Download.Call, response: Download.Response) { // do your job queue.poll() for (downloadCallback in callbackList) { downloadCallback.onSuccess(downItem) } }
overridefunonFailure(call: Download.Call, response: Download.Response) { // do your job
queue.poll() for (downloadCallback in callbackList) { downloadCallback.onFailure(downItem) } }
overridefunonLoading(call: Download.Call, current: Long, total: Long) { for (downloadCallback in callbackList) { val progress = (current * 100 / total).toInt() if (progress != downItem.progress) { downItem.progress = progress downloadCallback.onLoading(downItem) } } } }) } catch (e: Exception) { queue.poll() for (downloadCallback in callbackList) { downloadCallback.onFailure(downItem) } } }
} isRunning = false }
} }
dataclassDownloadItem(val url: String, val tag: String, val savepath: String, var progress: Int)