diff --git a/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt b/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt index 63b0740d0..8daef3685 100644 --- a/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt +++ b/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt @@ -1,7 +1,10 @@ package fr.free.nrw.commons.fileusages +import android.net.Uri +import timber.log.Timber + /** - * Show where file is being used on Commons and oher wikis. + * shows where file is being used on Commons and other wikis. */ data class FileUsagesUiModel( val title: String, @@ -9,10 +12,37 @@ data class FileUsagesUiModel( ) fun FileUsage.toUiModel(): FileUsagesUiModel { - return FileUsagesUiModel(title = title, link = "https://commons.wikimedia.org/wiki/$title") + return FileUsagesUiModel( + title = title, + link = "https://commons.wikimedia.org/wiki/${Uri.encode(title.replace(" ", "_"))}" + ) } fun GlobalFileUsage.toUiModel(): FileUsagesUiModel { - // link is associated with sub items under wiki group (which is not used ATM) - return FileUsagesUiModel(title = wiki, link = null) -} + Timber.d("GlobalFileUsage: wiki=%s, title=%s", wiki, title) + + // handles the empty or invalid wiki/title + if (wiki.isEmpty() || title.isEmpty()) { + Timber.w("Invalid GlobalFileUsage: wiki=%s, title=%s", wiki, title) + return FileUsagesUiModel(title = title, link = null) + } + + // determines the domain + val domain = when { + wiki.contains(".") -> wiki // Already a full domain like "en.wikipedia.org" + wiki == "commonswiki" -> "commons.wikimedia.org" + wiki.endsWith("wiki") -> { + val code = wiki.removeSuffix("wiki") + "$code.wikipedia.org" + } + else -> "$wiki.wikipedia.org" // fallback for codes like "en" + } + + val normalizedTitle = Uri.encode(title.replace(" ", "_")) + + // construct full URL + val url = "https://$domain/wiki/$normalizedTitle" + Timber.d("Generated URL for GlobalFileUsage: %s", url) + + return FileUsagesUiModel(title = title, link = url) +} \ No newline at end of file