diff --git a/app/src/main/java/com/nextcloud/utils/extensions/OCCapabilityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/OCCapabilityExtensions.kt index b98231e5e1d6..e04aa184edfa 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/OCCapabilityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/OCCapabilityExtensions.kt @@ -17,7 +17,7 @@ fun OCCapability.forbiddenFilenames(): List = jsonToList(forbiddenFilena fun OCCapability.forbiddenFilenameCharacters(): List = jsonToList(forbiddenFilenameCharactersJson) -fun OCCapability.forbiddenFilenameExtension(): List = jsonToList(forbiddenFilenameExtensionJson) +fun OCCapability.forbiddenFilenameExtensions(): List = jsonToList(forbiddenFilenameExtensionJson) fun OCCapability.forbiddenFilenameBaseNames(): List = jsonToList(forbiddenFilenameBaseNamesJson) diff --git a/app/src/main/java/com/nextcloud/utils/fileNameValidator/FileNameValidator.kt b/app/src/main/java/com/nextcloud/utils/fileNameValidator/FileNameValidator.kt index a7332da57660..516b7d425b90 100644 --- a/app/src/main/java/com/nextcloud/utils/fileNameValidator/FileNameValidator.kt +++ b/app/src/main/java/com/nextcloud/utils/fileNameValidator/FileNameValidator.kt @@ -12,7 +12,7 @@ import android.text.TextUtils import com.nextcloud.utils.extensions.StringConstants import com.nextcloud.utils.extensions.forbiddenFilenameBaseNames import com.nextcloud.utils.extensions.forbiddenFilenameCharacters -import com.nextcloud.utils.extensions.forbiddenFilenameExtension +import com.nextcloud.utils.extensions.forbiddenFilenameExtensions import com.nextcloud.utils.extensions.forbiddenFilenames import com.nextcloud.utils.extensions.removeFileExtension import com.owncloud.android.R @@ -49,54 +49,44 @@ object FileNameValidator { } } - if (capability.version.isNewerOrEqual(NextcloudVersion.nextcloud_30)) { - checkInvalidCharacters(filename, capability, context)?.let { - return it - } + if (!capability.version.isNewerOrEqual(NextcloudVersion.nextcloud_30)) { + return null + } - capability.run { - val filenameVariants = setOf(filename.lowercase(), filename.removeFileExtension().lowercase()) + checkInvalidCharacters(filename, capability, context)?.let { return it } - forbiddenFilenameBaseNames().let { - val forbiddenBaseNames = forbiddenFilenameBaseNames().map { it.lowercase() } + val filenameVariants = setOf(filename.lowercase(), filename.removeFileExtension().lowercase()) - for (forbiddenBaseName in forbiddenBaseNames) { - if (forbiddenBaseName in filenameVariants) { - return context.getString( - R.string.file_name_validator_error_reserved_names, - forbiddenBaseName - ) - } - } + with(capability) { + forbiddenFilenameBaseNamesJson?.let { + forbiddenFilenameBaseNames().find { it.lowercase() in filenameVariants }?.let { forbiddenBaseFilename -> + return context.getString(R.string.file_name_validator_error_reserved_names, forbiddenBaseFilename) } + } - forbiddenFilenamesJson?.let { - val forbiddenFilenames = forbiddenFilenames().map { it.lowercase() } - - for (forbiddenFilename in forbiddenFilenames) { - if (forbiddenFilename in filenameVariants) { - return context.getString( - R.string.file_name_validator_error_reserved_names, - forbiddenFilename - ) - } - } + forbiddenFilenamesJson?.let { + forbiddenFilenames().find { it.lowercase() in filenameVariants }?.let { forbiddenFilename -> + return context.getString(R.string.file_name_validator_error_reserved_names, forbiddenFilename) } + } - forbiddenFilenameExtensionJson?.let { - for (forbiddenExtension in forbiddenFilenameExtension()) { - if (filename.endsWith(forbiddenExtension, ignoreCase = true)) { - return if (forbiddenExtension == StringConstants.SPACE) { - context.getString( - R.string.file_name_validator_error_forbidden_space_character_extensions - ) - } else { - context.getString( - R.string.file_name_validator_error_forbidden_file_extensions, - forbiddenExtension - ) - } - } + forbiddenFilenameExtensionJson?.let { + forbiddenFilenameExtensions().find { extension -> + when { + extension == StringConstants.SPACE -> + filename.startsWith(extension, ignoreCase = true) || + filename.endsWith(extension, ignoreCase = true) + + else -> filename.endsWith(extension, ignoreCase = true) + } + }?.let { forbiddenExtension -> + return if (forbiddenExtension == StringConstants.SPACE) { + context.getString(R.string.file_name_validator_error_forbidden_space_character_extensions) + } else { + context.getString( + R.string.file_name_validator_error_forbidden_file_extensions, + forbiddenExtension + ) } } }