Moved fixExtension to its own class

This commit is contained in:
Paul Hawke 2025-07-02 16:14:57 -05:00
parent b37948ec39
commit 0fcfb8071b
4 changed files with 39 additions and 35 deletions

View file

@ -1,9 +1,9 @@
package fr.free.nrw.commons.upload package fr.free.nrw.commons.upload
import android.net.Uri import android.net.Uri
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.filepicker.MimeTypeMapWrapper.Companion.getExtensionFromMimeType import fr.free.nrw.commons.filepicker.MimeTypeMapWrapper.Companion.getExtensionFromMimeType
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.utils.FilenameUtils
import fr.free.nrw.commons.utils.ImageUtils import fr.free.nrw.commons.utils.ImageUtils
class UploadItem( class UploadItem(
@ -32,7 +32,7 @@ class UploadItem(
* languages have been entered, the first language is used. * languages have been entered, the first language is used.
*/ */
val filename: String val filename: String
get() = Utils.fixExtension( get() = FilenameUtils.fixExtension(
uploadMediaDetails[0].captionText, uploadMediaDetails[0].captionText,
getExtensionFromMimeType(mimeType) getExtensionFromMimeType(mimeType)
) )

View file

@ -0,0 +1,36 @@
package fr.free.nrw.commons.utils;
import java.util.Locale;
import java.util.regex.Pattern;
public final class FilenameUtils {
/**
* Adds extension to filename. Converts to .jpg if system provides .jpeg, adds .jpg if no extension detected
* @param title File name
* @param extension Correct extension
* @return File with correct extension
*/
public static String fixExtension(String title, String extension) {
Pattern jpegPattern = Pattern.compile("\\.jpeg$", Pattern.CASE_INSENSITIVE);
// People are used to ".jpg" more than ".jpeg" which the system gives us.
if (extension != null && extension.toLowerCase(Locale.ENGLISH).equals("jpeg")) {
extension = "jpg";
}
title = jpegPattern.matcher(title).replaceFirst(".jpg");
if (extension != null && !title.toLowerCase(Locale.getDefault())
.endsWith("." + extension.toLowerCase(Locale.ENGLISH))) {
title += "." + extension;
}
// If extension is still null, make it jpg. (Hotfix for https://github.com/commons-app/apps-android-commons/issues/228)
// If title has an extension in it, if won't be true
if (extension == null && title.lastIndexOf(".")<=0) {
extension = "jpg";
title += "." + extension;
}
return title;
}
}

View file

@ -7,40 +7,8 @@ import android.text.SpannableString;
import android.text.style.UnderlineSpan; import android.text.style.UnderlineSpan;
import android.widget.TextView; import android.widget.TextView;
import java.util.Locale;
import java.util.regex.Pattern;
public class Utils { public class Utils {
/**
* Adds extension to filename. Converts to .jpg if system provides .jpeg, adds .jpg if no extension detected
* @param title File name
* @param extension Correct extension
* @return File with correct extension
*/
public static String fixExtension(String title, String extension) {
Pattern jpegPattern = Pattern.compile("\\.jpeg$", Pattern.CASE_INSENSITIVE);
// People are used to ".jpg" more than ".jpeg" which the system gives us.
if (extension != null && extension.toLowerCase(Locale.ENGLISH).equals("jpeg")) {
extension = "jpg";
}
title = jpegPattern.matcher(title).replaceFirst(".jpg");
if (extension != null && !title.toLowerCase(Locale.getDefault())
.endsWith("." + extension.toLowerCase(Locale.ENGLISH))) {
title += "." + extension;
}
// If extension is still null, make it jpg. (Hotfix for https://github.com/commons-app/apps-android-commons/issues/228)
// If title has an extension in it, if won't be true
if (extension == null && title.lastIndexOf(".")<=0) {
extension = "jpg";
title += "." + extension;
}
return title;
}
/* /*
*Copies the content to the clipboard *Copies the content to the clipboard
* *

View file

@ -1,6 +1,6 @@
package fr.free.nrw.commons.utils package fr.free.nrw.commons.utils
import fr.free.nrw.commons.utils.Utils.fixExtension import fr.free.nrw.commons.utils.FilenameUtils.fixExtension
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test