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_ALWAYS_NOTIFY = "always_notify"; | ||||
| 	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 contactUuid; | ||||
| @ -332,11 +333,11 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl | ||||
| 	} | ||||
| 
 | ||||
| 	public void setLastClearHistory(long time) { | ||||
| 		setAttribute("last_clear_history",String.valueOf(time)); | ||||
| 		setAttribute(ATTRIBUTE_LAST_CLEAR_HISTORY,String.valueOf(time)); | ||||
| 	} | ||||
| 
 | ||||
| 	public long getLastClearHistory() { | ||||
| 		return getLongAttribute("last_clear_history", 0); | ||||
| 		return getLongAttribute(ATTRIBUTE_LAST_CLEAR_HISTORY, 0); | ||||
| 	} | ||||
| 
 | ||||
| 	public List<Jid> getAcceptedCryptoTargets() { | ||||
|  | ||||
| @ -11,6 +11,7 @@ import android.util.Base64; | ||||
| import android.util.Log; | ||||
| import android.util.Pair; | ||||
| 
 | ||||
| import org.json.JSONObject; | ||||
| import org.whispersystems.libaxolotl.AxolotlAddress; | ||||
| import org.whispersystems.libaxolotl.IdentityKey; | ||||
| 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.Roster; | ||||
| 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.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) { | ||||
| 		final SQLiteDatabase db = this.getReadableDatabase(); | ||||
| 		String[] columns = null; | ||||
| 		String[] selectionArgs = {account.getUuid(), | ||||
| 				contact.getName(), | ||||
| 				Integer.toString(contact.getDeviceId())}; | ||||
| 		Cursor cursor = db.query(SQLiteAxolotlStore.SESSION_TABLENAME, | ||||
| 				columns, | ||||
| 		return db.query(SQLiteAxolotlStore.SESSION_TABLENAME, | ||||
| 				null, | ||||
| 				SQLiteAxolotlStore.ACCOUNT + " = ? AND " | ||||
| 						+ SQLiteAxolotlStore.NAME + " = ? AND " | ||||
| 						+ SQLiteAxolotlStore.DEVICE_ID + " = ? ", | ||||
| 				selectionArgs, | ||||
| 				null, null, null); | ||||
| 
 | ||||
| 		return cursor; | ||||
| 	} | ||||
| 
 | ||||
| 	public SessionRecord loadSession(Account account, AxolotlAddress contact) { | ||||
|  | ||||
| @ -45,8 +45,17 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		Pair<Long,String> pair = mXmppConnectionService.databaseBackend.getLastMessageReceived(account); | ||||
| 		long startCatchup = pair == null ? 0 : pair.first; | ||||
| 		final Pair<Long,String> lastMessageReceived = mXmppConnectionService.databaseBackend.getLastMessageReceived(account); | ||||
| 		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(); | ||||
| 		final Query query; | ||||
| 		if (startCatchup == 0) { | ||||
| @ -62,7 +71,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { | ||||
| 			query = new Query(account, startCatchup, endCatchup); | ||||
| 		} else { | ||||
| 			query = new Query(account, startCatchup, endCatchup); | ||||
| 			query.reference = pair.second; | ||||
| 			query.reference = reference; | ||||
| 		} | ||||
| 		this.queries.add(query); | ||||
| 		this.execute(query); | ||||
|  | ||||
| @ -3340,6 +3340,7 @@ public class XmppConnectionService extends Service { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				databaseBackend.deleteMessagesInConversation(conversation); | ||||
| 				databaseBackend.updateConversation(conversation); | ||||
| 			} | ||||
| 		}; | ||||
| 		mDatabaseExecutor.execute(runnable); | ||||
|  | ||||
| @ -481,6 +481,7 @@ public class MessageAdapter extends ArrayAdapter<Message> { | ||||
| 
 | ||||
| 	private void loadMoreMessages(Conversation conversation) { | ||||
| 		conversation.setLastClearHistory(0); | ||||
| 		activity.xmppConnectionService.databaseBackend.updateConversation(conversation); | ||||
| 		conversation.setHasMessagesLeftOnServer(true); | ||||
| 		conversation.setFirstMamReference(null); | ||||
| 		long timestamp = conversation.getLastMessageTransmitted(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch