@@ -48,30 +48,46 @@ class FetchHandlerImpl(private val namespace: String,
48
48
}
49
49
50
50
private fun enqueueRequests (requests : List <Request >): List <Download > {
51
- val results = requests.distinctBy { it.file }
51
+ val results = requests.asSequence(). distinctBy { it.file }
52
52
.map {
53
53
val downloadInfo = it.toDownloadInfo()
54
54
downloadInfo.namespace = namespace
55
55
prepareDownloadInfoForEnqueue(downloadInfo)
56
- downloadInfo.status = if (it.downloadOnEnqueue) {
57
- Status .QUEUED
56
+ if (downloadInfo.status != Status .COMPLETED ) {
57
+ downloadInfo.status = if (it.downloadOnEnqueue) {
58
+ Status .QUEUED
59
+ } else {
60
+ Status .ADDED
61
+ }
62
+ val downloadPair = databaseManager.insert(downloadInfo)
63
+ logger.d(" Enqueued download ${downloadPair.first} " )
64
+ downloadPair.first
58
65
} else {
59
- Status .ADDED
66
+ logger.d(" Updating download $downloadInfo " )
67
+ databaseManager.update(downloadInfo)
68
+ downloadInfo
60
69
}
61
- val downloadPair = databaseManager.insert(downloadInfo)
62
- logger.d(" Enqueued download ${downloadPair.first} " )
63
- downloadPair.first
64
- }
70
+ }.toList()
65
71
startPriorityQueueIfNotStarted()
66
72
return results
67
73
}
68
74
69
75
private fun prepareDownloadInfoForEnqueue (downloadInfo : DownloadInfo ) {
70
- val existingDownload = databaseManager.getByFile(downloadInfo.file)
76
+ var existingDownload = databaseManager.getByFile(downloadInfo.file)
71
77
if (existingDownload == null ) {
72
78
createFileIfPossible(File (downloadInfo.file))
73
79
}
74
- if (downloadInfo.enqueueAction == EnqueueAction .DO_NOT_ENQUEUE_IF_EXISTING && existingDownload != null ) {
80
+ if (downloadInfo.enqueueAction == EnqueueAction .UPDATE_ACCORDINGLY && existingDownload != null ) {
81
+ cancelDownloadsIfDownloading(listOf (existingDownload.id))
82
+ existingDownload = databaseManager.getByFile(downloadInfo.file)
83
+ if (existingDownload != null ) {
84
+ if (existingDownload.status != Status .COMPLETED ) {
85
+ existingDownload.status = Status .QUEUED
86
+ existingDownload.error = defaultNoError
87
+ }
88
+ downloadInfo.copyFrom(existingDownload)
89
+ }
90
+ } else if (downloadInfo.enqueueAction == EnqueueAction .DO_NOT_ENQUEUE_IF_EXISTING && existingDownload != null ) {
75
91
throw FetchException (REQUEST_WITH_FILE_PATH_ALREADY_EXIST )
76
92
} else if (downloadInfo.enqueueAction == EnqueueAction .REPLACE_EXISTING && existingDownload != null ) {
77
93
deleteDownloads(listOf (downloadInfo.id))
@@ -275,14 +291,9 @@ class FetchHandlerImpl(private val namespace: String,
275
291
val oldDownloadInfo = databaseManager.get(requestId)
276
292
if (oldDownloadInfo != null ) {
277
293
val newDownloadInfo = newRequest.toDownloadInfo()
278
- newDownloadInfo.status = if (newRequest.downloadOnEnqueue) {
279
- Status .QUEUED
280
- } else {
281
- Status .ADDED
282
- }
283
294
newDownloadInfo.namespace = namespace
284
295
val enqueueAction = newDownloadInfo.enqueueAction
285
- if (enqueueAction == EnqueueAction .REPLACE_EXISTING ) {
296
+ if (enqueueAction == EnqueueAction .REPLACE_EXISTING || enqueueAction == EnqueueAction . UPDATE_ACCORDINGLY ) {
286
297
if (newRequest.file == oldDownloadInfo.file) {
287
298
newDownloadInfo.downloaded = oldDownloadInfo.downloaded
288
299
newDownloadInfo.total = oldDownloadInfo.total
@@ -291,6 +302,15 @@ class FetchHandlerImpl(private val namespace: String,
291
302
} else {
292
303
delete(listOf (requestId))
293
304
}
305
+ if (oldDownloadInfo.status == Status .COMPLETED ) {
306
+
307
+ } else {
308
+ newDownloadInfo.status = if (newRequest.downloadOnEnqueue) {
309
+ Status .QUEUED
310
+ } else {
311
+ Status .ADDED
312
+ }
313
+ }
294
314
prepareDownloadInfoForEnqueue(newDownloadInfo)
295
315
startPriorityQueueIfNotStarted()
296
316
databaseManager.insert(newDownloadInfo)
0 commit comments