commit e9f954e6042d1180a6e83ee750cdd3fa3ab26905
parent a7ab2ffced7b6026b3c7039d66f3cc2a5d341eb4
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Tue, 31 Oct 2023 15:34:00 +0100

fix(downloader): handle duplicate

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt | 7+++++--
Acommon/src/main/kotlin/me/rhunk/snapenhance/common/util/ktx/HashCode.kt | 8++++++++
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/spying/MessageLogger.kt | 8+-------
3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt b/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt @@ -23,6 +23,7 @@ import me.rhunk.snapenhance.common.data.download.DownloadMetadata import me.rhunk.snapenhance.common.data.download.DownloadRequest import me.rhunk.snapenhance.common.data.download.InputMedia import me.rhunk.snapenhance.common.data.download.SplitMediaAssetType +import me.rhunk.snapenhance.common.util.ktx.longHashCode import me.rhunk.snapenhance.common.util.snap.MediaDownloaderHelper import me.rhunk.snapenhance.common.util.snap.RemoteMediaResolver import me.rhunk.snapenhance.task.PendingTask @@ -328,11 +329,13 @@ class DownloadProcessor ( remoteSideContext.coroutineScope.launch { val downloadMetadata = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_METADATA_EXTRA)!!, DownloadMetadata::class.java) val downloadRequest = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_REQUEST_EXTRA)!!, DownloadRequest::class.java) + val downloadId = (downloadMetadata.mediaIdentifier ?: UUID.randomUUID().toString()).longHashCode().absoluteValue.toString(16) - remoteSideContext.taskManager.getTaskByHash(downloadMetadata.mediaIdentifier)?.let { task -> + remoteSideContext.taskManager.getTaskByHash(downloadId)?.let { task -> remoteSideContext.log.debug("already queued or downloaded") if (task.status.isFinalStage()) { + if (task.status != TaskStatus.SUCCESS) return@let callbackOnFailure(translation["already_downloaded_toast"], null) } else { callbackOnFailure(translation["already_queued_toast"], null) @@ -345,7 +348,7 @@ class DownloadProcessor ( Task( type = TaskType.DOWNLOAD, title = downloadMetadata.downloadSource + " (" + downloadMetadata.mediaAuthor + ")", - hash = (downloadMetadata.mediaIdentifier ?: UUID.randomUUID().toString()).hashCode().absoluteValue.toString(16) + hash = downloadId ) ).apply { status = TaskStatus.RUNNING diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/util/ktx/HashCode.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/util/ktx/HashCode.kt @@ -0,0 +1,7 @@ +package me.rhunk.snapenhance.common.util.ktx + +fun String.longHashCode(): Long { + var h = 1125899906842597L + for (element in this) h = 31 * h + element.code.toLong() + return h +}+ \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/spying/MessageLogger.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/spying/MessageLogger.kt @@ -9,6 +9,7 @@ import com.google.gson.JsonObject import com.google.gson.JsonParser import me.rhunk.snapenhance.common.data.ContentType import me.rhunk.snapenhance.common.data.MessageState +import me.rhunk.snapenhance.common.util.ktx.longHashCode import me.rhunk.snapenhance.common.util.protobuf.ProtoReader import me.rhunk.snapenhance.core.event.events.impl.BindViewEvent import me.rhunk.snapenhance.core.event.events.impl.BuildMessageEvent @@ -20,13 +21,6 @@ import me.rhunk.snapenhance.core.util.EvictingMap import java.util.concurrent.Executors import kotlin.system.measureTimeMillis -private fun Any.longHashCode(): Long { - var h = 1125899906842597L - val value = this.toString() - for (element in value) h = 31 * h + element.code.toLong() - return h -} - class MessageLogger : Feature("MessageLogger", loadParams = FeatureLoadParams.INIT_SYNC or FeatureLoadParams.ACTIVITY_CREATE_SYNC or