2020-06-16 20:00:24 +00:00
|
|
|
package org.thoughtcrime.securesms.messagedetails;
|
|
|
|
|
|
|
|
import androidx.annotation.WorkerThread;
|
|
|
|
import androidx.lifecycle.LiveData;
|
|
|
|
|
2020-12-04 23:31:58 +00:00
|
|
|
import org.signal.core.util.concurrent.SignalExecutors;
|
2021-11-12 17:14:59 +00:00
|
|
|
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
2020-08-20 20:50:14 +00:00
|
|
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
2022-02-11 16:52:50 +00:00
|
|
|
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
2021-11-18 17:36:52 +00:00
|
|
|
import org.thoughtcrime.securesms.database.SignalDatabase;
|
2022-02-11 16:52:50 +00:00
|
|
|
import org.thoughtcrime.securesms.database.model.MessageId;
|
2020-06-16 20:00:24 +00:00
|
|
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
2021-11-12 17:14:59 +00:00
|
|
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
2020-06-16 20:00:24 +00:00
|
|
|
|
|
|
|
final class MessageRecordLiveData extends LiveData<MessageRecord> {
|
|
|
|
|
2021-11-12 17:14:59 +00:00
|
|
|
private final DatabaseObserver.Observer observer;
|
2022-02-11 16:52:50 +00:00
|
|
|
private final MessageId messageId;
|
2020-06-16 20:00:24 +00:00
|
|
|
|
2022-02-11 16:52:50 +00:00
|
|
|
MessageRecordLiveData(MessageId messageId) {
|
2020-06-16 20:00:24 +00:00
|
|
|
this.messageId = messageId;
|
2022-02-11 16:52:50 +00:00
|
|
|
this.observer = this::retrieveMessageRecordActual;
|
2020-06-16 20:00:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onActive() {
|
2022-02-11 16:52:50 +00:00
|
|
|
SignalExecutors.BOUNDED_IO.execute(this::retrieveMessageRecordActual);
|
2020-06-16 20:00:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onInactive() {
|
2021-11-12 17:14:59 +00:00
|
|
|
ApplicationDependencies.getDatabaseObserver().unregisterObserver(observer);
|
2020-06-16 20:00:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@WorkerThread
|
|
|
|
private synchronized void retrieveMessageRecordActual() {
|
2022-02-11 16:52:50 +00:00
|
|
|
retrieve(messageId.isMms() ? SignalDatabase.mms() : SignalDatabase.sms());
|
2020-06-16 20:00:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@WorkerThread
|
2022-02-11 16:52:50 +00:00
|
|
|
private synchronized void retrieve(MessageDatabase messageDatabase) {
|
|
|
|
try {
|
2022-11-10 19:45:45 +00:00
|
|
|
MessageRecord record = messageDatabase.getMessageRecord(messageId.getId());
|
|
|
|
|
|
|
|
if (record.isPaymentNotification()) {
|
|
|
|
record = SignalDatabase.payments().updateMessageWithPayment(record);
|
|
|
|
}
|
|
|
|
|
2022-02-11 16:52:50 +00:00
|
|
|
postValue(record);
|
|
|
|
ApplicationDependencies.getDatabaseObserver().registerVerboseConversationObserver(record.getThreadId(), observer);
|
|
|
|
} catch (NoSuchMessageException ignored) {
|
|
|
|
postValue(null);
|
|
|
|
}
|
2020-06-16 20:00:24 +00:00
|
|
|
}
|
|
|
|
}
|