parent
150f8313a0
commit
7cc96e704e
|
@ -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");
|
||||
} 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
|
||||
}
|
||||
} else if (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);
|
||||
}
|
||||
} 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));
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue