Iterator to go through all messages of a conversation

fiaxh created

Change summary

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 38 
1 file changed, 38 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -21,6 +21,7 @@ import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -407,6 +408,43 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 		return list;
 	}
 
+	public Iterable<Message> getMessagesIterable(final Conversation conversation){
+		return new Iterable<Message>() {
+			@Override
+			public Iterator<Message> iterator() {
+				class MessageIterator implements Iterator<Message>{
+					SQLiteDatabase db = getReadableDatabase();
+					String[] selectionArgs = { conversation.getUuid() };
+					Cursor cursor = db.query(Message.TABLENAME, null, Message.CONVERSATION
+							+ "=?", selectionArgs, null, null, Message.TIME_SENT
+							+ " ASC", null);
+
+					public MessageIterator() {
+						cursor.moveToFirst();
+					}
+
+					@Override
+					public boolean hasNext() {
+						return !cursor.isAfterLast();
+					}
+
+					@Override
+					public Message next() {
+						Message message = Message.fromCursor(cursor);
+						cursor.moveToNext();
+						return message;
+					}
+
+					@Override
+					public void remove() {
+						throw new UnsupportedOperationException();
+					}
+				}
+				return new MessageIterator();
+			}
+		};
+	}
+
 	public Conversation findConversation(final Account account, final Jid contactJid) {
 		SQLiteDatabase db = this.getReadableDatabase();
 		String[] selectionArgs = { account.getUuid(),