Skip to content
Snippets Groups Projects
UsersModel.cpp 1.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    //
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    #include "UsersModel.h"
    
    #include "Cache.h"
    #include "CompletionModelRoles.h"
    
    UsersModel::UsersModel(const std::string &roomId, QObject *parent)
      : QAbstractListModel(parent)
    
    Nicolas Werner's avatar
    Nicolas Werner committed
      , room_id(roomId)
    {
            roomMembers_ = cache::roomMembers(roomId);
    
            for (const auto &m : roomMembers_) {
                    displayNames.push_back(QString::fromStdString(cache::displayName(room_id, m)));
                    userids.push_back(QString::fromStdString(m));
            }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    }
    
    QHash<int, QByteArray>
    UsersModel::roleNames() const
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            return {
              {CompletionModel::CompletionRole, "completionRole"},
              {CompletionModel::SearchRole, "searchRole"},
              {CompletionModel::SearchRole2, "searchRole2"},
              {Roles::DisplayName, "displayName"},
              {Roles::AvatarUrl, "avatarUrl"},
    
              {Roles::UserID, "userid"},
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            };
    
    }
    
    QVariant
    UsersModel::data(const QModelIndex &index, int role) const
    {
            if (hasIndex(index.row(), index.column(), index.parent())) {
                    switch (role) {
                    case CompletionModel::CompletionRole:
    
                            return QString("[%1](https://matrix.to/#/%2)")
                              .arg(displayNames[index.row()])
                              .arg(userids[index.row()]);
    
                    case CompletionModel::SearchRole:
                    case Qt::DisplayRole:
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    case Roles::DisplayName:
    
                            return displayNames[index.row()];
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    case CompletionModel::SearchRole2:
    
                            return userids[index.row()];
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    case Roles::AvatarUrl:
                            return cache::avatarUrl(QString::fromStdString(room_id),
                                                    QString::fromStdString(roomMembers_[index.row()]));
    
                    case Roles::UserID:
                            return userids[index.row()];
    
                    }
            }
            return {};
    }