diff --git a/android/pom.xml b/android/pom.xml index 7abe07d..3ae5b77 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -29,6 +29,11 @@ jsch 0.1.55 + + org.jodd + jodd-util + 6.0.0 + com.google.code.gson gson diff --git a/android/src/main/java/net/monarchpass/piecannon/Send.java b/android/src/main/java/net/monarchpass/piecannon/Send.java index 6e2d544..e7a1323 100644 --- a/android/src/main/java/net/monarchpass/piecannon/Send.java +++ b/android/src/main/java/net/monarchpass/piecannon/Send.java @@ -18,6 +18,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ExecutionException; +import jodd.net.MimeTypes; + import lombok.AllArgsConstructor; public class Send extends Activity { @@ -43,34 +45,24 @@ public class Send extends Activity { text.setText(imageUri.toString()); final ContentResolver resolver = getContentResolver(); - final String type = resolver.getType(imageUri); - String extension; - - if ("image/gif".equals(type)) { - extension = ".gif"; - } else if ("image/png".equals(type)) { - extension = ".png"; - } else { - extension = ".jpg"; - } - - final String fileName = imageUri.getLastPathSegment() + extension; final Server testServer = new TestServer(); - try - { - final URI uploaded = executor.submit(() -> testServer.upload(fileName, new ContentByteSource(resolver, imageUri))) - .get(); - text.setText(uploaded.toString()); - shareUploadUrl(uploaded); - } - catch (final InterruptedException | ExecutionException exception) { - final StringWriter buf = new StringWriter(); - final PrintWriter out = new PrintWriter(buf); - out.println("in: " + imageUri + " -> " + fileName); - exception.printStackTrace(out); - text.setText(buf.toString()); - } + executor.submit(() -> { + try + { + final URI uploaded = testServer.upload(createFileNameForUri(imageUri, resolver), new ContentByteSource(resolver, imageUri)); + runOnUiThread(() -> { + text.setText(uploaded.toString()); + shareUploadUrl(uploaded); + }); + } + catch (final Exception exception) { + final StringWriter buf = new StringWriter(); + final PrintWriter out = new PrintWriter(buf); + exception.printStackTrace(out); + runOnUiThread(() -> text.setText(buf.toString())); + } + }); } public void shareUploadUrl (final URI uploadedUrl) { @@ -80,6 +72,21 @@ public class Send extends Activity { startActivity(Intent.createChooser(sharingIntent, "Share uploaded url")); } + public static String createFileNameForUri (final Uri uri, final ContentResolver resolver) { + final String filename = uri.getLastPathSegment(); + if (filename.contains(".")) { + return filename; + } + + final String type = resolver.getType(uri); + final String[] extensions = MimeTypes.findExtensionsByMimeTypes(type, false); + if (extensions.length > 0) { + return filename + "." + extensions[0]; + } + + throw new RuntimeException("Could not construct a file name"); + } + @AllArgsConstructor public static class ContentByteSource extends ByteSource { private final ContentResolver resolver;