parent
150f8313a0
commit
7cc96e704e
|
@ -207,8 +207,8 @@ public class PgpDecryptionService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final String url = message.getFileParams().url;
|
final String url = message.getFileParams().url;
|
||||||
mXmppConnectionService.getFileBackend().updateFileParams(message, url);
|
|
||||||
message.setEncryption(Message.ENCRYPTION_DECRYPTED);
|
message.setEncryption(Message.ENCRYPTION_DECRYPTED);
|
||||||
|
mXmppConnectionService.getFileBackend().updateFileParams(message, url);
|
||||||
mXmppConnectionService.updateMessage(message);
|
mXmppConnectionService.updateMessage(message);
|
||||||
if (!inputFile.delete()) {
|
if (!inputFile.delete()) {
|
||||||
Log.w(Config.LOGTAG,"unable to delete pgp encrypted source file "+inputFile.getAbsolutePath());
|
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.services.XmppConnectionService;
|
||||||
import eu.siacs.conversations.ui.adapter.MediaAdapter;
|
import eu.siacs.conversations.ui.adapter.MediaAdapter;
|
||||||
import eu.siacs.conversations.ui.util.Attachment;
|
import eu.siacs.conversations.ui.util.Attachment;
|
||||||
import eu.siacs.conversations.utils.Compatibility;
|
|
||||||
import eu.siacs.conversations.utils.CryptoHelper;
|
import eu.siacs.conversations.utils.CryptoHelper;
|
||||||
import eu.siacs.conversations.utils.FileUtils;
|
import eu.siacs.conversations.utils.FileUtils;
|
||||||
import eu.siacs.conversations.utils.FileWriterException;
|
import eu.siacs.conversations.utils.FileWriterException;
|
||||||
|
@ -400,27 +399,25 @@ public class FileBackend {
|
||||||
|
|
||||||
public static Uri getMediaUri(Context context, File file) {
|
public static Uri getMediaUri(Context context, File file) {
|
||||||
final String filePath = file.getAbsolutePath();
|
final String filePath = file.getAbsolutePath();
|
||||||
final Cursor cursor;
|
try (final Cursor cursor =
|
||||||
try {
|
|
||||||
cursor =
|
|
||||||
context.getContentResolver()
|
context.getContentResolver()
|
||||||
.query(
|
.query(
|
||||||
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
||||||
new String[] {MediaStore.Images.Media._ID},
|
new String[] {MediaStore.Images.Media._ID},
|
||||||
MediaStore.Images.Media.DATA + "=? ",
|
MediaStore.Images.Media.DATA + "=? ",
|
||||||
new String[] {filePath},
|
new String[] {filePath},
|
||||||
null);
|
null)) {
|
||||||
} catch (SecurityException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
final int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
|
final int id =
|
||||||
cursor.close();
|
cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
|
||||||
return Uri.withAppendedPath(
|
return Uri.withAppendedPath(
|
||||||
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
} catch (final Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateFileParams(Message message, String url, long size) {
|
public static void updateFileParams(Message message, String url, long size) {
|
||||||
|
@ -1492,28 +1489,40 @@ public class FileBackend {
|
||||||
updateFileParams(message, null);
|
updateFileParams(message, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateFileParams(Message message, String url) {
|
public void updateFileParams(final Message message, final String url) {
|
||||||
DownloadableFile file = getFile(message);
|
final boolean encrypted =
|
||||||
|
message.getEncryption() == Message.ENCRYPTION_PGP
|
||||||
|
|| message.getEncryption() == Message.ENCRYPTION_DECRYPTED;
|
||||||
|
final DownloadableFile file = getFile(message);
|
||||||
final String mime = file.getMimeType();
|
final String mime = file.getMimeType();
|
||||||
final boolean privateMessage = message.isPrivateMessage();
|
|
||||||
final boolean ambiguous = MimeUtils.AMBIGUOUS_CONTAINER_FORMATS.contains(mime);
|
|
||||||
final boolean image =
|
final boolean image =
|
||||||
message.getType() == Message.TYPE_IMAGE
|
message.getType() == Message.TYPE_IMAGE
|
||||||
|| (mime != null && mime.startsWith("image/"));
|
|| (mime != null && mime.startsWith("image/"));
|
||||||
final boolean video = mime != null && mime.startsWith("video/");
|
final boolean privateMessage = message.isPrivateMessage();
|
||||||
final boolean audio = mime != null && mime.startsWith("audio/");
|
|
||||||
final boolean pdf = "application/pdf".equals(mime);
|
|
||||||
final StringBuilder body = new StringBuilder();
|
final StringBuilder body = new StringBuilder();
|
||||||
if (url != null) {
|
if (url != null) {
|
||||||
body.append(url);
|
body.append(url);
|
||||||
}
|
}
|
||||||
|
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());
|
body.append('|').append(file.getSize());
|
||||||
if (ambiguous) {
|
if (ambiguous) {
|
||||||
try {
|
try {
|
||||||
final Dimensions dimensions = getVideoDimensions(file);
|
final Dimensions dimensions = getVideoDimensions(file);
|
||||||
if (dimensions.valid()) {
|
if (dimensions.valid()) {
|
||||||
Log.d(Config.LOGTAG, "ambiguous file " + mime + " is video");
|
Log.d(Config.LOGTAG, "ambiguous file " + mime + " is video");
|
||||||
body.append('|').append(dimensions.width).append('|').append(dimensions.height);
|
body.append('|')
|
||||||
|
.append(dimensions.width)
|
||||||
|
.append('|')
|
||||||
|
.append(dimensions.height);
|
||||||
} else {
|
} else {
|
||||||
Log.d(Config.LOGTAG, "ambiguous file " + mime + " is audio");
|
Log.d(Config.LOGTAG, "ambiguous file " + mime + " is audio");
|
||||||
body.append("|0|0|").append(getMediaRuntime(file));
|
body.append("|0|0|").append(getMediaRuntime(file));
|
||||||
|
@ -1533,7 +1542,10 @@ public class FileBackend {
|
||||||
dimensions = getImageDimensions(file);
|
dimensions = getImageDimensions(file);
|
||||||
}
|
}
|
||||||
if (dimensions.valid()) {
|
if (dimensions.valid()) {
|
||||||
body.append('|').append(dimensions.width).append('|').append(dimensions.height);
|
body.append('|')
|
||||||
|
.append(dimensions.width)
|
||||||
|
.append('|')
|
||||||
|
.append(dimensions.height);
|
||||||
}
|
}
|
||||||
} catch (NotAVideoFile notAVideoFile) {
|
} catch (NotAVideoFile notAVideoFile) {
|
||||||
Log.d(
|
Log.d(
|
||||||
|
@ -1544,6 +1556,7 @@ public class FileBackend {
|
||||||
} else if (audio) {
|
} else if (audio) {
|
||||||
body.append("|0|0|").append(getMediaRuntime(file));
|
body.append("|0|0|").append(getMediaRuntime(file));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
message.setBody(body.toString());
|
message.setBody(body.toString());
|
||||||
message.setDeleted(false);
|
message.setDeleted(false);
|
||||||
message.setType(
|
message.setType(
|
||||||
|
@ -1556,12 +1569,14 @@ public class FileBackend {
|
||||||
try {
|
try {
|
||||||
final MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
|
final MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
|
||||||
mediaMetadataRetriever.setDataSource(file.toString());
|
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)) {
|
if (Strings.isNullOrEmpty(value)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return Integer.parseInt(value);
|
return Integer.parseInt(value);
|
||||||
} catch (NumberFormatException e) {
|
} catch (final IllegalArgumentException e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue