57 lines
2.3 KiB
Java
57 lines
2.3 KiB
Java
package org.mercury_im.messenger.persistence.room.dao;
|
|
|
|
import androidx.room.Dao;
|
|
import androidx.room.Query;
|
|
import androidx.room.TypeConverters;
|
|
|
|
import org.jxmpp.jid.EntityBareJid;
|
|
import org.mercury_im.messenger.persistence.room.model.RoomMessageModel;
|
|
import org.mercury_im.messenger.persistence.room.type_converter.EntityBareJidConverter;
|
|
|
|
import java.util.List;
|
|
|
|
import io.reactivex.Observable;
|
|
|
|
@Dao
|
|
@TypeConverters(EntityBareJidConverter.class)
|
|
public interface MessageDao extends BaseDao<RoomMessageModel> {
|
|
|
|
@Query("SELECT * FROM messages")
|
|
Observable<List<RoomMessageModel>> getAllMessages();
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE fk_account_id = :accountId " +
|
|
"ORDER BY send_date ASC")
|
|
Observable<List<RoomMessageModel>> getAllMessagesOf(long accountId);
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE fk_account_id = :accountId AND `from` = :sender " +
|
|
"ORDER BY send_date ASC")
|
|
Observable<List<RoomMessageModel>> getAllMessagesFrom(long accountId, EntityBareJid sender);
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE fk_account_id = :accountId AND (`from` = :peer OR `to` = :peer) " +
|
|
"ORDER BY send_date ASC")
|
|
Observable<List<RoomMessageModel>> getAllMessagesInConversation(long accountId, EntityBareJid peer);
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE body LIKE :query " +
|
|
"COLLATE utf8_general_ci") // case insensitive
|
|
Observable<List<RoomMessageModel>> findMessageByQuery(String query);
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE fk_account_id = :accountId AND body LIKE :query " +
|
|
"COLLATE utf8_general_ci") // case insensitive
|
|
Observable<List<RoomMessageModel>> findMessageByQuery(long accountId, String query);
|
|
|
|
@Query("SELECT * FROM messages " +
|
|
"WHERE fk_account_id = :accountId " +
|
|
"AND (`from` = :peer OR `to` = :peer) " +
|
|
"AND body LIKE :query " +
|
|
"COLLATE utf8_general_ci") // case insensitive
|
|
Observable<List<RoomMessageModel>> findMessageByQuery(long accountId, EntityBareJid peer, String query);
|
|
|
|
@Query("SELECT * FROM messages WHERE fk_account_id = :accountId AND (`from` = :peer OR `to` = :peer) ORDER BY send_date DESC LIMIT 1")
|
|
Observable<RoomMessageModel> getLastMessageFrom(long accountId, EntityBareJid peer);
|
|
}
|