mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-17 11:58:25 +00:00
refactor: use the shared config expiry mode types instead of custom protobufs so we can remove a variable and simplify checks across two variables
This commit is contained in:
parent
7f4db64a5a
commit
19083e2ce7
@ -4,7 +4,7 @@ import android.content.ContentValues
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
||||||
import org.session.libsession.messaging.messages.ExpirationDatabaseConfiguration
|
import org.session.libsession.messaging.messages.ExpirationDatabaseMetadata
|
||||||
import org.session.libsession.utilities.GroupUtil.CLOSED_GROUP_PREFIX
|
import org.session.libsession.utilities.GroupUtil.CLOSED_GROUP_PREFIX
|
||||||
import org.session.libsession.utilities.GroupUtil.OPEN_GROUP_INBOX_PREFIX
|
import org.session.libsession.utilities.GroupUtil.OPEN_GROUP_INBOX_PREFIX
|
||||||
import org.session.libsession.utilities.GroupUtil.OPEN_GROUP_PREFIX
|
import org.session.libsession.utilities.GroupUtil.OPEN_GROUP_PREFIX
|
||||||
@ -43,19 +43,19 @@ class ExpirationConfigurationDatabase(context: Context, helper: SQLCipherOpenHel
|
|||||||
AND EXISTS (SELECT ${RecipientDatabase.EXPIRE_MESSAGES} FROM ${RecipientDatabase.TABLE_NAME} WHERE ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.ADDRESS} = ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.ADDRESS} AND ${RecipientDatabase.EXPIRE_MESSAGES} > 0)
|
AND EXISTS (SELECT ${RecipientDatabase.EXPIRE_MESSAGES} FROM ${RecipientDatabase.TABLE_NAME} WHERE ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.ADDRESS} = ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.ADDRESS} AND ${RecipientDatabase.EXPIRE_MESSAGES} > 0)
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|
||||||
private fun readExpirationConfiguration(cursor: Cursor): ExpirationDatabaseConfiguration {
|
private fun readExpirationConfiguration(cursor: Cursor): ExpirationDatabaseMetadata {
|
||||||
return ExpirationDatabaseConfiguration(
|
return ExpirationDatabaseMetadata(
|
||||||
threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)),
|
threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)),
|
||||||
updatedTimestampMs = cursor.getLong(cursor.getColumnIndexOrThrow(UPDATED_TIMESTAMP_MS))
|
updatedTimestampMs = cursor.getLong(cursor.getColumnIndexOrThrow(UPDATED_TIMESTAMP_MS))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getExpirationConfiguration(threadId: Long): ExpirationDatabaseConfiguration? {
|
fun getExpirationConfiguration(threadId: Long): ExpirationDatabaseMetadata? {
|
||||||
val query = "$THREAD_ID = ?"
|
val query = "$THREAD_ID = ?"
|
||||||
val args = arrayOf("$threadId")
|
val args = arrayOf("$threadId")
|
||||||
|
|
||||||
val configurations: MutableList<ExpirationDatabaseConfiguration> = mutableListOf()
|
val configurations: MutableList<ExpirationDatabaseMetadata> = mutableListOf()
|
||||||
|
|
||||||
readableDatabase.query(TABLE_NAME, null, query, args, null, null, null).use { cursor ->
|
readableDatabase.query(TABLE_NAME, null, query, args, null, null, null).use { cursor ->
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
|
@ -1672,21 +1672,29 @@ open class Storage(context: Context, helper: SQLCipherOpenHelper, private val co
|
|||||||
|
|
||||||
override fun getExpirationConfiguration(threadId: Long): ExpirationConfiguration? {
|
override fun getExpirationConfiguration(threadId: Long): ExpirationConfiguration? {
|
||||||
val recipient = getRecipientForThread(threadId) ?: return null
|
val recipient = getRecipientForThread(threadId) ?: return null
|
||||||
|
val dbExpirationMetadata = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId) ?: return null
|
||||||
return if (recipient.isContactRecipient && recipient.address.serialize().startsWith(IdPrefix.STANDARD.value)) {
|
return if (recipient.isContactRecipient && recipient.address.serialize().startsWith(IdPrefix.STANDARD.value)) {
|
||||||
// read it from contacts config if exists
|
// read it from contacts config if exists
|
||||||
configFactory.contacts?.get(recipient.address.serialize())?.let { contact ->
|
configFactory.contacts?.get(recipient.address.serialize())?.let { contact ->
|
||||||
val mode = contact.expiryMode
|
val mode = contact.expiryMode
|
||||||
ExpirationConfiguration(threadId, mode.expirySeconds,)
|
ExpirationConfiguration(
|
||||||
contact.expiryMode
|
threadId,
|
||||||
|
mode,
|
||||||
|
dbExpirationMetadata.updatedTimestampMs
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else if (recipient.isClosedGroupRecipient) {
|
} else if (recipient.isClosedGroupRecipient) {
|
||||||
// read it from group config if exists
|
// read it from group config if exists
|
||||||
val groupPublicKey = GroupUtil.doubleDecodeGroupId(recipient.address.serialize())
|
val groupPublicKey = GroupUtil.doubleDecodeGroupId(recipient.address.serialize())
|
||||||
configFactory.userGroups?.getLegacyGroupInfo(groupPublicKey)?.let {
|
configFactory.userGroups?.getLegacyGroupInfo(groupPublicKey)?.let { group ->
|
||||||
|
val expiry = group.disappearingTimer
|
||||||
|
ExpirationConfiguration(
|
||||||
|
threadId,
|
||||||
|
if (expiry != 0L) ExpiryMode.AfterRead(expiry) else ExpiryMode.NONE,
|
||||||
|
dbExpirationMetadata.updatedTimestampMs
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else null
|
} else null
|
||||||
return DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setExpirationConfiguration(config: ExpirationConfiguration) {
|
override fun setExpirationConfiguration(config: ExpirationConfiguration) {
|
||||||
|
@ -38,16 +38,23 @@ import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType;
|
|||||||
import org.session.libsignal.utilities.Log;
|
import org.session.libsignal.utilities.Log;
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
|
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
|
||||||
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.SmsDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.Storage;
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||||
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
|
|
||||||
import org.thoughtcrime.securesms.mms.MmsException;
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the response text from the Wearable Device and sends an message as a reply
|
* Get the response text from the Wearable Device and sends an message as a reply
|
||||||
*/
|
*/
|
||||||
|
@AndroidEntryPoint
|
||||||
public class RemoteReplyReceiver extends BroadcastReceiver {
|
public class RemoteReplyReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
public static final String TAG = RemoteReplyReceiver.class.getSimpleName();
|
public static final String TAG = RemoteReplyReceiver.class.getSimpleName();
|
||||||
@ -55,6 +62,15 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
|||||||
public static final String ADDRESS_EXTRA = "address";
|
public static final String ADDRESS_EXTRA = "address";
|
||||||
public static final String REPLY_METHOD = "reply_method";
|
public static final String REPLY_METHOD = "reply_method";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ThreadDatabase threadDatabase;
|
||||||
|
@Inject
|
||||||
|
MmsDatabase mmsDatabase;
|
||||||
|
@Inject
|
||||||
|
SmsDatabase smsDatabase;
|
||||||
|
@Inject
|
||||||
|
Storage storage;
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(final Context context, Intent intent) {
|
public void onReceive(final Context context, Intent intent) {
|
||||||
@ -76,19 +92,19 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
|||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
Recipient recipient = Recipient.from(context, address, false);
|
Recipient recipient = Recipient.from(context, address, false);
|
||||||
ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase();
|
|
||||||
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
||||||
VisibleMessage message = new VisibleMessage();
|
VisibleMessage message = new VisibleMessage();
|
||||||
message.setSentTimestamp(SnodeAPI.getNowWithOffset());
|
message.setSentTimestamp(SnodeAPI.getNowWithOffset());
|
||||||
message.setText(responseText.toString());
|
message.setText(responseText.toString());
|
||||||
ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId);
|
ExpirationConfiguration config = storage.getExpirationConfiguration(threadId);
|
||||||
|
|
||||||
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
||||||
long expireStartedAt = config.getExpirationType() == ExpirationType.DELETE_AFTER_SEND ? message.getSentTimestamp() : 0L;
|
long expireStartedAt = config.getExpirationType() == ExpirationType.DELETE_AFTER_SEND ? message.getSentTimestamp() : 0L;
|
||||||
switch (replyMethod) {
|
switch (replyMethod) {
|
||||||
case GroupMessage: {
|
case GroupMessage: {
|
||||||
OutgoingMediaMessage reply = OutgoingMediaMessage.from(message, recipient, Collections.emptyList(), null, null, expiresInMillis, 0);
|
OutgoingMediaMessage reply = OutgoingMediaMessage.from(message, recipient, Collections.emptyList(), null, null, expiresInMillis, 0);
|
||||||
try {
|
try {
|
||||||
DatabaseComponent.get(context).mmsDatabase().insertMessageOutbox(reply, threadId, false, null, true);
|
mmsDatabase.insertMessageOutbox(reply, threadId, false, null, true);
|
||||||
MessageSender.send(message, address);
|
MessageSender.send(message, address);
|
||||||
} catch (MmsException e) {
|
} catch (MmsException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, e);
|
||||||
@ -97,7 +113,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
case SecureMessage: {
|
case SecureMessage: {
|
||||||
OutgoingTextMessage reply = OutgoingTextMessage.from(message, recipient, expiresInMillis, expireStartedAt);
|
OutgoingTextMessage reply = OutgoingTextMessage.from(message, recipient, expiresInMillis, expireStartedAt);
|
||||||
DatabaseComponent.get(context).smsDatabase().insertMessageOutbox(threadId, reply, false, System.currentTimeMillis(), null, true);
|
smsDatabase.insertMessageOutbox(threadId, reply, false, System.currentTimeMillis(), null, true);
|
||||||
MessageSender.send(message, address);
|
MessageSender.send(message, address);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
package org.session.libsession.messaging.messages
|
package org.session.libsession.messaging.messages
|
||||||
|
|
||||||
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
import network.loki.messenger.libsession_util.util.ExpiryMode
|
||||||
|
|
||||||
data class ExpirationConfiguration(
|
data class ExpirationConfiguration(
|
||||||
val threadId: Long = -1,
|
val threadId: Long = -1,
|
||||||
val durationSeconds: Int = 0,
|
val expirationType: ExpiryMode? = null,
|
||||||
val expirationType: ExpirationType? = null,
|
|
||||||
val updatedTimestampMs: Long = 0
|
val updatedTimestampMs: Long = 0
|
||||||
) {
|
) {
|
||||||
val isEnabled = durationSeconds > 0 && expirationType != null
|
val isEnabled = expirationType != null && expirationType.expirySeconds > 0
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val isNewConfigEnabled = false /* TODO: System.currentTimeMillis() > 1_676_851_200_000 // 13/02/2023 */
|
val isNewConfigEnabled = false /* TODO: System.currentTimeMillis() > 1_676_851_200_000 // 13/02/2023 */
|
||||||
@ -16,7 +15,7 @@ data class ExpirationConfiguration(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ExpirationDatabaseConfiguration(
|
data class ExpirationDatabaseMetadata(
|
||||||
val threadId: Long = -1,
|
val threadId: Long = -1,
|
||||||
val updatedTimestampMs: Long
|
val updatedTimestampMs: Long
|
||||||
)
|
)
|
Loading…
x
Reference in New Issue
Block a user