diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index d790adc57408234fadc2053d4e26d8074b765889..14c01f578fd85308b7c645de588c8af32086f3f5 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -1016,6 +1016,28 @@ public class DatabaseBackend extends SQLiteOpenHelper { return list; } + public Message getMessage(Conversation conversation, String uuid) { + ArrayList list = new ArrayList<>(); + SQLiteDatabase db = this.getReadableDatabase(); + Cursor cursor; + cursor = db.rawQuery( + "SELECT * FROM " + Message.TABLENAME + " " + + "LEFT JOIN cheogram." + Message.TABLENAME + + " USING (" + Message.UUID + ")" + + "WHERE " + Message.UUID + "=?", + new String[]{uuid} + ); + while (cursor.moveToNext()) { + try { + return Message.fromCursor(cursor, conversation); + } catch (Exception e) { + Log.e(Config.LOGTAG, "unable to restore message"); + } + } + cursor.close(); + return null; + } + public ArrayList getMessages(Conversation conversations, int limit) { return getMessages(conversations, limit, -1); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index aa41e9ccc961302d0a7cf0b48f7b47c6b5cab58b..ff8d8ec1227d5e36c256cd1105d4335ac3a38742 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -635,6 +635,10 @@ public class XmppConnectionService extends Service { this.databaseBackend.clearBlockedMedia(); } + public Message getMessage(Conversation conversation, String uuid) { + return this.databaseBackend.getMessage(conversation, uuid); + } + public void insertWebxdcUpdate(final WebxdcUpdate update) { this.databaseBackend.insertWebxdcUpdate(update); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index db52319a2e037a2f06fb7b02364d2645a78b51bf..096240b300086cc7ff8e1fc2ac4764e3f907d0cb 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -3268,9 +3268,12 @@ public class ConversationFragment extends XmppFragment }); return; } - final Message message = + Message message = downloadUuid == null ? null : conversation.findMessageWithFileAndUuid(downloadUuid); if ("webxdc".equals(postInitAction)) { + if (message == null) { + message = activity.xmppConnectionService.getMessage(conversation, downloadUuid); + } if (message == null) return; Cid webxdcCid = message.getFileParams().getCids().get(0);