/
NeoChapay
/
telegraf
Обзор
Документация
Войти
/
NeoChapay
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/chatpermissionfiltermodel.cpp
133 строки
4 KB
mbarashkov
Исправляем предупреждение о глобальных QString
28 дек 2024, 18:48
28 дек 2024, 18:48
09afa4e
Код
Авторство
О чём код?
#include "chatpermissionfiltermodel.h" #include "chatlistmodel.h" #define DEBUG_MODULE ChatPermissionFilterModel #include "debuglog.h" namespace { const char PERMISSIONS[] = "PERMISSIONS"; const char STATUS[] = "status"; } ChatPermissionFilterModel::ChatPermissionFilterModel(QObject *parent) : QSortFilterProxyModel(parent) { setDynamicSortFilter(true); } void ChatPermissionFilterModel::setSource(QObject *model) { ChatListModel* chatListModel = qobject_cast<ChatListModel*>(model); auto chatListModelClone = chatListModel->clone(); setSourceModel(chatListModelClone); } void ChatPermissionFilterModel::setSourceModel(QAbstractItemModel *model) { if (sourceModel() != model) { LOG(model); QSortFilterProxyModel::setSourceModel(model); sort(0, Qt::DescendingOrder); emit sourceChanged(); } } ChatPermissionFilterModel::~ChatPermissionFilterModel() { auto _sourceModel = sourceModel(); if(_sourceModel != nullptr) { delete _sourceModel; } } TDLibWrapper *ChatPermissionFilterModel::getTDLibWrapper() const { return tdLibWrapper; } void ChatPermissionFilterModel::setTDLibWrapper(QObject *obj) { TDLibWrapper *wrapper = qobject_cast<TDLibWrapper*>(obj); if (tdLibWrapper != wrapper) { tdLibWrapper = wrapper; LOG(wrapper); invalidateFilter(); } } QStringList ChatPermissionFilterModel::getRequirePermissions() const { return requirePermissions; } void ChatPermissionFilterModel::setRequirePermissions(QStringList permissions) { if (requirePermissions != permissions) { requirePermissions = permissions; LOG(requirePermissions); invalidateFilter(); emit requirePermissionsChanged(); } } bool ChatPermissionFilterModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { auto chatListSourceModel = (ChatListModel*)(sourceModel()); auto dataLeft = chatListSourceModel->getChatData(source_left.row()); auto dataRight = chatListSourceModel->getChatData(source_right.row()); return dataLeft->compareTo(dataRight) == 1; } bool ChatPermissionFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const { QAbstractItemModel* model = sourceModel(); if (model && tdLibWrapper && !requirePermissions.isEmpty()) { const TDLibWrapper::Group* group = Q_NULLPTR; const QModelIndex index(model->index(sourceRow, 0, sourceParent)); TDLibWrapper::ChatType chatType = (TDLibWrapper::ChatType) model->data(index, ChatListModel::RoleChatType).toInt(); switch (chatType) { case TDLibWrapper::ChatTypeUnknown: return false; case TDLibWrapper::TDLibWrapper::ChatTypePrivate: case TDLibWrapper::TDLibWrapper::ChatTypeSecret: case TDLibWrapper::TDLibWrapper::ChatTypeBot: return true; case TDLibWrapper::TDLibWrapper::ChatTypeBasicGroup: case TDLibWrapper::TDLibWrapper::ChatTypeSuperGroup: group = tdLibWrapper->getGroup(model->data(index, ChatListModel::RoleGroupId).toLongLong()); break; } if (group) { TDLibWrapper::ChatMemberStatus memberStatus = (TDLibWrapper::ChatMemberStatus) model->data(index, ChatListModel::RoleChatMemberStatus).toInt(); QVariantMap permissions; switch (memberStatus) { case TDLibWrapper::ChatMemberStatusCreator: case TDLibWrapper::ChatMemberStatusAdministrator: return true; case TDLibWrapper::ChatMemberStatusMember: permissions = model->data(index, ChatListModel::RoleDisplay).toMap().value(PERMISSIONS).toMap(); break; case TDLibWrapper::ChatMemberStatusRestricted: permissions = group->groupInfo.value(STATUS).toMap().value(PERMISSIONS).toMap(); break; case TDLibWrapper::ChatMemberStatusLeft: case TDLibWrapper::ChatMemberStatusUnknown: case TDLibWrapper::ChatMemberStatusBanned: return false; } if (!permissions.isEmpty()) { const int n = requirePermissions.count(); for (int i = 0; i < n; i++) { if (permissions.value(requirePermissions.at(i)).toBool()) { return true; } } } } } return false; }