diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index 144c503bb..00cd29a6d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -47,6 +47,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.util.Date +import java.util.Random import java.util.regex.Pattern import javax.inject.Inject @@ -548,33 +549,30 @@ class UploadWorker( } private fun findUniqueFileName(fileName: String): String { - var sequenceFileName: String? - var sequenceNumber = 1 - while (true) { + var sequenceFileName: String? = fileName + val random = Random() + + // Loops until sequenceFileName does not match any existing file names + while (mediaClient + .checkPageExistsUsingTitle( + String.format( + "File:%s", + sequenceFileName, + ), + ).blockingGet()) { + + // Generate a random 5-character alphanumeric string + val randomHash = (random.nextInt(90000) + 10000).toString() + sequenceFileName = - if (sequenceNumber == 1) { - fileName + if (fileName.indexOf('.') == -1) { + "$fileName #$randomHash" } else { - if (fileName.indexOf('.') == -1) { - "$fileName $sequenceNumber" - } else { - val regex = - Pattern.compile("^(.*)(\\..+?)$") - val regexMatcher = regex.matcher(fileName) - regexMatcher.replaceAll("$1 $sequenceNumber$2") - } + val regex = + Pattern.compile("^(.*)(\\..+?)$") + val regexMatcher = regex.matcher(fileName) + regexMatcher.replaceAll("$1 #$randomHash") } - if (!mediaClient - .checkPageExistsUsingTitle( - String.format( - "File:%s", - sequenceFileName, - ), - ).blockingGet() - ) { - break - } - sequenceNumber++ } return sequenceFileName!! }