Signal-Android/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageRepository.java

55 wiersze
2.1 KiB
Java

package org.thoughtcrime.securesms.revealable;
import android.content.Context;
import androidx.annotation.NonNull;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.MessageDatabase;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobs.MultiDeviceViewedUpdateJob;
import org.thoughtcrime.securesms.jobs.SendViewedReceiptJob;
import java.util.Collections;
import java.util.Optional;
class ViewOnceMessageRepository {
private static final String TAG = Log.tag(ViewOnceMessageRepository.class);
private final MessageDatabase mmsDatabase;
ViewOnceMessageRepository(@NonNull Context context) {
this.mmsDatabase = SignalDatabase.mms();
}
void getMessage(long messageId, @NonNull Callback<Optional<MmsMessageRecord>> callback) {
SignalExecutors.BOUNDED.execute(() -> {
try {
MmsMessageRecord record = (MmsMessageRecord) mmsDatabase.getMessageRecord(messageId);
MessageDatabase.MarkedMessageInfo info = mmsDatabase.setIncomingMessageViewed(record.getId());
if (info != null) {
ApplicationDependencies.getJobManager().add(new SendViewedReceiptJob(record.getThreadId(),
info.getSyncMessageId().getRecipientId(),
info.getSyncMessageId().getTimetamp(),
info.getMessageId()));
MultiDeviceViewedUpdateJob.enqueue(Collections.singletonList(info.getSyncMessageId()));
}
callback.onComplete(Optional.ofNullable(record));
} catch (NoSuchMessageException e) {
callback.onComplete(Optional.empty());
}
});
}
interface Callback<T> {
void onComplete(T result);
}
}