use history clear date as minimum date for mam
This commit is contained in:
parent
ab63dba8aa
commit
7b445bc4c7
|
@ -53,6 +53,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
||||||
public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
|
public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
|
||||||
public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify";
|
public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify";
|
||||||
public static final String ATTRIBUTE_CRYPTO_TARGETS = "crypto_targets";
|
public static final String ATTRIBUTE_CRYPTO_TARGETS = "crypto_targets";
|
||||||
|
public static final String ATTRIBUTE_LAST_CLEAR_HISTORY = "last_clear_history";
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String contactUuid;
|
private String contactUuid;
|
||||||
|
@ -332,11 +333,11 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLastClearHistory(long time) {
|
public void setLastClearHistory(long time) {
|
||||||
setAttribute("last_clear_history",String.valueOf(time));
|
setAttribute(ATTRIBUTE_LAST_CLEAR_HISTORY,String.valueOf(time));
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLastClearHistory() {
|
public long getLastClearHistory() {
|
||||||
return getLongAttribute("last_clear_history", 0);
|
return getLongAttribute(ATTRIBUTE_LAST_CLEAR_HISTORY, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Jid> getAcceptedCryptoTargets() {
|
public List<Jid> getAcceptedCryptoTargets() {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import android.util.Base64;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.whispersystems.libaxolotl.AxolotlAddress;
|
import org.whispersystems.libaxolotl.AxolotlAddress;
|
||||||
import org.whispersystems.libaxolotl.IdentityKey;
|
import org.whispersystems.libaxolotl.IdentityKey;
|
||||||
import org.whispersystems.libaxolotl.IdentityKeyPair;
|
import org.whispersystems.libaxolotl.IdentityKeyPair;
|
||||||
|
@ -44,6 +45,7 @@ import eu.siacs.conversations.entities.Message;
|
||||||
import eu.siacs.conversations.entities.PresenceTemplate;
|
import eu.siacs.conversations.entities.PresenceTemplate;
|
||||||
import eu.siacs.conversations.entities.Roster;
|
import eu.siacs.conversations.entities.Roster;
|
||||||
import eu.siacs.conversations.entities.ServiceDiscoveryResult;
|
import eu.siacs.conversations.entities.ServiceDiscoveryResult;
|
||||||
|
import eu.siacs.conversations.generator.AbstractGenerator;
|
||||||
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
|
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
|
||||||
import eu.siacs.conversations.xmpp.jid.Jid;
|
import eu.siacs.conversations.xmpp.jid.Jid;
|
||||||
|
|
||||||
|
@ -727,21 +729,37 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Pair<Long,String> getLastClearDate(Account account) {
|
||||||
|
SQLiteDatabase db = this.getReadableDatabase();
|
||||||
|
String[] columns = {Conversation.ATTRIBUTES};
|
||||||
|
String selection = Conversation.ACCOUNT + "=?";
|
||||||
|
String[] args = {account.getUuid()};
|
||||||
|
Cursor cursor = db.query(Conversation.TABLENAME,columns,selection,args,null,null,null);
|
||||||
|
long maxClearDate = 0;
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
try {
|
||||||
|
final JSONObject jsonObject = new JSONObject(cursor.getString(0));
|
||||||
|
maxClearDate = Math.max(maxClearDate, jsonObject.getLong(Conversation.ATTRIBUTE_LAST_CLEAR_HISTORY));
|
||||||
|
} catch (Exception e) {
|
||||||
|
//ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
return new Pair<>(maxClearDate,null);
|
||||||
|
}
|
||||||
|
|
||||||
private Cursor getCursorForSession(Account account, AxolotlAddress contact) {
|
private Cursor getCursorForSession(Account account, AxolotlAddress contact) {
|
||||||
final SQLiteDatabase db = this.getReadableDatabase();
|
final SQLiteDatabase db = this.getReadableDatabase();
|
||||||
String[] columns = null;
|
|
||||||
String[] selectionArgs = {account.getUuid(),
|
String[] selectionArgs = {account.getUuid(),
|
||||||
contact.getName(),
|
contact.getName(),
|
||||||
Integer.toString(contact.getDeviceId())};
|
Integer.toString(contact.getDeviceId())};
|
||||||
Cursor cursor = db.query(SQLiteAxolotlStore.SESSION_TABLENAME,
|
return db.query(SQLiteAxolotlStore.SESSION_TABLENAME,
|
||||||
columns,
|
null,
|
||||||
SQLiteAxolotlStore.ACCOUNT + " = ? AND "
|
SQLiteAxolotlStore.ACCOUNT + " = ? AND "
|
||||||
+ SQLiteAxolotlStore.NAME + " = ? AND "
|
+ SQLiteAxolotlStore.NAME + " = ? AND "
|
||||||
+ SQLiteAxolotlStore.DEVICE_ID + " = ? ",
|
+ SQLiteAxolotlStore.DEVICE_ID + " = ? ",
|
||||||
selectionArgs,
|
selectionArgs,
|
||||||
null, null, null);
|
null, null, null);
|
||||||
|
|
||||||
return cursor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SessionRecord loadSession(Account account, AxolotlAddress contact) {
|
public SessionRecord loadSession(Account account, AxolotlAddress contact) {
|
||||||
|
|
|
@ -45,8 +45,17 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Pair<Long,String> pair = mXmppConnectionService.databaseBackend.getLastMessageReceived(account);
|
final Pair<Long,String> lastMessageReceived = mXmppConnectionService.databaseBackend.getLastMessageReceived(account);
|
||||||
long startCatchup = pair == null ? 0 : pair.first;
|
final Pair<Long,String> lastClearDate = mXmppConnectionService.databaseBackend.getLastClearDate(account);
|
||||||
|
long startCatchup;
|
||||||
|
final String reference;
|
||||||
|
if (lastMessageReceived != null && lastMessageReceived.first >= lastClearDate.first) {
|
||||||
|
startCatchup = lastMessageReceived.first;
|
||||||
|
reference = lastMessageReceived.second;
|
||||||
|
} else {
|
||||||
|
startCatchup = lastClearDate.first;
|
||||||
|
reference = null;
|
||||||
|
}
|
||||||
long endCatchup = account.getXmppConnection().getLastSessionEstablished();
|
long endCatchup = account.getXmppConnection().getLastSessionEstablished();
|
||||||
final Query query;
|
final Query query;
|
||||||
if (startCatchup == 0) {
|
if (startCatchup == 0) {
|
||||||
|
@ -62,7 +71,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
query = new Query(account, startCatchup, endCatchup);
|
query = new Query(account, startCatchup, endCatchup);
|
||||||
} else {
|
} else {
|
||||||
query = new Query(account, startCatchup, endCatchup);
|
query = new Query(account, startCatchup, endCatchup);
|
||||||
query.reference = pair.second;
|
query.reference = reference;
|
||||||
}
|
}
|
||||||
this.queries.add(query);
|
this.queries.add(query);
|
||||||
this.execute(query);
|
this.execute(query);
|
||||||
|
|
|
@ -3340,6 +3340,7 @@ public class XmppConnectionService extends Service {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
databaseBackend.deleteMessagesInConversation(conversation);
|
databaseBackend.deleteMessagesInConversation(conversation);
|
||||||
|
databaseBackend.updateConversation(conversation);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mDatabaseExecutor.execute(runnable);
|
mDatabaseExecutor.execute(runnable);
|
||||||
|
|
|
@ -481,6 +481,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
||||||
|
|
||||||
private void loadMoreMessages(Conversation conversation) {
|
private void loadMoreMessages(Conversation conversation) {
|
||||||
conversation.setLastClearHistory(0);
|
conversation.setLastClearHistory(0);
|
||||||
|
activity.xmppConnectionService.databaseBackend.updateConversation(conversation);
|
||||||
conversation.setHasMessagesLeftOnServer(true);
|
conversation.setHasMessagesLeftOnServer(true);
|
||||||
conversation.setFirstMamReference(null);
|
conversation.setFirstMamReference(null);
|
||||||
long timestamp = conversation.getLastMessageTransmitted();
|
long timestamp = conversation.getLastMessageTransmitted();
|
||||||
|
|
Loading…
Reference in a new issue