Display message text in Media Preview.

This commit is contained in:
Nicholas
2023-01-24 09:11:29 -05:00
committed by Greyson Parrelli
parent 1b7e4e047c
commit eaeeb08987
9 changed files with 145 additions and 34 deletions

View File

@@ -2,23 +2,17 @@ package org.thoughtcrime.securesms.longmessage;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import org.signal.core.util.StreamUtil;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.database.MessageTable;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.TextSlide;
import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;
class LongMessageRepository {
@@ -40,15 +34,9 @@ class LongMessageRepository {
@WorkerThread
private Optional<LongMessage> getMmsLongMessage(@NonNull Context context, @NonNull MessageTable mmsDatabase, long messageId) {
Optional<MmsMessageRecord> record = getMmsMessage(mmsDatabase, messageId);
if (record.isPresent()) {
TextSlide textSlide = record.get().getSlideDeck().getTextSlide();
if (textSlide != null && textSlide.getUri() != null) {
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get(), readFullBody(context, textSlide.getUri()))));
} else {
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get())));
}
final ConversationMessage resolvedMessage = LongMessageResolveerKt.resolveBody(record.get(), context);
return Optional.of(new LongMessage(resolvedMessage));
} else {
return Optional.empty();
}
@@ -61,14 +49,6 @@ class LongMessageRepository {
}
}
private @NonNull String readFullBody(@NonNull Context context, @NonNull Uri uri) {
try (InputStream stream = PartAuthority.getAttachmentStream(context, uri)) {
return StreamUtil.readFullyAsString(stream);
} catch (IOException e) {
Log.w(TAG, "Failed to read full text body.", e);
return "";
}
}
interface Callback<T> {
void onComplete(T result);

View File

@@ -0,0 +1,31 @@
package org.thoughtcrime.securesms.longmessage
import android.content.Context
import android.net.Uri
import org.signal.core.util.StreamUtil
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.conversation.ConversationMessage
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
import org.thoughtcrime.securesms.mms.PartAuthority
import java.io.IOException
const val TAG = "LongMessageResolver"
fun readFullBody(context: Context, uri: Uri): String {
try {
PartAuthority.getAttachmentStream(context, uri).use { stream -> return StreamUtil.readFullyAsString(stream) }
} catch (e: IOException) {
Log.w(TAG, "Failed to read full text body.", e)
return ""
}
}
fun MmsMessageRecord.resolveBody(context: Context): ConversationMessage {
val textSlide = slideDeck.textSlide
val textSlideUri = textSlide?.uri
return if (textSlide != null && textSlideUri != null) {
ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(context, this, readFullBody(context, textSlideUri))
} else {
ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(context, this)
}
}