Skip to content

Commit eb275e2

Browse files
Merge pull request commons-app#232 from whym/fixextension
Fix extension replacement, add related tests
2 parents 48a6ee4 + b91c977 commit eb275e2

File tree

5 files changed

+51
-17
lines changed

5 files changed

+51
-17
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ dependencies {
1313
compile 'com.android.support:appcompat-v7:23.4.0'
1414
compile 'com.android.support:design:23.4.0'
1515

16+
testCompile 'junit:junit:4.12'
1617

1718
//noinspection GradleDependency - old version has required feature
1819
compile 'com.google.code.gson:gson:1.4'

app/src/main/java/fr/free/nrw/commons/Utils.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,18 @@ public static boolean xmlFastForward(XmlPullParser parser, String namespace, Str
240240
return false;
241241
}
242242
}
243+
244+
public static String fixExtension(String title, String extension) {
245+
// People are used to ".jpg" more than ".jpeg" which the system gives us.
246+
if (extension != null && extension.toLowerCase().equals("jpeg")) {
247+
extension = "jpg";
248+
}
249+
if (title.toLowerCase().endsWith(".jpeg")) {
250+
title = title.replaceFirst("\\.jpeg$", ".jpg");
251+
}
252+
if (extension != null && !title.toLowerCase().endsWith("." + extension.toLowerCase())) {
253+
title += "." + extension;
254+
}
255+
return title;
256+
}
243257
}

app/src/main/java/fr/free/nrw/commons/upload/UploadController.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.free.nrw.commons.upload;
22

3-
import android.Manifest;
43
import android.app.Activity;
54
import android.content.ComponentName;
65
import android.content.Context;
@@ -15,16 +14,13 @@
1514
import android.provider.MediaStore;
1615
import android.text.TextUtils;
1716
import android.util.Log;
18-
import android.webkit.MimeTypeMap;
19-
import android.widget.Toast;
2017

2118
import java.io.IOException;
2219
import java.util.Date;
2320

2421
import fr.free.nrw.commons.CommonsApplication;
2522
import fr.free.nrw.commons.HandlerService;
2623
import fr.free.nrw.commons.Prefs;
27-
import fr.free.nrw.commons.R;
2824
import fr.free.nrw.commons.Utils;
2925
import fr.free.nrw.commons.contributions.Contribution;
3026

@@ -69,20 +65,9 @@ public void cleanup() {
6965
}
7066
}
7167

72-
public void startUpload(String rawTitle, Uri mediaUri, String description, String mimeType, String source, ContributionUploadProgress onComplete) {
68+
public void startUpload(String title, Uri mediaUri, String description, String mimeType, String source, ContributionUploadProgress onComplete) {
7369
Contribution contribution;
7470

75-
String title = rawTitle;
76-
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
77-
// People are used to ".jpg" more than ".jpeg" which the system gives us.
78-
if (extension != null && extension.toLowerCase().equals("jpeg")) {
79-
extension = "jpg";
80-
}
81-
if(extension != null && !title.toLowerCase().endsWith(extension.toLowerCase())) {
82-
title += "." + extension;
83-
}
84-
85-
8671
contribution = new Contribution(mediaUri, null, title, description, -1, null, null, app.getCurrentAccount().name, CommonsApplication.DEFAULT_EDIT_SUMMARY);
8772

8873
contribution.setTag("mimeType", mimeType);

app/src/main/java/fr/free/nrw/commons/upload/UploadService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.content.*;
1818
import android.support.v4.app.NotificationCompat;
1919
import android.util.*;
20+
import android.webkit.MimeTypeMap;
2021
import android.widget.*;
2122

2223
import fr.free.nrw.commons.contributions.*;
@@ -197,7 +198,11 @@ private void uploadContribution(Contribution contribution) {
197198
this.startForeground(NOTIFICATION_UPLOAD_IN_PROGRESS, curProgressNotification.build());
198199

199200
try {
200-
String filename = findUniqueFilename(contribution.getFilename());
201+
202+
String filename = Utils.fixExtension(
203+
contribution.getFilename(),
204+
MimeTypeMap.getSingleton().getExtensionFromMimeType((String)contribution.getTag("mimeType")));
205+
filename = findUniqueFilename(filename);
201206
if(!api.validateLogin()) {
202207
// Need to revalidate!
203208
if(app.revalidateAuthToken()) {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package fr.free.nrw.commons;
2+
import org.junit.Test;
3+
4+
import fr.free.nrw.commons.upload.UploadController;
5+
6+
import static org.junit.Assert.*;
7+
8+
public class UtilsTest {
9+
10+
@Test public void fixExtensionJpegToJpg() {
11+
assertEquals("SampleFile.jpg", Utils.fixExtension("SampleFile.jpeg", "jpeg"));
12+
}
13+
14+
@Test public void fixExtensionJpgToJpg() {
15+
assertEquals("SampleFile.jpg", Utils.fixExtension("SampleFile.jpg", "jpg"));
16+
}
17+
18+
@Test public void fixExtensionPngToPng() {
19+
assertEquals("SampleFile.png", Utils.fixExtension("SampleFile.png", "png"));
20+
}
21+
22+
@Test public void fixExtensionEmptyToJpg() {
23+
assertEquals("SampleFile.jpg", Utils.fixExtension("SampleFile", "jpg"));
24+
}
25+
26+
@Test public void fixExtensionJpgNotExtension() {
27+
assertEquals("SampleFileJpg.jpg", Utils.fixExtension("SampleFileJpg", "jpg"));
28+
}
29+
}

0 commit comments

Comments
 (0)