@@ -207,8 +207,8 @@ public class PgpDecryptionService {
}
}
final String url = message.getFileParams().url;
- mXmppConnectionService.getFileBackend().updateFileParams(message, url);
message.setEncryption(Message.ENCRYPTION_DECRYPTED);
+ mXmppConnectionService.getFileBackend().updateFileParams(message, url);
mXmppConnectionService.updateMessage(message);
if (!inputFile.delete()) {
Log.w(Config.LOGTAG,"unable to delete pgp encrypted source file "+inputFile.getAbsolutePath());
@@ -66,7 +66,6 @@ import eu.siacs.conversations.services.AttachFileToConversationRunnable;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.adapter.MediaAdapter;
import eu.siacs.conversations.ui.util.Attachment;
-import eu.siacs.conversations.utils.Compatibility;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.FileUtils;
import eu.siacs.conversations.utils.FileWriterException;
@@ -400,25 +399,23 @@ public class FileBackend {
public static Uri getMediaUri(Context context, File file) {
final String filePath = file.getAbsolutePath();
- final Cursor cursor;
- try {
- cursor =
- context.getContentResolver()
- .query(
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- new String[] {MediaStore.Images.Media._ID},
- MediaStore.Images.Media.DATA + "=? ",
- new String[] {filePath},
- null);
- } catch (SecurityException e) {
- return null;
- }
- if (cursor != null && cursor.moveToFirst()) {
- final int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
- cursor.close();
- return Uri.withAppendedPath(
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
- } else {
+ try (final Cursor cursor =
+ context.getContentResolver()
+ .query(
+ MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ new String[] {MediaStore.Images.Media._ID},
+ MediaStore.Images.Media.DATA + "=? ",
+ new String[] {filePath},
+ null)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ final int id =
+ cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
+ return Uri.withAppendedPath(
+ MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
+ } else {
+ return null;
+ }
+ } catch (final Exception e) {
return null;
}
}
@@ -1492,57 +1489,73 @@ public class FileBackend {
updateFileParams(message, null);
}
- public void updateFileParams(Message message, String url) {
- DownloadableFile file = getFile(message);
+ public void updateFileParams(final Message message, final String url) {
+ final boolean encrypted =
+ message.getEncryption() == Message.ENCRYPTION_PGP
+ || message.getEncryption() == Message.ENCRYPTION_DECRYPTED;
+ final DownloadableFile file = getFile(message);
final String mime = file.getMimeType();
- final boolean privateMessage = message.isPrivateMessage();
- final boolean ambiguous = MimeUtils.AMBIGUOUS_CONTAINER_FORMATS.contains(mime);
final boolean image =
message.getType() == Message.TYPE_IMAGE
|| (mime != null && mime.startsWith("image/"));
- final boolean video = mime != null && mime.startsWith("video/");
- final boolean audio = mime != null && mime.startsWith("audio/");
- final boolean pdf = "application/pdf".equals(mime);
+ final boolean privateMessage = message.isPrivateMessage();
final StringBuilder body = new StringBuilder();
if (url != null) {
body.append(url);
}
- body.append('|').append(file.getSize());
- if (ambiguous) {
- try {
- final Dimensions dimensions = getVideoDimensions(file);
- if (dimensions.valid()) {
- Log.d(Config.LOGTAG,"ambiguous file "+mime+" is video");
- body.append('|').append(dimensions.width).append('|').append(dimensions.height);
- } else {
- Log.d(Config.LOGTAG,"ambiguous file "+mime+" is audio");
+ if (encrypted && !file.exists()) {
+ Log.d(Config.LOGTAG, "skipping updateFileParams because file is encrypted");
+ final DownloadableFile encryptedFile = getFile(message, false);
+ body.append('|').append(encryptedFile.getSize());
+ } else {
+ Log.d(Config.LOGTAG, "running updateFileParams");
+ final boolean ambiguous = MimeUtils.AMBIGUOUS_CONTAINER_FORMATS.contains(mime);
+ final boolean video = mime != null && mime.startsWith("video/");
+ final boolean audio = mime != null && mime.startsWith("audio/");
+ final boolean pdf = "application/pdf".equals(mime);
+ body.append('|').append(file.getSize());
+ if (ambiguous) {
+ try {
+ final Dimensions dimensions = getVideoDimensions(file);
+ if (dimensions.valid()) {
+ Log.d(Config.LOGTAG, "ambiguous file " + mime + " is video");
+ body.append('|')
+ .append(dimensions.width)
+ .append('|')
+ .append(dimensions.height);
+ } else {
+ Log.d(Config.LOGTAG, "ambiguous file " + mime + " is audio");
+ body.append("|0|0|").append(getMediaRuntime(file));
+ }
+ } catch (final NotAVideoFile e) {
+ Log.d(Config.LOGTAG, "ambiguous file " + mime + " is audio");
body.append("|0|0|").append(getMediaRuntime(file));
}
- } catch (final NotAVideoFile e) {
- Log.d(Config.LOGTAG,"ambiguous file "+mime+" is audio");
- body.append("|0|0|").append(getMediaRuntime(file));
- }
- } else if (image || video || pdf) {
- try {
- final Dimensions dimensions;
- if (video) {
- dimensions = getVideoDimensions(file);
- } else if (pdf) {
- dimensions = getPdfDocumentDimensions(file);
- } else {
- dimensions = getImageDimensions(file);
- }
- if (dimensions.valid()) {
- body.append('|').append(dimensions.width).append('|').append(dimensions.height);
+ } else if (image || video || pdf) {
+ try {
+ final Dimensions dimensions;
+ if (video) {
+ dimensions = getVideoDimensions(file);
+ } else if (pdf) {
+ dimensions = getPdfDocumentDimensions(file);
+ } else {
+ dimensions = getImageDimensions(file);
+ }
+ if (dimensions.valid()) {
+ body.append('|')
+ .append(dimensions.width)
+ .append('|')
+ .append(dimensions.height);
+ }
+ } catch (NotAVideoFile notAVideoFile) {
+ Log.d(
+ Config.LOGTAG,
+ "file with mime type " + file.getMimeType() + " was not a video file");
+ // fall threw
}
- } catch (NotAVideoFile notAVideoFile) {
- Log.d(
- Config.LOGTAG,
- "file with mime type " + file.getMimeType() + " was not a video file");
- // fall threw
+ } else if (audio) {
+ body.append("|0|0|").append(getMediaRuntime(file));
}
- } else if (audio) {
- body.append("|0|0|").append(getMediaRuntime(file));
}
message.setBody(body.toString());
message.setDeleted(false);
@@ -1556,12 +1569,14 @@ public class FileBackend {
try {
final MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(file.toString());
- final String value = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
+ final String value =
+ mediaMetadataRetriever.extractMetadata(
+ MediaMetadataRetriever.METADATA_KEY_DURATION);
if (Strings.isNullOrEmpty(value)) {
return 0;
}
return Integer.parseInt(value);
- } catch (NumberFormatException e) {
+ } catch (final IllegalArgumentException e) {
return 0;
}
}