Skip to content

Commit 77b0fa7

Browse files
* Added a java library to fetch the MIME type from input stream * Fetch MIME type using this and use the contribution tag only when this fails:
1 parent 6a25474 commit 77b0fa7

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ dependencies {
7373
androidTestImplementation 'com.android.support.test:rules:1.0.2'
7474
androidTestImplementation 'com.android.support.test:runner:1.0.2'
7575
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
76-
7776
debugImplementation "com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY"
7877
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$LEAK_CANARY"
7978
testImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$LEAK_CANARY"
8079

8180
implementation 'com.borjabravo:readmoretextview:2.1.0'
8281
implementation 'com.dinuscxj:circleprogressbar:1.1.1'
82+
implementation files('libs/simplemagic-1.9.jar')
8383
}
8484

8585
android {

app/libs/simplemagic-1.9.jar

217 KB
Binary file not shown.

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ public static String fixExtension(String title, String extension) {
131131

132132
// If extension is still null, make it jpg. (Hotfix for https://github.com/commons-app/apps-android-commons/issues/228)
133133
// If title has an extension in it, if won't be true
134-
// FIXME: .png uploads fail when uploaded via Share
135134
if (extension == null && title.lastIndexOf(".")<=0) {
136135
extension = "jpg";
137136
title += "." + extension;

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

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
import android.webkit.MimeTypeMap;
1515
import android.widget.Toast;
1616

17+
import com.j256.simplemagic.ContentInfo;
18+
import com.j256.simplemagic.ContentInfoUtil;
1719
import java.io.File;
1820
import java.io.FileInputStream;
1921
import java.io.FileNotFoundException;
22+
import java.io.FilterInputStream;
2023
import java.io.IOException;
2124
import java.io.InputStream;
2225
import java.util.HashSet;
@@ -69,6 +72,7 @@ public class UploadService extends HandlerService<Contribution> {
6972
public static final int NOTIFICATION_UPLOAD_IN_PROGRESS = 1;
7073
public static final int NOTIFICATION_UPLOAD_COMPLETE = 2;
7174
public static final int NOTIFICATION_UPLOAD_FAILED = 3;
75+
private ContentInfoUtil contentInfoUtil;
7276

7377
public UploadService() {
7478
super("UploadService");
@@ -130,7 +134,6 @@ public void onCreate() {
130134
protected void handle(int what, Contribution contribution) {
131135
switch (what) {
132136
case ACTION_UPLOAD_FILE:
133-
//FIXME: Google Photos bug
134137
uploadContribution(contribution);
135138
break;
136139
default:
@@ -183,20 +186,35 @@ public int onStartCommand(Intent intent, int flags, int startId) {
183186

184187
@SuppressLint("StringFormatInvalid")
185188
private void uploadContribution(Contribution contribution) {
186-
InputStream fileInputStream;
187-
189+
InputStream fileInputStream=null;
190+
InputStream tempFileInputStream=null;
191+
ContentInfo contentInfo=null;
188192
String notificationTag = contribution.getLocalUri().toString();
189193

190194
try {
191-
//FIXME: Google Photos bug
192195
File file1 = new File(contribution.getLocalUri().getPath());
193196
fileInputStream = new FileInputStream(file1);
197+
tempFileInputStream = new FileInputStream(file1);
198+
if(contentInfoUtil==null){
199+
contentInfoUtil=new ContentInfoUtil();
200+
}
201+
contentInfo= contentInfoUtil.findMatch(tempFileInputStream);
194202
//fileInputStream = this.getContentResolver().openInputStream(contribution.getLocalUri());
195203
} catch (FileNotFoundException e) {
196204
Timber.d("File not found");
197205
Toast fileNotFound = Toast.makeText(this, R.string.upload_failed, Toast.LENGTH_LONG);
198206
fileNotFound.show();
199207
return;
208+
} catch (IOException e) {
209+
Timber.d("exception while fetching MIME type: "+e);
210+
} finally {
211+
try {
212+
if (null != tempFileInputStream) {
213+
tempFileInputStream.close();
214+
}
215+
} catch (IOException e) {
216+
Timber.d("File not found");
217+
}
200218
}
201219

202220
//As the fileInputStream is null there's no point in continuing the upload process
@@ -222,9 +240,17 @@ private void uploadContribution(Contribution contribution) {
222240

223241
String filename = null;
224242
try {
243+
//try to fetch the MIME type from contentInfo first and then use the tag to do it
244+
//Note : the tag has not proven trustworthy in the past
245+
String mimeType;
246+
if(contentInfo==null || contentInfo.getMimeType()==null){
247+
mimeType=(String)contribution.getTag("mimeType");
248+
}else{
249+
mimeType=contentInfo.getMimeType();
250+
}
225251
filename = Utils.fixExtension(
226252
contribution.getFilename(),
227-
MimeTypeMap.getSingleton().getExtensionFromMimeType((String)contribution.getTag("mimeType")));
253+
MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType));
228254

229255
synchronized (unfinishedUploads) {
230256
Timber.d("making sure of uniqueness of name: %s", filename);

0 commit comments

Comments
 (0)