Skip to content
Snippets Groups Projects
messagesearchresultsmodel.cpp 3.63 KiB
Newer Older
Armin Felder's avatar
Armin Felder committed
#include "messagesearchresultsmodel.h"

MessageSearchResultsModel::MessageSearchResultsModel()
{

}

Armin Felder's avatar
Armin Felder committed
void MessageSearchResultsModel::clear()
{
    beginResetModel();
    mElements.clear();
    endResetModel();
}

int MessageSearchResultsModel::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return mElements.length();
}

QVariant MessageSearchResultsModel::data(const QModelIndex &index, int role) const
{
    QSharedPointer<RocketChatMessage> message;
    if(mElements.size()){
        message = mElements.at(index.row());
    }else{
        return QVariant();
    }
    if(role == text){
        return message->getMessageString();
    }else if(role == author){
        return message->getAuthor();
    }else if(role == authorId){
        return message->getAuthorId();
    }else if(role == linkurl){
        if ( !message->getAttachments().empty() ) {
            return message->getAttachments().first()->getUrl();
        } else {
            qWarning() << "linkurl not found";
        }
    }else if(role == type){
        return message->getMessageType();
    }else if(role == date){
        return message->getFormattedDate();
    }else if(role == time){
        return message->getFormattedTime();
    }else if(role == ownMessage){
        return message->getOwnMessage();
    }else if(role == height){
        if ( !message->getAttachments().empty() ) {
            return message->getAttachments().first()->getHeight();
        } else {
            qWarning() << "height not found";
        }
    }else if(role == width){
        if ( !message->getAttachments().empty() ) {
            return message->getAttachments().first()->getWidth();
        } else {
            qWarning() << "height not found";
        }
    }else if(role == formattedDate){
        return message->getFormattedDate();
    }else if(role == formattedTime){
        return message->getFormattedTime();
    }else if(role == messageType){
        return message->getMessageType();
    }else if(role == blocked){
        return false;
    }else if(role == id){
        return message->getId();
    }else if(role == rid){
        return message->getRoomId();
    }else if(role == timestamp){
        return message->getTimestamp();
    }
}

Armin Felder's avatar
Armin Felder committed
QHash<int, QByteArray> MessageSearchResultsModel::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[text] = QByteArrayLiteral( "msg" );
    roles[author] = QByteArrayLiteral( "author" );
    roles[authorId] = QByteArrayLiteral( "authorId" );
    roles[linkurl] = QByteArrayLiteral( "linkurl" );
    roles[type] = QByteArrayLiteral( "type" );
    roles[date] = QByteArrayLiteral( "date" );
    roles[time] = QByteArrayLiteral( "time" );
    roles[ownMessage] = QByteArrayLiteral( "ownMessage" );
    roles[height] = QByteArrayLiteral( "height" );
    roles[width ] = QByteArrayLiteral( "width" );
    roles[formattedDate ] = QByteArrayLiteral( "formattedDate" );
    roles[formattedTime] = QByteArrayLiteral( "formattedTime" );
    roles[messageType] = QByteArrayLiteral( "messageType" );
    roles[blocked] = QByteArrayLiteral( "blocked" );
    roles[id] = QByteArrayLiteral( "id" );
    roles[rid] = QByteArrayLiteral("rid");
Armin Felder's avatar
Armin Felder committed
    roles[timestamp] = QByteArrayLiteral("timestamp");

Armin Felder's avatar
Armin Felder committed
    return roles;
}
Armin Felder's avatar
Armin Felder committed

void MessageSearchResultsModel::setSearchResults(MessageList pResults)
{
    beginResetModel();
    mElements.clear();
    mElements << pResults;
    endResetModel();
}

int MessageSearchResultsModel::getPositionOfMessage(const QString &pId)
{
    int pos = -1;
    for(int i=0; i<mElements.size();i++){
        auto element = mElements.at(i);
        if(element->getId()==pId){
            pos = i;
            break;
        }
    }
    return pos;
}