Skip to content

Commit 175b86f

Browse files
ashishkumar468maskara
authored and
maskara
committed
Bugfix/upload via share (commons-app#1920)
* Bug Fix commons-app#1878 * 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: * formatting changes, removed unused commented out line
1 parent 69e4d96 commit 175b86f

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@ dependencies {
6464
androidTestImplementation 'com.android.support.test:rules:1.0.2'
6565
androidTestImplementation 'com.android.support.test:runner:1.0.2'
6666
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
67-
6867
debugImplementation "com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY"
6968
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$LEAK_CANARY"
7069
testImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$LEAK_CANARY"
7170

7271
//For handling runtime permissions
7372
implementation 'com.karumi:dexter:5.0.0'
7473

74+
implementation files('libs/simplemagic-1.9.jar')
7575
}
7676

7777
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 & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
import android.webkit.MimeTypeMap;
1414
import android.widget.Toast;
1515

16+
import com.j256.simplemagic.ContentInfo;
17+
import com.j256.simplemagic.ContentInfoUtil;
1618
import java.io.File;
1719
import java.io.FileInputStream;
1820
import java.io.FileNotFoundException;
21+
import java.io.FilterInputStream;
1922
import java.io.IOException;
2023
import java.io.InputStream;
2124
import java.util.HashSet;
@@ -68,6 +71,7 @@ public class UploadService extends HandlerService<Contribution> {
6871
public static final int NOTIFICATION_UPLOAD_IN_PROGRESS = 1;
6972
public static final int NOTIFICATION_UPLOAD_COMPLETE = 2;
7073
public static final int NOTIFICATION_UPLOAD_FAILED = 3;
74+
private ContentInfoUtil contentInfoUtil;
7175

7276
public UploadService() {
7377
super("UploadService");
@@ -129,7 +133,6 @@ public void onCreate() {
129133
protected void handle(int what, Contribution contribution) {
130134
switch (what) {
131135
case ACTION_UPLOAD_FILE:
132-
//FIXME: Google Photos bug
133136
uploadContribution(contribution);
134137
break;
135138
default:
@@ -195,20 +198,34 @@ private NotificationCompat.Builder getNotificationBuilder(Contribution contribut
195198
}
196199

197200
private void uploadContribution(Contribution contribution) {
198-
InputStream fileInputStream;
199-
201+
InputStream fileInputStream = null;
202+
InputStream tempFileInputStream = null;
203+
ContentInfo contentInfo = null;
200204
String notificationTag = contribution.getLocalUri().toString();
201205

202206
try {
203-
//FIXME: Google Photos bug
204207
File file1 = new File(contribution.getLocalUri().getPath());
205208
fileInputStream = new FileInputStream(file1);
206-
//fileInputStream = this.getContentResolver().openInputStream(contribution.getLocalUri());
209+
tempFileInputStream = new FileInputStream(file1);
210+
if (contentInfoUtil == null) {
211+
contentInfoUtil = new ContentInfoUtil();
212+
}
213+
contentInfo = contentInfoUtil.findMatch(tempFileInputStream);
207214
} catch (FileNotFoundException e) {
208215
Timber.d("File not found");
209216
Toast fileNotFound = Toast.makeText(this, R.string.upload_failed, Toast.LENGTH_LONG);
210217
fileNotFound.show();
211218
return;
219+
} catch (IOException e) {
220+
Timber.d("exception while fetching MIME type: "+e);
221+
} finally {
222+
try {
223+
if (null != tempFileInputStream) {
224+
tempFileInputStream.close();
225+
}
226+
} catch (IOException e) {
227+
Timber.d("File not found");
228+
}
212229
}
213230

214231
//As the fileInputStream is null there's no point in continuing the upload process
@@ -226,9 +243,17 @@ private void uploadContribution(Contribution contribution) {
226243

227244
String filename = null;
228245
try {
246+
//try to fetch the MIME type from contentInfo first and then use the tag to do it
247+
//Note : the tag has not proven trustworthy in the past
248+
String mimeType;
249+
if (contentInfo == null || contentInfo.getMimeType() == null) {
250+
mimeType = (String) contribution.getTag("mimeType");
251+
} else {
252+
mimeType = contentInfo.getMimeType();
253+
}
229254
filename = Utils.fixExtension(
230255
contribution.getFilename(),
231-
MimeTypeMap.getSingleton().getExtensionFromMimeType((String)contribution.getTag("mimeType")));
256+
MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType));
232257

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

0 commit comments

Comments
 (0)